「MediaWiki:Gadget-JargonHints.js」の版間の差分

提供: 聖城wiki2.0
ナビゲーションに移動 検索に移動
(ページの作成:「mw.loader.using('mediawiki.api').then(function () { var api = new mw.Api(); api.get({ action: 'cargoquery', limit: 'max', tables: 'Jargons', fields: '…」)
 
1行目: 1行目:
 
mw.loader.using('mediawiki.api').then(function () {
 
mw.loader.using('mediawiki.api').then(function () {
 +
  console.log('hint-gadget');
 
   var api = new mw.Api();
 
   var api = new mw.Api();
 
   api.get({
 
   api.get({

2021年7月6日 (火) 22:09時点における版

mw.loader.using('mediawiki.api').then(function () {
  console.log('hint-gadget');
  var api = new mw.Api();
  api.get({
    action: 'cargoquery',
    limit: 'max',
    tables: 'Jargons',
    fields: 'Word,Description,Link',
    where: "_pageName='用語集'"
  }).done(function (data) {
    var resultArr = data.cargoquery;
    var dataArr = [];
    for (var i=0;i<resultArr.length;i++) {
      dataArr.push(resultArr[i].title);
    }
    dataArr.sort(function(a,b){
        if(a.Word.replace(/\[\[(.+)\]\]/, '$1').length > b.Word.replace(/\[\[(.+)\]\]/, '$1').length) return -1;
        if(a.Word.replace(/\[\[(.+)\]\]/, '$1').length < b.Word.replace(/\[\[(.+)\]\]/, '$1').length) return 1;
        return 0;
    });
    
    var srcTextNodes = $('#mw-content-text').find("*").andSelf().contents().filter(function(){ return this.nodeType == Node.TEXT_NODE; });


    for (var i=0;i<dataArr.length;i++) {
        var word = dataArr[i].Word.replace(/\[\[(.+)\]\]/, '$1');
        var desc = dataArr[i].Description.replace(/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F-\x9F]/g,'').replace(/'&quot;`UNIQ--ref-.+?-QINU`&quot;'/g, '*');
        var link = dataArr[i].Link;

        var reg = new RegExp('([^a-zA-Z0-9]?)('+word+')([^a-zA-Z0-9]?)', 'gi');
        for (var j=0;j<srcTextNodes.length;j++) {
           var src = srcTextNodes[j].nodeValue;
           if (src == $(srcTextNodes[j]).parent().text()) {
             var n_src = src.replace(reg, '$1<span class="jargon-hint" jargon-link="' + link + '"  jargon-data="' + $('<div>' + desc + '</div>').text().replace(/"/g, '&quot;') + '" ontouchstart="" >$2</span>$3');
             if (src != n_src
                 && $(srcTextNodes[j]).closest('a').length == 0
                 && $(srcTextNodes[j]).closest('input').length == 0
                 && $(srcTextNodes[j]).closest('textarea').length == 0
                ) {
               $(srcTextNodes[j]).parent().html(n_src);
             }
           }
        }
        
    }
  });
});