| @@ -1241,10 +1241,12 @@ const teamsCount = 2; | |||
| <input type="checkbox" name="not-weapon" id="not-weapon"><label for="not-weapon"></label> | |||
| </div> | |||
| <div class="control-div"><!--控制栏--> | |||
| <button class="search-start"><!--开始搜索--></button> | |||
| <button class="search-close"><!--关闭搜索--></button> | |||
| <button class="search-clear"><!--清空搜索条件--></button> | |||
| <button class="search-share"><!--分享搜索内容--></button> | |||
| <div class="button-div"><!--额外显示栏--> | |||
| <button class="search-close"><!--关闭搜索--></button> | |||
| <button class="search-clear"><!--清空搜索条件--></button> | |||
| <button class="search-share"><!--分享搜索内容--></button> | |||
| <button class="search-start"><!--开始搜索--></button> | |||
| </div> | |||
| <div class="additional-div"><!--额外显示栏--> | |||
| <input type="checkbox" class="switch-ipt" name="add-show-CD" id="add-show-CD"><label for="add-show-CD"></label> | |||
| <input type="checkbox" class="switch-ipt" name="add-show-abilities" id="add-show-abilities"><label for="add-show-abilities"></label> | |||
| @@ -4168,33 +4168,26 @@ function initialize() { | |||
| }; | |||
| //以字符串搜索窗口 | |||
| const stringSearchDialog = document.getElementById("dialog-search-string"); | |||
| function searchByString(str) | |||
| //将输入的字符串变为参数数组 | |||
| function parseArgumentsString(str) { | |||
| const matches = [...str.matchAll(/\"(?<arg>[^\"]*)\"|(?<arg>\S+)/ig)]; | |||
| return matches.map(match=>match?.groups?.arg); | |||
| } | |||
| function searchByString(str, onlyInTag = false) | |||
| { // 考虑了一下onlyInTag被废弃了,因为和游戏内搜索不符 | |||
| str = str.trim(); | |||
| if (str.length == 0) { //如果搜索0,则打开最新的50个 | |||
| return Cards.filter(card=>card.enabled).slice(-50); | |||
| } else if (str.length>0) | |||
| { | |||
| return Cards.filter(card => | |||
| { | |||
| const names = [card.name]; | |||
| if (card.otLangName) | |||
| { | |||
| names.push(...Object.values(card.otLangName)); | |||
| } | |||
| const tags = card.altName.concat(); | |||
| if (card.otTags) | |||
| { | |||
| tags.push(...card.otTags); | |||
| } | |||
| return tags.some(astr=>astr.toLowerCase().includes(str.toLowerCase())) || | |||
| names.some(astr=>astr.toLowerCase().includes(str.toLowerCase())); | |||
| } | |||
| ); | |||
| }else | |||
| { | |||
| return []; | |||
| } | |||
| if (typeof str !== "string") return; | |||
| const args = parseArgumentsString(str).map(str=>str.toLowerCase()); | |||
| if (args.length === 0) return; | |||
| return Cards.filter(card => { | |||
| let cardTags = card.altName.concat(card?.otTags ?? []); //加入Tag | |||
| if (!onlyInTag) { //如果不是仅搜索Tag,则加入怪物名称 | |||
| cardTags.push(card.name); | |||
| card.otLangName && cardTags.push(...Object.values(card.otLangName)); | |||
| } | |||
| cardTags = cardTags.map(str=>str.toLowerCase()); //先转小写 | |||
| //每一个参数都需要在搜索内容里 | |||
| return args.every(arg=>cardTags.some(str=>str.includes(arg))); | |||
| }); | |||
| } | |||
| function copyString(input) | |||
| { | |||
| @@ -4202,48 +4195,52 @@ function initialize() { | |||
| input.select(); //选择全部 | |||
| if (navigator?.clipboard?.writeText) { //优先使用新API | |||
| navigator.clipboard.writeText(input.value); | |||
| } else if (document.execCommand('copy')) { | |||
| } else { | |||
| document.execCommand('copy'); | |||
| } | |||
| //input.blur(); //取消焦点 | |||
| } | |||
| stringSearchDialog.initialing = function(originalStrArr = [], additionalStrArr = []) { | |||
| //清除空字符串 | |||
| originalStrArr = originalStrArr.filter(Boolean); | |||
| additionalStrArr = additionalStrArr.filter(Boolean); | |||
| const stringSearchContent = this.querySelector(".dialog-content"); | |||
| const fragment = document.createDocumentFragment(); | |||
| originalStrArr = originalStrArr.filter(Boolean) | |||
| additionalStrArr = additionalStrArr.filter(Boolean) | |||
| if (originalStrArr.length) { | |||
| const ul_original = document.createElement("ul"); | |||
| ul_original.className = "original-string"; | |||
| originalStrArr.forEach(str=>{ | |||
| const li = ul_original.appendChild(document.createElement("li")); | |||
| const ipt = li.appendChild(document.createElement("input")); | |||
| ipt.className = "string-value"; | |||
| ipt.value = str; | |||
| ipt.readOnly = true; | |||
| function copyLeft() { | |||
| copyString(this.parentElement.querySelector(".string-value")); | |||
| } | |||
| function searchLeft() { | |||
| const oStr = this.parentElement.querySelector(".string-value")?.value; | |||
| if (!oStr) return; | |||
| //把Tag内容加上两侧的双引号,避免被区分成不同的参数 | |||
| const str = `"${oStr}"`; | |||
| str && showSearch(searchByString(str, true)); | |||
| } | |||
| function stringLine(str, copy = false) { | |||
| const li = document.createElement("li"); | |||
| const ipt = li.appendChild(document.createElement("input")); | |||
| ipt.className = "string-value"; | |||
| ipt.value = str; | |||
| ipt.readOnly = true; | |||
| if (copy) { | |||
| const copyBtn = li.appendChild(document.createElement("button")); | |||
| copyBtn.className = "string-copy"; | |||
| copyBtn.onclick = function(){copyString(ipt)}; | |||
| const searchBtn = li.appendChild(document.createElement("button")); | |||
| searchBtn.className = "string-search"; | |||
| searchBtn.onclick = function(){showSearch(searchByString(ipt.value))}; | |||
| }); | |||
| fragment.appendChild(ul_original); | |||
| copyBtn.onclick = copyLeft; | |||
| } | |||
| const searchBtn = li.appendChild(document.createElement("button")); | |||
| searchBtn.className = "string-search"; | |||
| searchBtn.onclick = searchLeft; | |||
| return li; | |||
| } | |||
| if (originalStrArr.length) { | |||
| const ul_original = fragment.appendChild(document.createElement("ul")); | |||
| ul_original.className = "original-string"; | |||
| ul_original.append(...originalStrArr.map(str=>stringLine(str, true))); | |||
| } | |||
| if (additionalStrArr.length) { | |||
| const ul_additional = document.createElement("ul"); | |||
| const ul_additional = fragment.appendChild(document.createElement("ul")); | |||
| ul_additional.className = "additional-string"; | |||
| additionalStrArr.forEach(str=>{ | |||
| const li = ul_additional.appendChild(document.createElement("li")); | |||
| const ipt = li.appendChild(document.createElement("input")); | |||
| ipt.className = "string-value"; | |||
| ipt.value = str; | |||
| ipt.readOnly = true; | |||
| const searchBtn = li.appendChild(document.createElement("button")); | |||
| searchBtn.className = "string-search"; | |||
| searchBtn.onclick = function(){showSearch(searchByString(ipt.value))}; | |||
| }); | |||
| fragment.appendChild(ul_additional); | |||
| ul_additional.append(...additionalStrArr.map(str=>stringLine(str, false))); | |||
| } | |||
| stringSearchContent.innerHTML = ""; | |||
| stringSearchContent.appendChild(fragment); | |||
| @@ -4902,6 +4899,7 @@ function initialize() { | |||
| //history.pushState(state, null, location); | |||
| } | |||
| searchResultCount.setAttribute("data-search-result-count", searchArr.length); | |||
| searchResultCount.textContent = searchArr.length; | |||
| searchMonList.classList.remove(className_displayNone); | |||
| }; | |||
| //对已经搜索到的Cards重新附加显示 | |||
| @@ -32311,7 +32311,7 @@ const cachesMap = new Map([ | |||
| ], | |||
| [ | |||
| "multi.html", | |||
| "a116c5ab3d074c4b0449529cbd9d7821" | |||
| "20f7503e67106e457882ddd5848e422f" | |||
| ], | |||
| [ | |||
| "script-custom_elements.js", | |||
| @@ -32331,11 +32331,11 @@ const cachesMap = new Map([ | |||
| ], | |||
| [ | |||
| "script.js", | |||
| "1c55a5bfbb0ba639c39f5d5be92d5861" | |||
| "4f423034d218b6443b52cd4ad053aa3e" | |||
| ], | |||
| [ | |||
| "solo.html", | |||
| "5ff05c2ae803d469d388438c3c7c615f" | |||
| "4973f9f1a8169d2660cf06205e1f814b" | |||
| ], | |||
| [ | |||
| "style-monsterimages.css", | |||
| @@ -32343,7 +32343,7 @@ const cachesMap = new Map([ | |||
| ], | |||
| [ | |||
| "style.css", | |||
| "4b8d86472d70a8666ee2759342425a0e" | |||
| "2074baa0c03382beb5858ae76469b4df" | |||
| ], | |||
| [ | |||
| "temp.js", | |||
| @@ -32351,7 +32351,7 @@ const cachesMap = new Map([ | |||
| ], | |||
| [ | |||
| "triple.html", | |||
| "64a369f4dbfe99ccf9f909e954fa6f46" | |||
| "57ff5938b64613dc98dc842cc182c10f" | |||
| ], | |||
| [ | |||
| "languages/en.css", | |||
| @@ -978,10 +978,12 @@ const teamsCount = 1; | |||
| <input type="checkbox" name="not-weapon" id="not-weapon"><label for="not-weapon"></label> | |||
| </div> | |||
| <div class="control-div"><!--控制栏--> | |||
| <button class="search-start"><!--开始搜索--></button> | |||
| <button class="search-close"><!--关闭搜索--></button> | |||
| <button class="search-clear"><!--清空搜索条件--></button> | |||
| <button class="search-share"><!--分享搜索内容--></button> | |||
| <div class="button-div"><!--额外显示栏--> | |||
| <button class="search-close"><!--关闭搜索--></button> | |||
| <button class="search-clear"><!--清空搜索条件--></button> | |||
| <button class="search-share"><!--分享搜索内容--></button> | |||
| <button class="search-start"><!--开始搜索--></button> | |||
| </div> | |||
| <div class="additional-div"><!--额外显示栏--> | |||
| <input type="checkbox" class="switch-ipt" name="add-show-CD" id="add-show-CD"><label for="add-show-CD"></label> | |||
| <input type="checkbox" class="switch-ipt" name="add-show-abilities" id="add-show-abilities"><label for="add-show-abilities"></label> | |||
| @@ -361,11 +361,6 @@ ul{ | |||
| text-align: center; | |||
| margin-bottom: 5px; | |||
| } | |||
| .dialog .dialog-content .additional-string | |||
| { | |||
| border-top: 2px solid white; | |||
| margin-top: 5px; | |||
| } | |||
| /*.dialog .dialog-content .additional-string::before | |||
| { | |||
| content: "其他語言"; | |||
| @@ -416,16 +411,30 @@ ul{ | |||
| } | |||
| #dialog-search-string | |||
| { | |||
| width: 260px; | |||
| top: 100px; | |||
| width: 350px; | |||
| top: 0; | |||
| z-index: 2; | |||
| } | |||
| .dialog .dialog-content :where(.original-string, .additional-string) li { | |||
| display: grid; | |||
| gap: 5px; | |||
| margin-bottom: 5px; | |||
| } | |||
| .dialog .dialog-content .original-string li { | |||
| grid-template-columns: auto 45px 45px; | |||
| } | |||
| .dialog .dialog-content .additional-string li { | |||
| grid-template-columns: auto 45px; | |||
| } | |||
| .dialog .dialog-content .additional-string | |||
| { | |||
| border-top: 2px solid white; | |||
| margin-top: 5px; | |||
| } | |||
| .dialog .string-copy, | |||
| .dialog .string-search | |||
| { | |||
| box-sizing: border-box; | |||
| width: 45px; | |||
| margin-left: 5px; | |||
| cursor: pointer; | |||
| background-color: #994433; | |||
| border: 2px solid #FFCC88; | |||
| @@ -433,22 +442,18 @@ ul{ | |||
| border-radius: 5px; | |||
| padding: 0; | |||
| } | |||
| .dialog .string-copy::before | |||
| { | |||
| .dialog .string-copy::before { | |||
| content: "📋"; | |||
| } | |||
| .dialog .string-search::before | |||
| { | |||
| .dialog .string-search::before { | |||
| content: "🔍"; | |||
| } | |||
| .dialog .string-value | |||
| { | |||
| box-sizing: border-box; | |||
| width: calc(100% - 50px * 1); | |||
| } | |||
| #dialog-search-string .original-string .string-value | |||
| { | |||
| width: calc(100% - 50px * 2); | |||
| } | |||
| /*单个怪物*/ | |||
| @@ -2227,7 +2232,7 @@ input[disabled]+.awoken-icon:active, | |||
| margin-right: 3px; | |||
| } | |||
| .special-filter-list select{ | |||
| font-size: 20px; | |||
| font-size: 1.25em; | |||
| max-width: 100%; | |||
| box-sizing: border-box; | |||
| } | |||
| @@ -2235,9 +2240,13 @@ input[disabled]+.awoken-icon:active, | |||
| .control-div button{ | |||
| font-size: 20px; | |||
| } | |||
| .control-div .search-start{ | |||
| float: right; | |||
| margin-left: 5px; | |||
| .search-box .control-div .button-div { | |||
| display: grid; | |||
| gap: 5px; | |||
| grid-template-columns: max-content max-content max-content auto max-content; | |||
| } | |||
| .control-div .search-start { | |||
| grid-column: 5 / 6; | |||
| } | |||
| /*.control-div .search-start::before{ | |||
| content: "开始搜索"; | |||
| @@ -2264,17 +2273,13 @@ input[disabled]+.awoken-icon:active, | |||
| .search-mon-list:empty { | |||
| display: none; | |||
| } | |||
| .search-box .search-list-length | |||
| { | |||
| float: right; | |||
| } | |||
| .search-box .search-list-length[data-search-result-count="0"] | |||
| { | |||
| display: none; | |||
| .search-box .control-div .sort-div { | |||
| display: grid; | |||
| gap: 5px; | |||
| grid-template-columns: max-content max-content max-content auto max-content; | |||
| } | |||
| .search-box .search-list-length:not([data-search-result-count="0"])::after | |||
| { | |||
| content: attr(data-search-result-count); | |||
| .search-box .search-list-length { | |||
| grid-column: 5 / 6; | |||
| } | |||
| /*图鉴模式使用粘性定位*/ | |||
| .guide-mod .sticky-box { | |||
| @@ -1924,10 +1924,12 @@ const teamsCount = 3; | |||
| <input type="checkbox" name="not-weapon" id="not-weapon"><label for="not-weapon"></label> | |||
| </div> | |||
| <div class="control-div"><!--控制栏--> | |||
| <button class="search-start"><!--开始搜索--></button> | |||
| <button class="search-close"><!--关闭搜索--></button> | |||
| <button class="search-clear"><!--清空搜索条件--></button> | |||
| <button class="search-share"><!--分享搜索内容--></button> | |||
| <div class="button-div"><!--额外显示栏--> | |||
| <button class="search-close"><!--关闭搜索--></button> | |||
| <button class="search-clear"><!--清空搜索条件--></button> | |||
| <button class="search-share"><!--分享搜索内容--></button> | |||
| <button class="search-start"><!--开始搜索--></button> | |||
| </div> | |||
| <div class="additional-div"><!--额外显示栏--> | |||
| <input type="checkbox" class="switch-ipt" name="add-show-CD" id="add-show-CD"><label for="add-show-CD"></label> | |||
| <input type="checkbox" class="switch-ipt" name="add-show-abilities" id="add-show-abilities"><label for="add-show-abilities"></label> | |||