put some tag colour CSS processing right
authorDenis Ovsienko <denis@ovsienko.info>
Tue, 6 Nov 2018 14:09:59 +0000 (14:09 +0000)
committerDenis Ovsienko <denis@ovsienko.info>
Tue, 6 Nov 2018 14:09:59 +0000 (14:09 +0000)
getObjectClass() used to accept as one of its parameters a custom string
to prepend to the generated CSS, but the functions that called it didn't
always properly decide what that string should be, if any. Modify
getObjectClass() to accept a mandatory context code, this makes it a
single place to yield the CSS for this purpose, and makes the code in the
calling functions easier to follow.

Fix printObjectDetailsForRenderRack() to highlight the currently selected
nested object with coloured tags.

Fix renderAtomGrid() not to highlight mounted objects with coloured tags
just because they have the "has_problems" flag set.

Fix the same issue in renderRack(), and fix it to highlight the currently
selected zero-U object with coloured tags.

Remove additional zebra style from renderDepot() to make the list of
objects look consistently with the list of networks (which looks better).

In renderIPSpaceRecords() simplify and comment related code.

wwwroot/inc/interface-lib.php
wwwroot/inc/interface.php

index b64de74..6f41cd0 100644 (file)
@@ -1203,10 +1203,20 @@ function makeHtmlTag ($tagname, $attributes = array())
        return $ret;
 }
 
-function getObjectClass ($object, $extrastyle = '')
+function getObjectClass ($object, $context)
 {
+       $ctxmap = array
+       (
+               'atom_plain' => 'background:white;',
+               'atom_selected' => 'border:3px solid #80ffff !important;background:white;',
+               'list_plain' => '',
+               'list_selected' => 'outline: 3px solid #0aff0a;',
+       );
+       if (! array_key_exists ($context, $ctxmap))
+               throw new InvalidArgException ('context', $context, 'unknown value');
        if (! array_key_exists ('colors', $object) || ! count ($object['colors']))
                return '';
+       $style = $ctxmap[$context];
        $step = intval (round (100 / count ($object['colors'])));
        $percent = 0;
        $gradient = '';
@@ -1216,7 +1226,7 @@ function getObjectClass ($object, $extrastyle = '')
                $gradient .= "rgba(${rgb},0.2) ${percent}%, rgba(${rgb},0.3) " . ($percent + $step) . "%,";
                $percent += $step;
        }
-       $style = "${extrastyle}background-image:linear-gradient(135deg," . trim ($gradient, ',') . ") !important;";
+       $style .= "background-image:linear-gradient(135deg," . trim ($gradient, ',') . ") !important;";
        return getCachedCSSClassForStyle ("objectcolor-${object['id']}", $style);
 }
 
index 3a975eb..0831b0b 100644 (file)
@@ -879,7 +879,8 @@ function printObjectDetailsForRenderRack ($object_id, $hl_obj_id = 0)
 
                                $child = spotEntity ('object', $childData['id']);
                                setEntityColors ($child);
-                               $slotClass[$slot] .= getObjectClass ($child, 'background:white;');
+                               $class_context = $childData['id'] == $hl_obj_id ? 'atom_selected' : 'atom_plain';
+                               $slotClass[$slot] .= getObjectClass ($child, $class_context);
 
                        }
                }
@@ -988,7 +989,8 @@ function renderRack ($rack_id, $hl_obj_id = 0)
                        {
                                $objectData = spotEntity ('object', $rackData[$i][$locidx]['object_id']);
                                setEntityColors ($objectData);
-                               $class .= getObjectClass ($objectData, (isset ($rackData[$i][$locidx]['hl']) && $rackData[$i][$locidx]['hl'] != "" ? "border:3px solid #80ffff !important;" : "")."background:white;");
+                               $class_context = $rackData[$i][$locidx]['object_id'] == $hl_obj_id ? 'atom_selected' : 'atom_plain';
+                               $class .= getObjectClass ($objectData, $class_context);
                        }
 
                        echo "<td class='${class}'";
@@ -1036,7 +1038,8 @@ function renderRack ($rack_id, $hl_obj_id = 0)
 
                        $class = "atom state_${state}";
                        setEntityColors ($zeroUObject);
-                       $class .= getObjectClass ($zeroUObject, 'background:white;');
+                       $class_context = $zeroUObject['id'] == $hl_obj_id ? 'atom_selected' : 'atom_plain';
+                       $class .= getObjectClass ($zeroUObject, $class_context);
 
                        echo "<tr><td class='${class}'>";
                        printObjectDetailsForRenderRack ($zeroUObject['id']);
@@ -2392,7 +2395,7 @@ function renderDepot ()
                                $problem = ($obj['has_problems'] == 'yes') ? 'has_problems' : '';
 
                                setEntityColors ($obj);
-                               $class = getObjectClass ($obj, ($order == 'even' ? 'background:white;' : ''));
+                               $class = getObjectClass ($obj, 'list_plain');
 
                                echo "<tr class='row_${order} tdleft ${problem}${class}' valign=top><td>" . mkA ("<strong>${obj['dname']}</strong>", 'object', $obj['id']);
                                if (count ($obj['etags']))
@@ -2562,22 +2565,16 @@ function renderIPSpaceRecords ($tree, $baseurl, $target = 0, $level = 1)
                                $decor['symbolurl'] = "${baseurl}&eid=${item['id']}&hl_net=1";
                        elseif ($item['symbol'] == 'node-expanded')
                                $decor['symbolurl'] = $baseurl . ($item['parent_id'] ? "&eid=${item['parent_id']}&hl_net=1" : '');
-                       $tr_class = '';
-                       $extrastyle = '';
-                       if ($target == $item['id'] && isset ($_REQUEST['hl_net']))
-                       {
-                               if (isset ($item['colors'][0]))
-                                       $extrastyle = 'outline: 3px solid #0aff0a;';
-                               else
-                               {
-                                       $decor['tdclass'] = ' highlight';
-                                       $tr_class = $decor['tdclass'];
-                               }
-
-                       }
 
                        setEntityColors ($item);
-                       $tr_class .= getObjectClass ($item, $extrastyle);
+                       $class_context = ($target == $item['id'] && isset ($_REQUEST['hl_net'])) ? 'list_selected' : 'list_plain';
+                       $tr_class = getObjectClass ($item, $class_context);
+                       // Use old-style highlighting for colourless networks.
+                       if ($class_context == 'list_selected' && $tr_class == '')
+                       {
+                               $decor['tdclass'] = ' highlight';
+                               $tr_class = $decor['tdclass'];
+                       }
 
                        echo "<tr valign=top class=\"$tr_class\">";
                        printIPNetInfoTDs ($item, $decor);
@@ -3989,8 +3986,8 @@ function renderAtomGrid ($data, $is_ro = FALSE)
                                        // Implies object_id is set and the value is not NULL.
                                        $objectData = spotEntity ('object', $data[$unit_no][$locidx]['object_id']);
                                        setEntityColors ($objectData);
-                                       $extrastyle = $hl != '' ? 'border:3px solid #80ffff !important;' : '';
-                                       $td['class'] .= getObjectClass ($objectData, $extrastyle);
+                                       $class_context = ($hl == 'h' || $hl == 'hw') ? 'atom_selected' : 'atom_plain';
+                                       $td['class'] .= getObjectClass ($objectData, $class_context);
                                }
                        }
                        if (! $show_checkbox)