diff --git a/rollup.config.js b/rollup.config.js
index f37860d..3f46bc8 100644
--- a/rollup.config.js
+++ b/rollup.config.js
@@ -1,4 +1,4 @@
-import { nodeResolve } from '@rollup/plugin-node-resolve';
+import { nodeResolve } from "@rollup/plugin-node-resolve";
import { createFilter } from "@rollup/pluginutils";
function string(opts = {}) {
@@ -31,7 +31,7 @@ function string(opts = {}) {
}
export default {
- input: 'src/waifu-tips.js',
+ input: "src/waifu-tips.js",
plugins: [nodeResolve(), string({
include: "**/*.svg",
})]
diff --git a/src/index.js b/src/index.js
new file mode 100755
index 0000000..cef62d3
--- /dev/null
+++ b/src/index.js
@@ -0,0 +1,175 @@
+import Model from "./model.js";
+import showMessage from "./message.js";
+import randomSelection from "./utils.js";
+import tools from "./tools.js";
+
+function loadWidget(config) {
+ const model = new Model(config);
+ localStorage.removeItem("waifu-display");
+ sessionStorage.removeItem("waifu-text");
+ document.body.insertAdjacentHTML("beforeend", `
`);
+ // https://stackoverflow.com/questions/24148403/trigger-css-transition-on-appended-element
+ setTimeout(() => {
+ document.getElementById("waifu").style.bottom = 0;
+ }, 0);
+
+ (function registerTools() {
+ tools["switch-model"].callback = () => model.loadOtherModel();
+ tools["switch-texture"].callback = () => model.loadRandModel();
+ if (!Array.isArray(config.tools)) {
+ config.tools = Object.keys(tools);
+ }
+ for (let tool of config.tools) {
+ if (tools[tool]) {
+ const { icon, callback } = tools[tool];
+ document.getElementById("waifu-tool").insertAdjacentHTML("beforeend", `${icon} `);
+ document.getElementById(`waifu-tool-${tool}`).addEventListener("click", callback);
+ }
+ }
+ })();
+
+ function welcomeMessage(time) {
+ if (location.pathname === "/") { // 如果是主页
+ for (let { hour, text } of time) {
+ const now = new Date(),
+ after = hour.split("-")[0],
+ before = hour.split("-")[1] || after;
+ if (after <= now.getHours() && now.getHours() <= before) {
+ return text;
+ }
+ }
+ }
+ const text = `欢迎阅读「${document.title.split(" - ")[0]}」 `;
+ let from;
+ if (document.referrer !== "") {
+ const referrer = new URL(document.referrer),
+ domain = referrer.hostname.split(".")[1];
+ const domains = {
+ "baidu": "百度",
+ "so": "360搜索",
+ "google": "谷歌搜索"
+ };
+ if (location.hostname === referrer.hostname) return text;
+
+ if (domain in domains) from = domains[domain];
+ else from = referrer.hostname;
+ return `Hello!来自 ${from} 的朋友 ${text}`;
+ }
+ return text;
+ }
+
+ function registerEventListener(result) {
+ // 检测用户活动状态,并在空闲时显示消息
+ let userAction = false,
+ userActionTimer,
+ messageArray = result.message.default;
+ window.addEventListener("mousemove", () => userAction = true);
+ window.addEventListener("keydown", () => userAction = true);
+ setInterval(() => {
+ if (userAction) {
+ userAction = false;
+ clearInterval(userActionTimer);
+ userActionTimer = null;
+ } else if (!userActionTimer) {
+ userActionTimer = setInterval(() => {
+ showMessage(messageArray, 6000, 9);
+ }, 20000);
+ }
+ }, 1000);
+ showMessage(welcomeMessage(result.time), 7000, 11);
+ window.addEventListener("mouseover", event => {
+ for (let { selector, text } of result.mouseover) {
+ if (!event.target.matches(selector)) continue;
+ text = randomSelection(text);
+ text = text.replace("{text}", event.target.innerText);
+ showMessage(text, 4000, 8);
+ return;
+ }
+ });
+ window.addEventListener("click", event => {
+ for (let { selector, text } of result.click) {
+ if (!event.target.matches(selector)) continue;
+ text = randomSelection(text);
+ text = text.replace("{text}", event.target.innerText);
+ showMessage(text, 4000, 8);
+ return;
+ }
+ });
+ result.seasons.forEach(({ date, text }) => {
+ const now = new Date(),
+ after = date.split("-")[0],
+ before = date.split("-")[1] || after;
+ if ((after.split("/")[0] <= now.getMonth() + 1 && now.getMonth() + 1 <= before.split("/")[0]) && (after.split("/")[1] <= now.getDate() && now.getDate() <= before.split("/")[1])) {
+ text = randomSelection(text);
+ text = text.replace("{year}", now.getFullYear());
+ messageArray.push(text);
+ }
+ });
+
+ const devtools = () => { };
+ console.log("%c", devtools);
+ devtools.toString = () => {
+ showMessage(result.message.console, 6000, 9);
+ };
+ window.addEventListener("copy", () => {
+ showMessage(result.message.copy, 6000, 9);
+ });
+ window.addEventListener("visibilitychange", () => {
+ if (!document.hidden) showMessage(result.message.visibilitychange, 6000, 9);
+ });
+ }
+
+ (function initModel() {
+ let modelId = localStorage.getItem("modelId"),
+ modelTexturesId = localStorage.getItem("modelTexturesId");
+ if (modelId === null) {
+ // 首次访问加载 指定模型 的 指定材质
+ modelId = 1; // 模型 ID
+ modelTexturesId = 53; // 材质 ID
+ }
+ model.loadModel(modelId, modelTexturesId);
+ fetch(config.waifuPath)
+ .then(response => response.json())
+ .then(registerEventListener);
+ })();
+}
+
+function initWidget(config, apiPath) {
+ if (typeof config === "string") {
+ config = {
+ waifuPath: config,
+ apiPath
+ };
+ }
+ document.body.insertAdjacentHTML("beforeend", `
+ 看板娘
+
`);
+ const toggle = document.getElementById("waifu-toggle");
+ toggle.addEventListener("click", () => {
+ toggle.classList.remove("waifu-toggle-active");
+ if (toggle.getAttribute("first-time")) {
+ loadWidget(config);
+ toggle.removeAttribute("first-time");
+ } else {
+ localStorage.removeItem("waifu-display");
+ document.getElementById("waifu").style.display = "";
+ setTimeout(() => {
+ document.getElementById("waifu").style.bottom = 0;
+ }, 0);
+ }
+ });
+ if (localStorage.getItem("waifu-display") && Date.now() - localStorage.getItem("waifu-display") <= 86400000) {
+ toggle.setAttribute("first-time", true);
+ setTimeout(() => {
+ toggle.classList.add("waifu-toggle-active");
+ }, 0);
+ } else {
+ loadWidget(config);
+ }
+}
+
+export default initWidget;
diff --git a/src/waifu-tips.js b/src/waifu-tips.js
old mode 100755
new mode 100644
index a6c4bed..b4f3291
--- a/src/waifu-tips.js
+++ b/src/waifu-tips.js
@@ -1,175 +1,3 @@
-import Model from "./model.js";
-import showMessage from "./message.js";
-import randomSelection from "./utils.js";
-import tools from "./tools.js";
-
-function loadWidget(config) {
- const model = new Model(config);
- localStorage.removeItem("waifu-display");
- sessionStorage.removeItem("waifu-text");
- document.body.insertAdjacentHTML("beforeend", ``);
- // https://stackoverflow.com/questions/24148403/trigger-css-transition-on-appended-element
- setTimeout(() => {
- document.getElementById("waifu").style.bottom = 0;
- }, 0);
-
- (function registerTools() {
- tools["switch-model"].callback = () => model.loadOtherModel();
- tools["switch-texture"].callback = () => model.loadRandModel();
- if (!Array.isArray(config.tools)) {
- config.tools = Object.keys(tools);
- }
- for (let tool of config.tools) {
- if (tools[tool]) {
- const { icon, callback } = tools[tool];
- document.getElementById("waifu-tool").insertAdjacentHTML("beforeend", `${icon} `);
- document.getElementById(`waifu-tool-${tool}`).addEventListener("click", callback);
- }
- }
- })();
-
- function welcomeMessage(time) {
- if (location.pathname === "/") { // 如果是主页
- for (let { hour, text } of time) {
- const now = new Date(),
- after = hour.split("-")[0],
- before = hour.split("-")[1] || after;
- if (after <= now.getHours() && now.getHours() <= before) {
- return text;
- }
- }
- }
- const text = `欢迎阅读「${document.title.split(" - ")[0]}」 `;
- let from;
- if (document.referrer !== "") {
- const referrer = new URL(document.referrer),
- domain = referrer.hostname.split(".")[1];
- const domains = {
- "baidu": "百度",
- "so": "360搜索",
- "google": "谷歌搜索"
- };
- if (location.hostname === referrer.hostname) return text;
-
- if (domain in domains) from = domains[domain];
- else from = referrer.hostname;
- return `Hello!来自 ${from} 的朋友 ${text}`;
- }
- return text;
- }
-
- function registerEventListener(result) {
- // 检测用户活动状态,并在空闲时显示消息
- let userAction = false,
- userActionTimer,
- messageArray = result.message.default;
- window.addEventListener("mousemove", () => userAction = true);
- window.addEventListener("keydown", () => userAction = true);
- setInterval(() => {
- if (userAction) {
- userAction = false;
- clearInterval(userActionTimer);
- userActionTimer = null;
- } else if (!userActionTimer) {
- userActionTimer = setInterval(() => {
- showMessage(messageArray, 6000, 9);
- }, 20000);
- }
- }, 1000);
- showMessage(welcomeMessage(result.time), 7000, 11);
- window.addEventListener("mouseover", event => {
- for (let { selector, text } of result.mouseover) {
- if (!event.target.matches(selector)) continue;
- text = randomSelection(text);
- text = text.replace("{text}", event.target.innerText);
- showMessage(text, 4000, 8);
- return;
- }
- });
- window.addEventListener("click", event => {
- for (let { selector, text } of result.click) {
- if (!event.target.matches(selector)) continue;
- text = randomSelection(text);
- text = text.replace("{text}", event.target.innerText);
- showMessage(text, 4000, 8);
- return;
- }
- });
- result.seasons.forEach(({ date, text }) => {
- const now = new Date(),
- after = date.split("-")[0],
- before = date.split("-")[1] || after;
- if ((after.split("/")[0] <= now.getMonth() + 1 && now.getMonth() + 1 <= before.split("/")[0]) && (after.split("/")[1] <= now.getDate() && now.getDate() <= before.split("/")[1])) {
- text = randomSelection(text);
- text = text.replace("{year}", now.getFullYear());
- messageArray.push(text);
- }
- });
-
- const devtools = () => { };
- console.log("%c", devtools);
- devtools.toString = () => {
- showMessage(result.message.console, 6000, 9);
- };
- window.addEventListener("copy", () => {
- showMessage(result.message.copy, 6000, 9);
- });
- window.addEventListener("visibilitychange", () => {
- if (!document.hidden) showMessage(result.message.visibilitychange, 6000, 9);
- });
- }
-
- (function initModel() {
- let modelId = localStorage.getItem("modelId"),
- modelTexturesId = localStorage.getItem("modelTexturesId");
- if (modelId === null) {
- // 首次访问加载 指定模型 的 指定材质
- modelId = 1; // 模型 ID
- modelTexturesId = 53; // 材质 ID
- }
- model.loadModel(modelId, modelTexturesId);
- fetch(config.waifuPath)
- .then(response => response.json())
- .then(registerEventListener);
- })();
-}
-
-function initWidget(config, apiPath) {
- if (typeof config === "string") {
- config = {
- waifuPath: config,
- apiPath
- };
- }
- document.body.insertAdjacentHTML("beforeend", `
- 看板娘
-
`);
- const toggle = document.getElementById("waifu-toggle");
- toggle.addEventListener("click", () => {
- toggle.classList.remove("waifu-toggle-active");
- if (toggle.getAttribute("first-time")) {
- loadWidget(config);
- toggle.removeAttribute("first-time");
- } else {
- localStorage.removeItem("waifu-display");
- document.getElementById("waifu").style.display = "";
- setTimeout(() => {
- document.getElementById("waifu").style.bottom = 0;
- }, 0);
- }
- });
- if (localStorage.getItem("waifu-display") && Date.now() - localStorage.getItem("waifu-display") <= 86400000) {
- toggle.setAttribute("first-time", true);
- setTimeout(() => {
- toggle.classList.add("waifu-toggle-active");
- }, 0);
- } else {
- loadWidget(config);
- }
-}
+import initWidget from "./index.js";
window.initWidget = initWidget;
diff --git a/waifu-tips.js b/waifu-tips.js
index d9194dc..7edc656 100644
--- a/waifu-tips.js
+++ b/waifu-tips.js
@@ -2,4 +2,4 @@
* Live2D Widget
* https://github.com/stevenjoezhang/live2d-widget
*/
-!function(){"use strict";function e(e){return Array.isArray(e)?e[Math.floor(Math.random()*e.length)]:e}let t;function o(o,s,n){if(!o||sessionStorage.getItem("waifu-text")&&sessionStorage.getItem("waifu-text")>n)return;t&&(clearTimeout(t),t=null),o=e(o),sessionStorage.setItem("waifu-text",n);const i=document.getElementById("waifu-tips");i.innerHTML=o,i.classList.add("waifu-tips-active"),t=setTimeout((()=>{sessionStorage.removeItem("waifu-text"),i.classList.remove("waifu-tips-active")}),s)}class s{constructor(e){let{apiPath:t,cdnPath:o}=e,s=!1;if("string"==typeof o)s=!0,o.endsWith("/")||(o+="/");else{if("string"!=typeof t)throw"Invalid initWidget argument!";t.endsWith("/")||(t+="/")}this.useCDN=s,this.apiPath=t,this.cdnPath=o}async loadModelList(){const e=await fetch(`${this.cdnPath}model_list.json`);this.modelList=await e.json()}async loadModel(t,s,n){if(localStorage.setItem("modelId",t),localStorage.setItem("modelTexturesId",s),o(n,4e3,10),this.useCDN){this.modelList||await this.loadModelList();const o=e(this.modelList.models[t]);loadlive2d("live2d",`${this.cdnPath}model/${o}/index.json`)}else loadlive2d("live2d",`${this.apiPath}get/?id=${t}-${s}`),console.log(`Live2D 模型 ${t}-${s} 加载完成`)}async loadRandModel(){const t=localStorage.getItem("modelId"),s=localStorage.getItem("modelTexturesId");if(this.useCDN){this.modelList||await this.loadModelList();const s=e(this.modelList.models[t]);loadlive2d("live2d",`${this.cdnPath}model/${s}/index.json`),o("我的新衣服好看嘛?",4e3,10)}else fetch(`${this.apiPath}rand_textures/?id=${t}-${s}`).then((e=>e.json())).then((e=>{1!==e.textures.id||1!==s&&0!==s?this.loadModel(t,e.textures.id,"我的新衣服好看嘛?"):o("我还没有其他衣服呢!",4e3,10)}))}async loadOtherModel(){let e=localStorage.getItem("modelId");if(this.useCDN){this.modelList||await this.loadModelList();const t=++e>=this.modelList.models.length?0:e;this.loadModel(t,0,this.modelList.messages[t])}else fetch(`${this.apiPath}switch/?id=${e}`).then((e=>e.json())).then((e=>{this.loadModel(e.model.id,0,e.model.message)}))}}const n={hitokoto:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:function(){fetch("https://v1.hitokoto.cn").then((e=>e.json())).then((e=>{const t=`这句一言来自 「${e.from}」 ,是 ${e.creator} 在 hitokoto.cn 投稿的。`;o(e.hitokoto,6e3,9),setTimeout((()=>{o(t,4e3,9)}),6e3)}))}},asteroids:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{if(window.Asteroids)window.ASTEROIDSPLAYERS||(window.ASTEROIDSPLAYERS=[]),window.ASTEROIDSPLAYERS.push(new Asteroids);else{const e=document.createElement("script");e.src="https://fastly.jsdelivr.net/gh/stevenjoezhang/asteroids/asteroids.js",document.head.appendChild(e)}}},"switch-model":{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{}},"switch-texture":{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{}},photo:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{o("照好了嘛,是不是很可爱呢?",6e3,9),Live2D.captureName="photo.png",Live2D.captureFrame=!0}},info:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{open("https://github.com/stevenjoezhang/live2d-widget")}},quit:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{localStorage.setItem("waifu-display",Date.now()),o("愿你有一天能与重要的人重逢。",2e3,11),document.getElementById("waifu").style.bottom="-500px",setTimeout((()=>{document.getElementById("waifu").style.display="none",document.getElementById("waifu-toggle").classList.add("waifu-toggle-active")}),3e3)}}};function i(t){const i=new s(t);function c(t){let s,n=!1,i=t.message.default;window.addEventListener("mousemove",(()=>n=!0)),window.addEventListener("keydown",(()=>n=!0)),setInterval((()=>{n?(n=!1,clearInterval(s),s=null):s||(s=setInterval((()=>{o(i,6e3,9)}),2e4))}),1e3),o(function(e){if("/"===location.pathname)for(let{hour:t,text:o}of e){const e=new Date,s=t.split("-")[0],n=t.split("-")[1]||s;if(s<=e.getHours()&&e.getHours()<=n)return o}const t=`欢迎阅读「${document.title.split(" - ")[0]}」 `;let o;if(""!==document.referrer){const e=new URL(document.referrer),s=e.hostname.split(".")[1],n={baidu:"百度",so:"360搜索",google:"谷歌搜索"};return location.hostname===e.hostname?t:(o=s in n?n[s]:e.hostname,`Hello!来自 ${o} 的朋友 ${t}`)}return t}(t.time),7e3,11),window.addEventListener("mouseover",(s=>{for(let{selector:n,text:i}of t.mouseover)if(s.target.matches(n))return i=e(i),i=i.replace("{text}",s.target.innerText),void o(i,4e3,8)})),window.addEventListener("click",(s=>{for(let{selector:n,text:i}of t.click)if(s.target.matches(n))return i=e(i),i=i.replace("{text}",s.target.innerText),void o(i,4e3,8)})),t.seasons.forEach((({date:t,text:o})=>{const s=new Date,n=t.split("-")[0],c=t.split("-")[1]||n;n.split("/")[0]<=s.getMonth()+1&&s.getMonth()+1<=c.split("/")[0]&&n.split("/")[1]<=s.getDate()&&s.getDate()<=c.split("/")[1]&&(o=(o=e(o)).replace("{year}",s.getFullYear()),i.push(o))}));const c=()=>{};console.log("%c",c),c.toString=()=>{o(t.message.console,6e3,9)},window.addEventListener("copy",(()=>{o(t.message.copy,6e3,9)})),window.addEventListener("visibilitychange",(()=>{document.hidden||o(t.message.visibilitychange,6e3,9)}))}localStorage.removeItem("waifu-display"),sessionStorage.removeItem("waifu-text"),document.body.insertAdjacentHTML("beforeend",'\n\t\t\t
\n\t\t\t
\n\t\t\t
\n\t\t
'),setTimeout((()=>{document.getElementById("waifu").style.bottom=0}),0),function(){n["switch-model"].callback=()=>i.loadOtherModel(),n["switch-texture"].callback=()=>i.loadRandModel(),Array.isArray(t.tools)||(t.tools=Object.keys(n));for(let e of t.tools)if(n[e]){const{icon:t,callback:o}=n[e];document.getElementById("waifu-tool").insertAdjacentHTML("beforeend",`${t} `),document.getElementById(`waifu-tool-${e}`).addEventListener("click",o)}}(),function(){let e=localStorage.getItem("modelId"),o=localStorage.getItem("modelTexturesId");null===e&&(e=1,o=53),i.loadModel(e,o),fetch(t.waifuPath).then((e=>e.json())).then(c)}()}window.initWidget=function(e,t){"string"==typeof e&&(e={waifuPath:e,apiPath:t}),document.body.insertAdjacentHTML("beforeend",'\n\t\t\t看板娘 \n\t\t
');const o=document.getElementById("waifu-toggle");o.addEventListener("click",(()=>{o.classList.remove("waifu-toggle-active"),o.getAttribute("first-time")?(i(e),o.removeAttribute("first-time")):(localStorage.removeItem("waifu-display"),document.getElementById("waifu").style.display="",setTimeout((()=>{document.getElementById("waifu").style.bottom=0}),0))})),localStorage.getItem("waifu-display")&&Date.now()-localStorage.getItem("waifu-display")<=864e5?(o.setAttribute("first-time",!0),setTimeout((()=>{o.classList.add("waifu-toggle-active")}),0)):i(e)}}();
+!function(){"use strict";function e(e){return Array.isArray(e)?e[Math.floor(Math.random()*e.length)]:e}let t;function o(o,s,n){if(!o||sessionStorage.getItem("waifu-text")&&sessionStorage.getItem("waifu-text")>n)return;t&&(clearTimeout(t),t=null),o=e(o),sessionStorage.setItem("waifu-text",n);const i=document.getElementById("waifu-tips");i.innerHTML=o,i.classList.add("waifu-tips-active"),t=setTimeout((()=>{sessionStorage.removeItem("waifu-text"),i.classList.remove("waifu-tips-active")}),s)}class s{constructor(e){let{apiPath:t,cdnPath:o}=e,s=!1;if("string"==typeof o)s=!0,o.endsWith("/")||(o+="/");else{if("string"!=typeof t)throw"Invalid initWidget argument!";t.endsWith("/")||(t+="/")}this.useCDN=s,this.apiPath=t,this.cdnPath=o}async loadModelList(){const e=await fetch(`${this.cdnPath}model_list.json`);this.modelList=await e.json()}async loadModel(t,s,n){if(localStorage.setItem("modelId",t),localStorage.setItem("modelTexturesId",s),o(n,4e3,10),this.useCDN){this.modelList||await this.loadModelList();const o=e(this.modelList.models[t]);loadlive2d("live2d",`${this.cdnPath}model/${o}/index.json`)}else loadlive2d("live2d",`${this.apiPath}get/?id=${t}-${s}`),console.log(`Live2D 模型 ${t}-${s} 加载完成`)}async loadRandModel(){const t=localStorage.getItem("modelId"),s=localStorage.getItem("modelTexturesId");if(this.useCDN){this.modelList||await this.loadModelList();const s=e(this.modelList.models[t]);loadlive2d("live2d",`${this.cdnPath}model/${s}/index.json`),o("我的新衣服好看嘛?",4e3,10)}else fetch(`${this.apiPath}rand_textures/?id=${t}-${s}`).then((e=>e.json())).then((e=>{1!==e.textures.id||1!==s&&0!==s?this.loadModel(t,e.textures.id,"我的新衣服好看嘛?"):o("我还没有其他衣服呢!",4e3,10)}))}async loadOtherModel(){let e=localStorage.getItem("modelId");if(this.useCDN){this.modelList||await this.loadModelList();const t=++e>=this.modelList.models.length?0:e;this.loadModel(t,0,this.modelList.messages[t])}else fetch(`${this.apiPath}switch/?id=${e}`).then((e=>e.json())).then((e=>{this.loadModel(e.model.id,0,e.model.message)}))}}const n={hitokoto:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:function(){fetch("https://v1.hitokoto.cn").then((e=>e.json())).then((e=>{const t=`这句一言来自 「${e.from}」 ,是 ${e.creator} 在 hitokoto.cn 投稿的。`;o(e.hitokoto,6e3,9),setTimeout((()=>{o(t,4e3,9)}),6e3)}))}},asteroids:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{if(window.Asteroids)window.ASTEROIDSPLAYERS||(window.ASTEROIDSPLAYERS=[]),window.ASTEROIDSPLAYERS.push(new Asteroids);else{const e=document.createElement("script");e.src="https://fastly.jsdelivr.net/gh/stevenjoezhang/asteroids/asteroids.js",document.head.appendChild(e)}}},"switch-model":{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{}},"switch-texture":{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{}},photo:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{o("照好了嘛,是不是很可爱呢?",6e3,9),Live2D.captureName="photo.png",Live2D.captureFrame=!0}},info:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{open("https://github.com/stevenjoezhang/live2d-widget")}},quit:{icon:'\x3c!--! Font Awesome Free 6.2.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc. --\x3e ',callback:()=>{localStorage.setItem("waifu-display",Date.now()),o("愿你有一天能与重要的人重逢。",2e3,11),document.getElementById("waifu").style.bottom="-500px",setTimeout((()=>{document.getElementById("waifu").style.display="none",document.getElementById("waifu-toggle").classList.add("waifu-toggle-active")}),3e3)}}};function i(t){const i=new s(t);function c(t){let s,n=!1,i=t.message.default;window.addEventListener("mousemove",(()=>n=!0)),window.addEventListener("keydown",(()=>n=!0)),setInterval((()=>{n?(n=!1,clearInterval(s),s=null):s||(s=setInterval((()=>{o(i,6e3,9)}),2e4))}),1e3),o(function(e){if("/"===location.pathname)for(let{hour:t,text:o}of e){const e=new Date,s=t.split("-")[0],n=t.split("-")[1]||s;if(s<=e.getHours()&&e.getHours()<=n)return o}const t=`欢迎阅读「${document.title.split(" - ")[0]}」 `;let o;if(""!==document.referrer){const e=new URL(document.referrer),s=e.hostname.split(".")[1],n={baidu:"百度",so:"360搜索",google:"谷歌搜索"};return location.hostname===e.hostname?t:(o=s in n?n[s]:e.hostname,`Hello!来自 ${o} 的朋友 ${t}`)}return t}(t.time),7e3,11),window.addEventListener("mouseover",(s=>{for(let{selector:n,text:i}of t.mouseover)if(s.target.matches(n))return i=e(i),i=i.replace("{text}",s.target.innerText),void o(i,4e3,8)})),window.addEventListener("click",(s=>{for(let{selector:n,text:i}of t.click)if(s.target.matches(n))return i=e(i),i=i.replace("{text}",s.target.innerText),void o(i,4e3,8)})),t.seasons.forEach((({date:t,text:o})=>{const s=new Date,n=t.split("-")[0],c=t.split("-")[1]||n;n.split("/")[0]<=s.getMonth()+1&&s.getMonth()+1<=c.split("/")[0]&&n.split("/")[1]<=s.getDate()&&s.getDate()<=c.split("/")[1]&&(o=(o=e(o)).replace("{year}",s.getFullYear()),i.push(o))}));const c=()=>{};console.log("%c",c),c.toString=()=>{o(t.message.console,6e3,9)},window.addEventListener("copy",(()=>{o(t.message.copy,6e3,9)})),window.addEventListener("visibilitychange",(()=>{document.hidden||o(t.message.visibilitychange,6e3,9)}))}localStorage.removeItem("waifu-display"),sessionStorage.removeItem("waifu-text"),document.body.insertAdjacentHTML("beforeend",''),setTimeout((()=>{document.getElementById("waifu").style.bottom=0}),0),function(){n["switch-model"].callback=()=>i.loadOtherModel(),n["switch-texture"].callback=()=>i.loadRandModel(),Array.isArray(t.tools)||(t.tools=Object.keys(n));for(let e of t.tools)if(n[e]){const{icon:t,callback:o}=n[e];document.getElementById("waifu-tool").insertAdjacentHTML("beforeend",`${t} `),document.getElementById(`waifu-tool-${e}`).addEventListener("click",o)}}(),function(){let e=localStorage.getItem("modelId"),o=localStorage.getItem("modelTexturesId");null===e&&(e=1,o=53),i.loadModel(e,o),fetch(t.waifuPath).then((e=>e.json())).then(c)}()}window.initWidget=function(e,t){"string"==typeof e&&(e={waifuPath:e,apiPath:t}),document.body.insertAdjacentHTML("beforeend",'\n 看板娘 \n
');const o=document.getElementById("waifu-toggle");o.addEventListener("click",(()=>{o.classList.remove("waifu-toggle-active"),o.getAttribute("first-time")?(i(e),o.removeAttribute("first-time")):(localStorage.removeItem("waifu-display"),document.getElementById("waifu").style.display="",setTimeout((()=>{document.getElementById("waifu").style.bottom=0}),0))})),localStorage.getItem("waifu-display")&&Date.now()-localStorage.getItem("waifu-display")<=864e5?(o.setAttribute("first-time",!0),setTimeout((()=>{o.classList.add("waifu-toggle-active")}),0)):i(e)}}();