利用者:MawaruNeko/CiteStatistics.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
/*
* 出典と脚注の統計を表示するカスタムJS
* Custom JS to take statistics of cites and references
*
* 説明:
* カスタムJSとして導入して下さい。
* このカスタムJSは、自動で"User:MawaruNeko/CiteEmphasizer.js"と"User:MawaruNeko/ShowInternalDeadLink.js"を導入します。
* この2つのカスタムJSを手動で導入しないで下さい。
*
* 解説: 以下のような統計がページ右上(良質な記事のマークなどが表示される場所)に表示される
* 文献: 38 (内cite tag: 38), 脚注: 17 (内 出典:1 = 5%, 外部:2 = 11%)
* 説明量: 15984文字 <- 脚注あり: 33%, 出典あり: 4%, (記事全体: 32185文字)
*
* 文献: citeタグと参考文献節内の参考文献と推定されるリストの数
* 出典をハーバード方式で書いていない場合は0になりうる
* 内cite tag: 文献数の内、citeタグの数
* 脚注: 脚注の数、これが0は流石にまずいでしょう
* 内 出典: 出典として認識された脚注の数
* 内 外部: 外部リンクを含む脚注の数(出典として認識されたものを除く)
* 説明量: 記事の内、本文の説明部分の文字数(見出しや表などを除く、箇条書きは含む)
* 脚注あり: 説明量の内、脚注付きの段落の文字数の割合
* 目安として、30%以下だと脚注不足気味
* 70%以上だとしっかり脚注付けされていることが多い
* 分野によってはこれに限らないので、数値を絶対視しないように
* 出典あり: 説明量の内、出典として認識された脚注付きの段落の文字数の割合
* 記事全体: 記事の内、本文の文字数(見出しや表、目次などを含む)
*
* このファイルはパブリックドメインとします。
* This file is public domain.
*/
(function () {
'use strict';
var CiteEmphasizerUrl = 'https://ja-two.iwiki.icu/w/index.php?action=raw&ctype=text/javascript&title=User:MawaruNeko/CiteEmphasizer.js';
var ShowInternalDeadLink = 'https://ja-two.iwiki.icu/w/index.php?action=raw&ctype=text/javascript&title=User:MawaruNeko/ShowInternalDeadLink.js';
function showCiteStatistics(){
function toPercentage(numer, denom) {
return Math.floor(100 * numer / denom);
}
var citeCount = $('cite').length;
var citeLikeListCount = $('li.cite-like-list').length;
var citeAndCiteLikeCount = citeCount + citeLikeListCount;
var citeListCount = $('li.cite-list').length;
var externalLinkListCount = $('li.external-link-list').length;
var refListCount = $('.references > li').length;
var citeParagraphSize = $('.has-cite-sups').text().length;
var refParagraphSize = $('.has-reference-sups').text().length;
var noRefParagraphSize = $('.has-no-reference-sups').text().length;
var totalParagraphSize = refParagraphSize + noRefParagraphSize;
var contentSize = $('#content #mw-content-text > .mw-parser-output').text().length;
var deadInternalLinks = $('.dead-internal-link');
var statDiv = $('<div>').addClass('cite-stat').prependTo($('.mw-indicators').eq(0));
var citeCountDiv = $('<div>');
citeCountDiv.append('文献: ');
if (citeAndCiteLikeCount === 0) {
$('<span>').addClass('cite-stat-bad').text(citeAndCiteLikeCount).appendTo(citeCountDiv);
} else {
if (citeAndCiteLikeCount === 1) {
$('<span>').addClass('cite-stat-bad').text(citeAndCiteLikeCount).appendTo(citeCountDiv);
} else {
citeCountDiv.append(citeAndCiteLikeCount);
}
citeCountDiv.append(' (内cite tag: ' + citeCount + ')');
}
citeCountDiv.append(', 脚注: ');
if (refListCount === 0) {
$('<span>').addClass('cite-stat-bad').text(citeAndCiteLikeCount).appendTo(citeCountDiv);
} else {
citeCountDiv.append(refListCount);
citeCountDiv.append(' (内 出典:' + citeListCount + ' = ' + toPercentage(citeListCount, refListCount) +
'%, 外部:' + externalLinkListCount + ' = ' + toPercentage(externalLinkListCount, refListCount) + '%)');
}
citeCountDiv.appendTo(statDiv);
var sizeDiv = $('<div>');
sizeDiv.append('説明量: ' + totalParagraphSize + '文字 <- 脚注あり: ');
var refParagraphPercentage = toPercentage(refParagraphSize, totalParagraphSize);
if (refParagraphPercentage <= 30) {
$('<span>').addClass('cite-stat-bad').text(refParagraphPercentage).appendTo(sizeDiv);
} else if (refParagraphPercentage >= 70) {
$('<span>').addClass('cite-stat-good').text(refParagraphPercentage).appendTo(sizeDiv);
} else {
sizeDiv.append(refParagraphPercentage);
}
sizeDiv.append('%, 出典あり: ');
var citeParagraphPercentage = toPercentage(citeParagraphSize, totalParagraphSize);
if (citeParagraphPercentage >= 70) {
$('<span>').addClass('cite-stat-good').text(citeParagraphPercentage).appendTo(sizeDiv);
} else {
sizeDiv.append(citeParagraphPercentage);
}
sizeDiv.append('%, (記事全体: ' + contentSize + '文字)');
sizeDiv.appendTo(statDiv);
$('.dead-internal-link-links').appendTo(statDiv);
mw.util.addCSS(
'div.cite-stat{ border: black 1px solid; font-size: x-small; vertical-align: top; display: inline-block; }\n' +
'.cite-stat-bad{ color: red; font-weight: bold; }\n' +
'.cite-stat-good{ color: green; font-weight: bold; }\n' +
'div.dead-internal-link-links{ border: 0; }\n' +
''
);
}
$.getScriptWithCache = function(url, options) {
return $.ajax($.extend(options || {}, {
dataType: 'script',
cache: true,
url: url,
}));
};
function main() {
var config = mw.config.get(['wgAction', 'wgNamespaceNumber']);
if ((config.wgAction === 'view') && (config.wgNamespaceNumber === 0)) {
mw.libs.citeEmphasizer = {
addCSS: true,
deferred: $.Deferred(),
};
mw.libs.showInternalDeadLink = {
addCSS: true,
showLinks: true,
deferred: $.Deferred(),
};
$.when($.getScriptWithCache(CiteEmphasizerUrl), $.getScriptWithCache(ShowInternalDeadLink),
mw.libs.citeEmphasizer.deferred.promise(), mw.libs.showInternalDeadLink.deferred.promise()).then(showCiteStatistics);
} else {
mw.loader.load(ShowInternalDeadLink);
}
}
$(function () {
mw.loader.using('mediawiki.util').then(function () {
main();
});
});
}) ();