cite属性からリンクを生成するユーザーJavaScriptはEnhance blockquote display(UserJS.org)を使っていたのですが、application/xhtml+xmlなサイトでは動かないようなのでvisibleAttribute(工房らくだ舎)を使うことにしました。
メモランダム(http://mynotes.jp/blog/)の記事を整理していたら、「アンカーを文字列にし、a要素によるハイパーリンクがあれば二重にリンクを生成しない」カスタマイズ版を見つけたのでソースを転載しておきます。
(function()
{
function makeCiteVisible(elementName) {
var elements = document.getElementsByTagName(elementName);
var anchors = document.getElementsByTagName('a');
for(var i = 0,element;element = elements[i];i++) {
var cite = element.getAttribute('cite');
var title = element.getAttribute('title');
var a = document.createElement('a');
var p = document.createElement('p');
var duplicate = false;
if(element.hasAttribute('cite')){
// cite属性と同じ参照先のアンカーがないかチェック
for(var j = 0,anchor;anchor = anchors[j];j++){
if(anchor.getAttribute('href') == cite && anchor.getAttribute('class') != 'citation') {
duplicate = true;
break;
}
}
// 見つけたらループを抜ける
if(duplicate) break;
a.setAttribute('href',cite);
a.setAttribute('class','citation');
if(elementName == 'blockquote'){
if(element.hasAttribute('title')){
a.setAttribute('title',title);
a.appendChild(document.createTextNode(title));
}else{
a.appendChild(document.createTextNode(cite));
}
p.appendChild(a);
element.appendChild(p);
}else if(elementName == 'q'){
if(element.hasAttribute('title')){
a.setAttribute('title',title);
}
a.appendChild(document.createTextNode("*"));
element.appendChild(a);
}
}
}
}
//読み込み時に実行
document.addEventListener
('load',
function()
{
makeCiteVisible("blockquote");
makeCiteVisible("q");
},false
)
})();