[Cluster-devel] conga/luci ChangeLog site/luci/Extensions/Stor ...

kupcevic at sourceware.org kupcevic at sourceware.org
Mon Jul 17 20:59:43 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	kupcevic at sourceware.org	2006-07-17 20:59:43

Modified files:
	luci           : ChangeLog 
	luci/site/luci/Extensions: StorageReport.py 
	luci/storage   : form-macros 

Log message:
	luci - storage: styling of property dialogs

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/ChangeLog.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/site/luci/Extensions/StorageReport.py.diff?cvsroot=cluster&r1=1.2&r2=1.3
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/luci/storage/form-macros.diff?cvsroot=cluster&r1=1.1&r2=1.2

--- conga/luci/ChangeLog	2006/07/12 23:12:00	1.2
+++ conga/luci/ChangeLog	2006/07/17 20:59:43	1.3
@@ -1,5 +1,8 @@
 
 
+2006-07-17  Stanko Kupcevic <kupcevic at redhat.com> 
+   * storage: styling of property dialogs
+
 2006-07-12  Stanko Kupcevic <kupcevic at redhat.com> 
-   * use pretty properties' names
+   * storage: use pretty properties' names
 
--- conga/luci/site/luci/Extensions/StorageReport.py	2006/07/12 23:12:01	1.2
+++ conga/luci/site/luci/Extensions/StorageReport.py	2006/07/17 20:59:43	1.3
@@ -407,6 +407,7 @@
     pretty_target_name = 'target'
     pretty_source_name = 'source'
     icon_name = ''
+    color = 'black'
     if type == MAPPER_SYS_TYPE:
         pretty_type = 'Hard Drives'
         pretty_target_name = 'Hard Drive'
@@ -461,6 +462,7 @@
     mapper_ret['sources'] = sources
     mapper_ret['new_sources'] = new_sources
     mapper_ret['icon'] = icon_name
+    mapper_ret['color'] = color
     mapper_ret['xml'] = mapper.cloneNode(True)
     
     assemble_all_targets(mapper_ret)
@@ -598,7 +600,8 @@
     pretty_name = mapper_id.replace(type + ':', '').replace('/dev/', '')
     pretty_target_name = 'target'
     pretty_source_name = 'source'
-    icon_name = ''
+    icon_name = 'none'
+    color = 'black'
     if type == MAPPER_SYS_TYPE:
         pretty_type = 'Hard Drives'
         pretty_target_name = 'Hard Drive'
@@ -668,6 +671,7 @@
     mapper_ret['min_sources'] = min_sources
     mapper_ret['max_sources'] = max_sources
     mapper_ret['icon'] = icon_name
+    mapper_ret['color'] = color
     mapper_ret['xml'] = mapper.cloneNode(True)
     
     mapper_ret['actions'] = []
@@ -1375,6 +1379,7 @@
     pretty_type = 'Block Device'
     description = props['size']['value'] + ' ' + props['size']['units']
     icon_name = ''
+    color = 'black'
     if type == MAPPER_SYS_TYPE:
         pretty_type = 'Hard Drive'
         icon_name = 'icon_bd_ide.png'
@@ -1388,6 +1393,7 @@
             icon_name = 'icon_bd_LV_snapshot.png'
         else:
             icon_name = 'icon_bd_LV.png'
+        color = '#0192db'
     elif type == MAPPER_PT_TYPE:
         pretty_type = 'Partition'
         icon_name = 'icon_bd_partition.png'
@@ -1420,7 +1426,7 @@
                 contents = []
                 path = 'new_snapshot'
                 pretty_type = 'New Snapshot'
-                pretty_name = 'no pretty name'
+                pretty_name = ''
             else:
                 pretty_type = 'Snapshot'
                 #pretty_name = 'Unused Space'
@@ -1434,6 +1440,7 @@
     data['mapper_id'] = mapper_id
     data['contents'] = contents
     data['icon'] = icon_name
+    data['color'] = color
     data['xml'] = bd_xml.cloneNode(True)
     
     actions = []
@@ -1607,6 +1614,36 @@
         for name in old_props:
             new_props['content_variable_' + d['id'] + '_' + name] = old_props[name]
         d['props'] = new_props
+        
+        # content's color and icon
+        color = 'black'
+        icon_name = 'none'
+        type = d['xml'].getAttribute('type')
+        if type == 'filesystem':
+            pass
+        elif type == 'mapper_source':
+            mapper_type = d['xml'].getAttribute('mapper_type')
+            if mapper_type == MAPPER_SYS_TYPE:
+                pass
+            elif mapper_type == MAPPER_VG_TYPE:
+                color = '#a43737'
+            elif mapper_type == MAPPER_PT_TYPE:
+                pass
+            elif mapper_type == MAPPER_MDRAID_TYPE or mapper_type == MAPPER_ATARAID_TYPE:
+                pass
+            elif mapper_type == MAPPER_MULTIPATH_TYPE:
+                pass
+            elif mapper_type == MAPPER_CRYPTO_TYPE:
+                pass
+            elif mapper_type == MAPPER_iSCSI_TYPE:
+                pass
+        elif type == 'none':
+            pass
+        elif type == 'hidden':
+            pass
+        
+        d['color'] = color
+        d['icon'] = icon_name
     
     return data
 
--- conga/luci/storage/form-macros	2006/06/30 17:00:02	1.1
+++ conga/luci/storage/form-macros	2006/07/17 20:59:43	1.2
@@ -7,7 +7,91 @@
 
 <div metal:define-macro="forms-css">
    <style>
-      table.form td { padding: 0px;  }
+table.form td { padding: 0px;  }
+
+
+
+table {
+    border-spacing: 0px;
+}
+
+th {
+    font-weigt: bold;
+}
+
+th, td {
+    padding: 5px;
+}
+
+
+table.props-form-table {
+    width: 100%;
+    padding: 2px;
+}
+table.props-form-table tr,
+table.props-form-table td {
+    padding: 2px;
+}
+
+tr.props-form-header {
+    background-color: #fff;
+}
+tr.props-form-header th {
+    background-color: #dee7ec;
+    text-align: center;
+}
+tr.props-form-header th:first-child {
+    -moz-border-radius-topleft: 15px;
+}
+tr.props-form-header th:last-child {
+    -moz-border-radius-topright: 15px;
+}
+
+tr.props-form-body {
+    height: 100%;
+}
+tr.props-form-body td {
+    width: 50%;
+}
+tr.props-form-body td:first-child {
+    border-left: 1px solid #dee7ec;
+}
+tr.props-form-body td:last-child {
+    border-right: 1px solid #dee7ec;
+}
+
+tr.props-form-footer {
+    background-color: #fff;
+}
+tr.props-form-footer td {
+    background-color: #dee7ec;
+    padding: 3px;
+}
+tr.props-form-footer td:first-child {
+    -moz-border-radius-bottomleft: 15px;
+}
+tr.props-form-footer td:last-child {
+    -moz-border-radius-bottomright: 15px;
+}
+
+table.props-inner-table {
+    width: 100%;
+    height: 100%;
+}
+table.props-inner-table tr {
+
+}
+table.props-inner-table tr td:first-child {
+    border-left: 2px solid #fff;
+}
+table.props-inner-table tr td:last-child {
+    border-right: 2px solid #fff;
+}
+table.props-inner-table td {
+    width: auto;
+}
+
+
    </style>
 </div>
 
@@ -449,7 +533,7 @@
     
     
     <div tal:attributes="id properties_span_id"
-          style="width: 700px; height: 320px; overflow: auto; ">
+         style="width: 700px; min-height: 360px; ">
      <span id="warning_box"
            style="position:absolute; visibility: hidden; border: medium double red; color: red; background-color: white; text-align: center; width: 350px; ">
      </span>
@@ -531,68 +615,39 @@
     <input tal:attributes="type  string:hidden; 
                            name  string:storagename; 
                            value storagename"/>
-    <table class="form">
-     <caption>
-      <div align="left">
-       <h2>
-        New <span tal:replace="mapper/pretty_type"/>
-       </h2>
-      </div>
-     </caption>
-     <tr>
-      <th>
-       <div align="left">
-        
-       </div>
-      </th>
-      <th>
-       <div align="left">
-        <span tal:replace="mapper/pretty_type"/> Properties
-       </div>
+    <table class="props-form-table">
+     <tr class="props-form-header">
+      <th colspan="2"
+          tal:attributes="style python:here.add_commas('font-size: large', 'color: ' + mapper['color'])">
+       Creating New <span tal:replace="mapper/pretty_type"/>
       </th>
-      <th>
-       <div align="left">
-        <span tal:replace="mapper/pretty_sources_name"/>
-       </div>
-      <th>
      </tr>
-     <tr>
+     <tr class="props-form-body">
       <td>
-       <table>
-        <tr>
-         <td>
-          icon
-         </td>
-        </tr>
-        <tr>
-         <td>
-          <table>
-
-          </table>
-         </td>
-        </tr>
+       <table class="props-inner-table"
+              tal:define="props mapper/props">
+        <div metal:use-macro="here/form-macros/macros/display-props-tableless"/>
        </table>
       </td>
-      <td>
-       <span tal:omit-tag="" 
-             tal:define="props mapper/props">
-        <div metal:use-macro="here/form-macros/macros/display-props"/>
-       </span>
-      </td>
-      <td>
-       <table>
-        <caption tal:condition="python:mapper['min_sources'] == mapper['max_sources']">
-         Select <span tal:replace="mapper/min_sources"/> <span tal:replace="mapper/pretty_source_name"/>
-        </caption>
-        <caption tal:condition="python:mapper['min_sources'] != mapper['max_sources']">
-         Select <span tal:replace="mapper/min_sources"/> to <span tal:replace="mapper/max_sources"/> <span tal:replace="mapper/pretty_sources_name"/>
-        </caption>
-        <span tal:omit-tag=""
-              tal:define="bds mapper/new_sources"
-              tal:repeat="bd bds">
-         <tr>
-          <td>
-           <table>
+      <td style="height: 100%;">
+       <table class="props-form-table"
+              style="height: 100%;">
+        <tr class="props-form-header">
+         <th>
+          <span tal:condition="python:mapper['min_sources'] == mapper['max_sources']">
+           Select <span tal:replace="mapper/min_sources"/> <span tal:replace="mapper/pretty_source_name"/>
+          </span>
+          <span tal:condition="python:mapper['min_sources'] != mapper['max_sources']">
+           Select <span tal:replace="mapper/min_sources"/> to <span tal:replace="mapper/max_sources"/> <span tal:replace="mapper/pretty_sources_name"/>
+          </span>
+         </th>
+        </tr>
+        <tr class="props-form-body">
+         <td>
+          <table class="props-inner-table">
+           <span tal:omit-tag=""
+                 tal:define="bds mapper/new_sources"
+                 tal:repeat="bd bds">
             <tr>
              <td>
               <input tal:attributes="type string:checkbox; 
@@ -602,36 +657,48 @@
               <span tal:replace="bd/path"/> (<span tal:replace="bd/props/size/value"/> <span tal:replace="bd/props/size/units"/> - <span tal:replace="bd/pretty_type"/>)
              </td>
             </tr>
-           </table>
-          </td>
-         </tr>
-        </span>
+           </span>
+           <tr>
+            <td colspan="2"
+                style="height: 100%;">
+              
+            </td>
+           </tr>
+          </table>
+         </td>
+        </tr>
+        <tr class="props-form-footer">
+         <td>
+           
+         </td>
+        </tr>
        </table>
       </td>
      </tr>
-     <tr>
-      <td>
-       
-      </td>
-      <td>
-       
-      </td>
-      <td>
-       <div align="right">
-        <input type="button" 
-               name="action_type" 
-               value="Reset" 
-               onclick="return reset_form(this.form)"
-               class="form_button"/>
-        <input tal:define="prompt_msg    python:'Do you really want to create new ' + mapper['pretty_type'] + '?';
-                           validate_url  context/validate_html/absolute_url" 
-               tal:attributes="id      create_mapper_button_id; 
-                               type    string:button; 
-                               name    string:action_type; 
-                               value   string:Create; 
-                               onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_template_form_id + '\', \'' + create_mapper_button_id + '\', \'' + prompt_msg + '\')'"
-               class="form_button"/>
-       </div>
+     <tr class="props-form-footer">
+      <td colspan="2">
+       <table style="width: 100%;">
+        <tr>
+         <td align="left">
+           
+         </td>
+         <td align="right">
+          <input type="button" 
+                 name="action_type" 
+                 value="Reset" 
+                 onclick="return reset_form(this.form)"
+                 class="form_button"/>
+          <input tal:define="prompt_msg    python:'Do you really want to create new ' + mapper['pretty_type'] + '?';
+                             validate_url  context/validate_html/absolute_url" 
+                 tal:attributes="id      create_mapper_button_id; 
+                                 type    string:button; 
+                                 name    string:action_type; 
+                                 value   string:Create; 
+                                 onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_template_form_id + '\', \'' + create_mapper_button_id + '\', \'' + prompt_msg + '\')'"
+                 class="form_button"/>
+         </td>
+        </tr>
+       </table>
       </td>
      </tr>
     </table>
@@ -639,13 +706,91 @@
   </div>
 
 
-    
 
 
 
-    
 
 
+
+
+  <div tal:omit-tag="" metal:define-macro="display-props-tableless">
+   <span tal:omit-tag=""
+         tal:define="predefines_test python:'display-props: ' + str(props) + prefix + properties_span_id"/>
+   <span tal:omit-tag="" 
+          tal:repeat="p props">
+     <tr tal:define="prop python:props[p];
+                     prop_pr_name prop/pretty_name">
+      <td tal:content="prop_pr_name"/>
+      <td tal:define="prop_type prop/type;
+                      prop_units prop/units">
+       <table>
+        <tr>
+         <td>
+          <span tal:condition="python:prop_type == 'label'">
+           <span tal:omit-tag=""
+                 tal:condition="prop/replacements|nothing">
+            <input tal:attributes="type string:hidden;
+                                   name p;
+                                   value prop/value"/>
+            <select tal:define="repls prop/replacements;
+                                select_id python:prefix + '_select_replace_block_' + p"
+                    tal:attributes="id       select_id;
+                                    onfocus  python:'replace_properties_block__old_select_value = this.value';
+                                    onchange python:'replace_properties_block(\'' + properties_span_id + '\', \'' + select_id + '\')'">
+             <span tal:omit-tag="" 
+                   tal:repeat="repl_name repls/repl_names">
+              <option tal:attributes="value python:repls[repl_name]['path']"/><span tal:replace="repl_name"/>
+             </span>
+            </select>
+           </span>
+           <span tal:condition="not: prop/replacements|nothing"
+                 tal:replace="prop/value"/>
+          </span>
+
+
+
+          <input tal:condition="python:prop_type == 'text'"
+                 tal:attributes="name        p; 
+                                 type        string:text; 
+                                 value       prop/value;
+                                 onkeypress  python:'return validate_text_keypress(this, event, 2, \'' + prop['validation']['illegal_chars'] + '\', ' + str(prop['validation']['max_length']) + ')';
+                                 onblur      python:'validate_text(this, 2, \'' + prop['validation']['illegal_chars'] + '\', \'' + prop['validation']['reserved_words'] + '\', ' + str(prop['validation']['min_length']) + ', ' + str(prop['validation']['max_length']) + ')'"/>
+
+          <input tal:condition="python:prop_type == 'int'"
+                 tal:attributes="name   p; 
+                                 type   string:text; 
+                                 value  prop/value;
+                                 onblur python:'validate_int(this, 2, ' + str(prop['validation']['min']) + ', ' + str(prop['validation']['max']) + ', ' + str(prop['validation']['step']) + ')'"
+                 onkeypress="return validate_int_keypress(this, event, 2)"/>
+
+
+
+          <span tal:condition="python:prop_type == 'select'">
+           <select tal:define="prop_options prop/value"
+                   tal:attributes="name p">
+            <span tal:omit-tag="" 
+                  tal:repeat="prop_opt prop_options">
+             <option tal:attributes="value prop_opt"/><span tal:replace="prop_opt"/>
+            </span>
+           </select>
+          </span>
+         </td>
+         <td>
+          <span tal:replace="prop_units"/>
+         </td>
+        </tr>
+       </table>
+      </td>
+     </tr>
+   </span>
+   <tr>
+    <td colspan="2"
+        style="height: 100%;">
+      
+    </td>
+   </tr>
+  </div>
+
   <div tal:omit-tag="" metal:define-macro="display-props">
    <span tal:omit-tag=""
          tal:define="predefines_test python:'display-props: ' + str(props) + prefix + properties_span_id"/>
@@ -728,7 +873,9 @@
          tal:define="predefines_test python:'display-content: ' + str(cont) + properties_span_id"/>
    <span tal:omit-tag="" 
          tal:define="props cont/props">
-     <div metal:use-macro="here/form-macros/macros/display-props"/>
+    <table class="props-inner-table">
+     <div metal:use-macro="here/form-macros/macros/display-props-tableless"/>
+    </table>
    </span>
   </div>
 
@@ -768,7 +915,11 @@
    input                  { background-image: none; }
    input.validation_error { border: medium double red; background-color: orange; }
    input.selected         { border: thin solid orange; }
-   input.form_button      { background-color: #dee7ec; }
+   input.form_button      { background-color: #fff; 
+                            -moz-border-radius-topleft: 7px;
+                            -moz-border-radius-topright: 7px;
+                            -moz-border-radius-bottomleft: 7px;
+                            -moz-border-radius-bottomright: 7px; }
  </style>
  
  <script language="javascript" type="text/javascript">
@@ -1127,39 +1278,46 @@
      <input tal:attributes="type  string:hidden; 
                             name  string:storagename; 
                             value storagename"/>
-     <table class="form">
-      <caption>
-       <div align="left">
-        <h2>
+     <table class="props-form-table">
+      <tr class="props-form-header">
+       <th colspan="2"
+           tal:attributes="style python:here.add_commas('font-size: large', 'color: ' + bd_data['color'])">
+        <span tal:omit-tag=""
+              tal:condition="not: bd_data/new">
+         <span tal:replace="bd_data/pretty_type"/> '<span tal:replace="bd_data/pretty_name"/>' - <span tal:replace="bd_data/path"/>
+        </span>
+        <span tal:omit-tag=""
+              tal:condition="bd_data/new">
          <span tal:omit-tag=""
-               tal:condition="not: bd_data/new">
-          <span tal:replace="bd_data/pretty_type"/> '<span tal:replace="bd_data/pretty_name"/>' - <span tal:replace="bd_data/path"/>
+               tal:condition="bd_data/pretty_name">
+          <span tal:replace="bd_data/pretty_name"/>
+          -
          </span>
-         <span tal:condition="bd_data/new" 
-               tal:replace="bd_data/pretty_type"/>
-        </h2>
-       </div>
-      </caption>
-      <tr>
-       <th>
-        <div align="left">
-         
-        </div>
-       </th>
-       <th>
-        <div align="left">
-         <span tal:replace="bd_data/pretty_type"/> Properties 
-        </div>
+         Creating <span tal:replace="bd_data/pretty_type"/>
+        </span>
        </th>
-       <th>
-        <div align="left">
-        <table tal:condition="conts">
-         <tr>
-          <td>
+      </tr>
+      <tr class="props-form-body">
+       <td>
+        <span tal:omit-tag="" 
+              tal:define="props bd_data/props">
+         <table class="props-inner-table">
+          <div metal:use-macro="here/form-macros/macros/display-props-tableless"/>
+         </table>
+        </span>
+       </td>
+       <td style="height: 100%;">
+        <span tal:omit-tag=""
+              tal:condition="not: conts">
+          
+        </span>
+	<table class="props-form-table"
+               style="height: 100%;"
+               tal:condition="conts">
+         <tr class="props-form-header">
+          <th tal:attributes="style python:'color: ' + conts[0]['color']">
            Content<span tal:condition="python:len(conts) == 1"
                         tal:replace="string::"/>
-          </td>
-          <td>
            <select tal:define="funct python:'change_content(\'' + select_content_id + '\', \'' + content_span_id + '\')'"
                    tal:condition="python:len(conts) > 1" 
                    tal:attributes="id       select_content_id; 
@@ -1178,95 +1336,73 @@
                                    value cont/id"/>
             <span tal:replace="cont/name"/>
            </span>
-          </td>
+          </th>
          </tr>
-        </table>
-        </div>
-       </th>
-      </tr>
-      <tr>
-       <td>
-        <table>
-         <tr>
-          <td align="center">
-           <img tal:attributes="src bd_data/icon" 
-                style="width: 60px;"/>
+         <tr class="props-form-body">
+          <td>
+           <span tal:attributes="id content_span_id">
+            <span tal:define="cont python:conts[0]"
+                  tal:attributes="class string:visible;
+                                  id cont/id">
+             <div metal:use-macro="here/form-macros/macros/display-content"/>
+            </span>
+            <span tal:omit-tag=""
+                  tal:repeat="cont python:conts[1:]">
+             <span tal:attributes="class string:invisible;
+                                   id cont/id">
+              <div metal:use-macro="here/form-macros/macros/display-content"/>
+             </span>
+            </span>
+           </span>
           </td>
          </tr>
-         <tr>
-          <td align="center">
-           <table>
-            <span tal:omit-tag="" 
-                  tal:define="actions bd_data/actions" 
-                  tal:repeat="action actions">
-             <tr>
-              <td tal:define="act_name  action/name; 
-                              act_msg   action/msg; 
-                              act_link  action/link"
-                  align="center">
-               <span tal:condition="act_link">
-                <input tal:define="act_link    python:act_link + '&storagename=' + storagename; 
-                                   funct       python:'window.location.assign(\'' + act_link + '\')'"
-                       tal:attributes="type    string:button; 
-                                       name    string:action_type; 
-                                       value   act_name; 
-                                       onclick funct"
-                       class="form_button"/>
-               </span>
-               <span tal:condition="not: act_link">
-                <input tal:condition="act_msg" 
-                       tal:attributes="type    string:submit; 
-                                       name    string:action_type; 
-                                       value   act_name;
-                                       onclick python:'return confirm(\'' + act_msg + '\')'"
-                       class="form_button"/>
-                <input tal:condition="not: act_msg" 
-                       tal:attributes="type   string:submit; 
-                                       name   string:action_type; 
-                                       value  act_name"
-                       class="form_button"/>
-               </span>
-              </td>
-             </tr>
-            </span>
-           </table>
+         <tr class="props-form-footer">
+          <td>
+            
           </td>
          </tr>
         </table>
        </td>
-       <td>
-        <span tal:omit-tag="" 
-              tal:define="props bd_data/props">
-         <div metal:use-macro="here/form-macros/macros/display-props"/>
-        </span>
-       </td>
-       <td tal:condition="conts">
-        <span tal:attributes="id content_span_id">
-         <span tal:define="cont python:conts[0]"
-               tal:attributes="class string:visible;
-                               id cont/id">
-          <div metal:use-macro="here/form-macros/macros/display-content"/>
-         </span>
-         <span tal:omit-tag=""
-               tal:repeat="cont python:conts[1:]">
-          <span tal:attributes="class string:invisible;
-                                id cont/id">
-           <div metal:use-macro="here/form-macros/macros/display-content"/>
+      </tr>
+      <tr class="props-form-footer">
+       <td colspan="2">
+        <table style="width: 100%;">
+        <tr>
+        <td align="left"
+             tal:define="actions bd_data/actions">
+         <span tal:omit-tag="" 
+               tal:repeat="action actions">
+          <span tal:omit-tag=""
+                tal:define="act_name  action/name; 
+                            act_msg   action/msg; 
+                            act_link  action/link">
+           <span tal:condition="act_link">
+            <input tal:define="act_link    python:act_link + '&storagename=' + storagename; 
+                               funct       python:'window.location.assign(\'' + act_link + '\')'"
+                   tal:attributes="type    string:button; 
+                                   name    string:action_type; 
+                                   value   act_name; 
+                                   onclick funct"
+                   class="form_button"/>
+           </span>
+           <span tal:condition="not: act_link">
+            <input tal:condition="act_msg" 
+                   tal:attributes="type    string:submit; 
+                                   name    string:action_type; 
+                                   value   act_name;
+                                   onclick python:'return confirm(\'' + act_msg + '\')'"
+                   class="form_button"/>
+            <input tal:condition="not: act_msg" 
+                   tal:attributes="type   string:submit; 
+                                   name   string:action_type; 
+                                   value  act_name"
+                   class="form_button"/>
+           </span>
           </span>
          </span>
-        </span>
-       </td>
-      </tr>
-      <tr>
-       <td>
-        
-       </td>
-       <td>
-        
-       </td>
-       <td>
-        <div align="right"
-             tal:define="validate_url  context/validate_html/absolute_url">
+        </td>
+        <td align="right"
+            tal:define="validate_url  context/validate_html/absolute_url">
          <input tal:attributes="type    string:button; 
                                 name    string:action_type; 
                                 value   string:Reset; 
@@ -1288,7 +1424,9 @@
                                 value   string:Apply; 
                                 onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + bd_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
                 class="form_button"/>
-        </div>
+        </td>
+        </tr>
+        </table>
        </td>
       </tr>
      </table>
@@ -1299,6 +1437,7 @@
 
 
 
+
   <div metal:define-macro="display-mapper">
    <div metal:use-macro="here/form-macros/macros/forms-css"/>
    <span tal:omit-tag=""
@@ -1324,104 +1463,79 @@
     <input tal:attributes="type  string:hidden; 
                            name  string:storagename; 
                            value storagename"/>
-    <table class="form">
-     <caption>
-      <div align="left">
-       <h2>
-        <span tal:replace="mapper/pretty_type"/> '<span tal:replace="mapper/pretty_name"/>'
-       </h2>
-      </div>
-     </caption>
-     <tr>
-      <th>
-       <div align="left">
-        
-       </div>
+    <table class="props-form-table">
+     <tr class="props-form-header">
+      <th colspan="2"
+          tal:attributes="style python:here.add_commas('font-size: large', 'color: ' + mapper['color'])">
+       <span tal:replace="mapper/pretty_type"/> '<span tal:replace="mapper/pretty_name"/>'
       </th>
-      <th>
-       <div align="left">
-        <span tal:replace="mapper/pretty_type"/> Properties
-       </div>
-      <th>
      </tr>
-     <tr>
+     <tr class="props-form-body">
       <td>
-       <table>
-        <tr>
-         <td align="center">
-          <img tal:attributes="src mapper/icon" 
-               style="width: 60px;"/>
-         </td>
-        </tr>
+       <table class="props-inner-table"
+              tal:define="props mapper/props">
+        <div metal:use-macro="here/form-macros/macros/display-props-tableless"/>
+       </table>
+      </td>
+      <td style="height: 100%;">
+        
+      </td>
+     </tr>
+     <tr class="props-form-footer">
+      <td colspan="2">
+       <table style="width: 100%;">
         <tr>
-         <td align="center">
-          <table>
-           <span tal:omit-tag="" 
-                 tal:define="actions mapper/actions" 
-                 tal:repeat="action actions">
-            <tr>
-             <td tal:define="act_name  action/name; 
+         <td align="left">
+          <span tal:omit-tag="" 
+                tal:define="actions mapper/actions" 
+                tal:repeat="action actions">
+           <span tal:define="act_name  action/name; 
                              act_msg   action/msg; 
                              act_link  action/link"
                  align="center">
-              <span tal:condition="act_link">
-               <input tal:define="act_link    python:act_link + '&storagename=' + storagename; 
-                                  funct       python:'window.location.assign(\'' + act_link + '\')'"
-                      tal:attributes="type    string:button; 
-                                      name    string:action_type; 
-                                      value   act_name; 
-                                      onclick funct"
-                      class="form_button"/>
-              </span>
-              <span tal:condition="not: act_link">
-               <input tal:condition="act_msg" 
-                      tal:attributes="type    string:submit; 
-                                      name    string:action_type; 
-                                      value   act_name; 
-                                      onclick python:'return confirm(\'' + act_msg + '\')'"
-                      class="form_button"/>
-               <input tal:condition="not: act_msg" 
-                      tal:attributes="type   string:submit; 
-                                      name   string:action_type; 
-                                      value  act_name"
-                      class="form_button"/>
-              </span>
-             </td>
-            </tr>
+            <span tal:condition="act_link">
+             <input tal:define="act_link    python:act_link + '&storagename=' + storagename; 
+                                funct       python:'window.location.assign(\'' + act_link + '\')'"
+                    tal:attributes="type    string:button; 
+                                    name    string:action_type; 
+                                    value   act_name; 
+                                    onclick funct"
+                    class="form_button"/>
+            </span>
+            <span tal:condition="not: act_link">
+             <input tal:condition="act_msg" 
+                    tal:attributes="type    string:submit; 
+                                    name    string:action_type; 
+                                    value   act_name; 
+                                    onclick python:'return confirm(\'' + act_msg + '\')'"
+                    class="form_button"/>
+             <input tal:condition="not: act_msg" 
+                    tal:attributes="type   string:submit; 
+                                    name   string:action_type; 
+                                    value  act_name"
+                    class="form_button"/>
+            </span>
            </span>
-          </table>
+          </span>
+         </td>
+         <td align="right">
+          <input type="button"
+                 name="action_type"
+                 value="Reset"
+                 onclick="return reset_form(this.form)"
+                 class="form_button"/>
+          <input tal:define="prompt_msg    python:'Do you really want to apply changes to ' + mapper['pretty_type'] + ' \\\'' + mapper['pretty_name'] + '\\\'?';
+                             validate_url  context/validate_html/absolute_url" 
+                 tal:attributes="id      apply_button_id; 
+                                 type    string:button; 
+                                 name    string:action_type; 
+                                 value   string:Apply; 
+                                 onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
+                 class="form_button"/>
          </td>
         </tr>
        </table>
       </td>
-      <td>
-       <span tal:omit-tag="" 
-             tal:define="props mapper/props">
-        <div metal:use-macro="here/form-macros/macros/display-props"/>
-       </span>
-      </td>
-     </tr>
-     <tr>
-      <td>
-       
-      </td>
-      <td>
-       <div align="right">
-        <input type="button"
-               name="action_type"
-               value="Reset"
-               onclick="return reset_form(this.form)"
-               class="form_button"/>
-        <input tal:define="prompt_msg    python:'Do you really want to apply changes to ' + mapper['pretty_type'] + ' \\\'' + mapper['pretty_name'] + '\\\'?';
-                           validate_url  context/validate_html/absolute_url" 
-               tal:attributes="id      apply_button_id; 
-                               type    string:button; 
-                               name    string:action_type; 
-                               value   string:Apply; 
-                               onclick python:'return validate_and_submit_form(\'' + validate_url + '\', \'' + mapper_form_id + '\', \'' + apply_button_id + '\', \'' + prompt_msg + '\')'"
-               class="form_button"/>
-       </div>
-      </td>
      </tr>
     </table>
    </form>




More information about the Cluster-devel mailing list