root/SPARQLBuilderWWW/web/newsparqlbuilder.js @ 289

リビジョン 289, 33.7 KB (コミッタ: lenz, 8 年 前)

エンドポイントリスト取得方式の変更
非推奨の非同期通信を取りやめセレクトボックスのdisabledでユーザーアクションを縛る方式に変更

  • 属性 svn:mime-type の設定値 text/plain
Rev行番号 
[232]1
2var PATHNUM = 0;
3var MAXDEPTH = 0;
4var TREESPACE = 0;
[239]5var NODEHEIGHT = 50;
[232]6var DRAWHEIGHT = 0;
7
8var endpoint = "";
9var startclass= "";
10var endclass = "";
11
[233]12var defendpoint = "";
13var defstartclass= "";
14var defendclass = "";
15
[232]16var jsontext = "";
17var pathobj = "";
18
19var pathlimit = 10;
20
21
22// 繝壹�繧ク隱ュ縺ソ霎シ縺ソ縺悟ョ御コ�ャ。隨ャ螳溯。�
23$(function(){
24
25        // 繝壹�繧ク縺ョ繝代�繝�Κ蛻�r霑ス蜉
26        initparts();
[233]27
28        getParameter();
29
30        if(defendpoint != "" && defstartclass != "" && defendclass != ""){
31                openSPARQLBuilder();
32        }
33
[232]34});
35
36function initparts(){
37        var sbdiv = $('div#SPARQLBUILDER');
[234]38        if(sbdiv.find('div').length == 0){
[240]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><div class="SBTutorialLink">Tutorial for SPARQL Builder GUI is <a href="http://www.sparqlbuilder.org/doc/how-to-use-sparql-builder-gui/" target="_blank">here</a>.</div>';
[238]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>';
[232]41
[234]42                sbdiv.html(sbtop);
43                $('body').append(sbmodal);
44        }
[232]45
46        $('.SBModalView').click(function(){
47                $(this).fadeOut(700);
48        });
49
[242]50        $('.SBModalContents').click(function(event){
[232]51                event.stopPropagation();
52        });
53
54        loadEndPointList();
55
56        $(".SBEndPointSelect").change(function() {
57                changeEndPoint();
58        });
59
60        $(".SBStartClassSelect").change(function() {
61                startClass = $(".SBStartClassSelect").val();
[245]62                loadEndClassList();
[232]63        });
64        $(".SBEndClassSelect").change(function() {
65                endClass = $(".SBEndClassSelect").val();
66                loadPathList();
67        });
68
69}
70
[233]71
72function getParameter()
73{
74    if( 1 < window.location.search.length )
75    {
76        var query = window.location.search.substring( 1 );
77        var parameters = query.split( '&' );
78
79        for( var i = 0; i < parameters.length; i++ )
80        {
81            var element = parameters[ i ].split( '=' );
82            if(decodeURIComponent( element[ 0 ] ) == "ep"){
83                defendpoint = decodeURIComponent( element[ 1 ] )
84            }else if(decodeURIComponent( element[ 0 ] ) == "st"){
85                defstartclass = decodeURIComponent( element[ 1 ] )
86            }else if(decodeURIComponent( element[ 0 ] ) == "en"){
87                defendclass = decodeURIComponent( element[ 1 ] )
88            }
89        }
90    }
91}
92
93
[232]94function openSPARQLBuilder(){
95
96        $('.SBModalView').css('top', $(window).scrollTop()).css('height', window.innerHeight).fadeIn();
97
[235]98        resizeModalView();
[232]99
100        $(".SBEndPointSelect").select2();
101        $(".SBStartClassSelect").select2();
102        $(".SBEndClassSelect").select2();
103
[233]104        if(defendpoint != "" && defstartclass != "" && defendclass != ""){
105
[245]106                $('.SBStartClassSelect').on('lsccomplete', function(){
[233]107                        $('.SBStartClassSelect').val(defstartclass);
108                        defstartclass = "";
[245]109
110                        $(".SBEndPointSelect").select2();
111                        $(".SBStartClassSelect").select2();
112                        $(".SBEndClassSelect").select2();
113
114                        $('.SBStartClassSelect').unbind('lsccomplete');
115                        loadEndClassList();
116                });
117
118                $('.SBEndClassSelect').on('leccomplete', function(){
[233]119                        $('.SBEndClassSelect').val(defendclass);
120                        defendclass = "";
121
122                        $(".SBEndPointSelect").select2();
123                        $(".SBStartClassSelect").select2();
124                        $(".SBEndClassSelect").select2();
125
[245]126                        $('.SBEndClassSelect').unbind('leccomplete');
[233]127                });
128
129                loadPathList();
130
131                var eplist = $('.SBEndPointSelect option');
132
133                if(eplist.length == 0){
134                        $('.SBEndPointSelect').on('epcomplete', function(){
[289]135                                $('.SBEndPointSelect option').each(function(){
136                                        if($(this).text() == defendpoint){
137                                                $(this).attr('selected', 'selected');
138                                        }
139                                });
[233]140                                defendpoint = "";
[245]141                                loadStartClassList();
[233]142                                $('.SBEndPointSelect').unbind('epcomplete');
143                        });
144                }else{
[289]145                        $('.SBEndPointSelect option').each(function(){
146                                if($(this).text() == defendpoint){
147                                        $(this).attr('selected', 'selected');
148                                }
149                        });
[233]150                        defendpoint = "";
[245]151                        loadStartClassList();
[233]152                }
153        }
[232]154}
155
[235]156function resizeModalView(){
157
158        if($('.SBModalView').css('display') == 'block'){
159                var mvw = $('.SBModalContents').width();
160                var mvh = $('.SBModalContents').height();
161                $('.SBModalContents .SBForms').css('width', (mvw - 201) + 'px').css('height', 56 + 'px');
162                $('.SBModalContents .SBMessage').css('width', 200 + 'px').css('height', 56 + 'px');
163                $('.SBModalContents .SBGraph').css('width', (mvw - 201) + 'px').css('height', (mvh - 57) + 'px');
164                $('.SBModalContents .SBPath').css('width', 180 + 'px').css('height', (mvh - 77 - 26) + 'px');
165                $('.SBModalContents .SBModalButtons').css('width', 200 + 'px').css('height', '26px');
166
[243]167                var formw = $('.SBModalContents .SBForms').width();
168                var selw = Math.floor(formw - 120);
[236]169
[235]170                if(selw % 2 == 1){
[236]171                        selw--;
[235]172                }
[236]173                $('.SBModalContents .SBSelects').css('width', selw);
[243]174                $('.SBModalContents .SBPermaLink').css('width', Math.floor(formw - selw));
[235]175        }
176}
177
[233]178function openSample(ep, st, en){
179        defendpoint = ep;
180        defstartclass = st;
181        defendclass = en;
182
183        openSPARQLBuilder();
184}
185
[232]186function openPermalink(){
[233]187        var baseurl = location.href;
188        var spliturl = baseurl.split('?');
189        var url = spliturl[0] + "?ep=" + encodeURIComponent(endpoint) + "&st=" + encodeURIComponent(startclass) + "&en=" + encodeURIComponent(endclass);
[232]190
[233]191        window.open(url);
[232]192}
193
194function closeSPARQLBuilder(){
195        $('.SBModalView').fadeOut();
196}
197
198function switchLoadIcon(mode) {
199        if(mode == "view"){
200                $('.SBAjaxLoad').show();
201        }else{
202                $('.SBAjaxLoad').hide();
203        }
204};
205
206function loadEndPointList(){
[243]207        $('.SBPermaLinkButton').attr('disabled', true);
[288]208        var url = 'http://www.sparqlbuilder.org/api/eplist?ds=true';
[289]209        $(".SBEndPointSelect").empty();
210        $(".SBEndPointSelect").attr("disabled", "disabled");
211        $(".SBStartClassSelect").empty();
212        $(".SBStartClassSelect").attr("disabled", "disabled");
213        $(".SBEndClassSelect").empty();
214        $(".SBEndClassSelect").attr("disabled", "disabled");
[232]215        $.ajax({
216                url: url,
217                success: function(data) {
218                        var list = eval(data);
219                        $(".SBEndPointSelect").empty();
[241]220                        $(".SBEndPointSelect").append('<option value="SBDefault">SELECT Endpoint</option>');
[232]221                        for (var i = 0; i < list.length; ++i) {
[286]222                                $(".SBEndPointSelect").append('<option value="' + list[i]['uri'] + '">' + list[i]['label'] + '</option>');
[289]223                                if(defendpoint == ''){
224                                        switchLoadIcon("hide");
225                                }
[232]226                                if($('.SBModalView').attr('display') == 'block'){
227                                        $(".SBEndPointSelect").select2();
228                                        $(".SBStartClassSelect").select2();
229                                        $(".SBEndClassSelect").select2();
230                                }
231                        }
[289]232                        $(".SBEndPointSelect").removeAttr("disabled");
[233]233                        $(".SBEndPointSelect").trigger(new $.Event('epcomplete'));
[232]234                },
235        });
236}
237
238changeEndPoint = function() {
[289]239        endpoint = $(".SBEndPointSelect option:selected").text();
[232]240        if(endpoint != "SBDefault"){
[245]241                loadStartClassList();
[232]242        }
243};
244
[245]245loadStartClassList = function() {
[243]246        $('.SBPermaLinkButton').attr('disabled', true);
[232]247        var url = "http://www.sparqlbuilder.org/api/clist?ep=" + encodeURIComponent(endpoint);
[289]248        $(".SBStartClassSelect").empty();
249        $(".SBStartClassSelect").attr("disabled", "disabled");
250        $(".SBEndClassSelect").empty();
251        $(".SBEndClassSelect").attr("disabled", "disabled");
[232]252        $.ajax({
253                type : "GET",
254                url : url,
[289]255                //async : false,
[232]256                success : function(data) {
257                        var list = eval(data);
258                        $(".SBStartClassSelect").empty();
[247]259                        $(".SBStartClassSelect").append('<option value="SBDefault">SELECT StartClass (From ' + list.length + ' classes below)</option>');
[232]260                        for (var i = 0; i < list.length; ++i) {
261                                $(".SBStartClassSelect").append('<option value="' + list[i]['uri'] + '">' + list[i]['label'] + ' (' + list[i]['number'] + ')' + '</option>');
[245]262                        }
[289]263                        $(".SBStartClassSelect").removeAttr("disabled");
[245]264                        $(".SBStartClassSelect").select2();
265                        $(".SBEndClassSelect").select2();
266                        $(".SBStartClassSelect").trigger(new $.Event('lsccomplete'));
267                }
268        });
269};
270
271loadEndClassList = function() {
272        $('.SBPermaLinkButton').attr('disabled', true);
273        var url = "http://www.sparqlbuilder.org/api/clist?ep=" + encodeURIComponent(endpoint) + '&class=' + encodeURIComponent($(".SBStartClassSelect").val());
274        $.ajax({
275                type : "GET",
276                url : url,
[289]277                //async : false,
[245]278                success : function(data) {
279                        var list = eval(data);
280                        $(".SBEndClassSelect").empty();
[247]281                        $(".SBEndClassSelect").append('<option value="SBDefault">SELECT EndClass (From ' + list.length + ' classes below)</option>');
[245]282                        for (var i = 0; i < list.length; ++i) {
[232]283                                $(".SBEndClassSelect").append('<option value="' + list[i]['uri'] + '">' + list[i]['label'] + ' (' + list[i]['number'] + ')' + '</option>');
284                        }
[289]285                        $(".SBEndClassSelect").removeAttr("disabled");
[232]286                        $(".SBStartClassSelect").select2();
287                        $(".SBEndClassSelect").select2();
[245]288                        $(".SBEndClassSelect").trigger(new $.Event('leccomplete'));
[232]289                }
290        });
291};
292
293loadPathList = function() {
[233]294        startclass = $(".SBStartClassSelect").val();
295        endclass = $(".SBEndClassSelect").val();
296
297        if(defendpoint != "" && defstartclass != "" && defendclass != ""){
298                endpoint = defendpoint;
299                startclass = defstartclass;
300                endclass = defendclass;
301        }
302
[232]303        $('.SBSaveESE').attr('disabled', true);
304        if (startclass == null || endclass == null || startclass == "SBDefault" || endclass == "SBDefault"){
305                return;
306        }
307
308        pathlimit = 10;
309
310        $('.SBResult').hide();
311        $('.SBViewAll').hide();
[239]312        $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and click to generate a SPARQL</h1><img src=\"images/pathline.png\" style="display:none;">');
[232]313
314        var url = "http://www.sparqlbuilder.org/api/plist?ep=" + encodeURIComponent(endpoint)
315                                                                                                                        + "&startclass=" + encodeURIComponent(startclass)
316                                                                                                                        + "&endclass="   + encodeURIComponent(endclass);
[239]317
[232]318        switchLoadIcon("view");
319        setTimeout(function(){
320                $.ajax({
321                        type : "GET",
322                        url : url,
323                        //async : false,
324                        timeout : 1000000,
325                        success : function(data) {
326                                jsontext = data;
327                                view_map();
328                                switchLoadIcon("hide");
[243]329                                $('.SBPermaLinkButton').attr('disabled', false);
[232]330                        },
331                        error: function(data){
332                                switchLoadIcon("hide");
333                                alert("error: ", data);
334                        }
335                });
336        }, 100);
337};
338
339function viewAll(){
340        pathlimit = 0;
341        view_map();
342}
343
344generateSPARQL = function() {
345    var path = JSON.stringify(pathobj);
346    var url = 'http://www.sparqlbuilder.org/api/sparql?path=' + encodeURIComponent(path);
347    $.ajax({
348        type: "GET",
349        url : url,
350        dataType: 'text',
351        async: false,
352        success : function(data) {
353            $(".SBSparqlArea").val(data);
354            closeSPARQLBuilder();
355        }
356    });
357};
358
359function sendSPARQL(){
360        var sendep = $(".SBEndPointSelect").val();
361
362        var query = $(".SBSparqlArea").val();
363
364        if(sendep == "SBDefault" || query == ""){
365                return;
366        }
367
368        query = encodeURIComponent(query);
369
370        openpage = sendep + "?format=text%2Fhtml&query=" + query;
371
372        window.open(openpage);
373}
374
375function downloadResult(){
376
377        var sendep = $(".SBEndPointSelect").val();
378
379        var query = $(".SBSparqlArea").val();
380
381        if(sendep == "SBDefault" || query == ""){
382                return;
383        }
384
385        qr = sendQuery(sendep,query);
386
387        qr.fail(
388                function (xhr, textStatus, thrownError) {
389                        alert("Error: A '" + textStatus+ "' occurred.");
390                }
391        );
392        qr.done(
393                function (d) {
394                        downloadCSV(d.results.bindings);
395                }
396        );
397}
398
399function downloadCSV(data){
400
401        if (data instanceof Array) {
402                var result_txt ="";
403
404                var i=0;
405                for ( var key in data[0]) {
406                        if(i>0){result_txt +=",";}
407                        result_txt += key;
408                        i++;
409                }
410
411                result_txt += "\n";
412
413                for (var d = 0; d < data.length; d++) {
414                        var i = 0;
415                        for ( var key in data[d]) {
416                                if(i>0){result_txt +=",";}
417                                result_txt += data[d][key].value;
418                                i++;
419                        }
420                        result_txt += '\n';
421                }
422
423                var blob = new Blob( [result_txt], {type: 'text/plain'} )
424
425                var link = document.createElement('a')
426                link.href = URL.createObjectURL(blob)
427                link.download = 'result' + '.csv'
428
429                document.body.appendChild(link) // for Firefox
430                link.click()
431                document.body.removeChild(link) // for Firefox
432        }
433};
434
[238]435
436// 繧ー繝ゥ繝墓緒逕サ驛ィ蛻�
[232]437view_map = function(){
438
[238]439        // make_data繝。繧ス繝�ラ縺ョ邨先棡繧貞叙蠕�
[239]440        var json = make_data();
[232]441
[238]442        // 繝代せ謨ー縺�縺ァ縺ェ縺代l縺ー
443        if(json['nodes'].length != 0){
[232]444
[238]445                // 蜃コ譚・荳翫′縺」縺溽オ先棡繧呈ク。縺励※繝槭ャ繝嶺ク翫�蠎ァ讓吶r繧サ繝�ヨ
446                set_map_location(0, json['nodes'], json['links']);
[232]447
[238]448                // SVG縺ョ蟷�→鬮倥&逕ィ縺ォ謠冗判鬆伜沺縺ョ繧オ繧、繧コ繧貞叙蠕�
449                var width = $('.SBGraph').width();
450                var height = $('.SBGraph').height();
451                // SVG蜀��繧ー繝ゥ繝暮Κ蛻�ォ倥&�医ヱ繧ケ謨ー縺ォ蠢懊§繧具シ峨r繧サ繝�ヨ
452                var graphheight = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2);
[232]453
[238]454                // 繧ケ繧ウ繧「陦ィ遉コ縺ョ繝槭�繧ク繝ウ
455                var scoreleftmargin = NODEHEIGHT * 1.5;
[232]456
[244]457                var scrollsvg = function(delta){
458                        // 迴セ蝨ィ縺ョ繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョ迥カ諷九r蜿門セ�
459                        var vb = svg.attr("viewBox");
460                        // 繧ケ繝壹�繧ケ縺ァ蛹コ蛻�j蜷�€、縺ォ蛻�ァ」
461                        var spvb = vb.split(" ");
462
463                        // 繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョy縺ョ蛟、縺九i莉雁屓縺ョ繝帙う繝シ繝ォ繧、繝吶Φ繝医�蟾ョ蛻�r蠑輔¥
464                        var vby = (parseInt(spvb[1]) - parseInt(delta));
465
466                        // 0繧貞牡縺」縺ヲ縺�◆繧�縺ォ
467                        if(vby < 0){
468                                vby = 0;
469                        // 繧ケ繧ッ繝ュ繝シ繝ォ荳企剞�医げ繝ゥ繝輔し繧、繧コ蠑輔¥陦ィ遉コ鬆伜沺繧オ繧、繧コ�峨r雜�∴縺ヲ縺�◆繧芽」懈ュ」
470                        }else if(vby > (graphheight - height)){
471                                vby = (graphheight - height);
472                                // 陬懈ュ」縺励◆邨先棡0繧貞牡縺」縺ヲ縺�◆繧�縺ォ
473                                if(vby < 0){
474                                        vby = 0;
475                                }
476                        }
477
478                        // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆y繧偵そ繝�ヨ縺励ン繝・繝シ繝懊ャ繧ッ繧ケ繧呈峩譁ー
479                        svg.attr("viewBox", "0 " + vby + " " + width + " " + height);
480                }
481
[238]482                // SVG縺ョ蜑企勁
483                d3.select(".SBGraph svg").remove();
484                // 逕サ髱「繧オ繧、繧コ縺ォ蜷医o縺婀VG縺ョ霑ス蜉
485                var svg = d3.select(".SBGraph").append("svg")
486                        .attr("width", width)
487                        .attr("height", height)
488                        // 繝薙Η繝シ繝懊ャ繧ッ繧ケ縺ョ繧サ繝�ヨ
[244]489                        .attr("viewBox", "0 0 " + width + " " + height);
[232]490
[244]491                // SVG縺後せ繧ッ繝ュ繝シ繝ォ縺輔l縺滓凾縺ョ繧、繝吶Φ繝医r繝悶Λ繧ヲ繧カ縺ォ蠢懊§縺ヲ繧サ繝�ヨ
492                var mousewheelevent = 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll';
493                $(".SBGraph svg").on(mousewheelevent,function(e){
494                        // 繝悶Λ繧ヲ繧カ縺ォ蠢懊§縺ヲ繧ケ繧ッ繝ュ繝シ繝ォ縺ョ蛟、繧貞叙蠕�
495                        var delta = e.originalEvent.deltaY ? -(e.originalEvent.deltaY) : e.originalEvent.wheelDelta ? e.originalEvent.wheelDelta : -(e.originalEvent.detail);
496                        // FireFox縺縺ィ繧ケ繧ッ繝ュ繝シ繝ォ騾溷コヲ縺碁撼蟶ク縺ォ驕�>蝣エ蜷医′縺ゅk縺ョ縺ァ陬懈ュ」
497                        if(delta < 0 && delta > -100){
498                                delta = -100;
499                        }else if(0 < delta && delta < 100){
500                                delta = 100;
501                        }
[232]502
[244]503                        // 繧ケ繧ッ繝ュ繝シ繝ォ縺ョ繝�ヵ繧ゥ繝ォ繝医�蜍穂ス懊→繝舌ヶ繝ェ繝ウ繧ー繧偵く繝」繝ウ繧サ繝ォ
504                        e.preventDefault();
505                        e.stopPropagation();
506                        // 蛟、繧呈ク。縺励※繧ケ繧ッ繝ュ繝シ繝ォ
507                        scrollsvg(delta);
508                });
[232]509
[238]510                // 閭梧勹縺ョ霑ス蜉�磯ォ倥&莉・螟悶�謠冗判鬆伜沺縺昴�縺セ縺セ��
511                var bg = svg
512                        .append("rect")
513                        .attr("x", 0)
514                        .attr("y", 0)
515                        .attr("width", width)
516                        .attr("height", function(){
517                                // 繧ー繝ゥ繝暮Κ蛻��鬮倥&縺梧緒逕サ鬆伜沺縺ョ鬮倥&繧貞牡縺」縺ヲ縺�◆繧会シ医ヱ繧ケ縺悟ー代↑縺代l縺ー�画緒逕サ鬆伜沺縺ョ鬮倥&繧定ソ斐☆
518                                        if(graphheight < height){
519                                                return height;
520                                        }else{
521                                                return graphheight;
522                                        }
523                                })
524                        // 閭梧勹繧定埋縺�げ繝ャ繝シ縺ォ
525                        .attr("fill", "#fafafa");
[232]526
[238]527                // links驟榊�繧呈ク。縺励Μ繝ウ繧ッ縺ョ菴懈�
528                var link = svg.selectAll(".link")
529                        .data(json.links)
530                        .enter().append("line")
531                        .attr("class", "link")
532                        .style("stroke", "#999")
533                        .style("stroke-opacity", 0.6)
534                        .style("stroke-width", 2);
[232]535
[238]536                // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨�菴懈�
537                var node = svg.selectAll(".node")
538                        .data(json.nodes)
539                        .enter().append("circle")
540                        .attr("class", "node")
541                        .attr("r", (NODEHEIGHT / 2))
542                        .attr("cx", function(d) { return d.x;} )
543                        .attr("cy",  function(d) { return d.y; })
544                        .style("fill", function(d) { return d.nodecolor; })
545                        .style("stroke", '#fafafa')
546                        .style("stroke-width", '1.5px')
[239]547                        // 譛ォ遶ッ繝弱�繝峨�縺ソ繝槭え繧ケ繧「繧、繧ウ繝ウ繧偵�繧、繝ウ繧ソ繝シ縺ォ
548                        .style("cursor", function(d){
549                                if(d.path == "notend"){
550                                        return 'normal';
551                                }else{
552                                        return 'pointer';
553                                }
554                        });
[232]555
[238]556                // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈�
557                var tnode = svg.selectAll("text.node")
558                        .data(json.nodes)
559                        .enter().append("svg:text")
560                        .attr("class", "tnode")
561                        .attr("x", function(d) { return d.x; })
562                        .attr("y", function(d) { return d.y; })
563                        .text(function(d) { return d.name; })
564                        .style("fill", '#000000')
565                        .style("text-anchor", 'middle')
566                        .style("pointer-events", "none");
[232]567
[238]568                // 繝ェ繝ウ繧ッ繝�く繧ケ繝医�菴懈�
569                var tlink = svg.selectAll("text.link")
570                        .data(json.links)
571                        .enter().append("svg:text")
572                        .attr("class", "tlink")
573                        .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; })
574                        .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; })
575                        .style("fill", '#000000')
576                        .style("text-anchor", 'middle');
[232]577
[238]578                // 繧ケ繧ウ繧「繝�く繧ケ繝医�菴懈�
579                var tscore = svg.selectAll("text.score")
580                        .data(json.nodes)
581                        .enter().append("svg:text")
582                        .attr("class", "tscore")
583                        .attr("x", function(d) { return (d.x + scoreleftmargin); })
[239]584                        .attr("y", function(d) { return d.y + 4; })
[238]585                        .text(function(d) { return d.score; })
[245]586                        .style("fill", 'hsl(0, 50%, 75%)')
[238]587                        .style("text-anchor", 'middle')
588                        .style("pointer-events", "none");
[232]589
[238]590                // 繝弱�繝峨∈縺ョ繧ェ繝ウ繝槭え繧ケ縺ァ繝代せ謗「邏「縲√ヱ繧ケ荳ュ縺ョ繝ェ繝ウ繧ッ譁�ュ励r陦ィ遉コ
591                node.on("mouseover", function(d){
[232]592
[238]593                        // 陦ィ遉コ縺吶k繝代せ菫晏ュ倡畑驟榊�
594                        var path = [];
595                        // 繝代せ陦ィ遉コ諠�ア菫晏ュ倡畑驟榊�
596                        var pathname = [];
[232]597
[238]598                        // 縺セ縺壹が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�id縺ィ蜷榊燕繧偵◎繧後◇繧瑚ソス蜉
599                        path.push(d.nodeid);
600                        pathname.push(d.name);
[232]601
[238]602                        // 繝代せ謗「邏「
603                        do{
604                                // 繝ェ繝ウ繧ッ縺ョ謨ー縺縺醍ケー繧願ソ斐@
605                                for(var i = 0; i < link.data().length; i++){
606                                        // 迴セ蝨ィ縺ョ譛€蠕悟ーセ縺ォ郢九′繧九Μ繝ウ繧ッ縺後≠繧後�
607                                        if(path[(path.length-1)] == link.data()[i].target){
608                                                // 縺昴�繝ェ繝ウ繧ッ縺ョ繧ス繝シ繧ケ蛛エ繝弱�繝峨�id繧定ソス蜉
609                                                path.push(link.data()[i].source);
610                                                // 縺昴�繝ェ繝ウ繧ッ縺ョ蜷榊燕縺ィ繧ス繝シ繧ケ蛛エ繝弱�繝峨�蜷榊燕繧定ソス蜉
611                                                pathname.push(link.data()[i].property);
612                                                pathname.push(node.data()[link.data()[i].source].name);
613                                        }
614                                }
615                        // 繝ォ繝シ繝医ヮ繝シ繝峨↓霎ソ繧顔捩縺上∪縺ァ郢ー繧願ソ斐☆
616                        }while(path[(path.length-1)] != 0);
[232]617
[238]618                        // 繝ォ繝シ繝医ヮ繝シ繝峨∪縺溘�騾比クュ繝弱�繝峨↑繧�
619                        if(d.nodeid == 0 || d.path == "notend"){
620                                // 繝代せ陦ィ遉コ鬆伜沺繧偵ョ繝輔か繝ォ繝医↓
[239]621                                $('.SBSelectedPath').html('<h1>Please <span style="color: hsl(150, 50%, 75%);">select a leaf node</span> and click to generate a SPARQL</h1>');
[238]622                        // 譛ォ遶ッ繝弱�繝峨↑繧�
623                        }else{
[232]624
[239]625                                // 繝代せ陦ィ遉コ鬆伜沺逕ィ譁�ュ怜�
626                                var resultText = '';
[238]627                                // 繝代せ縺ョ蜷榊燕驟榊�蛻�セ後m縺九i郢ー繧願ソ斐@縺ェ縺後i
628                                for (var i = pathname.length;i > 0; i--){
629                                        // 螂�焚逡ェ逶ョ�医ヮ繝シ繝会シ峨↑繧�
630                                        if(i % 2 == 1){
631                                                // 繝ォ繝シ繝医°騾比クュ縺区忰遶ッ縺九↓蠢懊§縺ヲ繧ッ繝ゥ繧ケ繧呈欠螳壹@霑ス險�
632                                                if(i == 1){
633                                                        resultText = resultText + "<div class=\"SBLeafNode\">" + pathname[i - 1] + "</div>";
634                                                }else if(i == pathname.length){
635                                                        resultText = resultText + "<div class=\"SBRootNode\">" + pathname[i - 1] + "</div>";
636                                                }else{
637                                                        resultText = resultText + "<div class=\"SBPathNode\">" + pathname[i - 1] + "</div>";
638                                                }
639                                        // 蛛カ謨ー逡ェ逶ョ�医Μ繝ウ繧ッ�峨�繝ェ繝ウ繧ッ逕サ蜒上r蜑榊セ後↓縺、縺題ソス險�
640                                        }else{
641                                                resultText = resultText + "<img src=\"images/pathline.png\"><div class=\"SBPathProperty\">" + pathname[i - 1] + "</div><img src=\"images/pathline.png\">";
642                                        }
643                                }
[232]644
[238]645                                // 繝代せ陦ィ遉コ鬆伜沺縺ョ蜀�ョケ繧呈嶌縺肴鋤縺�
646                                $('.SBSelectedPath').html(resultText);
[235]647
[238]648                                // 繧オ繝シ繝悶Ξ繝�ヨ縺ォ騾√j霑斐☆繝代せ繧ェ繝悶ず繧ァ繧ッ繝医r菫晏ュ�
649                                pathobj = d.path;
[232]650
[238]651                                // 繝代せ陦ィ遉コ鬆伜沺縺ョ陦ィ遉コ險ュ螳壹rvisivle縺ォ
652                                $('.SBPath').css('overflow-y', 'visible');
[232]653
[238]654                                // 繝代せ蜀�ョケ縺ョ鬮倥&縺後ヱ繧ケ陦ィ遉コ鬆伜沺繧定カ�∴縺ヲ縺�◆繧�
655                                if($('.SBPath').height() < $('.SBSelectedPath').innerHeight()){
656                                        // 繝代せ陦ィ遉コ鬆伜沺縺ョ陦ィ遉コ險ュ螳壹r繧ケ繧ッ繝ュ繝シ繝ォ縺ォ
657                                        $('.SBPath').css('overflow-y', 'scroll');
658                                }
659                        }
[235]660
[238]661                        // 繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�鬮倥&縺ォ隕ェ繧貞粋繧上○繧九◆繧√↓蜷医o縺帙k鬮倥&繧剃ソ晏ュ�
662                        var movey = d.y;
[232]663
[238]664                        // 蜷�ヮ繝シ繝峨↓蟇セ縺�
665                        node
666                                // 霈ェ驛ュ邱壹�濶イ繧定ィュ螳�
667                                .style("stroke", function(d){
668                                        // 縺セ縺壹�閭梧勹濶イ�医ョ繝輔か繝ォ繝茨シ峨r謖�ョ�
669                                        var strokecolor = "#fafafa";
[232]670
[238]671                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
672                                        for(var n = 0; n < path.length; n++){
673                                                // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i
674                                                if(path[n] == d.nodeid){
675                                                        // 霈ェ驛ュ邱壹r襍、縺ォ
676                                                        strokecolor = "#ffaaaa";
677                                                }
678                                        }
[232]679
[238]680                                        // 縺薙%縺セ縺ァ縺ァ蠕励i繧後◆霈ェ驛ュ邱壹�濶イ繧定ソ斐☆
681                                        return strokecolor;
682                                })
683                                // 鬮倥&縺ョ蛟、
684                                .attr("cy", function(d){
[232]685
[238]686                                        // 迴セ蝨ィ縺ョ鬮倥&繧貞叙蠕�
687                                        var currenty = d.y
[232]688
[238]689                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
690                                        for(var n = 0; n < path.length; n++){
691                                                // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i
692                                                if(path[n] == d.nodeid){
693                                                        // 蜀�Κ縺ァ謖√▽鬮倥&繧偵が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨→蜷後§縺ォ�亥�謠冗判譎ゅ↓蜿肴丐��
694                                                        d.y = movey;
695                                                }
696                                        }
[232]697
[238]698                                        // 莉翫�迴セ譎らせ縺ョ鬮倥&繧定ソ斐☆
699                                        return currenty;
700                                });
[232]701
[238]702                        // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓蟇セ縺�
703                        tlink
704                                // 繝�く繧ケ繝郁。ィ遉コ蛻、螳�
705                                .text(function(d) {
706                                        // 繝�ヵ繧ゥ繝ォ繝医〒遨コ繧偵そ繝�ヨ
707                                        var linktext = "";
[232]708
[238]709                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
710                                        for(var t = 0; t < path.length; t++){
711                                                // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ縺ェ繧峨�
712                                                if(path[t] == d.target){
713                                                        // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ
714                                                        linktext = d.property
715                                                }
716                                        }
717
718                                        // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆繝ェ繝ウ繧ッ繝�く繧ケ繝医r霑斐☆
719                                        return linktext;
720                                });
721
[239]722                        // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺�
723                        link
724                                // 邱壹�濶イ蛻、螳�
725                                .style("stroke", function(d){
[238]726
[239]727                                        var strokecolor = "#999";
[238]728
729                                        // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
730                                        for(var t = 0; t < path.length; t++){
731                                                // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ縺ェ繧峨�
732                                                if(path[t] == d.target){
733                                                        // 繝ェ繝ウ繧ッ縺ョ濶イ縺ォ襍、繧偵そ繝�ヨ
734                                                        strokecolor = "#ffaaaa"
735                                                }
736                                        }
737
[239]738                                        // 邱壹�濶イ繧定ソ斐☆
[238]739                                        return strokecolor;
[239]740                                });
[232]741
[239]742                        // 縺薙%縺セ縺ァ縺ョ險ュ螳壹r蜈�↓蜀肴緒逕サ
743                        redraw();
[232]744
[239]745                // 繧ッ繝ェ繝�け縺輔l縺溘→縺�
746                }).on("click", function(d){
747                        // 譛ォ遶ッ繝弱�繝峨↑繧峨せ繝代�繧ッ繝ォ逋コ陦�
748                        if(d.path != "notend"){
749                                generateSPARQL();
750                        }
751                });
[232]752
[239]753                // 蜀肴緒逕サ髢「謨ー
754                var redraw = function (duration){
[232]755
[239]756                        // 縺九¢繧区凾髢薙′譛ェ謖�ョ壹↑繧峨�
757                        if(duration == undefined){
758                                // 0.5遘偵°縺代※繧「繝九Γ繝シ繧キ繝ァ繝ウ
759                                duration = 500;
760                        }
[232]761
[239]762                        // 蜷�Μ繝ウ繧ッ縺ォ縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
763                        link
764                                .transition()
765                                .duration(duration)
766                                .attr("x1", function(d) {return node.data()[d.source].x;})
767                                .attr("y1", function(d) {return node.data()[d.source].y;})
768                                .attr("x2", function(d) {return node.data()[d.target].x;})
769                                .attr("y2", function(d) {return node.data()[d.target].y;});
[232]770
[239]771                        // 蜷�ヮ繝シ繝峨↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
772                        node
773                                .transition()
774                                .duration(duration)
775                                .attr("cx", function(d) {return d.x;})
776                                .attr("cy", function(d) {return d.y;});
[232]777
[239]778                        // 蜷�ヮ繝シ繝峨ユ繧ュ繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ縲√ユ繧ュ繧ケ繝域緒逕サ菴咲スョ繧剃ク贋ク九↓謖ッ繧�
779                        tnode
780                                .transition()
781                                .duration(duration)
782                                .attr("x", function(d) {return d.x;})
783                                .attr("y", function(d) {
784                                        // 繝�ヵ繧ゥ繝ォ繝医〒蟆代@荳九£繧�
785                                        var updown = (NODEHEIGHT * 0.4);
786                                        // 螂�焚逡ェ逶ョ縺ョ豺ア縺輔↑繧牙ー代@荳翫£繧�
787                                        if(d.group % 2 == 1){
788                                                updown = -(NODEHEIGHT * 0.2);
789                                        }
790                                        // 縺昴�蛟、繧帝ォ倥&縺ォ霑斐☆縺薙→縺ァ繝�く繧ケ繝域緒逕サ菴咲スョ縺御コ偵>驕輔>縺ォ縺ェ繧�
791                                        return d.y + updown;
792                                });
[232]793
[239]794                        // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
795                        tlink
796                                .transition()
797                                .duration(duration)
798                                .attr("x", function(d) {return (node.data()[d.source].x + node.data()[d.target].x) / 2;})
799                                .attr("y", function(d) {return ((node.data()[d.source].y + node.data()[d.target].y) / 2) + 4;});
[232]800
[239]801                };
[232]802
[239]803                // 蛻晏屓縺ョ縺ソduration繧�縺ィ謖�ョ壹@蜀肴緒逕サ�医い繝九Γ繝シ繧キ繝ァ繝ウ縺ェ縺暦シ�
804                redraw(0);
[232]805
[239]806        }else{
807                // SVG縺ョ蜑企勁
808                d3.select(".SBGraph svg").remove();
809        }
810};
[232]811
812
[239]813// 繝��繧ソ菴懈�繝。繧ス繝�ラ
814make_data = function(){
[232]815
[239]816        // 邨先棡逕ィ繧ェ繝悶ず繧ァ繧ッ繝医r蛻晄悄蛹�
817        ret = new Object();
818        ret['nodes'] = new Array();
819        ret['links'] = new Array();
[232]820
[239]821        // 蜷�ィョ螟画焚縺ョ蛻晄悄蛹�
[232]822        PATHNUM = 0;
823        MAXDEPTH = 0;
824        TREESPACE = 0;
825        DRAWHEIGHT = NODEHEIGHT;
826
[239]827        // 陦ィ遉コ縺吶k繝代せ謨ー
[232]828        var viewnum;
829
[239]830        // jsontext繧貞叙蠕�
[232]831        var obj = jsontext;
832
[239]833        // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧偵Μ繧サ繝�ヨ
[237]834        $('.SBResult').css('color', 'black').css('font-weight', 'normal').css('margin-top', '4px');
[232]835
[239]836        // 隍�焚蠖「縺ョs繧偵▽縺代k
[232]837        $('.SBPlural').text('s');
838
[239]839        // 繝代せ縺ョ謨ー縺�縺縺」縺溘i
[232]840        if(obj.length == 0){
[239]841                // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧定オ、縺ョ螟ェ蟄励↓縺鈴伜沺蜀�ク贋ク倶クュ螟ョ縺ォ
[237]842                $('.SBResult').css('color', 'red').css('font-weight', 'bold').css('margin-top', '20px');
[239]843                // 隍�焚蠖「縺ョs繧貞炎髯、
[232]844                $('.SBPlural').text('');
[239]845        // 繝代せ謨ー縺�縺ェ繧�
[232]846        }else if(obj.length == 1){
[239]847                // 隍�焚蠖「縺ョs繧貞炎髯、
[232]848                $('.SBPlural').text('');
849        }
850
[239]851        // 繝代せ縺ョ謨ー縺悟香莉・荳九↑繧�
[232]852        if(obj.length <= 10){
[239]853                // 陦ィ遉コ謨ー繧偵ヱ繧ケ謨ー縺ォ
[232]854                viewnum = obj.length;
[239]855                // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧帝伜沺蜀�ク贋ク倶クュ螟ョ縺ォ
[237]856                $('.SBResult').css('margin-top', '20px');
[239]857                // 蜈ィ陦ィ遉コ繝懊ち繝ウ繧帝國縺�
[244]858                $('.SBViewAll').hide();
[239]859        // 繝ェ繝溘ャ繝医′10縺ェ繧峨�
[232]860        }else if(pathlimit == 10){
[239]861                // 陦ィ遉コ繝代せ謨ー繧�0縺ォ
[232]862                viewnum = 10;
[239]863                // 蜈ィ陦ィ遉コ繝懊ち繝ウ繧貞�縺�
[244]864                $('.SBViewAll').show();
[239]865        // 繝ェ繝溘ャ繝医′縺ェ縺代l縺ー
[232]866        }else{
[239]867                // 陦ィ遉コ繝代せ謨ー繧貞�繝代せ謨ー縺ォ
[232]868                viewnum = obj.length;
[239]869                // 邨先棡繝代せ謨ー縺ョ繧ケ繧ソ繧、繝ォ繧帝伜沺蜀�ク贋ク倶クュ螟ョ縺ォ
[237]870                $('.SBResult').css('margin-top', '20px');
[239]871                // 蜈ィ陦ィ遉コ繝懊ち繝ウ繧帝國縺�
[244]872                $('.SBViewAll').hide();
[232]873        }
874
[239]875        // 邨先棡繝代せ謨ー縺ョ蛟、繧呈峩譁ー
[232]876        $('.SBPathnum').text(obj.length);
[239]877        // 邨先棡繝代せ謨ー繧定。ィ遉コ
[232]878        $('.SBResult').show();
879
[239]880        // obj繝医ャ繝鈴嚴螻、縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
881        for(var i = 0; i < viewnum; i++){
882                if(i == 0){
883                        // 蛻晏屓縺縺代Ν繝シ繝医ヮ繝シ繝峨r繝励ャ繧キ繝・
884                        ret['nodes'].push({'name': obj[0]['label'], 'uri': obj[0]['startClass'], 'group': 0, 'x':50, 'y':50, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': 'hsl(40, 50%, 75%)'});
885                }
886                // 蜈医↓source縺ォ0�医Ν繝シ繝茨シ峨r莉」蜈・
887                var source = 0;
888                // 蜈ア騾壹Ν繝シ繝亥愛螳壹rtrue縺ォ
889                var isCommon = true;
[232]890
[239]891                // 縺薙�繝代せ縺ョ繧ケ繧ウ繧「繧貞叙蠕�
892                var score = obj[i]['score'];
[232]893
[239]894                // classLinks縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
895                for(var j = 0;j < obj[i]['classLinks'].length; j++){
[232]896
[239]897                        // 繝ェ繝ウ繧ッ縺ョ蜷榊燕繧旦RL譛ォ蟆セ縺九i蜿門セ�
898                        var propertytext = obj[i]['classLinks'][j]['predicate'];
899                        var propertysplit1 = propertytext.split("/");
900                        var propertysplit2 = propertysplit1[propertysplit1.length - 1];
901                        var propertysplit3 = propertysplit2.split("#");
902                        propertytext = propertysplit3[propertysplit3.length - 1];
[232]903
[239]904                        // 豺ア縺輔′譛€螟ァ繧医j螟ァ縺阪¢繧後�譖エ譁ー
905                        if(MAXDEPTH < j+1){
906                                MAXDEPTH = j+1;
907                        }
908                        // 縺薙%縺セ縺ァ蜈ア騾壹Ν繝シ繝医↑繧�
909                        if(isCommon){
910                                // 莉雁屓繧ょ�騾壹°遒コ隱阪☆繧九◆繧√�繝輔Λ繧ー
911                                var isCommonNow = false;
912                                // nodes驟榊�縺ォ蜷後§linkedClass縺梧里縺ォ縺ゅk縺狗「コ隱�
913                                var targets = [];
914                                for(var k = 0; k < ret['nodes'].length; k++){
915                                        // 蜷碁嚴螻、縺九▽蜷後§蜷榊燕縺ョ繧ゅ�縺後≠縺」縺溘itargets驟榊�縺ォ逡ェ蜿キ繧定ソス蜉
916                                        if(ret['nodes'][k]['group'] == (j+1) && obj[i]['classLinks'][j]['linkedClass'] == ret['nodes'][k]['uri']){
917                                                targets.push(k);
918                                        }
919                                }
[232]920
[239]921                                // 譌「縺ォ縺ゅ▲縺溷エ蜷医�links驟榊�縺ォ蜷後§link縺悟ュ伜惠縺吶k縺狗「コ隱�
922                                if(targets.length != 0){
923                                        // 蜈医⊇縺ゥ隕九▽縺代◆targets縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
924                                        for(var l = 0; l <targets.length; l++){
925                                                // links驟榊�縺ォ蜈ィ縺丞酔縺俶擅莉カ縺ョ繧ゅ�縺後≠繧九°遒コ隱�
926                                                for(var m = 0; m < ret['links'].length; m++){
927                                                        // 縺ゅ▲縺溷エ蜷井サ雁屓縺ョ繧ゅ�縺ッ霑ス蜉縺帙★source繧呈峩譁ー縺励※谺。縺ク
928                                                        if(ret['links'][m]['source'] == source && ret['links'][m]['target'] == targets[l] && ret['links'][m]['uri'] == obj[i]['classLinks'][j]['predicate'] && !isCommonNow){
929                                                                // 蜈ア騾壹Ν繝シ繝医ヵ繝ゥ繧ー繧偵が繝ウ
930                                                                isCommonNow = true;
931                                                                source = targets[l];
932                                                        }
933                                                }
934                                        }
[232]935
[239]936                                        // 蜷дarget繧堤「コ隱阪@縺ヲ蜈ア騾壹Ν繝シ繝医〒縺ッ縺ェ縺九▲縺溷エ蜷域眠隕剰ソス蜉
937                                        if(!isCommonNow){
938                                                isCommon = false;
939                                                ret['nodes'].push({'name': obj[i]['classLinks'][j]['label'], 'uri': obj[i]['classLinks'][j]['linkedClass'], 'group': (j+1), 'x':0, 'y':0, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': '#cccccc'});
940                                                ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'property': propertytext, 'uri': obj[i]['classLinks'][j]['predicate']});
941                                                source = ret['nodes'].length - 1;
942                                        }
[232]943
[239]944                                // 縺ェ縺九▲縺溷エ蜷医�蛻・譚。莉カ縺ェ縺ョ縺ァ譁ー隕剰ソス蜉縺励※谺。縺ク
945                                }else{
[232]946
[239]947                                        isCommon = false;
948                                        ret['nodes'].push({'name': obj[i]['classLinks'][j]['label'], 'uri': obj[i]['classLinks'][j]['linkedClass'], 'group': (j+1), 'x':0, 'y':0, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': '#cccccc'});
949                                        ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'property': propertytext, 'uri': obj[i]['classLinks'][j]['predicate']});
950                                        source = ret['nodes'].length - 1;
951                                }
952                        // 譌「縺ォ蜈ア騾壹Ν繝シ繝医〒縺ェ縺�↑繧画眠隕剰ソス蜉縺励※谺。縺ク
953                        }else{
954                                ret['nodes'].push({'name': obj[i]['classLinks'][j]['label'], 'uri': obj[i]['classLinks'][j]['linkedClass'], 'group': (j+1), 'x':0, 'y':0, 'nodeid':ret['nodes'].length, 'path': 'notend', 'nodecolor': '#cccccc'});
955                                ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'property': propertytext, 'uri': obj[i]['classLinks'][j]['predicate']});
956                                source = ret['nodes'].length - 1;
957                        }
[232]958
[239]959                }
960                // 譛€蠕鯉シ域忰遶ッ繝弱�繝会シ峨↓蜷�ィョ蛟、繧定ソス蜉
961                ret['nodes'][ret['nodes'].length - 1]['path'] = obj[i];
962                ret['nodes'][ret['nodes'].length - 1]['score'] = score;
963                ret['nodes'][ret['nodes'].length - 1]['nodecolor'] = 'hsl(150, 50%, 75%)';
964                // 繝代せ謨ー繧定ソス蜉
965                PATHNUM++;
966        }
967        // 繝弱�繝蛾俣縺ョ繧ケ繝壹�繧ケ繧定ィ育ョ�
968        TREESPACE = $('.SBGraph').width() / (MAXDEPTH + 1);
[232]969
[239]970        // 縺ァ縺阪◆邨先棡繧定ソ斐☆
971        return ret;
[232]972};
973
974set_map_location = function(myNodeIndex, nodes, links, depth, fromAngle, toAngle){
975
976    // depth縺梧悴螳夂セゥ縺ェ繧峨�0繧偵そ繝�ヨ
977    if (depth == undefined){
978        depth = 0;
979    }
980
981    // 蜷�ィョ蛻晄悄蛹�
982    var children = undefined;
983    var parent = undefined;
984    var parentsChildren = undefined;
985
986    // links驟榊�縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
987    for (var i=0; i<links.length; i++){
988        // 縺昴�links縺ョtarget縺稽yNodeIndex縺ェ繧英arent繧偵そ繝�ヨ
989        if (links[i].target == myNodeIndex){
990            parent = links[i].source;
991        }
992    }
993
994    // parent縺瑚ヲ九▽縺九▲縺ヲ縺�◆縺ェ繧峨�
995    if (parent != undefined){
996        // parent縺ィlinks繧呈ク。縺揚et_children繝。繧ス繝�ラ繧貞ョ溯。�
997        parentsChildren = get_children(parent, links);
998    }
999
1000    if(myNodeIndex != 0){
1001        DRAWHEIGHT += (NODEHEIGHT * 1.5);
1002        var x = (depth * TREESPACE) + (TREESPACE / 3);
1003        var y = DRAWHEIGHT;
1004        nodes[myNodeIndex].x = x;
1005        nodes[myNodeIndex].y = y;
1006    }else{
1007        var x = TREESPACE / 3;
1008        var y = (NODEHEIGHT * 1.5) * ((PATHNUM - 1) / 2) + NODEHEIGHT;
1009        nodes[myNodeIndex].x = x;
1010        nodes[myNodeIndex].y = y;
1011    }
1012
1013    children = get_children(myNodeIndex, links);
1014
1015    for (var i=0; i<children.length; i++){
1016        if(i == 0){
1017            DRAWHEIGHT -= (NODEHEIGHT * 1.5);
1018        }
1019        var child = children[i];
1020        set_map_location(child, nodes, links, depth+1, fromAngle + ((toAngle - fromAngle) / children.length) * i, fromAngle + ((toAngle - fromAngle) / children.length) * (i+1));
1021    }
1022
1023};
1024
1025// 謖�ョ壹&繧後◆隕ェ縺梧戟縺、蟄舌r霑斐☆
1026get_children = function(index, links){
1027    var children = new Array();
1028    // links縺ョ謨ー縺縺醍「コ隱阪@縺ェ縺後i
1029    for (var i=0; i<links.length; i++){
1030        // 隕ェ縺梧ク。縺輔l縺溯ヲェ縺ィ荳€閾エ縺吶k譎ゅ�蟄舌r霑ス蜉
1031        if (links[i].source == index){
1032            children.push(links[i].target);
1033        }
1034    }
1035    return children;
1036};
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。