注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
- Opera:按 Ctrl-F5。
/* 这里的任何JavaScript将为所有用户在每次页面载入时加载。 */ /* button-switch-display */ var button_switch_display_state = {}; initialize( function () { /* data-css data-js */ $("[data-css]").each(function () { var $this = $(this); $this.css("display", "none"); $("body").append("<style>" + $this.html().replace(/>/g, ">") + "</style>"); }); $("[data-js]").each(function () { var $this = $(this); $this.css("display", "none"); $("body").append("<script>" + $this.html().replace(/>/g, ">").replace(/</g, "<").replace(/&/g, "&") + "</script>"); }); button_switch_display_init(); button_switch_display_refresh(); locale_time(); count_down_initialize(); roll_initialize(); card_icon_text_init(); }, function () { /* 调整字体大小避免溢出容器 */ $('#nmdwsm').html("这是坏的"); var elems = $('.font-size-flex'); for (var iter = 0; iter < elems.length; iter++) { var siz = 20; var style_flextext = elems[iter].style.cssText; while ((elems[iter].scrollHeight > elems[iter].clientHeight || elems[iter].scrollWidth > elems[iter].clientWidth) && siz >= 6) { if (siz > 12) siz = siz - 2; else siz = siz - 1; elems[iter].style.cssText = "font-size:" + siz + "px;" + style_flextext; $('#nmdwsm').html("这是好的"); $('#nmdwsm1').html(elems[iter].scrollHeight); $('#nmdwsm2').html(elems[iter].clientHeight); } } loadScript(); skill_ac_pass_rate_init() chart_show_skill_ac_pass_rate_init(); } ); function initialize(fn_interactive, fn_complete) { if (document.readyState === "complete") { fn_interactive(); fn_complete(); } else if (document.readyState === "interactive") { window.addEventListener("load", function () { fn_complete(); }); fn_interactive(); } else { document.addEventListener("readystatechange", function () { if (document.readyState === "interactive") fn_interactive(); else if (document.readyState === "complete") fn_complete(); }); } } function loadScript() { var script = document.createElement('script'); script.src = 'https://llhelper.github.io/wiki-scripts/dist/wiki_script.js'; document.body.appendChild(script); } /* button-switch-display */ function button_switch_display_init() { //令没有对应按钮的属性默认为true 而不是false var button_switch_display_targets = $('[data-bsd-condition]'); for (var iter = 0; iter < button_switch_display_targets.length; iter += 1) { var target = button_switch_display_targets[iter]; var condition = target.getAttribute("data-bsd-condition") || "0"; if (!condition.match(/^[0-9!&\|\(\)]+$/)) { console.log("button-switch-display: " + condition + " is an illegal condition string"); return; } condition.match(/([0-9A-Za-z]+)/g).forEach(function (key) { button_switch_display_state[key] = true; }) } //设置筛选的初始值 var button_switch_display_buttons = $('[data-bsd-activate]'); for (var iter = 0; iter < button_switch_display_buttons.length; iter += 1) { var button = button_switch_display_buttons[iter]; button.setAttribute("onclick", "button_switch_display_trigger(this)"); button.getAttribute("data-bsd-activate") || button.setAttribute("data-bsd-activate", iter.toString()); button.getAttribute("data-bsd-activated") === "true" || button.getAttribute("data-bsd-activated") === "false" || button.setAttribute("data-bsd-activated", "false"); button_switch_display_state[button.getAttribute("data-bsd-activate")] = eval(button.getAttribute("data-bsd-activated")); } var button_switch_display_static_buttons = $('.button-switch-display-static'); for (var iter = 0; iter < button_switch_display_static_buttons.length; iter += 1) { var button = button_switch_display_static_buttons[iter]; button.setAttribute("onclick", "button_switch_display_trigger(this)"); } } function button_switch_display_refresh() { var button_switch_display_buttons = $('[data-bsd-activate]'); for (var iter = 0; iter < button_switch_display_buttons.length; iter += 1) { var button = button_switch_display_buttons[iter]; var button_id = button.getAttribute("data-bsd-activate"); button.setAttribute("data-bsd-activated", button_switch_display_state[button_id]); } var button_switch_display_targets = $('[data-bsd-condition]'); for (var iter = 0; iter < button_switch_display_targets.length; iter += 1) { var target = button_switch_display_targets[iter]; var condition = target.getAttribute("data-bsd-condition") || "0"; if (!condition.match(/^[0-9!&\|\(\)]+$/)) { console.log("button-switch-display: " + condition + " is an illegal condition string"); return; } condition = condition.replace(/([0-9A-Za-z]+)/g, "button_switch_display_state[$1]"); // console.log(target, condition); if (eval(condition)) { target.style.cssText = target.style.cssText.replace(/display:\s*none\s*;\s*/, ""); } else { if (!target.style.cssText.match(/display:\s*none/)) target.style.cssText = "display: none;" + target.style.cssText; } } } function button_switch_display_trigger(button) { var button_id = button.getAttribute("data-bsd-activate"); var action_set_others_index = 0; if (button_id) { button.setAttribute("data-bsd-activated", (!eval(button.getAttribute("data-bsd-activated"))).toString()); button_switch_display_state[button_id] = eval(button.getAttribute("data-bsd-activated")); action_set_others_index = button_switch_display_state[button_id] + 0; } var action_set_others = button.getAttribute("data-bsd-action") || ""; if (!action_set_others.match(/^[0-9,\+\-]*(\/[0-9,\+\-]+)?$/)) { console.log("button-switch-display: " + action + " is an illegal action string"); return; } eval( (action_set_others.split('/')[action_set_others_index] || "") .replace(/([0-9a-zA-Z]+)(?![0-9a-zA-Z\+\-])/g, "$1+") .replace(/([0-9a-zA-z]+)-/g, "button_switch_display_state[$1]=false") .replace(/([0-9a-zA-z]+)\+/g, "button_switch_display_state[$1]=true") ); button_switch_display_refresh(); } /* Template:LocaleTime */ function locale_time() { $("[data-time]").each(function () { var input_string = this.getAttribute("data-time"); var date; if (new Number(input_string).toString() === "NaN") date = new Date(input_string); else date = new Date(parseInt(input_string)); this.innerHTML = Intl.DateTimeFormat( {}, { year: 'numeric', month: 'numeric', day: 'numeric', hour12: false, hour: '2-digit', minute: '2-digit' } ).format(date) }); } /* Template:CountDown */ function count_down_initialize() { $("[data-countdown-start]").each(function () { var start_time_string = this.getAttribute("data-countdown-start"); var end_time_string = this.getAttribute("data-countdown-end"); var type = this.getAttribute("data-countdown-type"); var date_start, date_end, msec_start, msec_end, msec_now; date_start = (new Number(start_time_string).toString() === "NaN") ? new Date(start_time_string) : new Date(parseInt(start_time_string)); if (end_time_string && end_time_string !== "0") { date_end = (new Number(end_time_string).toString() === "NaN") ? new Date(end_time_string) : new Date(parseInt(end_time_string)); } else { date_end = date_start; } msec_start = date_start.getTime(); msec_end = date_end.getTime(); msec_now = new Date().getTime() switch (type) { case "year": while (msec_end - msec_now < -86400000) { date_start.setFullYear(date_start.getFullYear() + 1); date_end.setFullYear(date_end.getFullYear() + 1); msec_start = date_start.getTime(); msec_end = date_end.getTime(); } break; } var elem = this; if (msec_end < msec_now) { this.innerHTML = "已结束"; return; } setInterval(function () { count_down_refresh(elem, msec_start, msec_end); }, 1000); }); } function count_down_refresh(element, msec_start, msec_end) { var msec_now = new Date().getTime(); var text = "占位 ", msec_cmp = msec_start; if (msec_now < msec_start) { text = "未开始<br>还有 "; msec_cmp = msec_start; } else if (msec_now < msec_end) { text = "进行中<br>还有 "; msec_cmp = msec_end; } else { text = "已结束"; msec_cmp = null; } if (msec_cmp) { var msec_diff = msec_cmp - msec_now; text += Math.floor(msec_diff / 86400000) + " 天 " + Math.floor(msec_diff / 3600000) % 24 + " 时 " + Math.floor(msec_diff / 60000) % 60 + " 分 " + Math.floor(msec_diff / 1000) % 60 + " 秒" } element.innerHTML = text; } /* roll */ function roll_initialize() { $('[data-roll-trigger-ids]').each(function () { var $this = $(this); $this.click(function () { roll_trigger(this); }); if ($this.attr('data-roll-trigger-auto') === 'true') roll_trigger(this); }); $('[id^="roll-result-count-"]').each(function () { var $this = $(this); if (isNaN(parseInt($this.html()))) $this.html("0"); if (isNaN(parseInt($this.attr('data-roll-result-count-increase')))) $this.attr('data-roll-result-count-increase', "1"); }) } function roll_trigger(elem) { var roll_ids = $(elem).attr('data-roll-trigger-ids').split(' '); roll_ids.forEach(function (id) { roll_execute(id) }); } function roll_execute(roll_id) { var weight_node = $('[data-roll-source-ids~="' + roll_id + '"]').first(); var content_types = []; while (true) { var weight_list = [], weight_total = 0, weight = null; var child = weight_node.children(); child.each(function () { weight = $(this).attr('data-weight') || null; if (weight) { weight_total += parseInt(weight); weight_list.push(weight_total); } else { weight_total += 0; weight_list.push(weight_total); } }); if (weight_total === 0) break; var random = Math.random() * weight_total; try { weight_list.forEach(function (value, index) { if (random < value) throw index; }); } catch (index) { weight_node = $(child[index]); var content_type = weight_node.attr('data-type') || "", amount = weight_node.attr('data-amount') || 1; content_type.split(" ").forEach(function (type) { if (type.length === 0) return; content_types.push({ content_type: type, content_amount: amount }); }) continue; } } var content = weight_node.html(); $('#roll-result-' + roll_id).html(content); var counter = $('#roll-result-count-' + roll_id); if (counter.length) { var prev = parseInt(counter.html()), incr = parseInt(counter.attr('data-roll-result-count-increase')); counter.html(prev + incr); } content_types.forEach(function (content_type_amount) { var content_type = content_type_amount.content_type, content_amount = content_type_amount.content_amount; var content_counter = $('#roll-content-count-' + content_type); if (content_counter.length) { var prev = parseInt(content_counter.html()), incr = parseInt(content_amount); content_counter.html(prev + incr); } $('#roll-content-set-' + content_type).append(content); }); } /* Template:CardIconText */ function card_icon_text_init() { var promises = $("[data-card-id]").map(function () { var $this = $(this); var image = document.createElement("img"); var $image = $(image); $image.css("width", "100%"); $image.attr("src", '/assets/icon/' + $this.attr("data-card-id") + '_1.png'); $this.append(image); return new Promise(function (res) { $image.on("load", function () { res() }); $image.on("error", function () { res() }); }); }); Promise.all(promises).then(function () { $("[data-card-id]").each(function () { var $this = $(this); var image = document.createElement("img"); var $image = $(image); $image.css("width", "100%"); $image.attr("src", '/assets/icon/' + $this.attr("data-card-id") + '_2.png'); $this.append(image); }) }) } /* 特技AC通过率计算器 */ var SkillACPassRate; function skill_ac_pass_rate_init() { SkillACPassRate = /** @class */ (function () { function SkillACPassRate() { } SkillACPassRate.exec = function (list, demand) { if (demand <= 0) return 1.00; demand = Math.ceil(demand); //list = list.map(([r, n]) => [Math.floor(r * 10000) / 10000, Math.floor(n)]); list.sort(function (a, b) { return a[1] - b[1]; }); var result = this.__calculate(list); if (demand) return 1.00 - (result[demand - 1] !== undefined ? result[demand - 1] : 1.00); else { result.unshift(0); return result.map(function (p) { return 1 - p; }); } }; SkillACPassRate.__calculate = function (list) { var _this = this; var complexity = 0; var result_length = list.reduce(function (dist_prev_length, _a, i) { var r = _a[0], n = _a[1]; var dist_new_length = dist_prev_length + n; complexity += dist_new_length * dist_new_length; return dist_new_length; }, 1); // complexity too large if (complexity > 1919810) { var N_1 = 1000000, cnt_1; var samples = []; for (var i = 0; i < result_length; i++) samples[i] = 0; for (var k = 0; k <= N_1; k += 1) { cnt_1 = 0; list.forEach(function (_a) { var r = _a[0], n = _a[1]; for (var j = 0; j < n; j++) cnt_1 += Math.random() < r; }); samples[cnt_1] += 1; } var result_1 = []; samples.reduce(function (pv, v, i) { pv += v; result_1[i] = pv; return pv; }, 0); return result_1.map(function (v) { return v / N_1; }); } // exact value this.__init(list); var result = list.reduce(function (dist_prev, v, i) { var dist_i = _this.dist[i]; var dist_new = []; var sum_max = dist_prev.length + dist_i.length - 1; for (var sum = 0; sum < sum_max; sum++) { dist_new[sum] = 0; for (var j = 0; j <= sum; j++) { dist_new[sum] += (dist_prev[j] !== undefined ? dist_prev[j] : 1) * (dist_i[sum - j] !== undefined ? dist_i[sum - j] : 1); } for (var j = 0; j <= sum - 1; j++) { dist_new[sum] -= (dist_prev[j] !== undefined ? dist_prev[j] : 1) * (dist_i[sum - 1 - j] !== undefined ? dist_i[sum - 1 - j] : 1); } } return dist_new; }, [1]); return result; }; SkillACPassRate.__init = function (list) { this.dist = list.map(function (_a, i) { var r = _a[0], n = _a[1]; var r_rev = 1 - r; var pri = [1], prirev = [1]; var p = 1, prev = 1; for (var i_1 = 0; i_1 <= n; i_1++) { pri[i_1] = p; p = p * r; prirev[i_1] = prev; prev = prev * r_rev; } var pacc = 0, coef = 1; var pacc_array = []; for (var i_2 = 0; i_2 <= n; i_2++) { pacc += coef * pri[i_2] * prirev[n - i_2]; pacc_array.push(pacc); coef = coef * (n - i_2) / (i_2 + 1); } return pacc_array; }); }; return SkillACPassRate; }()); } /* 特技AC通过率显示 */ function chart_show_skill_ac_pass_rate_init() { $('[data-ac-type="9"]').each(function () { var $this = $(this); var data_appeal_chance_start = parseInt($this.attr('data-start')), data_appeal_chance_end = parseInt($this.attr('data-end')), data_appeal_chance_skill_demand = parseInt($this.attr('data-ac-arg')); var appeal_chance_duration = data_appeal_chance_end - data_appeal_chance_start + 1; var p1 = 0.33, p2 = 0.53, p3 = 0.70; var v1 = SkillACPassRate.exec([[p1, appeal_chance_duration]], data_appeal_chance_skill_demand), v2 = SkillACPassRate.exec([[p2, appeal_chance_duration]], data_appeal_chance_skill_demand), v3 = SkillACPassRate.exec([[p3, appeal_chance_duration]], data_appeal_chance_skill_demand); $this.append("<div><span>".concat(p1 * 100, "%</span><span>").concat(Math.round(v1 * 100), "%</span><span>").concat(p2 * 100, "%</span><span>").concat(Math.round(v2 * 100), "%</span><span>").concat(p3 * 100, "%</span><span>").concat(Math.round(v3 * 100), "%</span></div>")); }); }