[geeklog-cvs] geeklog: Preparations to allow config type '%select'

geeklog-cvs at lists.geeklog.net geeklog-cvs at lists.geeklog.net
Sun Nov 29 04:45:35 EST 2009


changeset 7490:0d33295fe66f
url:  http://project.geeklog.net/cgi-bin/hgwebdir.cgi/geeklog/rev/0d33295fe66f
user: Dirk Haun <dirk at haun-online.de>
date: Sat Nov 28 21:58:11 2009 +0100
description:
Preparations to allow config type '%select'

diffstat:

 public_html/javascript/configmanager.js                           |  24 ++++++++++++
 public_html/layout/professional/admin/config/config_element.thtml |   6 ++-
 system/classes/config.class.php                                   |  23 +++++++++++-
 3 files changed, 50 insertions(+), 3 deletions(-)

diffs (109 lines):

diff -r e1df65abb027 -r 0d33295fe66f public_html/javascript/configmanager.js
--- a/public_html/javascript/configmanager.js	Sat Nov 28 20:28:54 2009 +0100
+++ b/public_html/javascript/configmanager.js	Sat Nov 28 21:58:11 2009 +0100
@@ -42,6 +42,30 @@
   add_element(self.parentNode.parentNode.parentNode, array_name, name, 'text', '', '1');
  }else if(array_type == "placeholder"){
   add_element(self.parentNode.parentNode.parentNode, array_name, name, 'hidden', '1', '1');
+ }else if(array_type == "select"){
+  add_select(self.parentNode.parentNode.parentNode, array_name, name - 1, '1');
+ }
+}
+
+function add_select(tbl, arr_name, index, deletable){
+ var newRow = tbl.insertRow(tbl.rows.length - 1);
+ titleCell = newRow.insertCell(0);
+ paramCell = newRow.insertCell(1);
+ titleCell.className = "alignright";
+ titleCell.appendChild(document.createTextNode(index));
+ dropDown = tbl.getElementsByTagName('tr')[0].getElementsByTagName('td')[1].getElementsByTagName('select')[0].cloneNode(true);
+ dropDown.name = arr_name + "[" + index + "]";
+ paramCell.appendChild(dropDown);
+ if(deletable){
+  paramCell.appendChild(document.createTextNode("\n"));
+  deleteButton = document.createElement("input");
+  deleteButton.type = "button";
+  deleteButton.value = "x";
+  deleteButton.onclick =
+    function(){
+        gl_cfg_remove(this)
+    };
+  paramCell.appendChild(deleteButton);
  }
 }
 
diff -r e1df65abb027 -r 0d33295fe66f public_html/layout/professional/admin/config/config_element.thtml
--- a/public_html/layout/professional/admin/config/config_element.thtml	Sat Nov 28 20:28:54 2009 +0100
+++ b/public_html/layout/professional/admin/config/config_element.thtml	Sat Nov 28 21:58:11 2009 +0100
@@ -18,13 +18,15 @@
 <!-- END placeholder-element -->
 
 <!-- BEGIN select-element -->
-<tr><td class="alignright">{display_name} {doc_link} {unset_link}</td>
+<tr{hide_row}><td class="alignright">{display_name} {doc_link} {unset_link}</td>
 <td>
 <select name="{name}" class="opt">
   <!-- BEGIN select-options -->
     <option {selected} value="{opt_value}">{opt_name}</option>
   <!-- END select-options -->
-</select></td></tr>
+</select>
+{delete}
+</td></tr>
 <!-- END select-element -->
 
 <!-- BEGIN unset-param -->
diff -r e1df65abb027 -r 0d33295fe66f system/classes/config.class.php
--- a/system/classes/config.class.php	Sat Nov 28 20:28:54 2009 +0100
+++ b/system/classes/config.class.php	Sat Nov 28 21:58:11 2009 +0100
@@ -680,6 +680,14 @@
         } elseif ($type == "placeholder") {
             return $t->finish($t->parse('output', 'placeholder-element'));
         } elseif ($type == 'select') {
+            // if $name is like "blah[0]", separate name and index
+            $n = explode('[', $name);
+            $name = $n[0];
+            $index = null;
+            if (count($n) == 2) {
+                $i = explode(']', $n[1]);
+                $index = $i[0];
+            }
             $type_name = $type . '_' . $name;
             if ($group == 'Core') {
                 $fn = 'configmanager_' . $type_name . '_helper';
@@ -687,7 +695,11 @@
                 $fn = 'plugin_configmanager_' . $type_name . '_' . $group;
             }
             if (function_exists($fn)) {
-                $selectionArray = $fn();
+                if ($index === null) {
+                    $selectionArray = $fn();
+                } else {
+                    $selectionArray = $fn($index);
+                }
             } else if (is_array($selectionArray)) {
                 // leave sorting to the function otherwise
                 uksort($selectionArray, 'strcasecmp');
@@ -707,6 +719,9 @@
                 $t->set_var('selected', ($val == $sVal ? 'selected="selected"' : ''));
                 $t->parse('myoptions', 'select-options', true);
             }
+            if ($index == 'placeholder') {
+                $t->set_var('hide_row', ' style="display:none;"');
+            }
             return $t->parse('output', 'select-element');
         } elseif (strpos($type, '@') === 0) {
             $result = '';
@@ -726,6 +741,12 @@
                                            'unkeyed-add-button'));
             $t->set_var('my_add_element_button', $button);
             $result = "";
+            if ($type == '%select') {
+                $result .= config::_UI_get_conf_element($group,
+                                $name . '[placeholder]', 'placeholder',
+                                substr($type, 1), 'placeholder', $selectionArray,
+                                true);
+            }
             foreach ($val as $valkey => $valval) {
                 $result .= config::_UI_get_conf_element($group,
                                 $name . '[' . $valkey . ']', $valkey,



More information about the geeklog-cvs mailing list