Jeroen-checkbox-helpers.patch (7,546 bytes)
Index: ChangeLog
===================================================================
--- ChangeLog (revision 4023)
+++ ChangeLog (working copy)
@@ -3,6 +3,7 @@
new feature: cable ID column for links (#328, by Giovani Zamboni and Jens Weibler)
new feature: SNMPv3 support (#379, by Jens Weibler)
update: cache image files thumbnails and make them JPEGs (#369, by Matt Mills)
+ update: enhance rackspace click helpers (by Jeroen Benda)
0.18.6
bugfix: draw administrator's attention to missing LDAP extension (by Matt Mills)
bugfix: minor issues on LiveCDP/LLDP tab
Index: inc/interface.php
===================================================================
--- inc/interface.php (revision 4023)
+++ inc/interface.php (working copy)
@@ -889,9 +889,9 @@
echo "<center>\n";
echo "<table class=rack border=0 cellspacing=0 cellpadding=1>\n";
echo "<tr><th width='10%'> </th>";
- echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']})\">Front</a></th>";
- echo "<th width='50%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']})\">Interior</a></th>";
- echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']})\">Back</a></th></tr>\n";
+ echo "<th width='20%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']})\">Front</a></th>";
+ echo "<th width='50%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']})\">Interior</a></th>";
+ echo "<th width='20%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']})\">Back</a></th></tr>\n";
printOpFormIntro ('updateRack');
markupAtomGrid ($rackData, $state2);
renderAtomGrid ($rackData);
@@ -1990,14 +1990,14 @@
echo "<center>\n<h2>${rackData['name']}</h2>\n";
echo "<table class=rack border=0 cellspacing=0 cellpadding=1>\n";
echo "<tr><th width='10%'> </th>";
- echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']})\">Front</a></th>";
- echo "<th width='50%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']})\">Interior</a></th>";
- echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']})\">Back</a></th></tr>\n";
+ echo "<th width='20%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']})\">Front</a></th>";
+ echo "<th width='50%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']})\">Interior</a></th>";
+ echo "<th width='20%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']})\">Back</a></th></tr>\n";
renderAtomGrid ($rackData);
echo "<tr><th width='10%'> </th>";
- echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']})\">Front</a></th>";
- echo "<th width='50%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']})\">Interior</a></th>";
- echo "<th width='20%'><a href='javascript:;' onclick=\"toggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']})\">Back</a></th></tr>\n";
+ echo "<th width='20%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '0', ${rackData['height']})\">Front</a></th>";
+ echo "<th width='50%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '1', ${rackData['height']})\">Interior</a></th>";
+ echo "<th width='20%'><a href='javascript:;' oncontextmenu=\"blockToggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']}); return false;\" onclick=\"toggleColumnOfAtoms('${rack_id}', '2', ${rackData['height']})\">Back</a></th></tr>\n";
echo "</table></center>\n";
echo '</td>';
}
@@ -4027,7 +4027,7 @@
$rack_id = $data['id'];
for ($unit_no = $data['height']; $unit_no > 0; $unit_no--)
{
- echo "<tr><th><a href='javascript:;' onclick=\"toggleRowOfAtoms('${rack_id}','${unit_no}')\">${unit_no}</a></th>";
+ echo "<tr><th><a href='javascript:;' oncontextmenu=\"blockToggleRowOfAtoms('${rack_id}','${unit_no}'); return false;\" onclick=\"toggleRowOfAtoms('${rack_id}','${unit_no}')\">${unit_no}</a></th>";
for ($locidx = 0; $locidx < 3; $locidx++)
{
$name = "atom_${rack_id}_${unit_no}_${locidx}";
Index: js/racktables.js
===================================================================
--- js/racktables.js (revision 4023)
+++ js/racktables.js (working copy)
@@ -141,3 +141,65 @@
tr.show();
});
}
+
+// Used for (un)checking an entire row of rackspace atoms
+function toggleRowOfAtoms (rackId, rowId) {
+ var checkboxId;
+ for (var i=0; i<=2; i++) {
+ checkboxId = "atom_" + rackId + "_" + rowId + "_" + i;
+ // Abort if the box is disabled
+ if (document.getElementById(checkboxId).disabled == true) continue;
+ // Box isn't disabled, toggle it
+ if (document.getElementById(checkboxId).checked == false) {
+ document.getElementById(checkboxId).checked = true;
+ } else {
+ document.getElementById(checkboxId).checked = false;
+ }
+ }
+}
+
+function blockToggleRowOfAtoms (rackId, rowId) {
+ var checkboxId;
+ var toSet;
+ toSet = null;
+ for (var i=0; i<=2; i++) {
+ checkboxId = "atom_" + rackId + "_" + rowId + "_" + i;
+ // Abort if the box is disabled
+ if (document.getElementById(checkboxId).disabled == true) continue;
+ if (toSet == null) {
+ toSet = !document.getElementById(checkboxId).checked;
+ }
+ document.getElementById(checkboxId).checked = toSet;
+ }
+}
+
+// Used for (un)checking an entire column of rackspace atoms
+function toggleColumnOfAtoms (rackId, columnId, numRows) {
+ var checkboxId;
+ for (var i=1; i<numRows+1; i++) {
+ checkboxId = "atom_" + rackId + "_" + i + "_" + columnId;
+ // Abort if the box is disabled
+ if (document.getElementById(checkboxId).disabled == true) continue;
+ // Box isn't disabled, toggle it
+ if (document.getElementById(checkboxId).checked == false) {
+ document.getElementById(checkboxId).checked = true;
+ } else {
+ document.getElementById(checkboxId).checked = false;
+ }
+ }
+}
+
+function blockToggleColumnOfAtoms (rackId, columnId, numRows) {
+ var checkboxId;
+ var toSet;
+ toSet = null;
+ for (var i=1; i<numRows+1; i++) {
+ checkboxId = "atom_" + rackId + "_" + i + "_" + columnId;
+ // Abort if the box is disabled
+ if (document.getElementById(checkboxId).disabled == true) continue;
+ if (toSet == null) {
+ toSet = !document.getElementById(checkboxId).checked;
+ }
+ document.getElementById(checkboxId).checked = toSet;
+ }
+}