mirror of
https://github.com/vrana/adminer.git
synced 2025-08-15 11:04:02 +02:00
Set vertical lines only once
git-svn-id: https://adminer.svn.sourceforge.net/svnroot/adminer/trunk@300 7c3ca157-0c34-0410-bff1-cbf682f78f5c
This commit is contained in:
@@ -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 '<div class="references" title="' . htmlspecialchars($target_name) . "\" id='refs$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$source]["pos"] . "em; padding-top: .5em;'><div style='border-top: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\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 '<div class="references" title="' . htmlspecialchars($target_name) . "\" id='refd$left-" . ($i++) . "' style='left: $left1" . "em; top: " . $table["fields"][$target]["pos"] . "em; width: " . (-$left) . "em; height: 1.25em; background: url(arrow.gif) no-repeat right center;'><div style='height: .5em; border-bottom: 1px solid Gray; width: " . (-$left1) . "em;'></div></div>\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 "<div class='references' id='refl$left' style='left: " . ($left / 10000) . "" . "em; top: $min_pos" . "em; padding: .5em 0;' /><div style='border-right: 1px solid Gray; height: " . ($max_pos - $min_pos) . "em;'></div></div>\n";
|
||||
echo "<div class='references' id='refl$left' style='left: $left" . "em; top: $min_pos" . "em; padding: .5em 0;' /><div style='border-right: 1px solid Gray; height: " . ($max_pos - $min_pos) . "em;'></div></div>\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user