diff --git a/webui/scripts/main.js b/webui/scripts/main.js index 5cf4fad..77ad51c 100644 --- a/webui/scripts/main.js +++ b/webui/scripts/main.js @@ -36,6 +36,7 @@ var rc = { success: function(d, s, x) { rc.page.update(d); rc.dialog.prepare(d); + rc.trigger_all(d); }, failure: function(x, s, e) { @@ -93,9 +94,16 @@ var rc = { }, close: function() { + // Hide the dialog $("#dialog").hide(); - $(".dialogfooterbuttonset").hide(); + + // Remove the dialog content $("#dialogcontent").html(); + + // Hide all buttons + $(".dialogfooterbuttonset").hide(); + // Strip all event handlers + $(".dialogfooterbuttonset input[type='button']").unbind('click'); } }, @@ -136,8 +144,11 @@ var rc = { }, 'add-setting': function(params) { - // TODO - console.log('todo'); + rc.ajax.post(base_url + 'ajax/admin/add-setting/name/' + $('#'+params.name).val() + '/type/' + $('#'+params.type).val() + '/'); + }, + + 'add_setting_row': function(params) { + $("#settings tbody").append(params.content); } }, @@ -159,6 +170,14 @@ var rc = { } }, + trigger_all: function(params) { + if (params.actions) { + for (var action in params.actions) { + rc.trigger(action, params.actions[action]); + } + } + }, + settings: { init: function() { diff --git a/webui/source/pages/ajax/admin/add-setting.php b/webui/source/pages/ajax/admin/add-setting.php new file mode 100644 index 0000000..882aabc --- /dev/null +++ b/webui/source/pages/ajax/admin/add-setting.php @@ -0,0 +1,50 @@ +request(); +$config = $main->config(); + +$messages = array(); +$result = false; + +try { + $name = $req->get('name', 'RippingCluster_Exception_InvalidParameters'); + $type = $req->get('type', 'RippingCluster_Exception_InvalidParameters'); + + // Convert the web-friendly type field into the correct internal name + $value = null; + switch($type) { + case 'bool': { + $type = Sihnon_Config::TYPE_BOOL; + $value = false; + } break; + case 'int': { + $type = Sihnon_Config::TYPE_INT; + $value = 0; + } break; + case 'string': { + $type = Sihnon_Config::TYPE_STRING; + $value = ''; + } break; + case 'string-list': { + $type = Sihnon_Config::TYPE_STRING_LIST; + $value = array(); + } break; + } + + // Add the new (empty) value. This is because no suitable UI has been presented yet. + // Possible future fix, to insert intermediate dialog to capture the value using the correct UI. + $result = $config->add($name, $type, $value); + $this->smarty->assign('success', $result); + + $this->smarty->assign('name', $name); + $this->smarty->assign('type', $type); + $this->smarty->assign('value', ''); + +} catch(RippingCluster_Exception $e) { + $messages[] = get_class($e) . ':' . $e->getMessage(); + $this->smarty->assign('messages', $messages); + $this->smarty->assign('success', false); +} + +?> \ No newline at end of file diff --git a/webui/source/templates/admin/settings.tpl b/webui/source/templates/admin/settings.tpl index 4aaae90..3640b03 100644 --- a/webui/source/templates/admin/settings.tpl +++ b/webui/source/templates/admin/settings.tpl @@ -10,12 +10,8 @@ {assign var='value' value=$config->get($name)} {assign var='type' value=$config->type($name)} {assign var='id' value=str_replace('.', '-',$name)} -