Skip to content

Instantly share code, notes, and snippets.

@pizzacat83
Last active August 18, 2018 13:05
Show Gist options
  • Save pizzacat83/f76b14d4d5870ac103bb0355b971c927 to your computer and use it in GitHub Desktop.
Save pizzacat83/f76b14d4d5870ac103bb0355b971c927 to your computer and use it in GitHub Desktop.
javascript:void(function(){var o='<!DOCTYPE html><html><head><meta charset="utf-8" /><title>お気に入り</title></head><body style="font-family: sans-serif;"><h1>お気に入り</h1>図書館を選択:<select id="library" style:"border: 1px #ccc; border-radius:5px;"></select><button id="apply">適用</button><table id="favorites-table"><tr><th>資料名</th><th colspan="2">状態</th></tr></table></body></html>';document.write(o);var p=[];function getConditions(a){var b=new XMLHttpRequest();b.open("GET","https://opac.dl.itc.u-tokyo.ac.jp/opac/opac_details/?bibid="+a,false);b.send();var c=(new DOMParser()).parseFromString(b.responseText,"text/html");var d=c.getElementById("cantable").getElementsByClassName("hold-area")[0].children;var e=[];for(var f of d){var g=$(f).children("span").text().replace("キャンパス","");var h=$.map($(f).find("td.hold_detail_1:contains('配架場所')").next(),(x)=>{return x.innerText.replace(/・.*/,"").trim()});var j=$.map($(f).find("[id^=blstat_detail_BL]"),(x)=>{return x.id.match(/BL[0-9]+/)[0]});var k={};for(var i=0;i<j.length;++i){b.open("GET","https://opac.dl.itc.u-tokyo.ac.jp/opac/opac_blstat/?phasecd=50&bbcd=1&blipkey="+j[i],false);b.send();var l=b.responseText.replace(/[([].*/,"");l=l?l:"在架";if(k[l])k[l].push(h[i]);else k[l]=[h[i]]}var m=[];for(var n in k){m.push({condition:n,locations:Array.from(new Set(k[n]))})}e.push({campus:g,conditions:m})}return e}function getFavorites(){var a=new XMLHttpRequest();a.open("GET","https://opac.dl.itc.u-tokyo.ac.jp/opac/myopac/bookmark/",false);a.send();var b=(new DOMParser()).parseFromString(a.responseText,"text/html");var c=[];for(s of b.getElementsByTagName("li")){var d=[].filter.call(s.getElementsByTagName("a"),(y)=>{return y.href.search("javascript")!=0})[0].href.match(/\/([0-9]+)\//)[1];var e=[].filter.call(s.getElementsByTagName("input"),(x)=>{return x.name=="label"})[0].value;c.push({"name":e,"bibid":d})}return c}function getLibraryList(){var a=new XMLHttpRequest();a.open("GET","https://opac.dl.itc.u-tokyo.ac.jp/opac/opac_search/",false);a.send();var b=(new DOMParser()).parseFromString(a.responseText,"text/html");return new Set([].map.call(b.getElementsByName("place_exp")[0],(x)=>{return x.text.replace(/・.*/,"")}))}var q=getLibraryList();for(var r of q){$("#library").append($("<option></option>").text(r).val(r))}p=[];var _=0;for(var s of getFavorites()){var t=getConditions(s.bibid);function sortFunc(x,y){if(x.condition=="在架"){return false}if(y.condition=="在架"){return true}return x.condition>y.condition}var u=new Set(t.map((z)=>{return z.conditions.filter((y)=>{return y.condition=="在架"}).map((x)=>{return x.locations}).reduce((x,y)=>{return x.concat(y)},[])}).reduce((x,y)=>{return x.concat(y)},[]));var v=t.length;var w="book-"+_;for(var i=0;i<v;++i){var A=$("<tr></tr>").addClass(w);if(i===0)A.append($("<td></td>").append($("<a></a>").attr("href","https://opac.dl.itc.u-tokyo.ac.jp/opac/opac_link/bibid/"+s.bibid+"/").text(s.name)).attr({rowspan:v}));A.append($("<th></th>").text(t[i].campus).css("white-space","nowrap"));t[i].conditions=t[i].conditions.sort(sortFunc);var B=t[i].conditions.map((x)=>{return x.condition+": "+x.locations.join(" ")}).join("<br>");A.append($("<td></td>").html(B));$("#favorites-table").append(A)}p.push({query:w,available:u});++_}function highlight(){var a=$("#library").val();localStorage["library"]=a;for(var b of p){if(b.available.has(a)){$("."+b.query).css("background-color","#bbddbb")}else{$("."+b.query).css("background-color","#fff")}}}$("body").css("font-family","sans-serif");$("table").css({"border":"1px solid #ccc","border-collapse":"collapse","font-size":"0.6em"});$("th").css("border","1px solid #ccc");$("td").css("border","1px solid #ccc");$("button").css({"border":"1px solid #ccc","border-radius":"3px","background-color":"#f8f8f8"});$("select").css({"border":"1px solid #ccc","border-radius":"3px","background-color":"#fff"});$("#apply").click(highlight);if(localStorage["library"]){$("#library").val(localStorage["library"]);highlight()}}());
javascript:!function(){var t=new XMLHttpRequest;t.open("GET","https://opac.dl.itc.u-tokyo.ac.jp/opac/myopac/bookmark/add/?bmname="+encodeURIComponent($("input[name='h_trd']").val())+"&bibid="+document.location.toString().match(/&bibid=([0-9]+)/)[1]+"&ctkey=&reqCode=insert",!1),t.send(),200==t.status&&t.responseText&&alert("登録しました。")}();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment