差分発生行の前後
無視リスト:
更新日時:
2015/02/13 15:36:57 (10 年 前)
更新者:
lenz
ログメッセージ:

コードの簡略化(途中まで)

本番環境への配置テストのためにコミット

ファイル:
1 変更

凡例:

変更なし
追加
削除
  • SPARQLBuilderWWW/web/newsparqlbuilder.js

    r237 r238  
    55var NODEHEIGHT = 0; 
    66var DRAWHEIGHT = 0; 
    7 var MOUSEMOVED = 0; 
    87 
    98var endpoint = ""; 
     
    3837        var sbdiv = $('div#SPARQLBUILDER'); 
    3938        if(sbdiv.find('div').length == 0){ 
    40                 var sbtop = '<div class="SBTopItems"><input type="button" class="SBTopButton" value="Open SPARQLBuilder" onclick="openSPARQLBuilder()"><input type="button" class="SBTopButton" value="Try with Sample" onclick="openSample(\'http://www.ebi.ac.uk/rdf/services/reactome/sparql\', \'http://www.biopax.org/release/biopax-level3.owl#Protein\', \'http://www.biopax.org/release/biopax-level3.owl#Pathway\')"><br /><textarea class="SBSparqlArea" rows="10"></textarea><br /><input type="button" class="SBTopButton" value="Send SPARQL" onclick="sendSPARQL()"><input type="button" class="SBTopButton" value="Download Result" onclick="downloadResult()"></div>'; 
    41                 var sbmodal = '<div class="SBModalView"><div class="SBModalContents"><div class="SBSelects"><select class="SBEndPointSelect"></select><select class="SBStartClassSelect"></select><select class="SBEndClassSelect"></select><input type="button" class="SBSaveESE" value="PermaLink" onClick="openPermalink()"></div><div class="SBMessage"><div class="SBResult"><span class="SBPathnum"></span> Path<span class="SBPlural"></span> found.</div><input type="button" class="SBViewAll" value="View All" onClick="viewAll()"></div><div class="SBGraph"><div class="SBAjaxLoad"><div class="SBLoadIcon"><img src="images/ajax-loader.gif"></div></div></div><div class="SBSelectedPath"></div><div class="SBModalButtons"><input type="button" class="SBModalButton" value="Close" onclick="closeSPARQLBuilder()"></div></div>'; 
     39                var sbtop = '<div class="SBTopItems"><input type="button" class="SBTopButton" value="Open SPARQLBuilder" onclick="openSPARQLBuilder()"><input type="button" class="SBTopButton" value="Try with Sample" onclick="openSample(\'http://www.ebi.ac.uk/rdf/services/reactome/sparql\', \'http://www.biopax.org/release/biopax-level3.owl#Protein\', \'http://www.biopax.org/release/biopax-level3.owl#Pathway\')"><br><textarea class="SBSparqlArea" rows="10"></textarea><br><input type="button" class="SBTopButton" value="Send SPARQL" onclick="sendSPARQL()"><input type="button" class="SBTopButton" value="Download Result" onclick="downloadResult()"></div>'; 
     40                var sbmodal = '<div class="SBModalView"><div class="SBModalContents"><div class="SBForms"><div class="SBSelects"><select class="SBEndPointSelect"></select><select class="SBStartClassSelect"></select><select class="SBEndClassSelect"></select></div><div class="SBPermaLink"><input type="button" class="SBPermaLinkButton" value="Permalink" onclick="openPermalink()" disabled="disabled"></div></div><div class="SBMessage"><div class="SBResult"><span class="SBPathnum"></span> Path<span class="SBPlural"></span> found.</div><input type="button" class="SBViewAll" value="View All Path" onclick="viewAll()"></div><div class="SBGraph"><div class="SBAjaxLoad" style="display: none;"><div class="SBLoadIcon"><img src="images/ajax-loader.gif"></div></div></div><div class="SBPath"><div class="SBSelectedPath"></div></div><div class="SBModalButtons"><input type="button" class="SBModalButton" value="Close" onclick="closeSPARQLBuilder()"></div></div></div>'; 
    4241 
    4342                sbdiv.html(sbtop); 
     
    385384}; 
    386385 
     386 
     387// 繧ー繝ゥ繝墓緒逕サ驛ィ蛻� 
    387388view_map = function(){ 
    388389 
    389     // make_data繝。繧ス繝�ラ縺ョ邨先棡繧貞叙蠕� 
    390     var json = make_data(0); 
    391  
    392     if(json['nodes'].length != 0){ 
    393  
    394         // 蜃コ譚・荳翫′縺」縺溽オ先棡繧呈ク。縺励※繝槭ャ繝嶺ク翫�繝ュ繧ア繝シ繧キ繝ァ繝ウ繧偵そ繝�ヨ 
    395         set_map_location(0, json['nodes'], json['links']); 
    396  
    397         // SVG縺ョ蟷�→鬮倥&繧定ィュ螳夲シ亥ケ�シ夂判髱「縺�▲縺ア縺�€€鬮倥&�壹ヱ繧ケ縺ョ謨ー縺ォ蠢懊§險ュ螳夲シ� 
    398         var width = $('.SBGraph').width(); 
    399         var height = $('.SBGraph').height(); 
    400         var graphheight = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2); 
    401  
    402         var scoreleftmargin = NODEHEIGHT * 1.5; 
    403  
    404         // SVG縺ョ蜑企勁 
    405         d3.select(".SBGraph svg").remove(); 
    406         // 逕サ髱「繧オ繧、繧コ縺ォ蜷医o縺婀VG縺ョ霑ス蜉 
    407         var svg = d3.select(".SBGraph").append("svg") 
    408             .attr("width", width) 
    409             .attr("height", height) 
    410             .attr("viewBox", "0 0 " + width + " " + height) 
    411             .on("mousewheel", function(){ 
    412                 var vb = svg.attr("viewBox"); 
    413                 var spvb = vb.split(" "); 
    414  
    415                 var vby = (parseInt(spvb[1]) - event.wheelDelta); 
    416  
    417                 if(vby < 0){ 
    418                         vby = 0; 
    419                 }else if(vby > (graphheight - height)){ 
    420                         vby = (graphheight - height); 
    421                         if(vby < 0){ 
    422                                 vby = 0; 
    423                         } 
    424                 }else{ 
    425                         event.preventDefault(); 
    426                 } 
    427  
    428                 svg.attr("viewBox", "0 " + vby + " " + width + " " + height); 
    429             }); 
    430  
    431         // 閭梧勹縺ョ霑ス蜉 
    432         var bg = svg 
    433             .append("rect") 
    434             .attr("x", 0) 
    435             .attr("y", 0) 
    436             .attr("width", width) 
    437             .attr("height", function(){ 
    438                 if(graphheight < height){ 
    439                         return height; 
    440                 }else{ 
    441                         return graphheight; 
    442                 } 
    443             }) 
    444             .attr("fill", "#fafafa"); 
    445  
    446         // links驟榊�繧呈ク。縺励Μ繝ウ繧ッ縺ョ菴懈� 
    447         var link = svg.selectAll(".link") 
    448             .data(json.links) 
    449             .enter().append("line") 
    450             .attr("class", "link") 
    451             .style("stroke", "#999") 
    452             .style("stroke-opacity", 0.6) 
    453             .style("stroke-width", function(d) { return Math.sqrt(d.value);}); 
    454  
    455         // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨�菴懈� 
    456         var node = svg.selectAll(".node") 
    457             .data(json.nodes) 
    458             .enter().append("circle") 
    459             .attr("class", "node") 
    460             .attr("r", (NODEHEIGHT / 2)) 
    461             .attr("cx", function(d) { return d.x;} ) 
    462             .attr("cy",  function(d) { return d.y; }) 
    463             .style("stroke", function(d) { return '#fafafa'; }) 
    464             .style("stroke-width", function(d) { return '1.5px'; }) 
    465             .style("fill", function(d) { return d.nodecolor; }) 
    466             .style("cursor", function(d) { return 'pointer'; }); 
    467  
    468         // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈� 
    469         var tnode = svg.selectAll("text.node") 
    470             .data(json.nodes) 
    471             .enter().append("svg:text") 
    472             .attr("class", "tnode") 
    473             .attr("x", function(d) { return d.x; }) 
    474             .attr("y", function(d) { return d.y; }) 
    475             .text(function(d) { return d.name; }) 
    476             .style("fill", function(d) { return '#000000'; }) 
    477             .style("text-anchor", function(d) { return 'middle'; }) 
    478             .style("pointer-events", "none"); 
    479  
    480         // 繝ェ繝ウ繧ッ繝�く繧ケ繝医�菴懈� 
    481         var tlink = svg.selectAll("text.link") 
    482             .data(json.links) 
    483             .enter().append("svg:text") 
    484             .attr("class", "tlink") 
    485             .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; }) 
    486             .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; }) 
    487             .style("fill", function(d) { return '#000000'; }) 
    488             .style("text-anchor", function(d) { return 'middle'; }); 
    489  
    490         // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈� 
    491         var tscore = svg.selectAll("text.score") 
    492             .data(json.nodes) 
    493             .enter().append("svg:text") 
    494             .attr("class", "tscore") 
    495             .attr("x", function(d) { return (d.x + scoreleftmargin); }) 
    496             .attr("y", function(d) { return d.y; }) 
    497             .text(function(d) { return d.score; 
    498             }) 
    499             .style("fill", function(d) { return '#FF0000'; }) 
    500             .style("text-anchor", function(d) { return 'middle'; }) 
    501             .style("pointer-events", "none"); 
    502  
    503         // 繝槭え繧ケ縺ョ蜍輔″繧ォ繧ヲ繝ウ繝医r繝ォ繝シ繝医↓謖√◆縺帙k 
    504         MOUSEMOVED = 0; 
    505  
    506         // 繝弱�繝峨∈縺ョ繧ェ繝ウ繝槭え繧ケ縺ァ繝代せ謗「邏「縲√ヱ繧ケ荳ュ縺ョ繝ェ繝ウ繧ッ譁�ュ励r陦ィ遉コ 
    507         node.on("mouseover", function(d){ 
    508  
    509             // 繝槭え繧ケ縺ョ蜍輔″繧ォ繧ヲ繝ウ繝医r繝ェ繧サ繝�ヨ 
    510             node.data()[0].mousemoved = 0; 
    511  
    512             // 陦ィ遉コ縺吶k繝代せ菫晏ュ倡畑驟榊� 
    513             var path = []; 
    514             // 繝��繝ォ繝√ャ繝励∈縺ョ蜷榊燕陦ィ遉コ逕ィ驟榊� 
    515             var pathname = []; 
    516  
    517             // 繝ォ繝シ繝医ヮ繝シ繝我サ・螟悶↑繧� 
    518             if(d.nodeid != 0){ 
    519                 // 縺セ縺壹が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�id縺ィ蜷榊燕繧偵◎繧後◇繧瑚ソス蜉 
    520                 path.push(d.nodeid); 
    521                 pathname.push(d.name); 
    522  
    523                 // 繝代せ謗「邏「 
    524                 do{ 
    525                     // 繝ェ繝ウ繧ッ縺ョ謨ー縺縺醍ケー繧願ソ斐@ 
    526                     for(var i = 0; i < link.data().length; i++){ 
    527                         // 迴セ蝨ィ縺ョ譛€蠕悟ーセ縺ォ郢九′繧九Μ繝ウ繧ッ縺後≠繧後� 
    528                         if(path[(path.length-1)] == link.data()[i].target){ 
    529                             // 縺昴�繝ェ繝ウ繧ッ縺ョ繧ス繝シ繧ケ蛛エ繝弱�繝峨�id繧定ソス蜉 
    530                             path.push(link.data()[i].source); 
    531                             // 縺昴�繝ェ繝ウ繧ッ縺ョ蜷榊燕縺ィ繧ス繝シ繧ケ蛛エ繝弱�繝峨�蜷榊燕繧定ソス蜉 
    532                             pathname.push(link.data()[i].property); 
    533                             pathname.push(node.data()[link.data()[i].source].name); 
    534                         } 
    535                     } 
    536                 // 繝ォ繝シ繝医ヮ繝シ繝峨↓霎ソ繧顔捩縺上∪縺ァ郢ー繧願ソ斐☆ 
    537                 }while(path[(path.length-1)] != 0); 
    538  
    539                 // 譛ォ遶ッ繝弱�繝峨〒縺ェ縺�↑繧� 
    540                 if(d.path == "notend"){ 
    541                     // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ縺ォ 
    542                     $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and <span style=\"color: hsl(200, 50%, 75%);\">push button</span> to generate a SPARQL</h1>'); 
    543                 }else{ 
    544                     // 譛ォ遶ッ繝弱�繝峨↑繧峨ヤ繝シ繝ォ繝√ャ繝励�諠�ア繧呈峩譁ー 
    545                     var resultText = '<div class="SBGenButton" onclick="generateSPARQL()">Generate<br />SPARQL</div>'; 
    546                     // 繝代せ縺ョ蜷榊燕驟榊�蛻�セ後m縺九i郢ー繧願ソ斐@縺ェ縺後i 
    547                     for (var i = pathname.length;i > 0; i--){ 
    548                         // 螂�焚逡ェ逶ョ�医ヮ繝シ繝峨�蜷榊燕�峨�螟ェ蟄励↓ 
    549                         if(i % 2 == 1){ 
    550                                 if(i == 1){ 
    551                                 resultText = resultText + "<div class=\"SBLeafNode\">" + pathname[i - 1] + "</div>"; 
    552                                 }else if(i == pathname.length){ 
    553                                 resultText = resultText + "<div class=\"SBRootNode\">" + pathname[i - 1] + "</div>"; 
    554                                 }else{ 
    555                                 resultText = resultText + "<div class=\"SBPathNode\">" + pathname[i - 1] + "</div>"; 
    556                                 } 
    557                         // 蛛カ謨ー逡ェ逶ョ�医Μ繝ウ繧ッ縺ョ蜷榊燕�峨�縺昴�縺セ縺セ縺ァ陦ィ遉コ 
    558                         }else{ 
    559                             resultText = resultText + "<img src=\"images/pathline.png\"><div class=\"SBPathProperty\">" + pathname[i - 1] + "</div><img src=\"images/pathline.png\">"; 
    560                         } 
    561                     } 
    562  
    563                     // 繝��繝ォ繝√ャ繝励�蜀�ョケ繧呈嶌縺肴鋤縺� 
    564                     $('.SBSelectedPath').html(resultText); 
    565  
    566                     // 繧オ繝シ繝悶Ξ繝�ヨ縺ォ騾√j霑斐☆繝代せ繧ェ繝悶ず繧ァ繧ッ繝医r菫晏ュ� 
    567                     pathobj = d.path; 
    568                 } 
    569  
    570                 $('.SBPath').css('overflow-y', 'visible'); 
    571  
    572                 if($('.SBPath').height() < $('.SBSelectedPath').innerHeight()){ 
    573                     $('.SBPath').css('overflow-y', 'scroll'); 
    574                 } 
    575             } 
    576  
    577             // 繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�鬮倥&縺ォ隕ェ繧貞粋繧上○繧九◆繧√↓蜷医o縺帙k鬮倥&繧剃ソ晏ュ� 
    578             var movey = d.y; 
    579  
    580             // 蜷�ヮ繝シ繝峨↓蟇セ縺� 
    581             node 
    582                 // 霈ェ驛ュ邱壹�濶イ繧定ィュ螳� 
    583                 .style("stroke", function(d){ 
    584                     // 縺セ縺壹�閭梧勹濶イ�医ョ繝輔か繝ォ繝茨シ峨r謖�ョ� 
    585                     var strokecolor = "#fafafa"; 
    586  
    587                     // 繝代せ蛻、螳壹�蜑榊�逅� 
    588                     // 陦ィ遉コ繝輔Λ繧ー縺系ow�亥燕蝗槭が繝ウ繝槭え繧ケ縺ァ蜍輔>縺ヲ縺�◆繝弱�繝会シ峨↑繧� 
    589                     if(d.view == "now"){ 
    590                         // 繝弱�繝峨�陦ィ遉コ繝輔Λ繧ー繧地o縺ォ 
    591                         d.view = "no"; 
    592                     } 
    593                     // 陦ィ遉コ繝輔Λ繧ー縺稽oved�医け繝ェ繝�け縺輔l蝗コ螳壽ク医∩縺縺悟燕蝗槫虚縺�※縺�◆繝弱�繝会シ峨↑繧� 
    594                     if(d.view == "moved"){ 
    595                         // 陦ィ遉コ繝輔Λ繧ー繧団licked縺ォ謌サ縺� 
    596                         d.view = "clicked"; 
    597                     } 
    598  
    599                     // 陦ィ遉コ繝輔Λ繧ー縺系o縺ョ繧ゅ�縺九i遒コ隱� 
    600                     if(d.view == "no"){ 
    601                         // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i 
    602                         for(var n = 0; n < path.length; n++){ 
    603                             // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i 
    604                             if(path[n] == d.nodeid){ 
    605                                 // 霈ェ驛ュ邱壹r襍、縺ォ 
    606                                 strokecolor = "#ffaaaa"; 
    607                                 // 陦ィ遉コ繝輔Λ繧ー繧地ow�井サ雁屓蜍輔>縺溘ヮ繝シ繝会シ峨↓ 
    608                                 d.view = "now"; 
    609                             } 
    610                         } 
    611                     // 蝗コ螳壽ク医∩繝弱�繝峨□縺」縺溘i 
    612                     }else if(d.view == "clicked"){ 
    613                         // 縺セ縺壹�霈ェ驛ュ邱壹r襍、縺ォ 
    614                         strokecolor = "#ffaaaa"; 
    615                         // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨°繝√ぉ繝�け 
    616                         for(var n = 0; n < path.length; n++){ 
    617                             if(path[n] == d.nodeid){ 
    618                                 // 蜷ォ縺セ繧後※縺�◆縺ェ繧我サ雁屓蜍輔°縺吶◆繧√ヵ繝ゥ繧ー繧知oved縺ォ 
    619                                 d.view = "moved"; 
    620                             } 
    621                         } 
    622                     } 
    623  
    624                     // 縺薙%縺セ縺ァ縺ァ蠕励i繧後◆霈ェ驛ュ邱壹�濶イ繧定ソ斐☆ 
    625                     return strokecolor; 
    626                 }) 
    627                 // 鬮倥&縺ョ蛟、 
    628                 .attr("cy", function(d){ 
    629                     // 繝弱�繝峨′莉雁屓繧ェ繝ウ繝槭え繧ケ縺輔l縺溘�縺セ縺溘�蝗コ螳壽ク医∩縺縺檎ァサ蜍輔ヵ繝ゥ繧ー繧偵▽縺代i繧後※縺�l縺ー 
    630                     if(d.view == "now" || d.view == "moved"){ 
    631                         // 迴セ蝨ィ縺ョ鬮倥&繧貞叙蠕� 
    632                         var curty = d.y; 
    633                         // d.y縺ォ蟄舌ヮ繝シ繝峨�鬮倥&繧偵そ繝�ヨ 
    634                         d.y = movey; 
    635                         // 迴セ蝨ィ縺ョ鬮倥&繧定ソ斐☆�医%縺ョ譎らせ縺ァ縺ッ迴セ蝨ィ菴咲スョ縺ォ謠冗判縺輔l縲〉edraw髢「謨ー縺ァd.y縺ォ繧「繝九Γ繝シ繧キ繝ァ繝ウ縺輔l繧具シ� 
    636                         return curty; 
    637                     // 遘サ蜍募ッセ雎。縺ァ縺ェ縺�↑繧� 
    638                     }else{ 
    639                         // 迴セ蝨ィ菴咲スョ繧偵◎縺ョ縺セ縺セ霑斐☆ 
    640                         return d.y; 
    641                     } 
    642                 }); 
    643  
    644             // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓蟇セ縺� 
    645             tlink 
    646                 // 繝�く繧ケ繝郁。ィ遉コ蛻、螳� 
    647                 .text(function(d) { 
    648                     // 繝�ヵ繧ゥ繝ォ繝医〒遨コ繧偵そ繝�ヨ 
    649                     var linktext = ""; 
    650                     // 陦ィ遉コ繝輔Λ繧ー縺系ow�亥燕蝗櫁。ィ遉コ縺輔l縺ヲ縺�◆繝ェ繝ウ繧ッ�峨↑繧� 
    651                     if(d.view == "now"){ 
    652                         // 陦ィ遉コ繝輔Λ繧ー繧定ァ」髯、 
    653                         d.view = "no"; 
    654                     } 
    655  
    656                     // 陦ィ遉コ繝輔Λ繧ー縺系o縺ェ繧� 
    657                     if(d.view == "no"){ 
    658                         // 繝代せ縺ョ繝弱�繝画焚蛻�ケー繧願ソ斐@ 
    659                         for(var t = 0; t < path.length; t++){ 
    660                             // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ�医°縺、縺昴�繝弱�繝峨′謚倥j縺溘◆縺セ繧後※縺�↑縺代l縺ー�� 
    661                             if(path[t] == d.target && node.data()[d.target].view != "hide"){ 
    662                                 // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ 
    663                                 linktext = d.property 
    664                                 // 陦ィ遉コ繝輔Λ繧ー縺ォnow繧偵そ繝�ヨ 
    665                                 d.view = "now"; 
    666                             } 
    667                         } 
    668                     // 陦ィ遉コ繝輔Λ繧ー縺掲ix�医け繝ェ繝�け縺輔l縺溘ヱ繧ケ縺ョ繝ェ繝ウ繧ッ�峨↑繧峨��医°縺、郢九′繧句�縺ョ繝弱�繝峨′謚倥j縺溘◆縺セ繧後※縺�↑縺代l縺ー�� 
    669                     }else if(d.view == "fix" && node.data()[d.target].view != "hide"){ 
    670                         // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ 
    671                         linktext = d.property 
    672                     } 
    673                     // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆繝ェ繝ウ繧ッ繝�く繧ケ繝医r霑斐☆ 
    674                     return linktext; 
    675                 }); 
     390        // make_data繝。繧ス繝�ラ縺ョ邨先棡繧貞叙蠕� 
     391        var json = make_data(0); 
     392 
     393        // 繝代せ謨ー縺�縺ァ縺ェ縺代l縺ー 
     394        if(json['nodes'].length != 0){ 
     395 
     396                // 蜃コ譚・荳翫′縺」縺溽オ先棡繧呈ク。縺励※繝槭ャ繝嶺ク翫�蠎ァ讓吶r繧サ繝�ヨ 
     397                set_map_location(0, json['nodes'], json['links']); 
     398 
     399                // SVG縺ョ蟷�→鬮倥&逕ィ縺ォ謠冗判鬆伜沺縺ョ繧オ繧、繧コ繧貞叙蠕� 
     400                var width = $('.SBGraph').width(); 
     401                var height = $('.SBGraph').height(); 
     402                // SVG蜀��繧ー繝ゥ繝暮Κ蛻�ォ倥&�医ヱ繧ケ謨ー縺ォ蠢懊§繧具シ峨r繧サ繝�ヨ 
     403                var graphheight = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2); 
     404 
     405                // 繧ケ繧ウ繧「陦ィ遉コ縺ョ繝槭�繧ク繝ウ 
     406                var scoreleftmargin = NODEHEIGHT * 1.5; 
     407 
     408                // SVG縺ョ蜑企勁 
     409                d3.select(".SBGraph svg").remove(); 
     410                // 逕サ髱「繧オ繧、繧コ縺ォ蜷医o縺婀VG縺ョ霑ス蜉 
     411                var svg = d3.select(".SBGraph").append("svg") 
     412                        .attr("width", width) 
     413                        .attr("height", height) 
     414                        // 繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョ繧サ繝�ヨ 
     415                        .attr("viewBox", "0 0 " + width + " " + height) 
     416                        // 繧ケ繧ッ繝ュ繝シ繝ォ縺輔l縺溘i 
     417                        .on("mousewheel", function(){ 
     418                                // 迴セ蝨ィ縺ョ繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョ迥カ諷九r蜿門セ� 
     419                                var vb = svg.attr("viewBox"); 
     420                                // 繧ケ繝壹�繧ケ縺ァ蛹コ蛻�j蜷�€、縺ォ蛻�ァ」 
     421                                var spvb = vb.split(" "); 
     422 
     423                                // 繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョy縺ョ蛟、縺九i莉雁屓縺ョ繝帙う繝シ繝ォ繧、繝吶Φ繝医�蟾ョ蛻�r蠑輔¥ 
     424                                var vby = (parseInt(spvb[1]) - event.wheelDelta); 
     425 
     426                                // 0繧貞牡縺」縺ヲ縺�◆繧�縺ォ 
     427                                if(vby < 0){ 
     428                                        vby = 0; 
     429                                // 繧ケ繧ッ繝ュ繝シ繝ォ荳企剞�医げ繝ゥ繝輔し繧、繧コ蠑輔¥陦ィ遉コ鬆伜沺繧オ繧、繧コ�峨r雜�∴縺ヲ縺�◆繧芽」懈ュ」 
     430                                }else if(vby > (graphheight - height)){ 
     431                                        vby = (graphheight - height); 
     432                                        // 陬懈ュ」縺励◆邨先棡0繧貞牡縺」縺ヲ縺�◆繧�縺ォ 
     433                                        if(vby < 0){ 
     434                                                vby = 0; 
     435                                        } 
     436                                } 
     437 
     438                                // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆y繧偵そ繝�ヨ縺励ン繝・繝シ繝懊ャ繧ッ繧ケ繧呈峩譁ー 
     439                                svg.attr("viewBox", "0 " + vby + " " + width + " " + height); 
     440                    }); 
     441 
     442                // 閭梧勹縺ョ霑ス蜉�磯ォ倥&莉・螟悶�謠冗判鬆伜沺縺昴�縺セ縺セ�� 
     443                var bg = svg 
     444                        .append("rect") 
     445                        .attr("x", 0) 
     446                        .attr("y", 0) 
     447                        .attr("width", width) 
     448                        .attr("height", function(){ 
     449                                // 繧ー繝ゥ繝暮Κ蛻��鬮倥&縺梧緒逕サ鬆伜沺縺ョ鬮倥&繧貞牡縺」縺ヲ縺�◆繧会シ医ヱ繧ケ縺悟ー代↑縺代l縺ー�画緒逕サ鬆伜沺縺ョ鬮倥&繧定ソ斐☆ 
     450                                        if(graphheight < height){ 
     451                                                return height; 
     452                                        }else{ 
     453                                                return graphheight; 
     454                                        } 
     455                                }) 
     456                        // 閭梧勹繧定埋縺�げ繝ャ繝シ縺ォ 
     457                        .attr("fill", "#fafafa"); 
     458 
     459                // links驟榊�繧呈ク。縺励Μ繝ウ繧ッ縺ョ菴懈� 
     460                var link = svg.selectAll(".link") 
     461                        .data(json.links) 
     462                        .enter().append("line") 
     463                        .attr("class", "link") 
     464                        .style("stroke", "#999") 
     465                        .style("stroke-opacity", 0.6) 
     466                        .style("stroke-width", 2); 
     467 
     468                // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨�菴懈� 
     469                var node = svg.selectAll(".node") 
     470                        .data(json.nodes) 
     471                        .enter().append("circle") 
     472                        .attr("class", "node") 
     473                        .attr("r", (NODEHEIGHT / 2)) 
     474                        .attr("cx", function(d) { return d.x;} ) 
     475                        .attr("cy",  function(d) { return d.y; }) 
     476                        .style("fill", function(d) { return d.nodecolor; }) 
     477                        .style("stroke", '#fafafa') 
     478                        .style("stroke-width", '1.5px') 
     479                        .style("cursor", 'pointer'); 
     480 
     481                // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈� 
     482                var tnode = svg.selectAll("text.node") 
     483                        .data(json.nodes) 
     484                        .enter().append("svg:text") 
     485                        .attr("class", "tnode") 
     486                        .attr("x", function(d) { return d.x; }) 
     487                        .attr("y", function(d) { return d.y; }) 
     488                        .text(function(d) { return d.name; }) 
     489                        .style("fill", '#000000') 
     490                        .style("text-anchor", 'middle') 
     491                        .style("pointer-events", "none"); 
     492 
     493                // 繝ェ繝ウ繧ッ繝�く繧ケ繝医�菴懈� 
     494                var tlink = svg.selectAll("text.link") 
     495                        .data(json.links) 
     496                        .enter().append("svg:text") 
     497                        .attr("class", "tlink") 
     498                        .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; }) 
     499                        .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; }) 
     500                        .style("fill", '#000000') 
     501                        .style("text-anchor", 'middle'); 
     502 
     503                // 繧ケ繧ウ繧「繝�く繧ケ繝医�菴懈� 
     504                var tscore = svg.selectAll("text.score") 
     505                        .data(json.nodes) 
     506                        .enter().append("svg:text") 
     507                        .attr("class", "tscore") 
     508                        .attr("x", function(d) { return (d.x + scoreleftmargin); }) 
     509                        .attr("y", function(d) { return d.y; }) 
     510                        .text(function(d) { return d.score; }) 
     511                        .style("fill", '#ff0000') 
     512                        .style("text-anchor", 'middle') 
     513                        .style("pointer-events", "none"); 
     514 
     515                // 繝弱�繝峨∈縺ョ繧ェ繝ウ繝槭え繧ケ縺ァ繝代せ謗「邏「縲√ヱ繧ケ荳ュ縺ョ繝ェ繝ウ繧ッ譁�ュ励r陦ィ遉コ 
     516                node.on("mouseover", function(d){ 
     517 
     518                        // 陦ィ遉コ縺吶k繝代せ菫晏ュ倡畑驟榊� 
     519                        var path = []; 
     520                        // 繝代せ陦ィ遉コ諠�ア菫晏ュ倡畑驟榊� 
     521                        var pathname = []; 
     522 
     523                        // 縺セ縺壹が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�id縺ィ蜷榊燕繧偵◎繧後◇繧瑚ソス蜉 
     524                        path.push(d.nodeid); 
     525                        pathname.push(d.name); 
     526 
     527                        // 繝代せ謗「邏「 
     528                        do{ 
     529                                // 繝ェ繝ウ繧ッ縺ョ謨ー縺縺醍ケー繧願ソ斐@ 
     530                                for(var i = 0; i < link.data().length; i++){ 
     531                                        // 迴セ蝨ィ縺ョ譛€蠕悟ーセ縺ォ郢九′繧九Μ繝ウ繧ッ縺後≠繧後� 
     532                                        if(path[(path.length-1)] == link.data()[i].target){ 
     533                                                // 縺昴�繝ェ繝ウ繧ッ縺ョ繧ス繝シ繧ケ蛛エ繝弱�繝峨�id繧定ソス蜉 
     534                                                path.push(link.data()[i].source); 
     535                                                // 縺昴�繝ェ繝ウ繧ッ縺ョ蜷榊燕縺ィ繧ス繝シ繧ケ蛛エ繝弱�繝峨�蜷榊燕繧定ソス蜉 
     536                                                pathname.push(link.data()[i].property); 
     537                                                pathname.push(node.data()[link.data()[i].source].name); 
     538                                        } 
     539                                } 
     540                        // 繝ォ繝シ繝医ヮ繝シ繝峨↓霎ソ繧顔捩縺上∪縺ァ郢ー繧願ソ斐☆ 
     541                        }while(path[(path.length-1)] != 0); 
     542 
     543                        // 繝ォ繝シ繝医ヮ繝シ繝峨∪縺溘�騾比クュ繝弱�繝峨↑繧� 
     544                        if(d.nodeid == 0 || d.path == "notend"){ 
     545                                // 繝代せ陦ィ遉コ鬆伜沺繧偵ョ繝輔か繝ォ繝医↓ 
     546                                $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and <span style=\"color: hsl(200, 50%, 75%);\">push button</span> to generate a SPARQL</h1>'); 
     547                        // 譛ォ遶ッ繝弱�繝峨↑繧� 
     548                        }else{ 
     549 
     550                                // 繝代せ陦ィ遉コ鬆伜沺逕ィ譁�ュ怜��医ず繧ァ繝阪Ξ繝シ繝医�繧ソ繝ウ繧偵∪縺夊ソス蜉�� 
     551                                var resultText = '<div class="SBGenButton" onclick="generateSPARQL()">Generate<br />SPARQL</div>'; 
     552                                // 繝代せ縺ョ蜷榊燕驟榊�蛻�セ後m縺九i郢ー繧願ソ斐@縺ェ縺後i 
     553                                for (var i = pathname.length;i > 0; i--){ 
     554                                        // 螂�焚逡ェ逶ョ�医ヮ繝シ繝会シ峨↑繧� 
     555                                        if(i % 2 == 1){ 
     556                                                // 繝ォ繝シ繝医°騾比クュ縺区忰遶ッ縺九↓蠢懊§縺ヲ繧ッ繝ゥ繧ケ繧呈欠螳壹@霑ス險� 
     557                                                if(i == 1){ 
     558                                                        resultText = resultText + "<div class=\"SBLeafNode\">" + pathname[i - 1] + "</div>"; 
     559                                                }else if(i == pathname.length){ 
     560                                                        resultText = resultText + "<div class=\"SBRootNode\">" + pathname[i - 1] + "</div>"; 
     561                                                }else{ 
     562                                                        resultText = resultText + "<div class=\"SBPathNode\">" + pathname[i - 1] + "</div>"; 
     563                                                } 
     564                                        // 蛛カ謨ー逡ェ逶ョ�医Μ繝ウ繧ッ�峨�繝ェ繝ウ繧ッ逕サ蜒上r蜑榊セ後↓縺、縺題ソス險� 
     565                                        }else{ 
     566                                                resultText = resultText + "<img src=\"images/pathline.png\"><div class=\"SBPathProperty\">" + pathname[i - 1] + "</div><img src=\"images/pathline.png\">"; 
     567                                        } 
     568                                } 
     569 
     570                                // 繝代せ陦ィ遉コ鬆伜沺縺ョ蜀�ョケ繧呈嶌縺肴鋤縺� 
     571                                $('.SBSelectedPath').html(resultText); 
     572 
     573                                // 繧オ繝シ繝悶Ξ繝�ヨ縺ォ騾√j霑斐☆繝代せ繧ェ繝悶ず繧ァ繧ッ繝医r菫晏ュ� 
     574                                pathobj = d.path; 
     575 
     576                                // 繝代せ陦ィ遉コ鬆伜沺縺ョ陦ィ遉コ險ュ螳壹rvisivle縺ォ 
     577                                $('.SBPath').css('overflow-y', 'visible'); 
     578 
     579                                // 繝代せ蜀�ョケ縺ョ鬮倥&縺後ヱ繧ケ陦ィ遉コ鬆伜沺繧定カ�∴縺ヲ縺�◆繧� 
     580                                if($('.SBPath').height() < $('.SBSelectedPath').innerHeight()){ 
     581                                        // 繝代せ陦ィ遉コ鬆伜沺縺ョ陦ィ遉コ險ュ螳壹r繧ケ繧ッ繝ュ繝シ繝ォ縺ォ 
     582                                        $('.SBPath').css('overflow-y', 'scroll'); 
     583                                } 
     584                        } 
     585 
     586                        // 繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�鬮倥&縺ォ隕ェ繧貞粋繧上○繧九◆繧√↓蜷医o縺帙k鬮倥&繧剃ソ晏ュ� 
     587                        var movey = d.y; 
     588 
     589                        // 蜷�ヮ繝シ繝峨↓蟇セ縺� 
     590                        node 
     591                                // 霈ェ驛ュ邱壹�濶イ繧定ィュ螳� 
     592                                .style("stroke", function(d){ 
     593                                        // 縺セ縺壹�閭梧勹濶イ�医ョ繝輔か繝ォ繝茨シ峨r謖�ョ� 
     594                                        var strokecolor = "#fafafa"; 
     595 
     596                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i 
     597                                        for(var n = 0; n < path.length; n++){ 
     598                                                // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i 
     599                                                if(path[n] == d.nodeid){ 
     600                                                        // 霈ェ驛ュ邱壹r襍、縺ォ 
     601                                                        strokecolor = "#ffaaaa"; 
     602                                                } 
     603                                        } 
     604 
     605                                        // 縺薙%縺セ縺ァ縺ァ蠕励i繧後◆霈ェ驛ュ邱壹�濶イ繧定ソ斐☆ 
     606                                        return strokecolor; 
     607                                }) 
     608                                // 鬮倥&縺ョ蛟、 
     609                                .attr("cy", function(d){ 
     610 
     611                                        // 迴セ蝨ィ縺ョ鬮倥&繧貞叙蠕� 
     612                                        var currenty = d.y 
     613 
     614                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i 
     615                                        for(var n = 0; n < path.length; n++){ 
     616                                                // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i 
     617                                                if(path[n] == d.nodeid){ 
     618                                                        // 蜀�Κ縺ァ謖√▽鬮倥&繧偵が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨→蜷後§縺ォ�亥�謠冗判譎ゅ↓蜿肴丐�� 
     619                                                        d.y = movey; 
     620                                                } 
     621                                        } 
     622 
     623                                        // 莉翫�迴セ譎らせ縺ョ鬮倥&繧定ソ斐☆ 
     624                                        return currenty; 
     625                                }); 
     626 
     627                        // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓蟇セ縺� 
     628                        tlink 
     629                                // 繝�く繧ケ繝郁。ィ遉コ蛻、螳� 
     630                                .text(function(d) { 
     631                                        // 繝�ヵ繧ゥ繝ォ繝医〒遨コ繧偵そ繝�ヨ 
     632                                        var linktext = ""; 
     633 
     634                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i 
     635                                        for(var t = 0; t < path.length; t++){ 
     636                                                // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ縺ェ繧峨� 
     637                                                if(path[t] == d.target){ 
     638                                                        // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ 
     639                                                        linktext = d.property 
     640                                                } 
     641                                        } 
     642 
     643                                        // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆繝ェ繝ウ繧ッ繝�く繧ケ繝医r霑斐☆ 
     644                                        return linktext; 
     645                                }); 
    676646 
    677647            // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺� 
     
    679649                // 邱壹�濶イ蛻、螳� 
    680650                .style("stroke", function(d){ 
    681                     // 陦ィ遉コ繝輔Λ繧ー縺系o縺ェ繧峨� 
    682                     if(d.view == "no"){ 
    683                         // 濶イ繧偵ョ繝輔か繝ォ繝医↓ 
    684                         return "#999"; 
    685                     // 縺昴l莉・螟厄シ亥崋螳壹d繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヱ繧ケ縺ォ蜷ォ縺セ繧後k�峨↑繧� 
    686                     }else{ 
    687                         // 濶イ繧定オ、縺ォ 
    688                         return "#ffaaaa"; 
    689                     } 
     651 
     652                        var strokecolor = "#999"; 
     653 
     654                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i 
     655                                        for(var t = 0; t < path.length; t++){ 
     656                                                // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ縺ェ繧峨� 
     657                                                if(path[t] == d.target){ 
     658                                                        // 繝ェ繝ウ繧ッ縺ョ濶イ縺ォ襍、繧偵そ繝�ヨ 
     659                                                        strokecolor = "#ffaaaa" 
     660                                                } 
     661                                        } 
     662 
     663                                        return strokecolor; 
    690664                }); 
    691665 
     
    828802        }); 
    829803 
    830         // 閭梧勹荳翫〒繝槭え繧ケ縺悟虚縺上#縺ィ縺ォ 
    831         bg.on("mousemove", function(){ 
    832             // MOUSEMOVED繧定ソス蜉�医ヮ繝シ繝峨↓繧ェ繝ウ繝槭え繧ケ縺輔l繧句コヲ縺ォ繧ォ繧ヲ繝ウ繝医Μ繧サ繝�ヨ�� 
    833                 MOUSEMOVED++; 
    834             // 30繧定カ�∴縺溘i 
    835             if(MOUSEMOVED > 30){ 
    836                 // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ縺ォ縺励※繧ォ繧ヲ繝ウ繝医Μ繧サ繝�ヨ 
    837                 $('.SBTooltip').hide(); 
    838                 MOUSEMOVED = 0; 
    839             } 
    840         }); 
    841  
    842804        // 蛻晏屓縺ョ縺ソduration繧�縺ィ謖�ョ壹@蜀肴緒逕サ�医い繝九Γ繝シ繧キ繝ァ繝ウ縺ェ縺暦シ� 
    843805        redraw(0);