From 256438e18288ad4655297f6109bb8bfa752e53ae Mon Sep 17 00:00:00 2001 From: jakubvrana Date: Sat, 4 Aug 2007 19:40:58 +0000 Subject: [PATCH] Set vertical lines only once git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@300 7c3ca157-0c34-0410-bff1-cbf682f78f5c --- schema.inc.php | 53 +++++++++++++++++++++++++++++++------------------- 1 file changed, 33 insertions(+), 20 deletions(-) diff --git a/schema.inc.php b/schema.inc.php index f02c94b0..6c9b652f 100644 --- a/schema.inc.php +++ b/schema.inc.php @@ -13,6 +13,7 @@ $top = 0; $base_left = -1; $schema = array(); $referenced = array(); +$lefts = array(); $result = $mysql->query("SHOW TABLE STATUS"); while ($row = $result->fetch_assoc()) { if (!isset($row["Engine"])) { // view @@ -35,11 +36,12 @@ while ($row = $result->fetch_assoc()) { $left = $base_left; $base_left -= .1; } - while ($schema[$row["Name"]]["references"][$val["table"]][10000 * $left] || $referenced[$val["table"]][$row["Name"]][10000 * $left]) { + while ($lefts[(string) $left]) { $left -= .0001; } - $schema[$row["Name"]]["references"][$val["table"]][10000 * $left] = array_combine($val["source"], $val["target"]); - $referenced[$val["table"]][$row["Name"]][10000 * $left] = $val["target"]; + $schema[$row["Name"]]["references"][$val["table"]][(string) $left] = array_combine($val["source"], $val["target"]); + $referenced[$val["table"]][$row["Name"]][(string) $left] = $val["target"]; + $lefts[(string) $left] = true; } } } @@ -64,25 +66,36 @@ document.onmousemove = function (ev) { var left = (ev.clientX - x) / em; var top = (ev.clientY - y) / em; var divs = that.getElementsByTagName('div'); + var line_set = { }; for (var i=0; i < divs.length; i++) { if (divs[i].className == 'references') { var ref = (table_pos[divs[i].title] ? table_pos[divs[i].title] : [ 0, 0 ]); - var left1 = Math.min(0, ref[1] - left) - 1; - divs[i].style.left = left1 + 'em'; - divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em'; var div2 = document.getElementById((divs[i].id.substr(0, 4) == 'refs' ? 'refd' : 'refs') + divs[i].id.substr(4)); - var left2 = Math.min(0, left - ref[1]) - 1; - div2.style.left = left2 + 'em'; - div2.getElementsByTagName('div')[0].style.width = -left2 + 'em'; - var is_top = (divs[i].offsetTop + top * em < div2.offsetTop + ref[0] * em); - var div2 = document.getElementById(divs[i].id.replace(/^....(.+)-[0-9]+$/, 'refl$1')); - var shift = ev.clientY - y - that.offsetTop; - div2.style.left = (left + left1) + 'em'; - if (is_top) { - div2.style.top = (div2.offsetTop + shift) / em + 'em'; + var left1 = -1; + var is_top = true; + var id = divs[i].id.replace(/^ref.(.+)-.+/, '$1'); + if (divs[i].parentNode != div2.parentNode) { + left1 = Math.min(0, ref[1] - left) - 1; + divs[i].style.left = left1 + 'em'; + divs[i].getElementsByTagName('div')[0].style.width = -left1 + 'em'; + var left2 = Math.min(0, left - ref[1]) - 1; + div2.style.left = left2 + 'em'; + div2.getElementsByTagName('div')[0].style.width = -left2 + 'em'; + is_top = (divs[i].offsetTop + top * em < div2.offsetTop + ref[0] * em); + } + if (!line_set[id]) { + var line = document.getElementById(divs[i].id.replace(/^....(.+)-[0-9]+$/, 'refl$1')); + var shift = ev.clientY - y - that.offsetTop; + line.style.left = (left + left1) + 'em'; + if (is_top) { + line.style.top = (line.offsetTop + shift) / em + 'em'; + } + if (divs[i].parentNode != div2.parentNode) { + line = line.getElementsByTagName('div')[0]; + line.style.height = (line.offsetHeight + (is_top ? -1 : 1) * shift) / em + 'em'; + } + line_set[id] = true; } - div2 = div2.getElementsByTagName('div')[0]; - div2.style.height = (div2.offsetHeight + (is_top ? -1 : 1) * shift) / em + 'em'; } } that.style.left = left + 'em'; @@ -125,7 +138,7 @@ foreach ($schema as $name => $table) { } foreach ((array) $table["references"] as $target_name => $refs) { foreach ($refs as $left => $columns) { - $left1 = $left / 10000 - $table_pos[$name][1]; + $left1 = $left - $table_pos[$name][1]; $i = 0; foreach ($columns as $source => $target) { echo '
\n"; @@ -134,7 +147,7 @@ foreach ($schema as $name => $table) { } foreach ((array) $referenced[$name] as $target_name => $refs) { foreach ($refs as $left => $columns) { - $left1 = $left / 10000 - $table_pos[$name][1]; + $left1 = $left - $table_pos[$name][1]; $i = 0; foreach ($columns as $target) { echo '
\n"; @@ -154,7 +167,7 @@ foreach ($schema as $name => $table) { $min_pos = min($min_pos, $pos1, $pos2); $max_pos = max($max_pos, $pos1, $pos2); } - echo "
\n"; + echo "
\n"; } } }