132 | | // 謠冗判蜃ヲ逅� |
133 | | function view_map(){ |
134 | | |
135 | | // make_data繝。繧ス繝�ラ縺ョ邨先棡繧貞叙蠕� |
136 | | var json = make_data(0); |
137 | | |
138 | | // SVG縺悟ュ伜惠縺吶k縺ェ繧峨�蜑企勁 |
139 | | if (d3.select("#graph").select("svg")) { |
140 | | d3.select("#graph").select("svg").remove(); |
141 | | } |
142 | | |
143 | | if(json['nodes'].length != 0){ |
144 | | |
145 | | // 蜃コ譚・荳翫′縺」縺溽オ先棡繧呈ク。縺励※繝槭ャ繝嶺ク翫�繝ュ繧ア繝シ繧キ繝ァ繝ウ繧偵そ繝�ヨ |
146 | | set_map_location(0, json['nodes'], json['links']); |
147 | | |
148 | | // SVG縺ョ蟷�→鬮倥&繧定ィュ螳夲シ亥ケ�シ夂判髱「縺�▲縺ア縺�鬮倥&�壹ヱ繧ケ縺ョ謨ー縺ォ蠢懊§險ュ螳夲シ� |
149 | | var width = window.innerWidth; |
150 | | var height = ((NODEHEIGHT * 1.5) * PATHNUM) + (NODEHEIGHT / 2); |
151 | | |
152 | | // 繧ォ繝ゥ繝シ繧貞叙蠕� |
153 | | var color = d3.scale.category20(); |
154 | | |
155 | | // 逕サ髱「繧オ繧、繧コ縺ォ蜷医o縺婀VG縺ョ霑ス蜉 |
156 | | var svg = d3.select("#graph").append("svg") |
157 | | .attr("width", width) |
158 | | .attr("height", height); |
159 | | |
160 | | // 閭梧勹縺ョ霑ス蜉 |
161 | | var bg = svg |
162 | | .append("rect") |
163 | | .attr("x", 0) |
164 | | .attr("y", 0) |
165 | | .attr("width", width) |
166 | | .attr("height", height) |
167 | | .attr("fill", "#fafafa"); |
168 | | |
169 | | // links驟榊�繧呈ク。縺励Μ繝ウ繧ッ縺ョ菴懈� |
170 | | var link = svg.selectAll(".link") |
171 | | .data(json.links) |
172 | | .enter().append("line") |
173 | | .attr("class", "link") |
174 | | .style("stroke-width", function(d) { return Math.sqrt(d.value);}); |
175 | | |
176 | | // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨�菴懈� |
177 | | var node = svg.selectAll(".node") |
178 | | .data(json.nodes) |
179 | | .enter().append("circle") |
180 | | .attr("class", "node") |
181 | | .attr("r", (NODEHEIGHT / 2)) |
182 | | .attr("cx", function(d) { return d.x;} ) |
183 | | .attr("cy", function(d) { return d.y; }) |
184 | | .style("stroke", function(d) { return '#fafafa'; }) |
185 | | .style("stroke-width", function(d) { return '1.5px'; }) |
186 | | .style("fill", function(d) { return color(d.group); }) |
187 | | .style("cursor", function(d) { return 'pointer'; }); |
188 | | |
189 | | // nodes驟榊�繧呈ク。縺励ヮ繝シ繝峨ユ繧ュ繧ケ繝医�菴懈� |
190 | | var tnode = svg.selectAll("text.node") |
191 | | .data(json.nodes) |
192 | | .enter().append("svg:text") |
193 | | .attr("class", "tnode") |
194 | | .attr("x", function(d) { return d.x; }) |
195 | | .attr("y", function(d) { return d.y; }) |
196 | | .text(function(d) { return d.name; }) |
197 | | .style("fill", function(d) { return '#000000'; }) |
198 | | .style("text-anchor", function(d) { return 'middle'; }) |
199 | | .style("pointer-events", "none"); |
200 | | |
201 | | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医�菴懈� |
202 | | var tlink = svg.selectAll("text.link") |
203 | | .data(json.links) |
204 | | .enter().append("svg:text") |
205 | | .attr("class", "tlink") |
206 | | .attr("x", function(d) { return (json.nodes[d.source].x + json.nodes[d.target].x) / 2; }) |
207 | | .attr("y", function(d) { return (json.nodes[d.source].y + json.nodes[d.target].y) / 2; }) |
208 | | .style("fill", function(d) { return '#000000'; }) |
209 | | .style("text-anchor", function(d) { return 'middle'; }); |
210 | | |
211 | | // 繝弱�繝峨∈縺ョ繧ェ繝ウ繝槭え繧ケ縺ァ繝代せ謗「邏「縲√ヱ繧ケ荳ュ縺ョ繝ェ繝ウ繧ッ譁�ュ励r陦ィ遉コ |
212 | | node.on("mouseover", function(d){ |
213 | | |
214 | | // 繝槭え繧ケ縺ョ蜍輔″繧ォ繧ヲ繝ウ繝医r繝ェ繧サ繝�ヨ |
215 | | MOUSEMOVED = 0; |
216 | | |
217 | | // 陦ィ遉コ縺吶k繝代せ菫晏ュ倡畑驟榊� |
218 | | var path = []; |
219 | | // 繝��繝ォ繝√ャ繝励∈縺ョ蜷榊燕陦ィ遉コ逕ィ驟榊� |
220 | | var pathname = []; |
221 | | |
222 | | // 繝ォ繝シ繝医ヮ繝シ繝我サ・螟悶↑繧� |
223 | | if(d.nodeid != 0){ |
224 | | // 縺セ縺壹が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�id縺ィ蜷榊燕繧偵◎繧後◇繧瑚ソス蜉 |
225 | | path.push(d.nodeid); |
226 | | pathname.push(d.name); |
227 | | |
228 | | // 繝代せ謗「邏「 |
229 | | do{ |
230 | | // 繝ェ繝ウ繧ッ縺ョ謨ー縺縺醍ケー繧願ソ斐@ |
231 | | for(var i = 0; i < link.data().length; i++){ |
232 | | // 迴セ蝨ィ縺ョ譛蠕悟ーセ縺ォ郢九′繧九Μ繝ウ繧ッ縺後≠繧後� |
233 | | if(path[(path.length-1)] == link.data()[i].target){ |
234 | | // 縺昴�繝ェ繝ウ繧ッ縺ョ繧ス繝シ繧ケ蛛エ繝弱�繝峨�id繧定ソス蜉 |
235 | | path.push(link.data()[i].source); |
236 | | // 縺昴�繝ェ繝ウ繧ッ縺ョ蜷榊燕縺ィ繧ス繝シ繧ケ蛛エ繝弱�繝峨�蜷榊燕繧定ソス蜉 |
237 | | pathname.push(link.data()[i].property); |
238 | | pathname.push(node.data()[link.data()[i].source].name); |
239 | | } |
240 | | } |
241 | | // 繝ォ繝シ繝医ヮ繝シ繝峨↓霎ソ繧顔捩縺上∪縺ァ郢ー繧願ソ斐☆ |
242 | | }while(path[(path.length-1)] != 0); |
243 | | |
244 | | // 譛ォ遶ッ繝弱�繝峨〒縺ェ縺�↑繧� |
245 | | if(d.path == "notend"){ |
246 | | // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ縺ォ |
247 | | document.getElementById("showpath").style.display = "none"; |
248 | | }else{ |
249 | | // 譛ォ遶ッ繝弱�繝峨↑繧峨ヤ繝シ繝ォ繝√ャ繝励�諠�ア繧呈峩譁ー |
250 | | var resultText = "<h3>Selected Path</h3>"; |
251 | | // 繝代せ縺ョ蜷榊燕驟榊�蛻�セ後m縺九i郢ー繧願ソ斐@縺ェ縺後i |
252 | | for (var i = pathname.length;i > 0; i--){ |
253 | | // 螂�焚逡ェ逶ョ�医ヮ繝シ繝峨�蜷榊燕�峨�螟ェ蟄励↓ |
254 | | if(i % 2 == 1){ |
255 | | resultText = resultText + "<span style=\"font-weight: bold;\">" + pathname[i - 1] + "</span><br><br>"; |
256 | | // 蛛カ謨ー逡ェ逶ョ�医Μ繝ウ繧ッ縺ョ蜷榊燕�峨�縺昴�縺セ縺セ縺ァ陦ィ遉コ |
257 | | }else{ |
258 | | resultText = resultText + pathname[i - 1] + "<br><br>"; |
259 | | } |
260 | | } |
261 | | // 繝��繝ォ繝√ャ繝励�蜀�ョケ繧呈嶌縺肴鋤縺� |
262 | | document.getElementById("selectpath").innerHTML=(resultText); |
263 | | document.getElementById("showpath").style.display = "block"; |
264 | | |
265 | | // 繧オ繝シ繝悶Ξ繝�ヨ縺ォ騾√j霑斐☆繝代せ繧ェ繝悶ず繧ァ繧ッ繝医r菫晏ュ� |
266 | | pathobj = d.path; |
267 | | |
268 | | // 繝��繝ォ繝√ャ繝苓。ィ遉コ譎ゅ�蠎ァ讓呻シ医が繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�讓ェ縺ォ繝懊ち繝ウ縺梧擂繧九h縺��鄂ョ�� |
269 | | var xPosition = parseFloat(d3.select(this).attr("cx")) + parseFloat(d3.select(this).style("stroke-width")) + (NODEHEIGHT * 0.5); |
270 | | var yPosition = parseFloat(d3.select(this).attr("cy") - document.getElementById("showpath").offsetHeight + document.getElementById("menu").offsetHeight) + (NODEHEIGHT * 0.5); |
271 | | |
272 | | // 繝��繝ォ繝√ャ繝励′逕サ髱「螟悶↓蜃コ縺ェ縺�h縺�」懈ュ」 |
273 | | if(xPosition < 0){ |
274 | | xPosition = 0; |
275 | | } |
276 | | if(yPosition < 0){ |
277 | | yPosition = 0; |
278 | | } |
279 | | |
280 | | // 逕滓�縺励◆蠎ァ讓吶↓繝��繝ォ繝√ャ繝励r陦ィ遉コ |
281 | | document.getElementById("showpath").style.left = xPosition + "px" |
282 | | document.getElementById("showpath").style.top = yPosition + "px" |
283 | | } |
284 | | // 繝ォ繝シ繝医ヮ繝シ繝峨□縺」縺溘↑繧� |
285 | | }else{ |
286 | | // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ |
287 | | document.getElementById("showpath").style.display = "none"; |
288 | | } |
289 | | |
290 | | // 繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヮ繝シ繝峨�鬮倥&縺ォ隕ェ繧貞粋繧上○繧九◆繧√↓蜷医o縺帙k鬮倥&繧剃ソ晏ュ� |
291 | | var movey = d.y; |
292 | | |
293 | | // 蜷�ヮ繝シ繝峨↓蟇セ縺� |
294 | | node |
295 | | // 霈ェ驛ュ邱壹�濶イ繧定ィュ螳� |
296 | | .style("stroke", function(d){ |
297 | | // 縺セ縺壹�閭梧勹濶イ�医ョ繝輔か繝ォ繝茨シ峨r謖�ョ� |
298 | | var strokecolor = "#fafafa"; |
299 | | |
300 | | // 繝代せ蛻、螳壹�蜑榊�逅� |
301 | | // 陦ィ遉コ繝輔Λ繧ー縺系ow�亥燕蝗槭が繝ウ繝槭え繧ケ縺ァ蜍輔>縺ヲ縺�◆繝弱�繝会シ峨↑繧� |
302 | | if(d.view == "now"){ |
303 | | // 繝弱�繝峨�陦ィ遉コ繝輔Λ繧ー繧地o縺ォ |
304 | | d.view = "no"; |
305 | | } |
306 | | // 陦ィ遉コ繝輔Λ繧ー縺稽oved�医け繝ェ繝�け縺輔l蝗コ螳壽ク医∩縺縺悟燕蝗槫虚縺�※縺�◆繝弱�繝会シ峨↑繧� |
307 | | if(d.view == "moved"){ |
308 | | // 陦ィ遉コ繝輔Λ繧ー繧団licked縺ォ謌サ縺� |
309 | | d.view = "clicked"; |
310 | | } |
311 | | |
312 | | // 陦ィ遉コ繝輔Λ繧ー縺系o縺ョ繧ゅ�縺九i遒コ隱� |
313 | | if(d.view == "no"){ |
314 | | // 繝代せ縺ョ繝弱�繝画焚縺縺醍ケー繧願ソ斐@縺ェ縺後i |
315 | | for(var n = 0; n < path.length; n++){ |
316 | | // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨□縺」縺溘i |
317 | | if(path[n] == d.nodeid){ |
318 | | // 霈ェ驛ュ邱壹r襍、縺ォ |
319 | | strokecolor = "#ffaaaa"; |
320 | | // 陦ィ遉コ繝輔Λ繧ー繧地ow�井サ雁屓蜍輔>縺溘ヮ繝シ繝会シ峨↓ |
321 | | d.view = "now"; |
322 | | } |
323 | | } |
324 | | // 蝗コ螳壽ク医∩繝弱�繝峨□縺」縺溘i |
325 | | }else if(d.view == "clicked"){ |
326 | | // 縺セ縺壹�霈ェ驛ュ邱壹r襍、縺ォ |
327 | | strokecolor = "#ffaaaa"; |
328 | | // 繝代せ蜀�↓蜷ォ縺セ繧後k繝弱�繝峨°繝√ぉ繝�け |
329 | | for(var n = 0; n < path.length; n++){ |
330 | | if(path[n] == d.nodeid){ |
331 | | // 蜷ォ縺セ繧後※縺�◆縺ェ繧我サ雁屓蜍輔°縺吶◆繧√ヵ繝ゥ繧ー繧知oved縺ォ |
332 | | d.view = "moved"; |
333 | | } |
334 | | } |
335 | | } |
336 | | |
337 | | // 縺薙%縺セ縺ァ縺ァ蠕励i繧後◆霈ェ驛ュ邱壹�濶イ繧定ソ斐☆ |
338 | | return strokecolor; |
339 | | }) |
340 | | // 鬮倥&縺ョ蛟、 |
341 | | .attr("cy", function(d){ |
342 | | // 繝弱�繝峨′莉雁屓繧ェ繝ウ繝槭え繧ケ縺輔l縺溘�縺セ縺溘�蝗コ螳壽ク医∩縺縺檎ァサ蜍輔ヵ繝ゥ繧ー繧偵▽縺代i繧後※縺�l縺ー |
343 | | if(d.view == "now" || d.view == "moved"){ |
344 | | // 迴セ蝨ィ縺ョ鬮倥&繧貞叙蠕� |
345 | | var curty = d.y; |
346 | | // d.y縺ォ蟄舌ヮ繝シ繝峨�鬮倥&繧偵そ繝�ヨ |
347 | | d.y = movey; |
348 | | // 迴セ蝨ィ縺ョ鬮倥&繧定ソ斐☆�医%縺ョ譎らせ縺ァ縺ッ迴セ蝨ィ菴咲スョ縺ォ謠冗判縺輔l縲〉edraw髢「謨ー縺ァd.y縺ォ繧「繝九Γ繝シ繧キ繝ァ繝ウ縺輔l繧具シ� |
349 | | return curty; |
350 | | // 遘サ蜍募ッセ雎。縺ァ縺ェ縺�↑繧� |
351 | | }else{ |
352 | | // 迴セ蝨ィ菴咲スョ繧偵◎縺ョ縺セ縺セ霑斐☆ |
353 | | return d.y; |
354 | | } |
355 | | }); |
356 | | |
357 | | // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓蟇セ縺� |
358 | | tlink |
359 | | // 繝�く繧ケ繝郁。ィ遉コ蛻、螳� |
360 | | .text(function(d) { |
361 | | // 繝�ヵ繧ゥ繝ォ繝医〒遨コ繧偵そ繝�ヨ |
362 | | var linktext = ""; |
363 | | // 陦ィ遉コ繝輔Λ繧ー縺系ow�亥燕蝗櫁。ィ遉コ縺輔l縺ヲ縺�◆繝ェ繝ウ繧ッ�峨↑繧� |
364 | | if(d.view == "now"){ |
365 | | // 陦ィ遉コ繝輔Λ繧ー繧定ァ」髯、 |
366 | | d.view = "no"; |
367 | | } |
368 | | |
369 | | // 陦ィ遉コ繝輔Λ繧ー縺系o縺ェ繧� |
370 | | if(d.view == "no"){ |
371 | | // 繝代せ縺ョ繝弱�繝画焚蛻�ケー繧願ソ斐@ |
372 | | for(var t = 0; t < path.length; t++){ |
373 | | // 閾ェ霄ォ縺後◎縺ョ繝弱�繝峨∈謗・邯壹@縺ヲ縺�k繝ェ繝ウ繧ッ�医°縺、縺昴�繝弱�繝峨′謚倥j縺溘◆縺セ繧後※縺�↑縺代l縺ー�� |
374 | | if(path[t] == d.target && node.data()[d.target].view != "hide"){ |
375 | | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ |
376 | | linktext = d.property |
377 | | // 陦ィ遉コ繝輔Λ繧ー縺ォnow繧偵そ繝�ヨ |
378 | | d.view = "now"; |
379 | | } |
380 | | } |
381 | | // 陦ィ遉コ繝輔Λ繧ー縺掲ix�医け繝ェ繝�け縺輔l縺溘ヱ繧ケ縺ョ繝ェ繝ウ繧ッ�峨↑繧峨��医°縺、郢九′繧句�縺ョ繝弱�繝峨′謚倥j縺溘◆縺セ繧後※縺�↑縺代l縺ー�� |
382 | | }else if(d.view == "fix" && node.data()[d.target].view != "hide"){ |
383 | | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ |
384 | | linktext = d.property |
385 | | } |
386 | | // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆繝ェ繝ウ繧ッ繝�く繧ケ繝医r霑斐☆ |
387 | | return linktext; |
388 | | }); |
389 | | |
390 | | // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺� |
391 | | link |
392 | | // 邱壹�濶イ蛻、螳� |
393 | | .style("stroke", function(d){ |
394 | | // 陦ィ遉コ繝輔Λ繧ー縺系o縺ェ繧峨� |
395 | | if(d.view == "no"){ |
396 | | // 濶イ繧偵ョ繝輔か繝ォ繝医↓ |
397 | | return "#999"; |
398 | | // 縺昴l莉・螟厄シ亥崋螳壹d繧ェ繝ウ繝槭え繧ケ縺輔l縺溘ヱ繧ケ縺ォ蜷ォ縺セ繧後k�峨↑繧� |
399 | | }else{ |
400 | | // 濶イ繧定オ、縺ォ |
401 | | return "#ffaaaa"; |
402 | | } |
403 | | }); |
404 | | |
405 | | // 縺薙%縺セ縺ァ縺ョ險ュ螳壹r蜈�↓蜀肴緒逕サ |
406 | | redraw(); |
407 | | |
408 | | // 繝弱�繝峨∈縺ョ繧ッ繝ェ繝�け縺ァ驕ク謚槫崋螳壼喧�亥所縺ウ謚倥j逡ウ縺ソ蜃ヲ逅�シ� |
409 | | }).on("click", function(d){ |
410 | | |
411 | | // 蜷�ヮ繝シ繝峨↓蟇セ縺� |
412 | | node |
413 | | // 霈ェ驛ュ邱壹�蛻、螳� |
414 | | .style("stroke", function(d) { |
415 | | // 繝�ヵ繧ゥ繝ォ繝医�濶イ繧偵そ繝�ヨ |
416 | | var strokecolor = "#fafafa" |
417 | | // 陦ィ遉コ繝輔Λ繧ー縺後が繝ウ繝槭え繧ケ荳ュ繝サ蝗コ螳壻クュ繝サ遘サ蜍穂クュ�磯∈謚槭&繧後※縺�k繝弱�繝会シ峨↑繧峨� |
418 | | if(d.view == "now" || d.view == "clicked" || d.view == "moved"){ |
419 | | // 濶イ繧定オ、縺ォ |
420 | | strokecolor = "#ffaaaa" |
421 | | // 陦ィ遉コ繝輔Λ繧ー繧貞崋螳壻クュ縺ォ |
422 | | d.view = "clicked"; |
423 | | } |
424 | | // 縺薙%縺セ縺ァ縺ァ縺ァ縺阪◆濶イ繧定ソ斐☆ |
425 | | return strokecolor; |
426 | | }); |
427 | | |
428 | | // 縺薙%縺九i蟄舌ヮ繝シ繝峨�逡ウ縺ソ霎シ縺ソ蜃ヲ逅�シ育樟蝨ィ縺ッ蟒�ュ「縲∝ソオ縺ョ縺溘a繧ウ繝シ繝峨�谿九@縺ヲ縺翫¥�� |
429 | | /* |
430 | | var childs = []; |
431 | | var prevchilds = []; |
432 | | prevchilds.push(d.nodeid); |
433 | | |
434 | | // |
435 | | do{ |
436 | | var tmpchilds = []; |
437 | | var curchilds = []; |
438 | | for(var p = 0; p < prevchilds.length; p++){ |
439 | | tmpchilds = get_children(prevchilds[p], json['links']); |
440 | | curchilds = curchilds.concat(tmpchilds); |
441 | | } |
442 | | prevchilds = curchilds; |
443 | | childs = childs.concat(curchilds); |
444 | | |
445 | | }while(curchilds.length != 0); |
446 | | |
447 | | var childy = d.y; |
448 | | for(var c = 0; c < childs.length; c++){ |
449 | | if(node.data()[childs[c]].y < childy){ |
450 | | childy = node.data()[childs[c]].y; |
451 | | } |
452 | | } |
453 | | |
454 | | d.y = childy; |
455 | | |
456 | | var maxdy = 0; |
457 | | var mindy = 0; |
458 | | |
459 | | for(var c = 0; c < childs.length; c++){ |
460 | | if(node.data()[childs[c]].view != "hide"){ |
461 | | var dy = node.data()[childs[c]].y - d.y; |
462 | | if(dy > maxdy){ |
463 | | maxdy = dy; |
464 | | } |
465 | | node.data()[childs[c]].x = d.x; |
466 | | node.data()[childs[c]].y = d.y; |
467 | | node.data()[childs[c]].dy = dy; |
468 | | node.data()[childs[c]].view = "hide"; |
469 | | node.data()[childs[c]].hideparent = d.nodeid; |
470 | | }else{ |
471 | | if(node.data()[childs[c]].hideparent == d.nodeid){ |
472 | | node.data()[childs[c]].x = d.x + (TREESPACE * (node.data()[childs[c]].group - d.group)); |
473 | | node.data()[childs[c]].y = node.data()[childs[c]].y + node.data()[childs[c]].dy; |
474 | | if(-node.data()[childs[c]].dy < mindy){ |
475 | | mindy = -node.data()[childs[c]].dy; |
476 | | } |
477 | | node.data()[childs[c]].view = "appear"; |
478 | | node.data()[childs[c]].hideparent = -1; |
479 | | } |
480 | | } |
481 | | } |
482 | | |
483 | | node |
484 | | .attr("r", function(d){ |
485 | | if(d.view == "appear"){ |
486 | | d.view = "no"; |
487 | | }else if(d.y > childy){ |
488 | | d.y = d.y - maxdy - mindy; |
489 | | } |
490 | | if(d.view == "hide"){ |
491 | | d.x = node.data()[d.hideparent].x; |
492 | | d.y = node.data()[d.hideparent].y; |
493 | | } |
494 | | if(d.nodeid == 0){ |
495 | | d.y = childy; |
496 | | } |
497 | | return (NODEHEIGHT / 2); |
498 | | }); |
499 | | */ |
500 | | |
501 | | // 蜷�Μ繝ウ繧ッ縺ォ蟇セ縺� |
502 | | tlink |
503 | | // 繝�く繧ケ繝郁。ィ遉コ蛻、螳� |
504 | | .text(function(d) { |
505 | | // 繝�ヵ繧ゥ繝ォ繝医〒遨コ縺ォ |
506 | | var linktext = ""; |
507 | | // 陦ィ遉コ繝輔Λ繧ー縺檎樟蝨ィ陦ィ遉コ荳ュ縺セ縺溘�蝗コ螳壼喧貂医∩縺ェ繧峨��医°縺、謚倥j逡ウ縺ソ荳ュ縺ァ縺ェ縺代l縺ー�� |
508 | | if((d.view == "now" || d.view == "fix") && (node.data()[d.target].view != "hide")){ |
509 | | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医↓繝励Ο繝代ユ繧」縺ョ蛟、繧偵そ繝�ヨ |
510 | | linktext = d.property |
511 | | // 陦ィ遉コ繝輔Λ繧ー繧貞崋螳壻クュ縺ォ |
512 | | d.view = "fix"; |
513 | | } |
514 | | // 繝�く繧ケ繝医r霑斐☆ |
515 | | return linktext; |
516 | | }); |
517 | | |
518 | | // 縺薙%縺セ縺ァ縺ョ蜃ヲ逅�オ先棡繧貞�縺ォ蜀肴緒逕サ |
519 | | redraw(); |
520 | | |
521 | | }); |
522 | | |
523 | | // 蜀肴緒逕サ髢「謨ー |
524 | | var redraw = function (duration){ |
525 | | |
526 | | // 縺九¢繧区凾髢薙′譛ェ謖�ョ壹↑繧峨� |
527 | | if(duration == undefined){ |
528 | | // 0.5遘偵°縺代※繧「繝九Γ繝シ繧キ繝ァ繝ウ |
529 | | duration = 500; |
530 | | } |
531 | | |
532 | | // 蜷�Μ繝ウ繧ッ縺ォ縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ |
533 | | link |
534 | | .transition() |
535 | | .duration(duration) |
536 | | .attr("x1", function(d) {return node.data()[d.source].x;}) |
537 | | .attr("y1", function(d) {return node.data()[d.source].y;}) |
538 | | .attr("x2", function(d) {return node.data()[d.target].x;}) |
539 | | .attr("y2", function(d) {return node.data()[d.target].y;}); |
540 | | |
541 | | // 蜷�Μ繝ウ繧ッ繝�く繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ |
542 | | tlink |
543 | | .transition() |
544 | | .duration(duration) |
545 | | .attr("x", function(d) {return (node.data()[d.source].x + node.data()[d.target].x) / 2;}) |
546 | | .attr("y", function(d) {return ((node.data()[d.source].y + node.data()[d.target].y) / 2) + 5;}); |
547 | | |
548 | | // 蜷�ヮ繝シ繝峨↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ�医°縺、謚倥j縺溘◆縺セ繧御クュ縺ョ蝣エ蜷医�謠冗判蛻�イ仙�逅�シ� |
549 | | node |
550 | | .transition() |
551 | | .duration(duration) |
552 | | .attr("cx", function(d) {return d.x;}) |
553 | | .attr("cy", function(d) {return d.y;}) |
554 | | .style("opacity", function(d){ |
555 | | var opa = 1.0; |
556 | | if(d.view == "hide"){ |
557 | | opa = 0.0; |
558 | | } |
559 | | return opa; |
560 | | }) |
561 | | .style("fill", function(d) { |
562 | | var fcolor = color(d.group); |
563 | | |
564 | | for(var n = 0; n < node.data().length; n++){ |
565 | | if(d.nodeid == node.data()[n].hideparent){ |
566 | | fcolor = "ffaaaa"; |
567 | | } |
568 | | } |
569 | | return fcolor; |
570 | | }) |
571 | | .style("pointer-events", function(d){ |
572 | | var pe = "auto"; |
573 | | if(d.view == "hide"){ |
574 | | pe = "none"; |
575 | | } |
576 | | return pe; |
577 | | }); |
578 | | |
579 | | // 蜷�ヮ繝シ繝峨ユ繧ュ繧ケ繝医↓縺、縺�※險ュ螳壹&繧後◆菴咲スョ縺ォ蜀肴緒逕サ縲√ユ繧ュ繧ケ繝域緒逕サ菴咲スョ繧剃ク贋ク九↓謖ッ繧具シ医°縺、謚倥j縺溘◆縺セ繧御クュ縺ョ蝣エ蜷医�謠冗判蛻�イ仙�逅�シ� |
580 | | tnode |
581 | | .transition() |
582 | | .duration(duration) |
583 | | .attr("x", function(d) {return d.x;}) |
584 | | .attr("y", function(d) { |
585 | | // 繝�ヵ繧ゥ繝ォ繝医〒蟆代@荳九£繧� |
586 | | var updown = (NODEHEIGHT * 0.4); |
587 | | // 螂�焚逡ェ逶ョ縺ョ豺ア縺輔↑繧牙ー代@荳翫£繧� |
588 | | if(d.group % 2 == 1){ |
589 | | updown = -(NODEHEIGHT * 0.2); |
590 | | } |
591 | | // 縺昴�蛟、繧帝ォ倥&縺ォ霑斐☆縺薙→縺ァ繝�く繧ケ繝域緒逕サ菴咲スョ縺御コ偵>驕輔>縺ォ縺ェ繧� |
592 | | return d.y + updown; |
593 | | }) |
594 | | // 謚倥j逡ウ縺ソ迥カ諷九↑繧峨ユ繧ュ繧ケ繝郁。ィ遉コ繧呈カ医☆ |
595 | | .text(function(d){ |
596 | | var nodetext = d.name |
597 | | if(d.view == "hide"){ |
598 | | nodetext = ""; |
599 | | } |
600 | | return nodetext; |
601 | | }); |
602 | | |
603 | | }; |
604 | | |
605 | | // 閭梧勹驛ィ蛻�′繧ッ繝ェ繝�け縺輔l縺溘i陦ィ遉コ縺ョ蝗コ螳壼喧繧定ァ」髯、 |
606 | | bg.on("click", function() { |
607 | | // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ |
608 | | document.getElementById("showpath").style.display = "none"; |
609 | | d3.selectAll(".node").style("stroke-width", function(d) { return '1.5px'; }); |
610 | | d3.selectAll(".node").style("stroke", function(d) { return '#ffffff'; }); |
611 | | |
612 | | // 蜷�ヮ繝シ繝峨�霈ェ驛ュ邱壹�濶イ繧偵ョ繝輔か繝ォ繝医↓ |
613 | | node |
614 | | .style("stroke", function(d){ |
615 | | if(d.view != "hide"){ |
616 | | d.view = "no"; |
617 | | } |
618 | | return "#fafafa"; |
619 | | }); |
620 | | |
621 | | // 繝ェ繝ウ繧ッ繝�く繧ケ繝医r蜈ィ縺ヲ遨コ縺ォ |
622 | | tlink |
623 | | .text(function(d) { |
624 | | d.view = "no"; |
625 | | return ""; |
626 | | }); |
627 | | |
628 | | // 繝ェ繝ウ繧ッ縺ョ濶イ繧貞�縺ヲ繝�ヵ繧ゥ繝ォ繝医↓ |
629 | | link |
630 | | .style("stroke", function(d){ |
631 | | return "#999"; |
632 | | }); |
633 | | |
634 | | }); |
635 | | |
636 | | // 閭梧勹荳翫〒繝槭え繧ケ縺悟虚縺上#縺ィ縺ォ |
637 | | bg.on("mousemove", function(){ |
638 | | // MOUSEMOVED繧定ソス蜉�医ヮ繝シ繝峨↓繧ェ繝ウ繝槭え繧ケ縺輔l繧句コヲ縺ォ繧ォ繧ヲ繝ウ繝医Μ繧サ繝�ヨ�� |
639 | | MOUSEMOVED++; |
640 | | // 30繧定カ�∴縺溘i |
641 | | if(MOUSEMOVED > 30){ |
642 | | // 繝��繝ォ繝√ャ繝励r髱櫁。ィ遉コ縺ォ縺励※繧ォ繧ヲ繝ウ繝医Μ繧サ繝�ヨ |
643 | | document.getElementById("showpath").style.display = "none"; |
644 | | MOUSEMOVED = 0; |
645 | | } |
646 | | }); |
647 | | |
648 | | // 蛻晏屓縺ョ縺ソduration繧�縺ィ謖�ョ壹@蜀肴緒逕サ�医い繝九Γ繝シ繧キ繝ァ繝ウ縺ェ縺暦シ� |
649 | | redraw(0); |
650 | | } |
651 | | } |
652 | | |
653 | | // 繝��繧ソ縺ョ菴懈�繝。繧ス繝�ラ |
654 | | function make_data(tdepth, ret, parent, depth){ |
655 | | // ret縺梧悴螳夂セゥ縺ェ繧峨�螳夂セゥ縺励※莉」蜈・ |
656 | | if (ret == undefined){ |
657 | | ret = new Object(); |
658 | | ret['nodes'] = new Array(); |
659 | | ret['links'] = new Array(); |
660 | | } |
661 | | |
662 | | PATHNUM = 0; |
663 | | MAXDEPTH = 0; |
664 | | TREESPACE = 0; |
665 | | DRAWHEIGHT = NODEHEIGHT; |
666 | | |
667 | | var viewnum; |
668 | | |
669 | | var obj = JSON.parse(jsontext); |
670 | | |
671 | | document.getElementById("resultmessage").style.color = "black"; |
672 | | document.getElementById("resultmessage").style.fontWeight = "normal"; |
673 | | |
674 | | document.getElementById("plural").innerHTML = "s"; |
675 | | |
676 | | if(obj['paths'].length == 0){ |
677 | | document.getElementById("resultmessage").style.color = "red"; |
678 | | document.getElementById("resultmessage").style.fontWeight = "bold"; |
679 | | document.getElementById("plural").innerHTML = ""; |
680 | | }else if(obj['paths'].length == 1){ |
681 | | document.getElementById("plural").innerHTML = ""; |
682 | | } |
683 | | |
684 | | if(obj['paths'].length <= 10){ |
685 | | viewnum = obj['paths'].length; |
686 | | document.getElementById("viewall").style.display = "none"; |
687 | | }else if(pathlimit == 10){ |
688 | | viewnum = 10; |
689 | | document.getElementById("viewall").style.display = "block"; |
690 | | }else{ |
691 | | viewnum = obj['paths'].length; |
692 | | document.getElementById("viewall").style.display = "none"; |
693 | | } |
694 | | |
695 | | document.getElementById("pathnum").innerHTML = obj['paths'].length; |
696 | | document.getElementById("resultmessage").style.display = "block"; |
697 | | |
698 | | // obj繝医ャ繝鈴嚴螻、縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i |
699 | | for(var i = 0; i < viewnum; i++){ |
700 | | if(i == 0){ |
701 | | // 蛻晏屓縺縺代Ν繝シ繝医ヮ繝シ繝峨r繝励ャ繧キ繝・ |
702 | | 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'}); |
703 | | } |
704 | | // 蜈医↓source縺ォ0�医Ν繝シ繝茨シ峨r莉」蜈・ |
705 | | var source = 0; |
706 | | // 蜈ア騾壹Ν繝シ繝亥愛螳壹rtrue縺ォ |
707 | | var isCommon = true; |
708 | | |
709 | | // classLinks縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i |
710 | | for(var j = 0;j < obj['paths'][i]['classLinks'].length; j++){ |
711 | | |
712 | | // 繝ェ繝ウ繧ッ縺ョ蜷榊燕繧旦RL譛ォ蟆セ縺九i蜿門セ� |
713 | | var propertytext = obj['paths'][i]['classLinks'][j]['propertyURI']; |
714 | | var propertysplit1 = propertytext.split("/"); |
715 | | var propertysplit2 = propertysplit1[propertysplit1.length - 1]; |
716 | | var propertysplit3 = propertysplit2.split("#"); |
717 | | propertytext = propertysplit3[propertysplit3.length - 1]; |
718 | | |
719 | | if(MAXDEPTH < j+1){ |
720 | | MAXDEPTH = j+1; |
721 | | } |
722 | | // 縺薙%縺セ縺ァ蜈ア騾壹Ν繝シ繝医↑繧� |
723 | | if(isCommon){ |
724 | | // 莉雁屓繧ょ�騾壹°遒コ隱阪☆繧九◆繧√�繝輔Λ繧ー |
725 | | var isCommonNow = false; |
726 | | // nodes驟榊�縺ォ蜷後§linkedClass縺梧里縺ォ縺ゅk縺狗「コ隱� |
727 | | var targets = []; |
728 | | for(var k = 0; k < ret['nodes'].length; k++){ |
729 | | // 蜷碁嚴螻、縺九▽蜷後§蜷榊燕縺ョ繧ゅ�縺後≠縺」縺溘itargets驟榊�縺ォ逡ェ蜿キ繧定ソス蜉 |
730 | | if(ret['nodes'][k]['group'] == (j+1) && obj['paths'][i]['classLinks'][j]['linkedClassURI'] == ret['nodes'][k]['uri']){ |
731 | | targets.push(k); |
732 | | } |
733 | | } |
734 | | |
735 | | // 譌「縺ォ縺ゅ▲縺溷エ蜷医�links驟榊�縺ォ蜷後§link縺悟ュ伜惠縺吶k縺狗「コ隱� |
736 | | if(targets.length != 0){ |
737 | | // 蜈医⊇縺ゥ隕九▽縺代◆targets縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i |
738 | | for(var l = 0; l <targets.length; l++){ |
739 | | // links驟榊�縺ォ蜈ィ縺丞酔縺俶擅莉カ縺ョ繧ゅ�縺後≠繧九°遒コ隱� |
740 | | for(var m = 0; m < ret['links'].length; m++){ |
741 | | // 縺ゅ▲縺溷エ蜷井サ雁屓縺ョ繧ゅ�縺ッ霑ス蜉縺帙★source繧呈峩譁ー縺励※谺。縺ク |
742 | | if(ret['links'][m]['source'] == source && ret['links'][m]['target'] == targets[l] && ret['links'][m]['uri'] == obj['paths'][i]['classLinks'][j]['propertyURI'] && !isCommonNow){ |
743 | | // 蜈ア騾壹Ν繝シ繝医ヵ繝ゥ繧ー繧偵が繝ウ |
744 | | isCommonNow = true; |
745 | | source = targets[l]; |
746 | | } |
747 | | } |
748 | | } |
749 | | |
750 | | // 蜷дarget繧堤「コ隱阪@縺ヲ蜈ア騾壹Ν繝シ繝医〒縺ッ縺ェ縺九▲縺溷エ蜷域眠隕剰ソス蜉 |
751 | | if(!isCommonNow){ |
752 | | isCommon = false; |
753 | | 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'}); |
754 | | ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'value':5, 'property': propertytext, 'uri': obj['paths'][i]['classLinks'][j]['propertyURI'], 'view' : 'no'}); |
755 | | source = ret['nodes'].length - 1; |
756 | | } |
757 | | |
758 | | // 縺ェ縺九▲縺溷エ蜷医�蛻・譚。莉カ縺ェ縺ョ縺ァ譁ー隕剰ソス蜉縺励※谺。縺ク |
759 | | }else{ |
760 | | |
761 | | isCommon = false; |
762 | | 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'}); |
763 | | ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'value':5, 'property': propertytext, 'uri': obj['paths'][i]['classLinks'][j]['propertyURI'], 'view' : 'no'}); |
764 | | source = ret['nodes'].length - 1; |
765 | | } |
766 | | // 譌「縺ォ蜈ア騾壹Ν繝シ繝医〒縺ェ縺�↑繧画眠隕剰ソス蜉縺励※谺。縺ク |
767 | | }else{ |
768 | | 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'}); |
769 | | ret['links'].push({'source':source, 'target':ret['nodes'].length - 1, 'value':5, 'property': propertytext, 'uri': obj['paths'][i]['classLinks'][j]['propertyURI'], 'view' : 'no'}); |
770 | | source = ret['nodes'].length - 1; |
771 | | } |
772 | | |
773 | | } |
774 | | ret['nodes'][ret['nodes'].length - 1]['path'] = obj['paths'][i]; |
775 | | PATHNUM++; |
776 | | } |
777 | | TREESPACE = (window.innerWidth - 200) / (MAXDEPTH + 1); |
778 | | |
779 | | // 縺ァ縺阪◆邨先棡繧定ソ斐☆ |
780 | | return ret; |
781 | | } |
782 | | |
783 | | // 逕滓�縺輔l縺溘ョ繝シ繧ソ縺ョ螳滄圀縺ョ繝ュ繧ア繝シ繧キ繝ァ繝ウ繧定ィ育ョ励☆繧九Γ繧ス繝�ラ�亥�蝗槭�myNodeIndex縺�縲]odes縺ォ逕滓�縺輔l縺殤odes驟榊�縲〕inks縺ォ逕滓�縺輔l縺殕inks驟榊�縺梧ク。縺輔l繧具シ� |
784 | | function set_map_location(myNodeIndex, nodes, links, depth, fromAngle, toAngle){ |
785 | | |
786 | | // depth縺梧悴螳夂セゥ縺ェ繧峨�0繧偵そ繝�ヨ |
787 | | if (depth == undefined){ |
788 | | depth = 0; |
789 | | } |
790 | | |
791 | | // 蜷�ィョ蛻晄悄蛹� |
792 | | var children = undefined; |
793 | | var parent = undefined; |
794 | | var parentsChildren = undefined; |
795 | | |
796 | | // links驟榊�縺ョ謨ー縺縺醍ケー繧願ソ斐@縺ェ縺後i |
797 | | for (var i=0; i<links.length; i++){ |
798 | | // 縺昴�links縺ョtarget縺稽yNodeIndex縺ェ繧英arent繧偵そ繝�ヨ |
799 | | if (links[i].target == myNodeIndex){ |
800 | | parent = links[i].source; |
801 | | } |
802 | | } |
803 | | |
804 | | // parent縺瑚ヲ九▽縺九▲縺ヲ縺�◆縺ェ繧峨� |
805 | | if (parent != undefined){ |
806 | | // parent縺ィlinks繧呈ク。縺揚et_children繝。繧ス繝�ラ繧貞ョ溯。� |
807 | | parentsChildren = get_children(parent, links); |
808 | | } |
809 | | |
810 | | if(myNodeIndex != 0){ |
811 | | DRAWHEIGHT += (NODEHEIGHT * 1.5); |
812 | | var x = (depth * TREESPACE) + (TREESPACE / 3); |
813 | | var y = DRAWHEIGHT; |
814 | | nodes[myNodeIndex].x = x; |
815 | | nodes[myNodeIndex].y = y; |
816 | | }else{ |
817 | | var x = TREESPACE / 2; |
818 | | var y = (NODEHEIGHT * 1.5) * ((PATHNUM - 1) / 2) + NODEHEIGHT; |
819 | | nodes[myNodeIndex].x = x; |
820 | | nodes[myNodeIndex].y = y; |
821 | | } |
822 | | |
823 | | children = get_children(myNodeIndex, links); |
824 | | |
825 | | for (var i=0; i<children.length; i++){ |
826 | | if(i == 0){ |
827 | | DRAWHEIGHT -= (NODEHEIGHT * 1.5); |
828 | | } |
829 | | var child = children[i]; |
830 | | set_map_location(child, nodes, links, depth+1, fromAngle + ((toAngle - fromAngle) / children.length) * i, fromAngle + ((toAngle - fromAngle) / children.length) * (i+1)); |
831 | | } |
832 | | |
833 | | } |
834 | | |
835 | | // 謖�ョ壹&繧後◆隕ェ縺梧戟縺、蟄舌r霑斐☆ |
836 | | function get_children(index, links){ |
837 | | var children = new Array(); |
838 | | // links縺ョ謨ー縺縺醍「コ隱阪@縺ェ縺後i |
839 | | for (var i=0; i<links.length; i++){ |
840 | | // 隕ェ縺梧ク。縺輔l縺溯ヲェ縺ィ荳閾エ縺吶k譎ゅ�蟄舌r霑ス蜉 |
841 | | if (links[i].source == index){ |
842 | | children.push(links[i].target); |
843 | | } |
844 | | } |
845 | | return children; |
846 | | } |
847 | | |
848 | | // ZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZN |
849 | | // ZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZNZN |
850 | | |