「MediaWiki:Gadget-JargonHints.js」の版間の差分
ナビゲーションに移動
検索に移動
| 1行目: | 1行目: | ||
mw.loader.using('mediawiki.api').then(function () { | mw.loader.using('mediawiki.api').then(function () { | ||
| − | |||
var api = new mw.Api(); | var api = new mw.Api(); | ||
api.get({ | api.get({ | ||
| 19行目: | 18行目: | ||
return 0; | return 0; | ||
}); | }); | ||
| + | console.log(dataArr); | ||
var srcTextNodes = $('#mw-content-text').find("*").andSelf().contents().filter(function(){ return this.nodeType == Node.TEXT_NODE; }); | var srcTextNodes = $('#mw-content-text').find("*").andSelf().contents().filter(function(){ return this.nodeType == Node.TEXT_NODE; }); | ||
2021年7月6日 (火) 22:10時点における最新版
mw.loader.using('mediawiki.api').then(function () {
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;
});
console.log(dataArr);
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(/'"`UNIQ--ref-.+?-QINU`"'/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, '"') + '" 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);
}
}
}
}
});
});