利用者:Wasabi215/JavaScript置き場注意
Citemark改Citemark(英語版ウィキペディア利用者のBazzargh氏作成)というツールがありますが、若干使いにくかったので改造。使用法は元のページを参照して下さい。 javascript:function%20h(t){var%20z=document.getElementsByTagName(t)[0];return%20z&&z.childNodes[0]?e(t,z.childNodes[0].nodeValue):'';}function%20e(a,b){var%20d=Date.parse(b);return%20a&&b?(' |'+a+'='+(d?f(d):b)):''}function%20z(x){return%20x<10?'0'+x:x}function%20f(x){var%20d=new%20Date(x);return%20d.getFullYear()+'-'+z(d.getMonth()+1)+'-'+z(d.getDate())}var%20s=e('url',window.location)+e('accessdate',Date())+e('title',document.title)+e('date',document.lastModified)+e('quote',window.getSelection()+'')+h('h1')+h('h2');var%20m=document.getElementsByTagName('meta');for(var%20i=0;i<m.length;i++){s+=e(m[i].getAttribute('name'),m[i].getAttribute('content'))}prompt('','{{cite%20web'+s+'}}')
ウェブアーカイブの検索リンク生成開いているページをWayback machineなどで検索するためのリンクを生成します。 javascript:function%20anc(url,value){return%20'<a%20href="'+url+'"%20target="_blank">'+value+'</a></br>';}var%20url=location.href,obj=window.open();obj.document.open();obj.document.write('<html><body>"'+url+'"へのアーカイブリンク:</br>'+anc('http://web.archive.org/web/*/'+url,'Wayback%20Machine')+anc('http://archive.is/'+location.hostname+location.pathname,'Archive.is')+anc('http://megalodon.jp/?url="'+encodeURIComponent(url),'ウェブ魚拓')+'</br>上のリンクで見つからない場合:</br>'+anc('http://www.webcitation.org/query','WebCite')+anc('http://warp.da.ndl.go.jp/','国立国会図書館インターネット資料収集保存事業')+'</body></html>');obj.document.close() ソースコードfunction a(url,value){
return '<a href="'+url+'">'+value+'</a><br>';
}
var url=location.href,obj=window.open();
obj.document.open();
obj.document.write('<html><head><title>test</title></head><body>"'
+url+'"へのアーカイブリンク:</br>'
+a('http://web.archive.org/web/*/'+url,'Wayback Machine')
+a('http://archive.is/'+location.hostname+location.pathname,'Archive.is')
+a('http://megalodon.jp/?url='+encodeURIComponent(url),'ウェブ魚拓')
+'<br>上のリンクで見つからない場合:<br>'
+a('http://www.webcitation.org/query','WebCite')
+a('http://warp.da.ndl.go.jp/','国立国会図書館インターネット資料収集保存事業')
+'</body></html>');
obj.document.close();
国立国会図書館サーチ(テスト中)国立国会図書館サーチの書誌情報をciteテンプレートに整形して出力するブックマークレットです。JSONPを用いて、かなり力技で実装されています。 国立国会図書館のデータベースとcite系テンプレートの間には出力形式の相違がありますので、ツールの出力を手作業で書き換える必要があります。 javascript:function%20replaceAll(exp,org,dest){return%20exp.split(org).join(dest);}function%20contains(array,str){for(i%20in%20array){if(array[i]==str){return%20true;}}return%20false;}function%20f(name,val){return%20'%20|'+name+'='+val;}function%20getSrcId(){var%20as=document.getElementsByTagName('a');for(i%20in%20as){if(as[i].href&&as[i].href==as[i].textContent){return%20as[i].href;}}}function%20loadJS(src){var%20srp=document.createElement('script');srp.src=src;document.body.appendChild(srp);}function%20getAuthors(obj){var%20result='';var%20a=obj.dc_creator;for(i%20in%20a){result+=f('author'+(i>0?parseInt(i)+1:''),a[i].name);}return%20result;}function%20getId(obj){var%20result='';var%20id=obj.identifier;if(id){if(id.ISSN){result+=f('issn',id.ISSN[0]);}else%20if(id.ISBN){result+=f('isbn',replaceAll(id.ISBN[0],'-',''));}else%20if(id.OCLCNO){result+=f('oclc',id.OCLCNO[0]);}else%20if(id.JPNO){result+='%20|id={{全国書誌番号|'+id.JPNO[0]+'}}';}var%20ndl=id.NDLJP;if(ndl){result+='%20|id={{NDLJP|'+ndl[0].replace('info:ndljp/pid/','')+'}}%20|url=http://dl.ndl.go.jp/'+ndl[0];}}return%20result;}function%20getDate(obj){var%20dt=obj.date;var%20is=obj.issued;var%20result;if(dt&&is){result=is[0].length>dt[0].length?is[0]:dt[0];}else{result=dt?dt[0]:is[0];}return%20f('year',result.substring(0,4))+(result.length>4?f('date',replaceAll(replaceAll(result,'.','-'),'/','-')):'');}var%20result='{{cite%20';var%20caution='';function%20getPublisher(obj){var%20p=obj.publisher;for(i%20in%20p){result+=(i>0?'、':'%20|publisher=')+p[i].name;var%20pds=obj.publisher[i].description;if(pds){caution+='出版者注記:%20'+pds+'\n';}}}function%20getDesc(obj){var%20dsc=obj.description;if(dsc){caution+='注記:%20'+dsc.join('\n注記:%20');}}function%20show(){prompt(caution,result+'}}');}var%20callback%20=%20function(obj){getDesc(obj);var%20mat=obj.materialType;if(contains(mat,'記事・論文')||contains(mat,'博士論文')){result+='journal%20|和書';result+=getAuthors(obj);result+=f('title',obj.title[0].value);result+=getDate(obj);var%20pb=obj.publicationName;if(pb){var%20vl=pb.volume;if(vl){result+=f('volume',vl);}var%20nb=pb.number;if(nb){result+=f('issue',nb);}var%20is=pb.issue;if(!vl&&!nb&&is){result+=f('issue',is);}var%20pr=pb.pageRange;if(pr){result+=f((pr.indexOf('~')>-1?'pages':'page'),replaceAll(pr,'~','-'));}var%20nsrc=getSrcId();if(nsrc){loadJS(nsrc+'.json?callback=callback2');}}return;}else%20if(contains(mat,'図書')){result+='book%20|和書';result+=f('title',obj.title[0].value);result+=getAuthors(obj);var%20vl=obj.volume;if(vl){result+=f('volume',vl);}var%20ed=obj.edition;if(ed){result+=f('edition',ed.join(',%20'));}getPublisher(obj);result+=getDate(obj);result+=getId(obj);result+='%20|page=';}else%20if(contains(mat,'雑誌')){result+='journal%20|和書%20|author=%20|title=';callback2(obj);return;}else%20if(contains(mat,'政府刊行物')){result+='journal%20|和書%20|title=';result+=getAuthors(obj);result+=getDate(obj);callback2(obj);return;}else{alert(mat.join(',%20')+'は未対応形式です');return;}show();};var%20callback2%20=%20function(obj){getDesc(obj);result+=f('journal',obj.title[0].value);getPublisher(obj);result+=getId(obj);show();};loadJS(location.href+'.json?callback=callback') 使い方
制約事項
ソースコード// 全置換
function replaceAll(exp,org,dest){
return exp.split(org).join(dest);
}
// ある要素が配列に含まれているか
function contains(array,str){
for(i in array){
if(array[i]==str){
return true;
}
}
return false;
}
// テンプレート引数の整形
function f(name,val){
return ' |'+name+'='+val;
}
// (雑誌記事ページで)掲載誌URLを検索
function getSrcId(){
var as=document.getElementsByTagName('a');
for(i in as){
if(as[i].href&&as[i].href==as[i].textContent){
return as[i].href;
}
}
}
// JSONP呼び出し
function loadJS(src){
var srp=document.createElement('script');
srp.src=src;
document.body.appendChild(srp);
}
// 著者をリスト化して出力
function getAuthors(obj,copost){
var result='';
var a=obj.dc_creator;
var al=a.length;
if(copost&&al>1){
result+=f('author',a[0].name);
var ar=new Array(al-1);
for(i=1;i<al;i++){
ar[i-1]=a[i].name;
}
result+=f('coauthors',ar.join(copost));
}else{
for(i in a){
result+=f('author'+(i>0?parseInt(i)+1:''),a[i].name);
}
}
return result;
}
// 文献IDを取得
function getId(obj){
var result='';
var id=obj.identifier;
if(id){
if(id.ISSN){
result+=f('issn',id.ISSN[0]);
}else if(id.ISBN){
result+=f('isbn',replaceAll(id.ISBN[0],'-',''));
}else if(id.OCLCNO){
result+=f('oclc',id.OCLCNO[0]);
}else if(id.JPNO){
result+=' |id={{全国書誌番号|'+id.JPNO[0]+'}}';
}
var ndl=id.NDLJP;
if(ndl){
result+=' |id={{NDLJP|'+ndl[0].replace('info:ndljp/pid/','')+'}} |url=http://dl.ndl.go.jp/'+ndl[0];
}
}
return result;
}
// 発行日を取得
function getDate(obj){
var dt=obj.date;
var is=obj.issued;
var result;
if(dt&&is){
result=is[0].length>dt[0].length?is[0]:dt[0];
}else{
result=dt?dt[0]:is[0];
}
return f('year',result.substring(0,4))+(result.length>4?f('date',replaceAll(replaceAll(result,'.','-'),'/','-')):'');
}
var result='{{cite ';
var caution='';
// 出版者を取得
function getPublisher(obj){
var p=obj.publisher;
for(i in p){
result+=(i>0?'、':' |publisher=')+p[i].name;
var pds=obj.publisher[i].description;
if(pds){
caution+='出版者注記: '+pds+'\n';
}
}
}
// 注記
function getDesc(obj){
var dsc=obj.description;
if(dsc){
caution+='注記: '+dsc.join('\n注記: ');
}
}
// 結果表示
function show(){
prompt(caution,result+'}}');
}
// JSONPコールバック
var callback = function(obj){
getDesc(obj);
var mat=obj.materialType;
if(contains(mat,'記事・論文')||contains(mat,'博士論文')){
result+='journal |和書';
result+=getAuthors(obj);
result+=f('title',obj.title[0].value);
result+=getDate(obj);
var pb=obj.publicationName;
if(pb){
var vl=pb.volume;
if(vl){
result+=f('volume',vl);
}
var nb=pb.number;
if(nb){
result+=f('issue',nb);
}
var is=pb.issue;
if(!vl&&!nb&&is){
result+=f('issue',is);
}
var pr=pb.pageRange;
if(pr){
result+=f((pr.indexOf('~')>-1?'pages':'page'),replaceAll(pr,'~','-'));
}
var nsrc=getSrcId();
if(nsrc){
loadJS(nsrc+'.json?callback=callback2');
}
}
return;
}else if(contains(mat,'図書')){
result+='book |和書';
result+=f('title',obj.title[0].value);
result+=getAuthors(obj,'・');
var vl=obj.volume;
if(vl){
result+=f('volume',vl);
}
var ed=obj.edition;
if(ed){
result+=f('edition',ed.join('、'));
}
getPublisher(obj);
result+=getDate(obj);
result+=getId(obj);
result+=' |page=';
}else if(contains(mat,'雑誌')){
result+='journal |和書 |author= |title=';
callback2(obj);
return;
}else if(contains(mat,'政府刊行物')){
result+='journal |和書 |title=';
result+=getAuthors(obj);
result+=getDate(obj);
callback2(obj);
return;
}else{
alert(mat.join(', ')+'は未対応形式です');
return;
}
show();
};
// 雑誌目録から雑誌を呼ぶ用
var callback2 = function(obj){
getDesc(obj);
result+=f('journal',obj.title[0].value);
getPublisher(obj);
result+=getId(obj);
show();
};
loadJS(location.href+'.json?callback=callback');
|