diff --git a/webui/scripts/main.js b/webui/scripts/main.js index 6bb6edc..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) { @@ -63,6 +64,15 @@ var rc = { ); $("#dialogfooterok").show(); break; + case 'okcancel': + $("#dialogfooterokcancel_ok").click(function() { + rc.trigger(d.dialog.buttons.actions.ok, d.dialog.buttons.params); + }); + $("#dialogfooterokcancel_cancel").click(function() { + rc.trigger(d.dialog.buttons.actions.cancel, d.dialog.buttons.params); + }); + $("#dialogfooterokcancel").show(); + break; case 'yesno': $("#dialogfooteryes").click( function() { @@ -84,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'); } }, @@ -124,6 +141,14 @@ var rc = { 'delete-source-confirm': function(params) { rc.sources.remove_confirmed(params['plugin'], params['id']); + }, + + 'add-setting': function(params) { + 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); } }, @@ -145,14 +170,28 @@ var rc = { } }, + trigger_all: function(params) { + if (params.actions) { + for (var action in params.actions) { + rc.trigger(action, params.actions[action]); + } + } + }, + settings: { init: function() { - $("#settings_save").click( - function() { - rc.settings.save(); - } - ); + $("#settings_save").click(function() { + rc.settings.save(); + }); + + $("#settings_new").click(function() { + rc.settings.new_setting(); + }); + }, + + new_setting: function() { + rc.ajax.get(base_url + "ajax/admin/new-setting/"); }, add_stringlist_field: function(id) { 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 7cf3361..3640b03 100644 --- a/webui/source/templates/admin/settings.tpl +++ b/webui/source/templates/admin/settings.tpl @@ -10,42 +10,15 @@ {assign var='value' value=$config->get($name)} {assign var='type' value=$config->type($name)} {assign var='id' value=str_replace('.', '-',$name)} -
| Name | +Type | + + +
|---|---|
| + + | ++ + | +