打开/关闭菜单
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

MediaWiki:Common.js

MediaWiki界面页面
Jzyfate​(留言 | 贡献)2026年10月19日 (一) 05:53的版本 (创建页面,内容为“→这里的任何JavaScript将为所有用户在每次页面加载时加载。:​ →===== 江中缘搜索摘要清理:开始 =====:​ →仅处理 Special:Search 的摘要展示;不修改页面原文、索引或搜索顺序。:​ (function () { 'use strict'; function cleanSource(source) { var text = source .replace(/<(script|style|template|noscript)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, ' ') .replace(/<(?:script|style|template|noscript)\b[^>]*>…”)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
  • Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
  • Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
/* 这里的任何JavaScript将为所有用户在每次页面加载时加载。 */
/* ===== 江中缘搜索摘要清理:开始 ===== */
/* 仅处理 Special:Search 的摘要展示;不修改页面原文、索引或搜索顺序。 */
(function () {
  'use strict';
  function cleanSource(source) {
    var text = source
      .replace(/<(script|style|template|noscript)\b[^>]*>[\s\S]*?<\/\1\s*>/gi, ' ')
      .replace(/<(?:script|style|template|noscript)\b[^>]*>[\s\S]*$/gi, ' ')
      .replace(/<!--[\s\S]*?(?:-->|$)/g, ' ')
      .replace(/\/\*[\s\S]*?\*\//g, ' ')
      .replace(/<[^>]*>/g, ' ')
      .replace(/<[^>]*$/g, ' ')
      .replace(/^[.\s…]*(?:[a-zA-Z][\w:-]*|[="'\s])+>/, '… ')
      .replace(/\b(?:class|id|href|style|title|data-[\w-]+)\s*=\s*(?:"[^"]*"|'[^']*'|[^\s>]+)/gi, ' ')
      .replace(/(?:^|[.…]\s*)[>]+/g, '… ')
      .replace(/\[\[(?:File|Image|文件|图像):[^\]]*\]\]/gi, ' ')
      .replace(/\[\[([^\]|]+)\|([^\]]+)\]\]/g, '$2')
      .replace(/\[\[([^\]]+)\]\]/g, '$1')
      .replace(/'{2,5}/g, '')
      .replace(/[|]/g, ' ')
      .replace(/&(?:nbsp|amp|quot|apos|lt|gt);/g, function (entity) {
        return { '&nbsp;':' ', '&amp;':'&', '&quot;':'"', '&apos;':"'", '&lt;':'<', '&gt;':'>' }[entity];
      })
      .replace(/\s+/g, ' ').replace(/(?:…\s*){2,}/g, '… ').trim();
    /* 只有可靠的正文才显示;无法还原的脚本、样式或数据片段留空。 */
    if (/[<>]|(?:jzy[-:]|data:image|https?:\/\/)|(?:\b(?:function|document|window|const|var)\b)|[{}]|=>/i.test(text)) return '';
    return text;
  }
  function highlight(node, text, terms) {
    var lower = text.toLocaleLowerCase(), start = 0;
    node.replaceChildren();
    while (start < text.length) {
      var at = -1, term = '';
      terms.forEach(function (word) {
        var found = lower.indexOf(word.toLocaleLowerCase(), start);
        if (found >= 0 && (at < 0 || found < at || (found === at && word.length > term.length))) { at = found; term = word; }
      });
      if (at < 0) { node.appendChild(document.createTextNode(text.slice(start))); break; }
      node.appendChild(document.createTextNode(text.slice(start, at)));
      var mark = document.createElement('span');
      mark.className = 'searchmatch';
      mark.textContent = text.slice(at, at + term.length);
      node.appendChild(mark);
      start = at + term.length;
    }
  }
  function cleanResults(root) {
    if (!document.body.classList.contains('mw-special-Search')) return;
    var scope = root && root.querySelectorAll ? root : document;
    scope.querySelectorAll('.mw-search-results .searchresult').forEach(function (snippet) {
      if (snippet.dataset.jzyCleaned) return;
      snippet.dataset.jzyCleaned = 'true';
      var terms = Array.from(new Set(Array.from(snippet.querySelectorAll('.searchmatch')).map(function (mark) { return mark.textContent.trim(); }).filter(function (term) { return term && term.length <= 80 && !/[<>]/.test(term); })));
      var text = cleanSource(snippet.textContent);
      highlight(snippet, text, terms);
      snippet.hidden = !text;
    });
  }
  if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', function () { cleanResults(document); });
  else cleanResults(document);
  if (window.mw && mw.hook) mw.hook('wikipage.content').add(function (content) { cleanResults(content && content[0]); });
})();
/* ===== 江中缘搜索摘要清理:结束 ===== */