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} - - {switch $type} - {case Sihnon_Config::TYPE_BOOL} - - {/case} - {case Sihnon_Config::TYPE_INT} - - {/case} - {case Sihnon_Config::TYPE_STRING} - - {/case} - {case Sihnon_Config::TYPE_STRING_LIST} -
- {foreach from=$value item=line name=settings} -
- - -
- {/foreach} -
-
- - -
- {/case} - {/switch} - - + + {include file="fragments/admin-setting-row.tpl"} {/foreach} + diff --git a/webui/source/templates/ajax/admin/add-setting.tpl b/webui/source/templates/ajax/admin/add-setting.tpl new file mode 100644 index 0000000..0fcbcff --- /dev/null +++ b/webui/source/templates/ajax/admin/add-setting.tpl @@ -0,0 +1,11 @@ +{if $success} + "actions": { + "add_setting_row": { + {include file="fragments/admin-setting-row.tpl" assign=content} + "content": {$content|json_encode} + } + }, +{/if} + +"success": {$success|json_encode} + diff --git a/webui/source/templates/ajax/admin/new-setting.tpl b/webui/source/templates/ajax/admin/new-setting.tpl new file mode 100644 index 0000000..743a360 --- /dev/null +++ b/webui/source/templates/ajax/admin/new-setting.tpl @@ -0,0 +1,30 @@ +"page_replacements": { + + "dialogheadertitle": { + "content": "Add Setting" + }, + + "dialogcontent": { + {include file="fragments/new-setting-dialog.tpl" assign=new_setting_dialog_content} + "content": {$new_setting_dialog_content|json_encode} + } + +}, + +"dialog": { + "show": true, + "buttons": { + "type": "okcancel", + "actions": { + "ok": [ + "add-setting", + "close-dialog" + ], + "cancel": "close-dialog" + }, + "params": { + "name": "settings_add_name", + "type": "settings_add_type" + } + } +} \ No newline at end of file diff --git a/webui/source/templates/fragments/admin-setting-row.tpl b/webui/source/templates/fragments/admin-setting-row.tpl new file mode 100644 index 0000000..6886a32 --- /dev/null +++ b/webui/source/templates/fragments/admin-setting-row.tpl @@ -0,0 +1,6 @@ + + {$name} + + {include file="fragments/admin-setting-value.tpl"} + + \ No newline at end of file diff --git a/webui/source/templates/fragments/admin-setting-value.tpl b/webui/source/templates/fragments/admin-setting-value.tpl new file mode 100644 index 0000000..7ffcf9a --- /dev/null +++ b/webui/source/templates/fragments/admin-setting-value.tpl @@ -0,0 +1,25 @@ +{switch $type} + {case Sihnon_Config::TYPE_BOOL} + + {/case} + {case Sihnon_Config::TYPE_INT} + + {/case} + {case Sihnon_Config::TYPE_STRING} + + {/case} + {case Sihnon_Config::TYPE_STRING_LIST} +
+ {foreach from=$value item=line name=settings} +
+ + +
+ {/foreach} +
+
+ + +
+ {/case} +{/switch} \ No newline at end of file diff --git a/webui/source/templates/fragments/new-setting-dialog.tpl b/webui/source/templates/fragments/new-setting-dialog.tpl new file mode 100644 index 0000000..59f67a0 --- /dev/null +++ b/webui/source/templates/fragments/new-setting-dialog.tpl @@ -0,0 +1,21 @@ + + + + + + + + + + + +
NameType
+ + + +
diff --git a/webui/source/templates/index.tpl b/webui/source/templates/index.tpl index 412f558..5c8d460 100644 --- a/webui/source/templates/index.tpl +++ b/webui/source/templates/index.tpl @@ -69,6 +69,12 @@ +
+
+ + +
+