diff options
author | Christian Klinger | 2016-07-26 11:19:05 +0200 |
---|---|---|
committer | Christian Klinger | 2016-07-26 11:19:05 +0200 |
commit | 183f5d752061f1665de75626545a0fe182546208 (patch) | |
tree | ac6bad15317807d19bccfaf879ae703f68472e5f | |
parent | added "cancel" button. (diff) | |
parent | refactored makeInput(). (diff) | |
download | slx-admin-183f5d752061f1665de75626545a0fe182546208.tar.gz slx-admin-183f5d752061f1665de75626545a0fe182546208.tar.xz slx-admin-183f5d752061f1665de75626545a0fe182546208.zip |
Merge branch 'feature/baseconfig-extra-types' into modularization
-rw-r--r-- | modules-available/baseconfig/config.json | 3 | ||||
-rw-r--r-- | modules-available/baseconfig/inc/validator.inc.php | 12 | ||||
-rw-r--r-- | modules-available/baseconfig/page.inc.php | 44 | ||||
-rw-r--r-- | modules-available/baseconfig/templates/_page.html | 48 | ||||
-rw-r--r-- | modules-available/baseconfig_bwlp/baseconfig/settings.json | 17 | ||||
-rw-r--r-- | modules-available/js_selectize/clientscript.js | 3 |
6 files changed, 111 insertions, 16 deletions
diff --git a/modules-available/baseconfig/config.json b/modules-available/baseconfig/config.json index dd2122be..e4d906e1 100644 --- a/modules-available/baseconfig/config.json +++ b/modules-available/baseconfig/config.json @@ -1,3 +1,4 @@ { - "category": "main.settings-client" + "category": "main.settings-client", + "dependencies" : ["js_selectize", "bootstrap_multiselect"] } diff --git a/modules-available/baseconfig/inc/validator.inc.php b/modules-available/baseconfig/inc/validator.inc.php index 23debd2c..00e8c0e0 100644 --- a/modules-available/baseconfig/inc/validator.inc.php +++ b/modules-available/baseconfig/inc/validator.inc.php @@ -29,12 +29,17 @@ class Validator return self::validateList($data[1], $displayValue); case 'function': return self::$data[1]($displayValue); + case 'multilist': + return self::validateList($data[1], $displayValue); + case 'multiinput': + return self::validateMultiInput($data[1], $displayValue); default: Util::traceError('Unknown validation method: ' . $data[0]); } return false; // make code inspector happy - doesn't know traceError doesn't return } + /** * Validate linux password. If already in $6$ hash form, * the unchanged value will be returned. @@ -82,4 +87,11 @@ class Validator return false; } + private static function validateMultiInput(&$list, &$displayValue) + { + return $displayValue; + //die("validateMultiInput: " . print_r($list, true) . ", disp = " . $displayValue); + //return implode('~,~', $displayValue); + /* TODO: DO I have to do validation */ + } } diff --git a/modules-available/baseconfig/page.inc.php b/modules-available/baseconfig/page.inc.php index 056dbab1..41a7523f 100644 --- a/modules-available/baseconfig/page.inc.php +++ b/modules-available/baseconfig/page.inc.php @@ -170,7 +170,8 @@ class Page_BaseConfig extends Page $settings[$var['catid']]['settings'][$key]['displayvalue'] = $var['defaultvalue']; } $settings[$var['catid']]['settings'][$key] += array( - 'item' => $this->makeInput($var['validator'], $key, $settings[$var['catid']]['settings'][$key]['displayvalue']), + 'item' => $this->makeInput($var['validator'], $key, $settings[$var['catid']]['settings'][$key]['displayvalue'], $settings[$var['catid']]['settings'][$key]['shadows'] + ), 'description' => Util::markup(Dictionary::translateFileModule($var['module'], 'config-variables', $key)) ); } @@ -244,29 +245,48 @@ class Page_BaseConfig extends Page * @param type $validator * @return boolean */ - private function makeInput($validator, $setting, $current) + private function makeInput($validator, $setting, $current, $shadows) { + + /* for the html snippet we need: */ + $tag = 'input'; + $type = 'text'; + $shadowjs = empty($shadows) ? "" : " data-shadows=\"$shadows\""; + $classes = "form-control"; + $extras= ""; + $inner = ""; + /* -- */ + $parts = explode(':', $validator, 2); - if ($parts[0] === 'list') { + if ($parts[0] === 'list' || $parts[0] == 'multilist') { $items = explode('|', $parts[1]); - $ret = '<select name="setting[' . $setting . ']" class="form-control">'; + $multiple = $parts[0] == 'multilist'; + if ($multiple) { + $extras = 'multiple '; + $classes .= " multilist"; + } + $tag = 'select'; + foreach ($items as $item) { if ($item === $current) { - $ret .= '<option selected="selected">' . $item . '</option>'; + $inner .= '<option selected="selected">' . $item . '</option>'; } else { - $ret .= '<option>' . $item . '</option>'; + $inner .= '<option>' . $item . '</option>'; } } - return $ret . '</select>'; } - // Password field guessing + /* multiinput: enter multiple free-form strings*/ + if (strtolower($validator) == 'multiinput') { + $classes .= " multiinput"; + } + + /* Password field guessing */ if (stripos($validator, 'password') !== false) { $type = Property::getPasswordFieldType(); - } else { - $type = 'text'; } - // Fallback: single line input - return '<input type="' . $type . '" name="setting[' . $setting . ']" class="form-control" size="30" value="' . $current . '">'; + + return "<$tag type=\"$type\" id=\"$setting\" name=\"setting['$setting']\" $shadowjs $extras class=\"$classes\" value=\"$current\"" + . ($inner == "" ? "/>" : ">$inner </$tag>"); } } diff --git a/modules-available/baseconfig/templates/_page.html b/modules-available/baseconfig/templates/_page.html index 49e8164c..8bfd1b6a 100644 --- a/modules-available/baseconfig/templates/_page.html +++ b/modules-available/baseconfig/templates/_page.html @@ -66,3 +66,51 @@ <a class="btn btn-default" href="api.php?do=baseconfig&user={{userid}}&module={{target_module}}&value={{field_value}}&force=1">Download</a> {{/override}} </form> + +<script type="text/javascript"> + +function updateShadows(e) { + var shadowStr = $(e.target).data('shadows'); + var currentValue = $(e.target).val(); + var rules = shadowStr.split(','); + rules.forEach(function(rule) { + var rule_parts = rule.split('->'); + var triggerVal = rule_parts[0].trim(); + var target = rule_parts[1].trim(); + + if (currentValue == triggerVal) { + $('#' + target).prop('disabled', true); + $('#' + target + '.multilist').multiselect('disable'); + } else { + $('#' + target).prop('disabled', false); + $('#' + target + '.multilist').multiselect('enable'); + } + }); + console.log(shadowStr); +} + + +document.addEventListener("DOMContentLoaded", function () { + /* apply selectize on all multiinput-selectize inputs */ + var $multiinputs = $("input.multiinput"); + $multiinputs.selectize({ + delimiter: ' ', + create: true, + plugins: ['restore_on_backspace', 'remove_button'], + maxItems: 10000 + + }); + + var $multilists = $("select.multilist"); + $multilists.multiselect({ + includeSelectAllOption: true, + buttonWidth: '100%', + buttonClass: 'form-control' + }); + + /* data-shadowing bindings */ + $allShadowingFields = $('[data-shadows]'); + $allShadowingFields.on('change', updateShadows); + +}); +</script> diff --git a/modules-available/baseconfig_bwlp/baseconfig/settings.json b/modules-available/baseconfig_bwlp/baseconfig/settings.json index b0cbf81c..dfde3a09 100644 --- a/modules-available/baseconfig_bwlp/baseconfig/settings.json +++ b/modules-available/baseconfig_bwlp/baseconfig/settings.json @@ -27,13 +27,13 @@ "catid": "timesync", "defaultvalue": "0.de.pool.ntp.org 1.de.pool.ntp.org", "permissions": "2", - "validator": "" + "validator": "multiinput" }, "SLX_PROXY_BLACKLIST": { "catid": "networking", "defaultvalue": "", "permissions": "2", - "validator": "" + "validator": "multiinput" }, "SLX_PROXY_IP": { "catid": "networking", @@ -118,5 +118,18 @@ "defaultvalue": "BUMP", "permissions": "2", "validator": "list:IGNORE|BUMP|EXCLUSIVE" + }, + "SLX_VMCHOOSER_DUMMYSETTING_ONE": { + "catid": "vmchooser", + "defaultvalue": "", + "permissions": "2", + "validator": "list:ON|OFF", + "shadows": "OFF -> SLX_LOGOUT_TIMEOUT, OFF -> SLX_VMCHOOSER_DUMMYSETTING_TWO" + }, + "SLX_VMCHOOSER_DUMMYSETTING_TWO": { + "catid": "vmchooser", + "defaultvalue": "", + "permissions": "2", + "validator": "multilist:Apples|Bananas|Pears" } } diff --git a/modules-available/js_selectize/clientscript.js b/modules-available/js_selectize/clientscript.js index e8c09140..953ef9de 100644 --- a/modules-available/js_selectize/clientscript.js +++ b/modules-available/js_selectize/clientscript.js @@ -3664,4 +3664,5 @@ return Selectize; -}));
\ No newline at end of file +})); + |