コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Kanon und wikipedia/vector.js

お知らせ: 保存した後、ブラウザのキャッシュをクリアしてページを再読み込みする必要があります。

多くの WindowsLinux のブラウザ

  • Ctrl を押しながら F5 を押す。

Mac における Safari

  • Shift を押しながら、更新ボタン をクリックする。

Mac における ChromeFirefox

  • 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);
});