MediaWiki:Gadget-JargonHints.js
ナビゲーションに移動
検索に移動
注意: 保存後、変更を確認するにはブラウザーのキャッシュを消去する必要がある場合があります。
- Firefox / Safari: Shift を押しながら 再読み込み をクリックするか、Ctrl-F5 または Ctrl-R を押してください (Mac では ⌘-R)
- Google Chrome: Ctrl-Shift-R を押してください (Mac では ⌘-Shift-R)
- Internet Explorer: Ctrl を押しながら 最新の情報に更新 をクリックするか、Ctrl-F5 を押してください
- Opera: メニュー → 設定 (Mac では Opera → 環境設定) に移動し、プライバシーとセキュリティ → 閲覧データを消去 → キャッシュされた画像およびファイル からキャッシュをクリアしてください。
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(/'"`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); } } } } }); });