root/SPARQLBuilderWWW/web/drawgraph.js @ 249

リビジョン 194, 24.6 KB (コミッタ: lenz, 10 年 前)

スタートクラス・エンドクラスの選択用インターフェースに表示用文字列を出す仕様に変更

1ファイルに描画系含め全ての関数等がある状態だったので描画関連メソッドを別ファイルに切り出し
jQueryを外部サイトから読み込んでいたがローカルから読み込む形に変更

  • 属性 svn:mime-type の設定値 text/plain
行番号 
1// 謠冗判蜃ヲ逅�
2function view_map(){
3
4        // make_data繝。繧ス繝�ラ縺ョ邨先棡繧貞叙蠕�
5        var json = make_data(0);
6
7        // SVG縺悟ュ伜惠縺吶k縺ェ繧峨�蜑企勁
8        if (d3.select("#graph").select("svg")) {
9                d3.select("#graph").select("svg").remove();
10        }
11
12        if(json['nodes'].length != 0){
13
14                // 蜃コ譚・荳翫′縺」縺溽オ先棡繧呈ク。縺励※繝槭ャ繝嶺ク翫�繝ュ繧ア繝シ繧キ繝ァ繝ウ繧偵そ繝�ヨ
15                set_map_location(0, json['nodes'], json['links']);
16
17                // SVG縺ョ蟷�→鬮倥&繧定ィュ螳夲シ亥ケ�シ夂判髱「縺�▲縺ア縺�€€鬮倥&�壹ヱ繧ケ縺ョ謨ー縺ォ蠢懊§險ュ螳夲シ�
18                var width = window.innerWidth;
19                var height = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2);
20
21                // 繧ォ繝ゥ繝シ繧貞叙蠕�
22                var color = d3.scale.category20();
23
24                // 逕サ髱「繧オ繧、繧コ縺ォ蜷医o縺婀VG縺ョ霑ス蜉
25                var svg = d3.select("#graph").append("svg")
26                        .attr("width", width)
27                        .attr("height", height);
28
29                // 閭梧勹縺ョ霑ス蜉
30                var bg = svg
31                        .append("rect")
32                        .attr("x", 0)
33                        .attr("y", 0)
34                        .attr("width", width)
35                        .attr("height", height)
36                        .attr("fill", "#fafafa");
37
38                // links驟榊�繧呈ク。縺励Μ繝ウ繧ッ縺ョ菴懈�
39                var link = svg.selectAll(".link")
40                        .data(json.links)
41                        .enter().append("line")
42                        .attr("class", "link")
43                        .style("stroke-width", function(d) { return Math.sqrt(d.value);});
44
45                // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨�菴懈�
46                var node = svg.selectAll(".node")
47                        .data(json.nodes)
48                        .enter().append("circle")
49                        .attr("class", "node")
50                        .attr("r", (NODEHEIGHT / 2))
51                        .attr("cx", function(d) { return d.x;} )
52                        .attr("cy",  function(d) { return d.y; })
53                        .style("stroke", function(d) { return '#fafafa'; })
54                        .style("stroke-width", function(d) { return '1.5px'; })
55                        .style("fill", function(d) { return color(d.group); })
56                        .style("cursor", function(d) { return 'pointer'; });
57
58                // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈�
59                var tnode = svg.selectAll("text.node")
60                        .data(json.nodes)
61                        .enter().append("svg:text")
62                        .attr("class", "tnode")
63                        .attr("x", function(d) { return d.x; })
64                        .attr("y", function(d) { return d.y; })
65                        .text(function(d) { return d.name; })
66                        .style("fill", function(d) { return '#000000'; })
67                        .style("text-anchor", function(d) { return 'middle'; })
68                        .style("pointer-events", "none");
69
70                // 繝ェ繝ウ繧ッ繝�く繧ケ繝医�菴懈�
71                var tlink = svg.selectAll("text.link")
72                        .data(json.links)
73                        .enter().append("svg:text")
74                        .attr("class", "tlink")
75                        .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; })
76                        .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; })
77                        .style("fill", function(d) { return '#000000'; })
78                        .style("text-anchor", function(d) { return 'middle'; });
79
80                // 繝弱�繝峨∈縺ョ繧ェ繝ウ繝槭え繧ケ縺ァ繝代せ謗「邏「縲√ヱ繧ケ荳ュ縺ョ繝ェ繝ウ繧ッ譁�ュ励r陦ィ遉コ
81                node.on("mouseover", function(d){
82
83                        // 繝槭え繧ケ縺ョ蜍輔″繧ォ繧ヲ繝ウ繝医r繝ェ繧サ繝�ヨ
84                        MOUSEMOVED = 0;
85
86                        // 陦ィ遉コ縺吶k繝代せ菫晏ュ倡畑驟榊�
87                        var path = [];
88                        // 繝��繝ォ繝√ャ繝励∈縺ョ蜷榊燕陦ィ遉コ逕ィ驟榊�
89                        var pathname = [];
90
91                        // 繝ォ繝シ繝医ヮ繝シ繝我サ・螟悶↑繧�
92                        if(d.nodeid != 0){
93                                // 縺セ縺壹が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�id縺ィ蜷榊燕繧偵◎繧後◇繧瑚ソス蜉
94                                path.push(d.nodeid);
95                                pathname.push(d.name);
96
97                                // 繝代せ謗「邏「
98                                do{
99                                        // 繝ェ繝ウ繧ッ縺ョ謨ー縺縺醍ケー繧願ソ斐@
100                                        for(var i = 0; i < link.data().length; i++){
101                                                // 迴セ蝨ィ縺ョ譛€蠕悟ーセ縺ォ郢九′繧九Μ繝ウ繧ッ縺後≠繧後�
102                                                if(path[(path.length-1)] == link.data()[i].target){
103                                                        // 縺昴�繝ェ繝ウ繧ッ縺ョ繧ス繝シ繧ケ蛛エ繝弱�繝峨�id繧定ソス蜉
104                                                        path.push(link.data()[i].source);
105                                                        // 縺昴�繝ェ繝ウ繧ッ縺ョ蜷榊燕縺ィ繧ス繝シ繧ケ蛛エ繝弱�繝峨�蜷榊燕繧定ソス蜉
106                                                        pathname.push(link.data()[i].property);
107                                                        pathname.push(node.data()[link.data()[i].source].name);
108                                                }
109                                        }
110                                // 繝ォ繝シ繝医ヮ繝シ繝峨↓霎ソ繧顔捩縺上∪縺ァ郢ー繧願ソ斐☆
111                                }while(path[(path.length-1)] != 0);
112
113                                // 譛ォ遶ッ繝弱�繝峨〒縺ェ縺�↑繧�
114                                if(d.path == "notend"){
115                                        // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ縺ォ
116                                        document.getElementById("showpath").style.display = "none";
117                                }else{
118                                        // 譛ォ遶ッ繝弱�繝峨↑繧峨ヤ繝シ繝ォ繝√ャ繝励�諠�ア繧呈峩譁ー
119                                        var resultText = "<h3>Selected Path</h3>";
120                                        // 繝代せ縺ョ蜷榊燕驟榊�蛻�セ後m縺九i郢ー繧願ソ斐@縺ェ縺後i
121                                        for (var i = pathname.length;i > 0; i--){
122                                                // 螂�焚逡ェ逶ョ�医ヮ繝シ繝峨�蜷榊燕�峨�螟ェ蟄励↓
123                                                if(i % 2 == 1){
124                                                        resultText = resultText + "<span style=\"font-weight: bold;\">" + pathname[i - 1] + "</span><br><br>";
125                                                // 蛛カ謨ー逡ェ逶ョ�医Μ繝ウ繧ッ縺ョ蜷榊燕�峨�縺昴�縺セ縺セ縺ァ陦ィ遉コ
126                                                }else{
127                                                        resultText = resultText + pathname[i - 1] + "<br><br>";
128                                                }
129                                        }
130                                        // 繝��繝ォ繝√ャ繝励�蜀�ョケ繧呈嶌縺肴鋤縺�
131                                        document.getElementById("selectpath").innerHTML=(resultText);
132                                        document.getElementById("showpath").style.display = "block";
133
134                                        // 繧オ繝シ繝悶Ξ繝�ヨ縺ォ騾√j霑斐☆繝代せ繧ェ繝悶ず繧ァ繧ッ繝医r菫晏ュ�
135                                        pathobj = d.path;
136
137                                        // 繝��繝ォ繝√ャ繝苓。ィ遉コ譎ゅ�蠎ァ讓呻シ医が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�讓ェ縺ォ繝懊ち繝ウ縺梧擂繧九h縺��鄂ョ��
138                                        var xPosition = parseFloat(d3.select(this).attr("cx")) + parseFloat(d3.select(this).style("stroke-width")) + (NODEHEIGHT * 0.5);
139                                        var yPosition = parseFloat(d3.select(this).attr("cy") - document.getElementById("showpath").offsetHeight + document.getElementById("menu").offsetHeight) + (NODEHEIGHT * 0.5);
140
141                                        // 繝��繝ォ繝√ャ繝励′逕サ髱「螟悶↓蜃コ縺ェ縺�h縺�」懈ュ」
142                                        if(xPosition < 0){
143                                                xPosition = 0;
144                                        }
145                                        if(yPosition < 0){
146                                                yPosition = 0;
147                                        }
148
149                                        // 逕滓�縺励◆蠎ァ讓吶↓繝��繝ォ繝√ャ繝励r陦ィ遉コ
150                                        document.getElementById("showpath").style.left = xPosition + "px"
151                                        document.getElementById("showpath").style.top = yPosition + "px"
152                                }
153                        // 繝ォ繝シ繝医ヮ繝シ繝峨□縺」縺溘↑繧�
154                        }else{
155                                // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ
156                                document.getElementById("showpath").style.display = "none";
157                        }
158
159                        // 繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�鬮倥&縺ォ隕ェ繧貞粋繧上○繧九◆繧√↓蜷医o縺帙k鬮倥&繧剃ソ晏ュ�
160                        var movey = d.y;
161
162                        // 蜷�ヮ繝シ繝峨↓蟇セ縺�
163                        node
164                                // 霈ェ驛ュ邱壹�濶イ繧定ィュ螳�
165                                .style("stroke", function(d){
166                                        // 縺セ縺壹�閭梧勹濶イ�医ョ繝輔か繝ォ繝茨シ峨r謖�ョ�
167                                        var strokecolor = "#fafafa";
168
169                                        // 繝代せ蛻、螳壹�蜑榊�逅�
170                                        // 陦ィ遉コ繝輔Λ繧ー縺系ow�亥燕蝗槭が繝ウ繝槭え繧ケ縺ァ蜍輔>縺ヲ縺�◆繝弱�繝会シ峨↑繧�
171                                        if(d.view == "now"){
172                                                // 繝弱�繝峨�陦ィ遉コ繝輔Λ繧ー繧地o縺ォ
173                                                d.view = "no";
174                                        }
175                                        // 陦ィ遉コ繝輔Λ繧ー縺稽oved�医け繝ェ繝�け縺輔l蝗コ螳壽ク医∩縺縺悟燕蝗槫虚縺�※縺�◆繝弱�繝会シ峨↑繧�
176                                        if(d.view == "moved"){
177                                                // 陦ィ遉コ繝輔Λ繧ー繧団licked縺ォ謌サ縺�
178                                                d.view = "clicked";
179                                        }
180
181                                        // 陦ィ遉コ繝輔Λ繧ー縺系o縺ョ繧ゅ�縺九i遒コ隱�
182                                        if(d.view == "no"){
183                                                // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i
184                                                for(var n = 0; n < path.length; n++){
185                                                        // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i
186                                                        if(path[n] == d.nodeid){
187                                                                // 霈ェ驛ュ邱壹r襍、縺ォ
188                                                                strokecolor = "#ffaaaa";
189                                                                // 陦ィ遉コ繝輔Λ繧ー繧地ow�井サ雁屓蜍輔>縺溘ヮ繝シ繝会シ峨↓
190                                                                d.view = "now";
191                                                        }
192                                                }
193                                        // 蝗コ螳壽ク医∩繝弱�繝峨□縺」縺溘i
194                                        }else if(d.view == "clicked"){
195                                                // 縺セ縺壹�霈ェ驛ュ邱壹r襍、縺ォ
196                                                strokecolor = "#ffaaaa";
197                                                // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨°繝√ぉ繝�け
198                                                for(var n = 0; n < path.length; n++){
199                                                        if(path[n] == d.nodeid){
200                                                                // 蜷ォ縺セ繧後※縺�◆縺ェ繧我サ雁屓蜍輔°縺吶◆繧√ヵ繝ゥ繧ー繧知oved縺ォ
201                                                                d.view = "moved";
202                                                        }
203                                                }
204                                        }
205
206                                        // 縺薙%縺セ縺ァ縺ァ蠕励i繧後◆霈ェ驛ュ邱壹�濶イ繧定ソ斐☆
207                                        return strokecolor;
208                                })
209                                // 鬮倥&縺ョ蛟、
210                                .attr("cy", function(d){
211                                        // 繝弱�繝峨′莉雁屓繧ェ繝ウ繝槭え繧ケ縺輔l縺溘�縺セ縺溘�蝗コ螳壽ク医∩縺縺檎ァサ蜍輔ヵ繝ゥ繧ー繧偵▽縺代i繧後※縺�l縺ー
212                                        if(d.view == "now" || d.view == "moved"){
213                                                // 迴セ蝨ィ縺ョ鬮倥&繧貞叙蠕�
214                                                var curty = d.y;
215                                                // d.y縺ォ蟄舌ヮ繝シ繝峨�鬮倥&繧偵そ繝�ヨ
216                                                d.y = movey;
217                                                // 迴セ蝨ィ縺ョ鬮倥&繧定ソ斐☆�医%縺ョ譎らせ縺ァ縺ッ迴セ蝨ィ菴咲スョ縺ォ謠冗判縺輔l縲〉edraw髢「謨ー縺ァd.y縺ォ繧「繝九Γ繝シ繧キ繝ァ繝ウ縺輔l繧具シ�
218                                                return curty;
219                                        // 遘サ蜍募ッセ雎。縺ァ縺ェ縺�↑繧�
220                                        }else{
221                                                // 迴セ蝨ィ菴咲スョ繧偵◎縺ョ縺セ縺セ霑斐☆
222                                                return d.y;
223                                        }
224                                });
225
226                        // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓蟇セ縺�
227                        tlink
228                                // 繝�く繧ケ繝郁。ィ遉コ蛻、螳�
229                                .text(function(d) {
230                                        // 繝�ヵ繧ゥ繝ォ繝医〒遨コ繧偵そ繝�ヨ
231                                        var linktext = "";
232                                        // 陦ィ遉コ繝輔Λ繧ー縺系ow�亥燕蝗櫁。ィ遉コ縺輔l縺ヲ縺�◆繝ェ繝ウ繧ッ�峨↑繧�
233                                        if(d.view == "now"){
234                                                // 陦ィ遉コ繝輔Λ繧ー繧定ァ」髯、
235                                                d.view = "no";
236                                        }
237
238                                        // 陦ィ遉コ繝輔Λ繧ー縺系o縺ェ繧�
239                                        if(d.view == "no"){
240                                                // 繝代せ縺ョ繝弱�繝画焚蛻�ケー繧願ソ斐@
241                                                for(var t = 0; t < path.length; t++){
242                                                        // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ�医°縺、縺昴�繝弱�繝峨′謚倥j縺溘◆縺セ繧後※縺�↑縺代l縺ー��
243                                                        if(path[t] == d.target && node.data()[d.target].view != "hide"){
244                                                                // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ
245                                                                linktext = d.property
246                                                                // 陦ィ遉コ繝輔Λ繧ー縺ォnow繧偵そ繝�ヨ
247                                                                d.view = "now";
248                                                        }
249                                                }
250                                        // 陦ィ遉コ繝輔Λ繧ー縺掲ix�医け繝ェ繝�け縺輔l縺溘ヱ繧ケ縺ョ繝ェ繝ウ繧ッ�峨↑繧峨��医°縺、郢九′繧句�縺ョ繝弱�繝峨′謚倥j縺溘◆縺セ繧後※縺�↑縺代l縺ー��
251                                        }else if(d.view == "fix" && node.data()[d.target].view != "hide"){
252                                                // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ
253                                                linktext = d.property
254                                        }
255                                        // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆繝ェ繝ウ繧ッ繝�く繧ケ繝医r霑斐☆
256                                        return linktext;
257                                });
258
259                        // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺�
260                        link
261                                // 邱壹�濶イ蛻、螳�
262                                .style("stroke", function(d){
263                                        // 陦ィ遉コ繝輔Λ繧ー縺系o縺ェ繧峨�
264                                        if(d.view == "no"){
265                                                // 濶イ繧偵ョ繝輔か繝ォ繝医↓
266                                                return "#999";
267                                        // 縺昴l莉・螟厄シ亥崋螳壹d繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヱ繧ケ縺ォ蜷ォ縺セ繧後k�峨↑繧�
268                                        }else{
269                                                // 濶イ繧定オ、縺ォ
270                                                return "#ffaaaa";
271                                        }
272                                });
273
274                        // 縺薙%縺セ縺ァ縺ョ險ュ螳壹r蜈�↓蜀肴緒逕サ
275                        redraw();
276
277                // 繝弱�繝峨∈縺ョ繧ッ繝ェ繝�け縺ァ驕ク謚槫崋螳壼喧�亥所縺ウ謚倥j逡ウ縺ソ蜃ヲ逅�シ�
278                }).on("click", function(d){
279
280                        // 蜷�ヮ繝シ繝峨↓蟇セ縺�
281                        node
282                                // 霈ェ驛ュ邱壹�蛻、螳�
283                                .style("stroke", function(d) {
284                                        // 繝�ヵ繧ゥ繝ォ繝医�濶イ繧偵そ繝�ヨ
285                                        var strokecolor = "#fafafa"
286                                        // 陦ィ遉コ繝輔Λ繧ー縺後が繝ウ繝槭え繧ケ荳ュ繝サ蝗コ螳壻クュ繝サ遘サ蜍穂クュ�磯∈謚槭&繧後※縺�k繝弱�繝会シ峨↑繧峨�
287                                        if(d.view == "now" || d.view == "clicked" || d.view == "moved"){
288                                                // 濶イ繧定オ、縺ォ
289                                                strokecolor = "#ffaaaa"
290                                                // 陦ィ遉コ繝輔Λ繧ー繧貞崋螳壻クュ縺ォ
291                                                d.view = "clicked";
292                                        }
293                                        // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆濶イ繧定ソ斐☆
294                                        return strokecolor;
295                                });
296
297                        // 縺薙%縺九i蟄舌ヮ繝シ繝峨�逡ウ縺ソ霎シ縺ソ蜃ヲ逅�シ育樟蝨ィ縺ッ蟒�ュ「縲∝ソオ縺ョ縺溘a繧ウ繝シ繝峨�谿九@縺ヲ縺翫¥��
298                        /*
299                        var childs = [];
300                        var prevchilds = [];
301                        prevchilds.push(d.nodeid);
302
303                        //
304                        do{
305                                var tmpchilds = [];
306                                var curchilds = [];
307                                for(var p = 0; p < prevchilds.length; p++){
308                                        tmpchilds = get_children(prevchilds[p], json['links']);
309                                        curchilds = curchilds.concat(tmpchilds);
310                                }
311                                prevchilds = curchilds;
312                                childs = childs.concat(curchilds);
313
314                        }while(curchilds.length != 0);
315
316                        var childy = d.y;
317                        for(var c = 0; c < childs.length; c++){
318                                if(node.data()[childs[c]].y < childy){
319                                        childy = node.data()[childs[c]].y;
320                                }
321                        }
322
323                        d.y = childy;
324
325                        var maxdy = 0;
326                        var mindy = 0;
327
328                        for(var c = 0; c < childs.length; c++){
329                                if(node.data()[childs[c]].view != "hide"){
330                                        var dy = node.data()[childs[c]].y - d.y;
331                                        if(dy > maxdy){
332                                                maxdy = dy;
333                                        }
334                                        node.data()[childs[c]].x = d.x;
335                                        node.data()[childs[c]].y = d.y;
336                                        node.data()[childs[c]].dy = dy;
337                                        node.data()[childs[c]].view = "hide";
338                                        node.data()[childs[c]].hideparent = d.nodeid;
339                                }else{
340                                        if(node.data()[childs[c]].hideparent == d.nodeid){
341                                                node.data()[childs[c]].x = d.x + (TREESPACE * (node.data()[childs[c]].group - d.group));
342                                                node.data()[childs[c]].y = node.data()[childs[c]].y + node.data()[childs[c]].dy;
343                                                if(-node.data()[childs[c]].dy < mindy){
344                                                        mindy = -node.data()[childs[c]].dy;
345                                                }
346                                                node.data()[childs[c]].view = "appear";
347                                                node.data()[childs[c]].hideparent = -1;
348                                        }
349                                }
350                        }
351
352                        node
353                        .attr("r", function(d){
354                                if(d.view == "appear"){
355                                        d.view = "no";
356                                }else if(d.y > childy){
357                                        d.y = d.y - maxdy - mindy;
358                                }
359                                if(d.view == "hide"){
360                                        d.x = node.data()[d.hideparent].x;
361                                        d.y = node.data()[d.hideparent].y;
362                                }
363                                if(d.nodeid == 0){
364                                        d.y = childy;
365                                }
366                                return (NODEHEIGHT / 2);
367                        });
368                        */
369
370                        // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺�
371                        tlink
372                                // 繝�く繧ケ繝郁。ィ遉コ蛻、螳�
373                                .text(function(d) {
374                                        // 繝�ヵ繧ゥ繝ォ繝医〒遨コ縺ォ
375                                        var linktext = "";
376                                        // 陦ィ遉コ繝輔Λ繧ー縺檎樟蝨ィ陦ィ遉コ荳ュ縺セ縺溘�蝗コ螳壼喧貂医∩縺ェ繧峨��医°縺、謚倥j逡ウ縺ソ荳ュ縺ァ縺ェ縺代l縺ー��
377                                        if((d.view == "now" || d.view == "fix") && (node.data()[d.target].view != "hide")){
378                                                // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ
379                                                linktext = d.property
380                                                // 陦ィ遉コ繝輔Λ繧ー繧貞崋螳壻クュ縺ォ
381                                                d.view = "fix";
382                                        }
383                                        // 繝�く繧ケ繝医r霑斐☆
384                                        return linktext;
385                                });
386
387                        // 縺薙%縺セ縺ァ縺ョ蜃ヲ逅�オ先棡繧貞�縺ォ蜀肴緒逕サ
388                        redraw();
389
390                });
391
392                // 蜀肴緒逕サ髢「謨ー
393                var redraw = function (duration){
394
395                        // 縺九¢繧区凾髢薙′譛ェ謖�ョ壹↑繧峨�
396                        if(duration == undefined){
397                                // 0.5遘偵°縺代※繧「繝九Γ繝シ繧キ繝ァ繝ウ
398                                duration = 500;
399                        }
400
401                        // 蜷�Μ繝ウ繧ッ縺ォ縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
402                        link
403                                .transition()
404                                .duration(duration)
405                                .attr("x1", function(d) {return node.data()[d.source].x;})
406                                .attr("y1", function(d) {return node.data()[d.source].y;})
407                                .attr("x2", function(d) {return node.data()[d.target].x;})
408                                .attr("y2", function(d) {return node.data()[d.target].y;});
409
410                        // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ
411                        tlink
412                                .transition()
413                                .duration(duration)
414                                .attr("x", function(d) {return (node.data()[d.source].x + node.data()[d.target].x) / 2;})
415                                .attr("y", function(d) {return ((node.data()[d.source].y + node.data()[d.target].y) / 2) + 5;});
416
417                        // 蜷�ヮ繝シ繝峨↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ�医°縺、謚倥j縺溘◆縺セ繧御クュ縺ョ蝣エ蜷医�謠冗判蛻�イ仙�逅�シ�
418                        node
419                                .transition()
420                                .duration(duration)
421                                .attr("cx", function(d) {return d.x;})
422                                .attr("cy", function(d) {return d.y;})
423                                .style("opacity", function(d){
424                                        var opa = 1.0;
425                                        if(d.view == "hide"){
426                                                opa = 0.0;
427                                        }
428                                        return opa;
429                                })
430                                .style("fill", function(d) {
431                                        var fcolor = color(d.group);
432
433                                        for(var n = 0; n < node.data().length; n++){
434                                                if(d.nodeid == node.data()[n].hideparent){
435                                                        fcolor = "ffaaaa";
436                                                }
437                                        }
438                                        return fcolor;
439                                })
440                                .style("pointer-events", function(d){
441                                        var pe = "auto";
442                                        if(d.view == "hide"){
443                                                pe = "none";
444                                        }
445                                        return pe;
446                                });
447
448                        // 蜷�ヮ繝シ繝峨ユ繧ュ繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ縲√ユ繧ュ繧ケ繝域緒逕サ菴咲スョ繧剃ク贋ク九↓謖ッ繧具シ医°縺、謚倥j縺溘◆縺セ繧御クュ縺ョ蝣エ蜷医�謠冗判蛻�イ仙�逅�シ�
449                        tnode
450                        .transition()
451                        .duration(duration)
452                        .attr("x", function(d) {return d.x;})
453                        .attr("y", function(d) {
454                                // 繝�ヵ繧ゥ繝ォ繝医〒蟆代@荳九£繧�
455                                var updown = (NODEHEIGHT * 0.4);
456                                // 螂�焚逡ェ逶ョ縺ョ豺ア縺輔↑繧牙ー代@荳翫£繧�
457                                if(d.group % 2 == 1){
458                                        updown = -(NODEHEIGHT * 0.2);
459                                }
460                                // 縺昴�蛟、繧帝ォ倥&縺ォ霑斐☆縺薙→縺ァ繝�く繧ケ繝域緒逕サ菴咲スョ縺御コ偵>驕輔>縺ォ縺ェ繧�
461                                return d.y + updown;
462                        })
463                        // 謚倥j逡ウ縺ソ迥カ諷九↑繧峨ユ繧ュ繧ケ繝郁。ィ遉コ繧呈カ医☆
464                        .text(function(d){
465                                var nodetext = d.name
466                                if(d.view == "hide"){
467                                        nodetext = "";
468                                }
469                                return nodetext;
470                        });
471
472                };
473
474                // 閭梧勹驛ィ蛻�′繧ッ繝ェ繝�け縺輔l縺溘i陦ィ遉コ縺ョ蝗コ螳壼喧繧定ァ」髯、
475                bg.on("click", function() {
476                        // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ
477                        document.getElementById("showpath").style.display = "none";
478                        d3.selectAll(".node").style("stroke-width", function(d) { return '1.5px'; });
479                        d3.selectAll(".node").style("stroke", function(d) { return '#ffffff'; });
480
481                        // 蜷�ヮ繝シ繝峨�霈ェ驛ュ邱壹�濶イ繧偵ョ繝輔か繝ォ繝医↓
482                        node
483                                .style("stroke", function(d){
484                                        if(d.view != "hide"){
485                                                d.view = "no";
486                                        }
487                                        return "#fafafa";
488                                });
489
490                        // 繝ェ繝ウ繧ッ繝�く繧ケ繝医r蜈ィ縺ヲ遨コ縺ォ
491                        tlink
492                                .text(function(d) {
493                                        d.view = "no";
494                                        return "";
495                                });
496
497                        // 繝ェ繝ウ繧ッ縺ョ濶イ繧貞�縺ヲ繝�ヵ繧ゥ繝ォ繝医↓
498                        link
499                                .style("stroke", function(d){
500                                        return "#999";
501                                });
502
503                });
504
505                // 閭梧勹荳翫〒繝槭え繧ケ縺悟虚縺上#縺ィ縺ォ
506                bg.on("mousemove", function(){
507                        // MOUSEMOVED繧定ソス蜉�医ヮ繝シ繝峨↓繧ェ繝ウ繝槭え繧ケ縺輔l繧句コヲ縺ォ繧ォ繧ヲ繝ウ繝医Μ繧サ繝�ヨ��
508                        MOUSEMOVED++;
509                        // 30繧定カ�∴縺溘i
510                        if(MOUSEMOVED > 30){
511                                // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ縺ォ縺励※繧ォ繧ヲ繝ウ繝医Μ繧サ繝�ヨ
512                                document.getElementById("showpath").style.display = "none";
513                                MOUSEMOVED = 0;
514                        }
515                });
516
517                // 蛻晏屓縺ョ縺ソduration繧�縺ィ謖�ョ壹@蜀肴緒逕サ�医い繝九Γ繝シ繧キ繝ァ繝ウ縺ェ縺暦シ�
518                redraw(0);
519        }
520}
521
522// 繝��繧ソ縺ョ菴懈�繝。繧ス繝�ラ
523function make_data(tdepth, ret, parent, depth){
524        // ret縺梧悴螳夂セゥ縺ェ繧峨�螳夂セゥ縺励※莉」蜈・
525        if (ret == undefined){
526                ret = new Object();
527                ret['nodes'] = new Array();
528                ret['links'] = new Array();
529        }
530
531        PATHNUM = 0;
532        MAXDEPTH = 0;
533        TREESPACE = 0;
534        DRAWHEIGHT = NODEHEIGHT;
535
536        var viewnum;
537
538        var obj = JSON.parse(jsontext);
539
540        document.getElementById("resultmessage").style.color = "black";
541        document.getElementById("resultmessage").style.fontWeight = "normal";
542
543        document.getElementById("plural").innerHTML = "s";
544
545        if(obj['paths'].length == 0){
546                document.getElementById("resultmessage").style.color = "red";
547                document.getElementById("resultmessage").style.fontWeight = "bold";
548                document.getElementById("plural").innerHTML = "";
549        }else if(obj['paths'].length == 1){
550                document.getElementById("plural").innerHTML = "";
551        }
552
553        if(obj['paths'].length <= 10){
554                viewnum = obj['paths'].length;
555                document.getElementById("viewall").style.display = "none";
556        }else if(pathlimit == 10){
557                viewnum = 10;
558                document.getElementById("viewall").style.display = "block";
559        }else{
560                viewnum = obj['paths'].length;
561                document.getElementById("viewall").style.display = "none";
562        }
563
564        document.getElementById("pathnum").innerHTML = obj['paths'].length;
565        document.getElementById("resultmessage").style.display = "block";
566
567        // obj繝医ャ繝鈴嚴螻、縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
568        for(var i = 0; i < viewnum; i++){
569                if(i == 0){
570                        // 蛻晏屓縺縺代Ν繝シ繝医ヮ繝シ繝峨r繝励ャ繧キ繝・
571                        ret['nodes'].push({'name': obj['paths'][0]['startClassLabel'], 'uri': obj['paths'][0]['startClassURI'], 'group': 0, 'x':50, 'y':50, 'nodeid':ret['nodes'].length, 'view' : 'no', 'path': 'notend'});
572                }
573                // 蜈医↓source縺ォ0�医Ν繝シ繝茨シ峨r莉」蜈・
574                var source = 0;
575                // 蜈ア騾壹Ν繝シ繝亥愛螳壹rtrue縺ォ
576                var isCommon = true;
577
578                // classLinks縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
579                for(var j = 0;j < obj['paths'][i]['classLinks'].length; j++){
580
581                        // 繝ェ繝ウ繧ッ縺ョ蜷榊燕繧旦RL譛ォ蟆セ縺九i蜿門セ�
582                        var propertytext = obj['paths'][i]['classLinks'][j]['propertyURI'];
583                        var propertysplit1 = propertytext.split("/");
584                        var propertysplit2 = propertysplit1[propertysplit1.length - 1];
585                        var propertysplit3 = propertysplit2.split("#");
586                        propertytext = propertysplit3[propertysplit3.length - 1];
587
588                        if(MAXDEPTH < j+1){
589                                MAXDEPTH = j+1;
590                        }
591                        // 縺薙%縺セ縺ァ蜈ア騾壹Ν繝シ繝医↑繧�
592                        if(isCommon){
593                                // 莉雁屓繧ょ�騾壹°遒コ隱阪☆繧九◆繧√�繝輔Λ繧ー
594                                var isCommonNow = false;
595                                // nodes驟榊�縺ォ蜷後§linkedClass縺梧里縺ォ縺ゅk縺狗「コ隱�
596                                var targets = [];
597                                for(var k = 0; k < ret['nodes'].length; k++){
598                                        // 蜷碁嚴螻、縺九▽蜷後§蜷榊燕縺ョ繧ゅ�縺後≠縺」縺溘itargets驟榊�縺ォ逡ェ蜿キ繧定ソス蜉
599                                        if(ret['nodes'][k]['group'] == (j+1) && obj['paths'][i]['classLinks'][j]['linkedClassURI'] == ret['nodes'][k]['uri']){
600                                                targets.push(k);
601                                        }
602                                }
603
604                                // 譌「縺ォ縺ゅ▲縺溷エ蜷医�links驟榊�縺ォ蜷後§link縺悟ュ伜惠縺吶k縺狗「コ隱�
605                                if(targets.length != 0){
606                                        // 蜈医⊇縺ゥ隕九▽縺代◆targets縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
607                                        for(var l = 0; l <targets.length; l++){
608                                                // links驟榊�縺ォ蜈ィ縺丞酔縺俶擅莉カ縺ョ繧ゅ�縺後≠繧九°遒コ隱�
609                                                for(var m = 0; m < ret['links'].length; m++){
610                                                        // 縺ゅ▲縺溷エ蜷井サ雁屓縺ョ繧ゅ�縺ッ霑ス蜉縺帙★source繧呈峩譁ー縺励※谺。縺ク
611                                                        if(ret['links'][m]['source'] == source && ret['links'][m]['target'] == targets[l] && ret['links'][m]['uri'] == obj['paths'][i]['classLinks'][j]['propertyURI'] && !isCommonNow){
612                                                                // 蜈ア騾壹Ν繝シ繝医ヵ繝ゥ繧ー繧偵が繝ウ
613                                                                isCommonNow = true;
614                                                                source = targets[l];
615                                                        }
616                                                }
617                                        }
618
619                                        // 蜷дarget繧堤「コ隱阪@縺ヲ蜈ア騾壹Ν繝シ繝医〒縺ッ縺ェ縺九▲縺溷エ蜷域眠隕剰ソス蜉
620                                        if(!isCommonNow){
621                                                isCommon = false;
622                                                ret['nodes'].push({'name': obj['paths'][i]['classLinks'][j]['nodeLabel'], 'uri': obj['paths'][i]['classLinks'][j]['linkedClassURI'], 'group': (j+1), 'x':0, 'y':0, 'dy':0, 'nodeid':ret['nodes'].length, 'view' : 'no', 'path': 'notend'});
623                                                ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'value':5, 'property': propertytext, 'uri': obj['paths'][i]['classLinks'][j]['propertyURI'], 'view' : 'no'});
624                                                source = ret['nodes'].length - 1;
625                                        }
626
627                                // 縺ェ縺九▲縺溷エ蜷医�蛻・譚。莉カ縺ェ縺ョ縺ァ譁ー隕剰ソス蜉縺励※谺。縺ク
628                                }else{
629
630                                        isCommon = false;
631                                        ret['nodes'].push({'name': obj['paths'][i]['classLinks'][j]['nodeLabel'], 'uri': obj['paths'][i]['classLinks'][j]['linkedClassURI'], 'group': (j+1), 'x':0, 'y':0, 'dy':0, 'nodeid':ret['nodes'].length, 'view' : 'no', 'path': 'notend'});
632                                        ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'value':5, 'property': propertytext, 'uri': obj['paths'][i]['classLinks'][j]['propertyURI'], 'view' : 'no'});
633                                        source = ret['nodes'].length - 1;
634                                }
635                        // 譌「縺ォ蜈ア騾壹Ν繝シ繝医〒縺ェ縺�↑繧画眠隕剰ソス蜉縺励※谺。縺ク
636                        }else{
637                                ret['nodes'].push({'name': obj['paths'][i]['classLinks'][j]['nodeLabel'], 'uri': obj['paths'][i]['classLinks'][j]['linkedClassURI'], 'group': (j+1), 'x':0, 'y':0, 'dy':0, 'nodeid':ret['nodes'].length, 'view' : 'no', 'path': 'notend'});
638                                ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'value':5, 'property': propertytext, 'uri': obj['paths'][i]['classLinks'][j]['propertyURI'], 'view' : 'no'});
639                                source = ret['nodes'].length - 1;
640                        }
641
642                }
643                ret['nodes'][ret['nodes'].length - 1]['path'] = obj['paths'][i];
644                PATHNUM++;
645        }
646        TREESPACE = (window.innerWidth - 200) / (MAXDEPTH + 1);
647
648        // 縺ァ縺阪◆邨先棡繧定ソ斐☆
649        return ret;
650}
651
652// 逕滓�縺輔l縺溘ョ繝シ繧ソ縺ョ螳滄圀縺ョ繝ュ繧ア繝シ繧キ繝ァ繝ウ繧定ィ育ョ励☆繧九Γ繧ス繝�ラ�亥�蝗槭�myNodeIndex縺�縲]odes縺ォ逕滓�縺輔l縺殤odes驟榊�縲〕inks縺ォ逕滓�縺輔l縺殕inks驟榊�縺梧ク。縺輔l繧具シ�
653function set_map_location(myNodeIndex, nodes, links, depth, fromAngle, toAngle){
654
655        // depth縺梧悴螳夂セゥ縺ェ繧峨�0繧偵そ繝�ヨ
656        if (depth == undefined){
657                depth = 0;
658        }
659
660        // 蜷�ィョ蛻晄悄蛹�
661        var children = undefined;
662        var parent = undefined;
663        var parentsChildren = undefined;
664
665        // links驟榊�縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i
666        for (var i=0; i<links.length; i++){
667                // 縺昴�links縺ョtarget縺稽yNodeIndex縺ェ繧英arent繧偵そ繝�ヨ
668                if (links[i].target == myNodeIndex){
669                        parent = links[i].source;
670                }
671        }
672
673        // parent縺瑚ヲ九▽縺九▲縺ヲ縺�◆縺ェ繧峨�
674        if (parent != undefined){
675                // parent縺ィlinks繧呈ク。縺揚et_children繝。繧ス繝�ラ繧貞ョ溯。�
676                parentsChildren = get_children(parent, links);
677        }
678
679        if(myNodeIndex != 0){
680                DRAWHEIGHT += (NODEHEIGHT * 1.5);
681                var x = (depth * TREESPACE) + (TREESPACE / 3);
682                var y = DRAWHEIGHT;
683                nodes[myNodeIndex].x = x;
684                nodes[myNodeIndex].y = y;
685        }else{
686                var x = TREESPACE / 2;
687                var y = (NODEHEIGHT * 1.5) * ((PATHNUM - 1) / 2) + NODEHEIGHT;
688                nodes[myNodeIndex].x = x;
689                nodes[myNodeIndex].y = y;
690        }
691
692        children = get_children(myNodeIndex, links);
693
694        for (var i=0; i<children.length; i++){
695                if(i == 0){
696                        DRAWHEIGHT -= (NODEHEIGHT * 1.5);
697                }
698                var child = children[i];
699                set_map_location(child, nodes, links, depth+1, fromAngle + ((toAngle - fromAngle) / children.length) * i, fromAngle + ((toAngle - fromAngle) / children.length) * (i+1));
700        }
701
702}
703
704// 謖�ョ壹&繧後◆隕ェ縺梧戟縺、蟄舌r霑斐☆
705function get_children(index, links){
706        var children = new Array();
707        // links縺ョ謨ー縺縺醍「コ隱阪@縺ェ縺後i
708        for (var i=0; i<links.length; i++){
709                // 隕ェ縺梧ク。縺輔l縺溯ヲェ縺ィ荳€閾エ縺吶k譎ゅ�蟄舌r霑ス蜉
710                if (links[i].source == index){
711                        children.push(links[i].target);
712                }
713        }
714        return children;
715}
716
717// ZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZN
718// ZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZN
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。