SimpleIsm

citation.js変更

JavaScript

JavaScript Lintでエラーを潰しつつ、出力するHTMLを少し変更した。ちなみに使い方は以下の通り。

  1. ダウンロードページでファイルをダウンロード(ZIP形式)
  2. 解凍したファイル内に、チェックしたいJSファイルをぶち込む
  3. 「jsl.default.conf」をテキストエディタで開く
  4. 行末の「+process」の後ろにチェックしたいJSファイル名を記述
    +process jsl-test.js(デフォルト) → +process example.js
  5. 「jsl-sample.bat」を起動
function extractBlockquoteCitations() {
   var quotes = document.getElementsByTagName('blockquote');
   for(var i = 0; i < quotes.length; i++) {
      var title = quotes[i].getAttribute('title');
      if(title !== null && title !== '') {
         var p = document.createElement('p');
         p.className = 'title';
         quotes[i].appendChild(p);
         p.innerHTML = "引用元: "+title+"";
      }
      else {
         var p = document.createElement('p');
         p.className = 'title';
         quotes[i].appendChild(p);
         p.innerHTML = "引用元: ";
      }
      var cite = quotes[i].getAttribute('cite');
      if(cite !== '') {
         var a = document.createElement('a');
         a.setAttribute('href', cite);
         a.setAttribute('title', title);
         a.appendChild(document.createTextNode(a));
         var p = document.createElement('p');
         p.className = 'uri';
         p.appendChild(a);
         quotes[i].appendChild(p);
      }
   }
}

function addEvent(obj, evType, fn) {
   if(obj.addEventListener) {
      obj.addEventListener(evType, fn, false);
      return true;
   }
   else if(obj.attachEvent) {
      var r = obj.attachEvent("on"+evType, fn);
      return r;
   }
   else {
      return false;
   }
}

addEvent(window, 'load', extractBlockquoteCitations);

以上を以下に変更。

function extractBlockquoteCitations() {
   var quotes = document.getElementsByTagName('blockquote');
   for(var i = 0; i < quotes.length; i++) {
      var title = quotes[i].getAttribute('title');
      if(title !== null && title !== '') {
         var div = document.createElement('div');
         quotes[i].appendChild(div);
         div.innerHTML = title + "<br />";
      }
      var cite = quotes[i].getAttribute('cite');
      if(cite !== '') {
         var a = document.createElement('a');
         a.setAttribute('href', cite);
         a.appendChild(document.createTextNode(a));
         div.className = 'via';
         div.appendChild(a);
         quotes[i].appendChild(div);
      }
   }
}

function addEvent(obj, evType, fn) {
   if(obj.addEventListener) {
      obj.addEventListener(evType, fn, false);
      return true;
   }
   else if(obj.attachEvent) {
      var r = obj.attachEvent("on"+evType, fn);
      return r;
   }
   else {
      return false;
   }
}

addEvent(window, 'load', extractBlockquoteCitations);

「引用元: 」という文字列を「via: 」に変更したのと、出力をJSからではなく、CSSのbefore擬似要素を使うようにした。あと、for(var i = 0; i < quotes.length; i++)内のelse文を消去した。これだと、対応していない何かに対しては何も出力されないっていう感じであってるのかな。それなら、blockquote要素のtitle属性とかcite属性は元々表示されないから、OK。1,193バイトから948バイトになった。若干出力されるHTMLがスマートになった気がする。

2009/09/21(Mon) 01:30
<<前の記事
独自仕様のHTML要素一覧
次の記事>>
続々・XHTML 1.1のこと

Category

Archives