一些代码优化

This commit is contained in:
枫谷剑仙 2021-09-13 19:12:29 +08:00
parent 9a7b37a1e5
commit 4e30e87c7c
4 changed files with 123 additions and 199 deletions

View File

@ -3194,9 +3194,6 @@ const specialSearchFunctions = (function() {
{name:"Have 9 awokens",otLangName:{chs:"有9个觉醒"},
function:cards=>cards.filter(card=>card.awakenings.length>=9)
},
{name:"Can be assist",otLangName:{chs:"可以做辅助"},
function:cards=>cards.filter(card=>card.canAssist)
},
{name:"Not weapon",otLangName:{chs:"不是武器"},
function:cards=>cards.filter(card=>!card.awakenings.includes(49))
},

View File

@ -45,10 +45,10 @@ function getQueryString(name, url) {
return value;
}
function localStorage_getBoolean(name){
function localStorage_getBoolean(name, defaultValue = false){
let value = localStorage.getItem(name);
if (value === "true") return true;
else return Boolean(Number(localStorage.getItem(name)));
else return Boolean(Number(localStorage.getItem(name) ?? defaultValue));
}
//数字补前导0

304
script.js
View File

@ -781,13 +781,12 @@ class EvoTree
//切换通用的切换className显示的函数
function toggleDomClassName(addClass, className, dom = document.body) {
if (addClass) {
dom.classList.add(className);
return true;
} else {
dom.classList.remove(className);
return false;
}
dom.classList[addClass ? "add" : "remove"](className);
//if (addClass) {
// dom.classList.add(className);
//} else {
// dom.classList.remove(className);
//}
}
//清除数据
function clearData()
@ -1487,33 +1486,34 @@ function initialize(event) {
//▲添加数据来源列表结束
//设定初始的显示设置
//记录显示CD开关的状态
//显示ID开关
const btnShowMonId = document.getElementById("show-mon-id");
btnShowMonId.checked = localStorage_getBoolean(cfgPrefix + btnShowMonId.id);
btnShowMonId.onclick = function(e){
btnShowMonId.checked = localStorage_getBoolean(cfgPrefix + btnShowMonId.id, true);
btnShowMonId.onchange = function(e){
toggleDomClassName(!this.checked, 'not-show-mon-id');
if (e) localStorage.setItem(cfgPrefix + this.id, Number(this.checked));
};
btnShowMonId.onclick(false);
btnShowMonId.onchange(false);
//记录显示CD开关的状态
//显示CD开关
const btnShowMonSkillCd = document.getElementById("show-mon-skill-cd");
btnShowMonSkillCd.checked = localStorage_getBoolean(cfgPrefix + btnShowMonSkillCd.id);
btnShowMonSkillCd.onclick = function(e){
btnShowMonSkillCd.onchange = function(e){
toggleDomClassName(this.checked, this.id);
if (e) localStorage.setItem(cfgPrefix + this.id, Number(this.checked));
};
btnShowMonSkillCd.onclick(false);
btnShowMonSkillCd.onchange(false);
//记录显示觉醒开关的状态
//显示卡片觉醒开关
const btnShowMonAwoken = document.getElementById("show-mon-awoken");
btnShowMonAwoken.checked = localStorage_getBoolean(cfgPrefix + btnShowMonAwoken.id);
btnShowMonAwoken.onclick = function(e){
btnShowMonAwoken.onchange = function(e){
toggleDomClassName(this.checked, this.id);
if (e) localStorage.setItem(cfgPrefix + this.id, Number(this.checked));
};
btnShowMonAwoken.onclick(false);
btnShowMonAwoken.onchange(false);
//3P显示觉醒统计开关
let btnShowAwokenCount = document.getElementById("show-awoken-count");
if (btnShowAwokenCount) {
btnShowAwokenCount.onclick = function() {
@ -2666,10 +2666,7 @@ function initialize(event) {
function s_types_onchange(){
const newClassName = `type-killer-${this.value}`;
if (this.checked && s_typeAndOr.checked) //and的时候才生效
s_typesUl.classList.add(newClassName);
else
s_typesUl.classList.remove(newClassName);
toggleDomClassName(this.checked && s_typeAndOr.checked, newClassName, s_typesUl);
}
s_types.forEach(checkBox=>checkBox.onchange = s_types_onchange);
@ -2687,10 +2684,7 @@ function initialize(event) {
s_typeAndOr.onchange = function(){
s_types.forEach(checkBox=>checkBox.onchange());
if (this.checked)
s_types_latentUl.classList.add(className_displayNone);
else
s_types_latentUl.classList.remove(className_displayNone);
toggleDomClassName(this.checked, className_displayNone, s_types_latentUl);
};
s_typeAndOr.onchange();
@ -2749,7 +2743,7 @@ function initialize(event) {
const s_canAssist = searchBox.querySelector("#can-assist"); //只搜索辅助
const s_noHenshin = searchBox.querySelector("#no-henshin"); //只搜索非变身
//记录开关的状态
//强调箱子拥有开关
const s_boxHave = document.getElementById("box-have");
s_boxHave.checked = localStorage_getBoolean(cfgPrefix + s_boxHave.id);
s_boxHave.onchange = function(e) {
@ -2770,31 +2764,33 @@ function initialize(event) {
};
s_includeSuperAwoken.onchange();
const s_showOfficialAwokenSorting = document.getElementById("show-official-awoken-sorting"); //显示官方排序的觉醒
//显示官方觉醒排序开关
const s_showOfficialAwokenSorting = document.getElementById("show-official-awoken-sorting");
s_showOfficialAwokenSorting.checked = localStorage_getBoolean(cfgPrefix + s_showOfficialAwokenSorting.id);
s_showOfficialAwokenSorting.onchange = function(e){
if (e) localStorage.setItem(cfgPrefix + this.id, Number(this.checked));
let fragmentAwoken = document.createDocumentFragment();
let fragmentSawoken = document.createDocumentFragment();
const awokenSorting = this.checked ? official_awoken_sorting : s_awokensUl.originalSorting;
const sawokenSorting = this.checked ? official_awoken_sorting : s_sawokensUl.originalSorting;
awokenSorting.forEach(id=>fragmentAwoken.appendChild(
s_awokensLi.find(li=>parseInt(li.querySelector(".awoken-icon").getAttribute("data-awoken-icon"), 10) == id)
));
sawokenSorting.forEach(id=>fragmentSawoken.appendChild(
s_sawokensLi.find(li=>parseInt(li.querySelector(".awoken-icon").getAttribute("data-awoken-icon"), 10) == id)
));
const officialAwokenSorting_className = "official-awoken-sorting";
if (this.checked)
{
s_awokensDiv.classList.add(officialAwokenSorting_className);
s_sawokensDiv.classList.add(officialAwokenSorting_className);
}else
{
s_awokensDiv.classList.remove(officialAwokenSorting_className);
s_sawokensDiv.classList.remove(officialAwokenSorting_className);
const checked = this.checked;
if (e) localStorage.setItem(cfgPrefix + this.id, Number(checked));
const fragmentAwoken = document.createDocumentFragment();
const fragmentSawoken = document.createDocumentFragment();
const awokenSorting = checked ? official_awoken_sorting : s_awokensUl.originalSorting;
const sawokenSorting = checked ? official_awoken_sorting : s_sawokensUl.originalSorting;
function getIconId(li) {
return parseInt(li.querySelector(".awoken-icon").getAttribute("data-awoken-icon"), 10);
}
for (const id of awokenSorting) {
const li = s_awokensLi.find(li=>getIconId(li) === id);
fragmentAwoken.appendChild(li);
}
for (const id of sawokenSorting) {
const li = s_sawokensLi.find(li=>getIconId(li) === id);
fragmentSawoken.appendChild(li);
}
const className = "official-awoken-sorting";
toggleDomClassName(checked, className, s_awokensDiv);
toggleDomClassName(checked, className, s_sawokensDiv);
s_awokensUl.appendChild(fragmentAwoken);
s_sawokensUl.appendChild(fragmentSawoken);
};
@ -3163,10 +3159,8 @@ function initialize(event) {
const card = Cards[editBox.mid];
const value = parseInt(this.value, 10);
awokenCountLabel.setAttribute(dataAttrName, value);
if (value > 0 && value == (card.awakenings.length))
awokenCountLabel.classList.add("full-awoken");
else
awokenCountLabel.classList.remove("full-awoken");
toggleDomClassName(value > 0 && value == card.awakenings.length, "full-awoken", awokenCountLabel);
reCalculateAbility();
}
monEditAwokens.forEach(akDom => akDom.onclick = checkAwoken);
@ -3280,6 +3274,8 @@ function initialize(event) {
editBox.refreshLatent = function(latent, monid) {//刷新潜觉
refreshLatent(latent, monid, monEditLatents);
};
//隐藏少用潜觉开关
const s_hideLessUseLetent = document.getElementById("hide-less-use-latent");
s_hideLessUseLetent.checked = localStorage_getBoolean(cfgPrefix + s_hideLessUseLetent.id);
s_hideLessUseLetent.onchange = function(e) {
@ -3313,21 +3309,14 @@ function initialize(event) {
const lskillTitle = leaderSkillBox.querySelector(".skill-name");
lskillTitle.onclick = fastShowSkill;
const showSkillOriginalClassName = 'show-skill-original';
const showSkillOriginal = leaderSkillBox.querySelector(`#${showSkillOriginalClassName}`); //显示官方排序的觉醒
showSkillOriginal.onchange = function(e){
if (e) localStorage.setItem(cfgPrefix + showSkillOriginalClassName, Number(this.checked));
if (this.checked)
{
skillBox.classList.add(showSkillOriginalClassName);
leaderSkillBox.classList.add(showSkillOriginalClassName);
}else
{
skillBox.classList.remove(showSkillOriginalClassName);
leaderSkillBox.classList.remove(showSkillOriginalClassName);
}
//显示原文开关
const showSkillOriginal = document.getElementById("show-skill-original");
showSkillOriginal.checked = localStorage_getBoolean(cfgPrefix + showSkillOriginal.id);
showSkillOriginal.onchange = function(e) {
if (e) localStorage.setItem(cfgPrefix + this.id, Number(this.checked));
toggleDomClassName(this.checked, this.id, skillBox);
toggleDomClassName(this.checked, this.id, leaderSkillBox);
};
showSkillOriginal.checked = Boolean(Number(localStorage.getItem(cfgPrefix + showSkillOriginalClassName)));
showSkillOriginal.onchange(false);
editBox.refreshSkillParse = function(skp, lskp){
@ -3343,14 +3332,14 @@ function initialize(event) {
lskillDetailParsed.appendChild(renderSkillEntry(skillParser(card.leaderSkillId)));
};
const mergeSillClassName = 'merge-skill';
const mergeSill = leaderSkillBox.querySelector(`#${mergeSillClassName}`); //显示官方排序的觉醒
//合并技能开关
const mergeSill = document.getElementById("merge-skill");
mergeSill.checked = localStorage_getBoolean(cfgPrefix + mergeSill.id);
mergeSill.onchange = function(e){
if (e) localStorage.setItem(cfgPrefix + mergeSillClassName, Number(this.checked));
if (e) localStorage.setItem(cfgPrefix + this.id, Number(this.checked));
merge_skill = this.checked;
editBox.refreshSkillParse();
};
mergeSill.checked = Boolean(Number(localStorage.getItem(cfgPrefix + mergeSillClassName)));
mergeSill.onchange(false);
@ -3688,59 +3677,36 @@ function changeid(mon, monDom, latentDom) {
monDom.title = "No." + monId + " " + (card.otLangName ? (card.otLangName[currentLanguage.searchlist[0]] || card.name) : card.name);
monDom.href = currentLanguage.guideURL(monId, card.name);
if (card.canAssist)
monDom.classList.add("allowable-assist");
else
monDom.classList.remove("allowable-assist");
if (card.awakenings.includes(49)) //武器
monDom.classList.add("wepon");
else
monDom.classList.remove("wepon");
toggleDomClassName(card.canAssist, "allowable-assist", monDom); //可作为辅助
toggleDomClassName(card.awakenings.includes(49), "wepon", monDom); //武器
}
const levelDom = monDom.querySelector(".level");
if (levelDom) //如果提供了等级
{
if (levelDom) { //如果提供了等级
const level = mon.level || 1;
levelDom.setAttribute(dataAttrName, level);
if (level == card.maxLevel) { //如果等级刚好等于最大等级,则修改为“最大”的字
levelDom.classList.add("max");
} else {
levelDom.classList.remove("max");
}
if (card.limitBreakIncr && level >= card.maxLevel) { //如果支持超觉并且等级超过99就添加支持超觉的蓝色
if (level <= 110) //Lv 99~110
{
levelDom.classList.add("_110");
levelDom.classList.remove("_120");
}else //Lv 111~120
{
levelDom.classList.add("_120");
levelDom.classList.remove("_110");
}
} else {
levelDom.classList.remove("_110");
levelDom.classList.remove("_120");
toggleDomClassName(level === card.maxLevel, "max", levelDom);
//如果等级刚好等于最大等级,则修改为“最大”的字
if (level >= 111 && level <= 120 && card.limitBreakIncr) {
levelDom.setAttribute("data-level-range", "120");
} else if (level >= 99 && level <= 110 && card.limitBreakIncr) {
levelDom.setAttribute("data-level-range", "110");
} else if (level > card.maxLevel) {
levelDom.setAttribute("data-level-range", "error");
}
}
const awokenIcon = monDom.querySelector(".awoken-count-num");
if (awokenIcon) {
awokenIcon.setAttribute(dataAttrName, mon.awoken || 0);
if (mon.awoken != null) //如果提供了觉醒
{
if (card.awakenings.length > 0 && mon.awoken >= card.awakenings.length) {
awokenIcon.classList.add("full-awoken");
} else {
awokenIcon.classList.remove("full-awoken");
}
}else if(card.awakenings.length)
{
if (mon.awoken != null) { //如果提供了觉醒
toggleDomClassName(card.awakenings.length > 0 && mon.awoken >= card.awakenings.length, "full-awoken", awokenIcon);
}else if(card.awakenings.length) {
awokenIcon.classList.add("full-awoken");
}
}
const sawoken = monDom.querySelector(".super-awoken");
if (sawoken) //如果存在超觉醒的DOM且提供了超觉醒
{
if (sawoken) { //如果存在超觉醒的DOM且提供了超觉醒
if (mon.sawoken != undefined && mon.sawoken >= 0 && card.superAwakenings.length) {
sawoken.classList.remove(className_displayNone);
const sawokenIcon = sawoken.querySelector(".awoken-icon");
@ -3750,24 +3716,27 @@ function changeid(mon, monDom, latentDom) {
}
}
const m_id = monDom.querySelector(".id");
if (m_id) //怪物ID
{
if (m_id) { //怪物ID
m_id.textContent = monId;
}
const plusArr = mon.plus || [0, 0, 0];
const plusDom = monDom.querySelector(".plus");
if (plusArr && plusDom) //如果提供了加值,且怪物头像内有加值
if (plusDom) //如果提供了加值,且怪物头像内有加值
{
const plusCount = plusArr[0] + plusArr[1] + plusArr[2];
const plusArr = {
hp: mon?.plus?.[0] ?? 0,
atk: mon?.plus?.[1] ?? 0,
rcv: mon?.plus?.[2] ?? 0,
};
const plusCount = plusArr.hp + plusArr.atk + plusArr.rcv;
if (plusCount <= 0) {
plusDom.classList.add(className_displayNone);
} else if (plusCount >= 297) {
} else if (plusCount === 297) {
plusDom.classList.add("has297");
plusDom.classList.remove(className_displayNone);
} else {
plusDom.querySelector(".hp").textContent = plusArr[0];
plusDom.querySelector(".atk").textContent = plusArr[1];
plusDom.querySelector(".rcv").textContent = plusArr[2];
plusDom.querySelector(".hp").textContent = plusArr.hp;
plusDom.querySelector(".atk").textContent = plusArr.atk;
plusDom.querySelector(".rcv").textContent = plusArr.rcv;
plusDom.classList.remove("has297");
plusDom.classList.remove(className_displayNone);
}
@ -3791,12 +3760,7 @@ function changeid(mon, monDom, latentDom) {
const skillCdDom = monDom.querySelector(".skill-cd");
if (skillCdDom) //如果存在技能CD DOM
{
//const skill = Skills[card.activeSkillId];
if (card.activeSkillId == 0) {
skillCdDom.classList.add(className_displayNone);
} else {
skillCdDom.classList.remove(className_displayNone);
}
toggleDomClassName(!card.activeSkillId, className_displayNone, skillCdDom);
}
const switchLeaderDom = monDom.querySelector(".switch-leader");
@ -3804,12 +3768,9 @@ function changeid(mon, monDom, latentDom) {
{
const skills = getCardActiveSkills(card, [93, 227]); //更换队长的技能
if (skills.length > 0) {
switchLeaderDom.classList.remove(className_displayNone);
} else {
switchLeaderDom.classList.add(className_displayNone);
}
toggleDomClassName(!skills.length, className_displayNone, switchLeaderDom);
}
const countInBox = monDom.querySelector(".count-in-box");
if (countInBox && currentPlayerData) { //如果存在当前绑定用户数据
function cardsCount(pre,cur) {
@ -3924,14 +3885,11 @@ function editMon(teamNum, isAssist, indexInTeam) {
if (!isAssist) {
editBox.latent = mon.latent ? mon.latent.concat() : [];
editBox.refreshLatent(editBox.latent, mon.id);
btnDelay.classList.add(className_displayNone);
rowMonLatent.classList.remove(className_displayNone);
editBoxTitle.classList.remove("edit-box-title-assist");
} else {
btnDelay.classList.remove(className_displayNone);
rowMonLatent.classList.add(className_displayNone);
editBoxTitle.classList.add("edit-box-title-assist");
}
toggleDomClassName(isAssist, className_displayNone, rowMonLatent);
toggleDomClassName(isAssist, "edit-box-title-assist", editBoxTitle);
toggleDomClassName(!isAssist, className_displayNone, btnDelay);
editBox.reCalculateExp();
if (mon.awoken !== undefined && monEditAwokens[mon.awoken])
monEditAwokens[mon.awoken].click(); //涉及到觉醒数字的显示,所以需要点一下
@ -3964,29 +3922,22 @@ function editBoxChangeMonId(id) {
const mSeriesId = monInfoBox.querySelector(".monster-seriesId");
//mSeriesId.textContent = card.seriesId;
mSeriesId.setAttribute(dataAttrName, card.seriesId);
if (card.seriesId == 0) {
mSeriesId.classList.add(className_displayNone);
} else {
mSeriesId.classList.remove(className_displayNone);
}
toggleDomClassName(!card.seriesId, className_displayNone, mSeriesId);
const mCollabId = monInfoBox.querySelector(".monster-collabId");
//mCollabId.textContent = card.collabId;
mCollabId.setAttribute(dataAttrName, card.collabId);
if (card.collabId == 0) {
mCollabId.classList.add(className_displayNone);
} else {
mCollabId.classList.remove(className_displayNone);
}
toggleDomClassName(!card.collabId, className_displayNone, mCollabId);
const mAltName = monInfoBox.querySelector(".monster-altName");
//mAltName.textContent = card.altName.join("|");
//mAltName.setAttribute("data-monId", card.id);
if (card.altName.length > 0 || card.otTags && card.otTags.length > 0) { //当没有合作名
mAltName.classList.remove(className_displayNone);
} else {
mAltName.classList.add(className_displayNone);
}
//没有合作名就隐藏
toggleDomClassName(card.altName.length < 1 && card?.otTags?.length < 1, className_displayNone, mAltName);
const evoLinkCardsIdArray = buildEvoTreeIdsArray(card);
@ -4012,13 +3963,8 @@ function editBoxChangeMonId(id) {
openEvolutionaryTree.classList.add(className_displayNone); //隐藏进化树按钮
}
const searchEvolutionByThis = settingBox.querySelector(".row-mon-id .search-evolution-by-this");
if (card.types.includes(0))
{
searchEvolutionByThis.classList.remove(className_displayNone);
}else
{
searchEvolutionByThis.classList.add(className_displayNone);
}
//对于进化型才显示
toggleDomClassName(!card.types.includes(0), className_displayNone, searchEvolutionByThis);
const mType = monInfoBox.querySelectorAll(".monster-type li");
for (let ti = 0; ti < mType.length; ti++) {
@ -4034,18 +3980,12 @@ function editBoxChangeMonId(id) {
const monEditAwokensRow = settingBox.querySelector(".row-mon-awoken .awoken-ul");
const mAwokenIcon = monEditAwokensRow.querySelectorAll(".awoken-icon");
const mAwokenIpt = monEditAwokensRow.querySelectorAll("input[name='awoken-number']");
if (card.canAssist) {
monEditAwokensRow.classList.add("allowable-assist");
} else {
monEditAwokensRow.classList.remove("allowable-assist");
}
toggleDomClassName(card.canAssist, "allowable-assist", monEditAwokensRow);
for (let ai = 0; ai < mAwokenIcon.length; ai++) {
if (ai < card.awakenings.length) {
mAwokenIcon[ai].setAttribute("data-awoken-icon", card.awakenings[ai]);
mAwokenIcon[ai].classList.remove(className_displayNone);
} else {
mAwokenIcon[ai].classList.add(className_displayNone);
}
toggleDomClassName(ai >= card.awakenings.length, className_displayNone, mAwokenIcon[ai]);
}
mAwokenIpt[card.awakenings.length].click(); //选择最后一个觉醒
@ -4057,10 +3997,8 @@ function editBoxChangeMonId(id) {
for (let ai = 0; ai < mSAwoken.length; ai++) {
if (ai < card.superAwakenings.length) {
mSAwoken[ai].setAttribute("data-awoken-icon", card.superAwakenings[ai]);
mSAwoken[ai].classList.remove(className_displayNone);
} else {
mSAwoken[ai].classList.add(className_displayNone);
}
toggleDomClassName(ai >= card.superAwakenings.length, className_displayNone, mSAwoken[ai]);
}
monEditSAwokensRow.classList.remove(className_displayNone);
} else {
@ -4078,13 +4016,8 @@ function editBoxChangeMonId(id) {
const monEditLv120 = settingBox.querySelector(".m-level-btn-120");
monEditLv110.setAttribute("data-limit-break-incr",card.limitBreakIncr);
if (card.limitBreakIncr) {
monEditLv110.classList.remove(className_displayNone);
monEditLv120.classList.remove(className_displayNone);
} else {
monEditLv110.classList.add(className_displayNone);
monEditLv120.classList.add(className_displayNone);
}
toggleDomClassName(!card.limitBreakIncr, className_displayNone, monEditLv110);
toggleDomClassName(!card.limitBreakIncr, className_displayNone, monEditLv120);
const mCost = settingBox.querySelector(".monster-cost");
mCost.textContent = card.cost;
@ -4098,11 +4031,7 @@ function editBoxChangeMonId(id) {
const latentIcons = Array.from(monLatentAllowUl.querySelectorAll(`.latent-icon[data-latent-icon]`));
latentIcons.forEach(icon => { //显示允许的潜觉,隐藏不允许的潜觉
const ltId = parseInt(icon.getAttribute("data-latent-icon"),10);
if (allowLatent.includes(ltId)) {
icon.classList.remove("unallowable-latent");
} else {
icon.classList.add("unallowable-latent");
}
toggleDomClassName(!allowLatent.includes(ltId), "unallowable-latent", icon);
});
//怪物主动技能
@ -4206,14 +4135,9 @@ function refreshAll(formationData) {
let titleStr = txtTitleDisplay.textContent.trim();
document.title = titleStr.length > 0 ? `${titleStr.trim()} - ${localTranslating.webpage_title}` : localTranslating.webpage_title;
txtDetailDisplay.innerHTML = descriptionToHTML(txtDetail.value);
if (txtTitle.value.length == 0)
titleBox.classList.add("edit");
else
titleBox.classList.remove("edit");
if (txtDetail.value.length == 0)
detailBox.classList.add("edit");
else
detailBox.classList.remove("edit");
toggleDomClassName(!txtTitle.value.length, "edit", titleBox);
toggleDomClassName(!txtDetail.value.length, "edit", detailBox);
let dge = formationData.dungeonEnchance;
if (Object.values(dge.rate).some(rate => rate != 1))

View File

@ -496,12 +496,15 @@ ul{
{
display: none;
}
.monster .level._110{
.monster .level[data-level-range="110"]{
color: lightskyblue;
}
.monster .level._120{
.monster .level[data-level-range="120"]{
color: lightgreen;
}
.monster .level[data-level-range="error"]{
color: red;
}
/*.monster .level::before{
content: "Lv.";
}.monster .level.max::before{
@ -1735,7 +1738,7 @@ icon.inflicts::after
.search-box .special-add::before,
.search-box .special-clear::before
{
width: 80px;
min-width: 80px;
background-size: 100px 100px;
background-position-y: 40px;
vertical-align: top;
@ -1748,7 +1751,7 @@ icon.inflicts::after
.search-box .special-add::before,
.search-box .special-clear::before
{
width: 50px;
min-width: 50px;
font-size: 14px;
line-height: 20px;
}