注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
$(function() { /** Advanced Site Notices ******** * Allow to custom dynamic site notices * Maintainer: [[User:PhiLiP]] */ if (window.closeASNForever || $('#siteNotice').length < 0 || mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit') { return; } if (typeof(window.customASNInterval) === 'undefined') { window.customASNInterval = 15; } var langConv = require('ext.gadget.HanAssist').conv; var cname = 'dismissASN'; var cval = $.cookie(cname); if (cval == '') { cval = -1; } var rev = 0; var toid = null; var tb = $('<table id="asn-dismissable-notice" width="100%"/>'); var ct = $('<div id="advancedSiteNotices" style="word-break:break-word" class="mw-parser-output"/>'); var sd = $('<a href="#"/>').text(langConv({hans: '关闭', hant: '關閉'})); tb.append($('<tr/>').append($('<td/>').append(ct)).append($('<td/>').append('[').append(sd).append(']'))); var nts = null; var styles = []; sd.click(function() { $.cookie(cname, rev, { expires: 30, path: '/', secure: true }); clearTimeout(toid); tb.remove(); return false; }); var matchCriteria = function(nt) { var cache = nt.data('asn-cache'); if (cache !== undefined) { return cache; } var criteria = nt.attr('data-asn-criteria'); if (criteria === undefined) { criteria = nt.attr('class') ? 'false' : 'true'; if (nt.hasClass('only_sysop')) { criteria += '||in_group("sysop")'; } if (nt.hasClass('only_logged')) { criteria += '||in_group("user")'; } if (nt.hasClass('only_anon')) { criteria += '||!in_group("user")'; } if (nt.hasClass('only_zh_cn')) { criteria += '||only_for("zh-cn")'; } if (nt.hasClass('only_zh_hk')) { criteria += '||only_for("zh-hk")'; } if (nt.hasClass('only_zh_sg')) { criteria += '||only_for("zh-sg")'; } if (nt.hasClass('only_zh_tw')) { criteria += '||only_for("zh-tw")'; } } else { criteria = decodeURIComponent(criteria.replace(/\+/g, '%20')); criteria = criteria.trim(); } if (criteria === '') { criteria = 'true'; } var testCriteria = function() { var in_country = function(country) { return window.Geo === undefined || Geo.country === country; }, in_region = function(region) { return window.Geo === undefined || Geo.region === region; }, in_city = function(city) { return window.Geo === undefined || Geo.city === city; }, in_group = function(group) { return $.inArray(group, mw.config.get('wgUserGroups')) > -1; }, only_for = function(userlang) { return userlang === mw.config.get('wgUserLanguage'); }; // FIXME: This shouldn't be using eval on data entered in wikitext. If that data is malformed it will throw an exception e.g. criteria = "(false))" try { return eval(criteria); } catch (e) { return false; } }; cache = testCriteria(); nt.data('asn-cache', cache); return cache; }; var loadNotices = function(pos) { if (!tb.length) { return; } ct.css('min-height', ct.height() + 'px'); tb.css('min-height', tb.height() + 'px'); var l = nts.length; var nt = null; var rt = 0; while (rt++ < l) { nt = $(nts[pos]); if (matchCriteria(nt)) { break; } pos = (pos + 1) % l; } if (rt >= l) { return; } if (typeof nt.data('asn-style') == 'string') { var style = mw.util.addCSS(decodeURIComponent(nt.data('asn-style').replace(/\+/g, '%20'))); nt.data('asn-style', null); nt.data('asn-style-id', styles.length); style.disabled = true; styles.push(style); } if (typeof nt.data('asn-html') == 'string') { nt.data('asn-html-raw', decodeURIComponent(nt.data('asn-html').replace(/\+/g, '%20'))); nt.data('asn-html', null); } var styleId = nt.data('asn-style-id'); nt = nt.data('asn-html-raw') || nt.html(); var cthtml = ct.html(); if (cthtml) { if (cthtml !== nt) { ct.stop().fadeOut(function() { $.each(styles, function() { this.disabled = true; }); if (styles[styleId]) { styles[styleId].disabled = false; } ct.html(nt); // animation try /catched to avoid TypeError: (Animation.tweeners[prop]||[]).concat is not a function error being seen in production try { ct.fadeIn(); } catch (e) {} }); } } else if (rev == cval) { return; } else { $.cookie(cname, null); tb.appendTo($('#siteNotice')); if (styles[styleId]) { styles[styleId].disabled = false; } ct.html(nt).fadeIn(); } toid = setTimeout(function() { loadNotices((pos + 1) % l); }, window.customASNInterval * 1000); }; new mw.Api({ ajax: { headers: { 'Api-User-Agent': 'w:zh:MediaWiki:Gadget-AdvancedSiteNotices.js' } } }).get({ page: 'Template:AdvancedSiteNotices/ajax', variant: mw.config.get('wgUserVariant'), prop: 'text', action: 'parse', format: 'json', maxage: 3600, smaxage: 3600 }).then(function(json) { if (!json || !json.parse || !json.parse.text || !json.parse.text['*']) return; json = $('<div/>').html(json.parse.text['*']).find('ul.sitents'); nts = $('li', json); rev = json.data('asn-version'); var l = nts.length; loadNotices(Math.floor(Math.random() * l)); }).catch(function(e) { console.error('[AdvancedSiteNotices]: ', JSON.stringify(e)); }); });