利用者:Kanon und wikipedia/vector.js
表示
お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。
多くの Windows や Linux のブラウザ
- Ctrl を押しながら F5 を押す。
Mac における Safari
Mac における Chrome や Firefox
- ⌘ Cmd と ⇧ Shift を押しながら R を押す。
詳細についてはWikipedia:キャッシュを消すをご覧ください。
/*
* 要約欄のバイト数を取得し、250バイトまでの数値をラベル横に表示する。
*/
$(function() {
var BYTE_LIMIT = 250;
/*
* 文字列を UTF-8 にした場合のバイト数を取得する。
*/
function numberOfUTF8Bytes(string) {
var len = 0;
if (!string) return len;
var code, surrogate = false;
for (var i = 0; ; ++i) {
code = string.charCodeAt(i);
if (isNaN(code)) break;
if (code < 0) {
throw new Error('Illegal number: ' + code);
} else if (code <= 0x007F) {
len += 1;
} else if (code <= 0x07FF) {
len += 2;
} else if (code <= 0xD7FF) {
len += 3;
} else if (code <= 0xDBFF) {
surrogate = true;
} else if (code <= 0xDFFF) {
len += 4;
surrogate = false;
} else if (code <= 0xFFFF) {
len += 3;
} else {
throw new Error('Illegal number: ' + code);
}
}
return len;
}
/* データ更新用アダプタ */
function updateCounter(src, tar) {
if (!src || !tar) return;
var val = src.value;
if (typeof val != 'undefined' && val != null) {
var remained = BYTE_LIMIT - numberOfUTF8Bytes(val);
updateSaveButton(remained);
tar.innerHTML = remained;
}
}
/* 投稿ボタンの挙動 */
var saveButton = document.getElementById("wpSave");
function updateSaveButton(remained) {
if (saveButton == null) return;
var status = saveButton.disabled;
if (!status && remained < 0) {
saveButton.disabled = true;
} else if (status && 0 <= remained) {
saveButton.disabled = false;
}
}
/* 編集画面かどうかを要約欄の有無で判断する。 */
var summaryField = document.getElementById('wpSummary');
if (summaryField == null) return;
var summaryLabel = document.getElementById('wpSummaryLabel');
/* カウンターの用意と設置 */
var cbCounter = document.createElement('span');
cbCounter.setAttribute('id', 'field-char-byte-counter');
cbCounter.setAttribute('style',
'display: inline-block; width:2em; font-weight: bold; text-align: center;');
cbCounter.appendChild(document.createTextNode(BYTE_LIMIT));
summaryLabel.appendChild(cbCounter);
updateCounter(summaryField, cbCounter);
/* wikEd への対応 */
if (window.wikEd && window.wikEd.ResizeSummary) {
window.wikEd.ResizeSummary();
}
var counterHandler = function (e) {
updateCounter(summaryField, cbCounter);
};
addHandler(summaryField, 'keyup', counterHandler);
addHandler(summaryField, 'focus', counterHandler);
addHandler(summaryField, 'blur', counterHandler);
addHandler(summaryField, 'change', counterHandler);
});