MediaWiki:LBSSearch.js: Difference between revisions
Jcblmaster (talk | contribs) No edit summary |
Jcblmaster (talk | contribs) No edit summary |
||
| Line 1: | Line 1: | ||
addOnloadHook(init) | addOnloadHook(init) | ||
allChain = Array(); | |||
function init() | function init() | ||
{ | { | ||
| Line 7: | Line 8: | ||
mainchainSearch() | mainchainSearch() | ||
} | } | ||
// get all chain | |||
var url = '/mediawiki/api.php?action=query&prop=revisions&redirects=1&titles=Persist:ListAllChains&rvprop=content&rvparse=1&format=xml'; | |||
var xmlHttpRequest = new XMLHttpRequest(); | |||
xmlHttpRequest.onreadystatechange = function() | |||
{ | |||
var READYSTATE_COMPLETED = 4; | |||
if(this.readyState == READYSTATE_COMPLETED){ | |||
var HTTP_STATUS_OK = 200; | |||
if(this.status == HTTP_STATUS_OK) { | |||
// success | |||
var xml = this.response.trim(); | |||
var parser = new DOMParser(); | |||
var dom = parser.parseFromString(xml, 'text/xml'); | |||
var rev = dom.getElementsByTagName("rev")[0]; | |||
var choices; | |||
if(rev.innerHTML != undefined) | |||
choices = rev.innerHTML.replace("<ul><li>","").replace("</li></ul>","").split("</li><li>"); | |||
else // for Edge | |||
choices = rev.textContent.replace("<ui><ll>","").replace("</li></ul>","").split("</li><li>"); | |||
for(var i = 0; i < choices.length; i ++){ | |||
var w = choices[i].trim().split("=="); | |||
allChain.push({"id":w[0], "chain":w[1], "img":w[2]}); | |||
} | |||
// ボタン有効化 | |||
var button = document.getElementById("mainchain"); | |||
button.disabled = false; | |||
var loading = document.getElementById("loading"); | |||
loading.style.display = "none"; | |||
} else { | |||
// error | |||
console.log('retrieving is failed. ' + this.status + ':' + this.statusText + "/" + this.readyState); | |||
} | |||
} | |||
} | |||
// search | |||
xmlHttpRequest.open('GET', url, true); | |||
xmlHttpRequest.responseType = 'text'; | |||
xmlHttpRequest.send(null); | |||
} | } | ||
| Line 31: | Line 74: | ||
if(i == 0 || i == ops.length-1) | if(i == 0 || i == ops.length-1) | ||
continue; | continue; | ||
if(st === " | if(st === "Others") | ||
counter ++; | counter ++; | ||
} | } | ||
if(counter >= 3) | if(counter >= 3){ | ||
alert("3つ以上のあいまい条件指定はできません。"); | alert("3つ以上のあいまい条件指定はできません。"); | ||
return; | |||
} | |||
// search | |||
var result = Array(); | |||
var regexp = new RegExp(mainchain); | |||
for(var i = 0; i < allChain.length; i ++){ | |||
if(regexp.test(allChain[i]["chain"])){ | |||
result[allChain[i]["id"]] = allChain[i]["img"].replace(/</g,"<").replace(/>/g,">") + allChain[i]["chain"]; | |||
} | |||
} | |||
// display | |||
var html = "Search Text: " + searchtext + "<br />"; | |||
html += "Search Expression: " + mainchain + "<br />"; | |||
var keys = Object.keys(result); | |||
html += keys.length + " Hit(s) / " + allChain.length + ".<hr />"; | |||
html += "<ol>"; | |||
for(var i = 0; i < keys.length; i ++){ | |||
html += "<li><a href=\"/wiki/" + keys[i] + "\" target=\"_blank\"><big><tt>" + keys[i] + "</tt></big></a>" + result[keys[i]] + "</li>"; | |||
} | |||
html += "</ol>"; | |||
var div = document.getElementById("PolySeqResult"); | |||
div.innerHTML = html; | |||
div.style.display = "block"; | |||
} | } | ||
Revision as of 11:26, 19 February 2018
addOnloadHook(init)
allChain = Array();
function init()
{
var button = document.getElementById("mainchain");
button.onclick = function(){
mainchainSearch()
}
// get all chain
var url = '/mediawiki/api.php?action=query&prop=revisions&redirects=1&titles=Persist:ListAllChains&rvprop=content&rvparse=1&format=xml';
var xmlHttpRequest = new XMLHttpRequest();
xmlHttpRequest.onreadystatechange = function()
{
var READYSTATE_COMPLETED = 4;
if(this.readyState == READYSTATE_COMPLETED){
var HTTP_STATUS_OK = 200;
if(this.status == HTTP_STATUS_OK) {
// success
var xml = this.response.trim();
var parser = new DOMParser();
var dom = parser.parseFromString(xml, 'text/xml');
var rev = dom.getElementsByTagName("rev")[0];
var choices;
if(rev.innerHTML != undefined)
choices = rev.innerHTML.replace("<ul><li>","").replace("</li></ul>","").split("</li><li>");
else // for Edge
choices = rev.textContent.replace("<ui><ll>","").replace("</li></ul>","").split("</li><li>");
for(var i = 0; i < choices.length; i ++){
var w = choices[i].trim().split("==");
allChain.push({"id":w[0], "chain":w[1], "img":w[2]});
}
// ボタン有効化
var button = document.getElementById("mainchain");
button.disabled = false;
var loading = document.getElementById("loading");
loading.style.display = "none";
} else {
// error
console.log('retrieving is failed. ' + this.status + ':' + this.statusText + "/" + this.readyState);
}
}
}
// search
xmlHttpRequest.open('GET', url, true);
xmlHttpRequest.responseType = 'text';
xmlHttpRequest.send(null);
}
function mainchainSearch()
{
var ops = [];
ops[0] = document.getElementById("nre");
ops[1] = document.getElementById("4th");
ops[2] = document.getElementById("3th");
ops[3] = document.getElementById("2nd");
ops[4] = document.getElementById("1st");
ops[5] = document.getElementById("re");
var st;
var mc;
var searchtext = "";
var mainchain = "";
var counter = 0;
for(var i = 0; i < ops.length; i ++){
st = ops[i].options[ops[i].selectedIndex].innerHTML;
mc = ops[i].options[ops[i].selectedIndex].value;
searchtext += st;
mainchain += mc;
if(i == 0 || i == ops.length-1)
continue;
if(st === "Others")
counter ++;
}
if(counter >= 3){
alert("3つ以上のあいまい条件指定はできません。");
return;
}
// search
var result = Array();
var regexp = new RegExp(mainchain);
for(var i = 0; i < allChain.length; i ++){
if(regexp.test(allChain[i]["chain"])){
result[allChain[i]["id"]] = allChain[i]["img"].replace(/</g,"<").replace(/>/g,">") + allChain[i]["chain"];
}
}
// display
var html = "Search Text: " + searchtext + "<br />";
html += "Search Expression: " + mainchain + "<br />";
var keys = Object.keys(result);
html += keys.length + " Hit(s) / " + allChain.length + ".<hr />";
html += "<ol>";
for(var i = 0; i < keys.length; i ++){
html += "<li><a href=\"/wiki/" + keys[i] + "\" target=\"_blank\"><big><tt>" + keys[i] + "</tt></big></a>" + result[keys[i]] + "</li>";
}
html += "</ol>";
var div = document.getElementById("PolySeqResult");
div.innerHTML = html;
div.style.display = "block";
}