r3322 checkColumnOfRadios(): new JavaScript helper function
authorDenis Ovsienko <infrastation@yandex.ru>
Wed, 3 Mar 2010 15:47:31 +0000 (15:47 +0000)
committerDenis Ovsienko <infrastation@yandex.ru>
Wed, 3 Mar 2010 15:47:31 +0000 (15:47 +0000)
renderObjectVLANSync(): employ new JS code

inc/interface.php
js/racktables.js

index 3d961206974fd0ba870475ceaad39493f84d0154..be5e22bda32614a5aa29b578c9e79095559f7c8b 100644 (file)
@@ -6905,10 +6905,16 @@ function renderObjectVLANSync ($object_id)
        $vswitch = getVLANSwitchInfo ($object_id);
        $domvlans = array_keys (getDomainVLANs ($vswitch['domain_id']));
        printOpFormIntro ('sync', array ('mutex_rev' => $vswitch['mutex_rev']));
+       $nrows = count ($formports);
        echo '<table cellspacing=0 cellpadding=5 align=center class=widetable>';
        echo '<tr><th rowspan=2>port name</th><th rowspan=2>desired config</th><th colspan=3>wins</th>';
-       echo '<th rowspan=2>running config</th></tr><tr><th>&larr;</th><th>&nbsp;</th><th>&rarr;</th></tr>';
+       echo '<th rowspan=2>running config</th></tr><tr>';
+       foreach (array ('left', 'asis', 'right') as $pos)
+               echo "<th><input type=radio name=column_radio value=${pos} " .
+                       "onclick=\"checkColumnOfRadios('i_', ${nrows}, '_${pos}')\"></th>";
+       echo '</tr>';
        $order = 'odd';
+       $rownum = 1;
        foreach ($formports as $port_id => $port)
        {
                $desired_cfgstring = serializeVLANPack ($port['desired_native'], $port['desired_allowed']);
@@ -6927,22 +6933,25 @@ function renderObjectVLANSync ($object_id)
                                $radio['right'] = FALSE;
                }
                echo "<tr class=row_${order}><td>${port['port_name']}</td>";
-               echo "<td><label for=i_${port_id}_left>${desired_cfgstring}</label></td>";
+               echo "<td><label for=i_${rownum}_left>${desired_cfgstring}</label></td>";
                foreach ($radio as $pos => $enabled)
                {
                        echo '<td>';
                        if (!$enabled)
                                echo '&nbsp;';
                        else
-                               echo "<input id=i_${port_id}_${pos} name=i_${port_id} type=radio value=${pos}" . $checked[$pos] . ">";
+                               // For JS event handler radio input names are indexed from 1
+                               // onwards, but for sumbit handler they are based on port id.
+                               echo "<input id=i_${rownum}_${pos} name=i_${port_id} type=radio value=${pos}" . $checked[$pos] . ">";
                        echo '</td>';
                }
-               echo "<td><label for=i_${port_id}_right>${running_cfgstring}</label></td>";
+               echo "<td><label for=i_${rownum}_right>${running_cfgstring}</label></td>";
                echo '</tr>';
                echo "<input type=hidden name=rn_${port_id} value=${port['running_native']}>";
                foreach ($port['running_allowed'] as $a)
                        echo "<input type=hidden name=ra_${port_id}[] value=${a}>";
                $order = $nextorder[$order];
+               $rownum++;
        }
        echo '<tr><td colspan=6 align=center>';
        printImageHREF ('UPDATEALL', 'sumbit all updates', TRUE);
index 66e228453008b21b4c8d959af4c9c6c59f9fb9df..91ada525488644b87e46169e7cadb5b720bfac50 100644 (file)
@@ -35,3 +35,28 @@ function toggleColumnOfAtoms (rackId, columnId, numRows) {
                }
        }
 }
+
+// used by 802.1Q sync form
+function checkColumnOfRadios (prefix, numRows, suffix)
+{
+       var elemId;
+       for (var i=1; i < numRows+1; i++)
+       {
+               elemId = prefix + i + suffix;
+               // Not all radios are present on each form. Hence each time
+               // we are requested to switch from left to right (or vice versa)
+               // it is better to half-complete the request by setting to the
+               // middle position, than to fail completely due to missing
+               // target input.
+               if (document.getElementById(elemId) == null)
+                       switch (suffix)
+                       {
+                       case '_asis':
+                               continue;
+                       case '_left':
+                       case '_right':
+                               elemId = prefix + i + '_asis';
+                       }
+               document.getElementById(elemId).checked = true;
+       }
+}