var rc = { init: function() { rc.ajax.init(); rc.dialog.init(); rc.page.init(); }, ajax: { init: function() { }, get: function(url) { $.ajax({ url: url, type: "GET", dataType: "json", success: rc.ajax.success, error: rc.ajax.failure }); }, post: function(url, data) { $.ajax({ url: url, type: "POST", dataType: "json", data: data, success: rc.ajax.success, error: rc.ajax.failure }); }, success: function(d, s, x) { rc.page.update(d); rc.dialog.prepare(d); rc.trigger_all(d); }, failure: function(x, s, e) { console.log("Ajax Failure: " + s, e); console.log(x.responseText); } }, dialog: { init: function() { $("#dialogheaderclose").click(rc.dialog.close); }, prepare: function(d) { if (d.dialog && d.dialog.show) { if (d.dialog.buttons) { switch (d.dialog.buttons.type) { case 'ok': $("#dialogfooterok").click( function() { rc.trigger(d.dialog.buttons.actions.ok, d.dialog.buttons.params); } ); $("#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() { rc.trigger(d.dialog.buttons.actions.yes, d.dialog.buttons.params); } ); $("#dialogfooterno").click( function() { rc.trigger(d.dialog.buttons.actions.no, d.dialog.buttons.params); } ); $("#dialogfooteryesno").show(); break; } } if (d.dialog.title) { $('#dialogheadertitle').html(d.dialog.title); } if (d.dialog.content) { $('#dialogcontent').html(d.dialog.content); } $("#dialog").show(); } }, close: function() { // Hide the dialog $("#dialog").hide(); // Remove the dialog content $("#dialogcontent").html(); // Hide all buttons $(".dialogfooterbuttonset").hide(); // Strip all event handlers $(".dialogfooterbuttonset input[type='button']").unbind('click'); } }, page: { init: function() { }, update: function(d) { for ( var f in d.page_replacements) { $("#" + f).html(d.page_replacements[f].content); } } }, sources: { remove: function(plugin, source) { rc.ajax.get(base_url + "ajax/delete-source/plugin/" + plugin + "/id/" + source); }, remove_confirmed: function(plugin, source) { rc.ajax.get(base_url + "ajax/delete-source/plugin/" + plugin + "/id/" + source + "/confirm/"); } }, actions: { 'close-dialog': function(params) { rc.dialog.close(); }, '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); }, 'remove_setting': function(params) { $('#setting_' + params.id + '_row').remove(); rc.ajax.post(base_url + 'ajax/admin/remove-setting/name/' + params.name + '/'); } }, trigger: function(action, params) { // Handle a list of actions by repeated calling self for each argument if (action instanceof Array) { for(i in action) { rc.trigger(action[i], params); } return; } // Check if action is supported, and execute it if (rc.actions[action]) { rc.actions[action](params); } else { console.log("Action not supported: " +action); } }, 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_new").click(function() { rc.settings.new_setting(); }); }, new_setting: function() { rc.ajax.get(base_url + "ajax/admin/new-setting/"); }, remove_setting: function(id, name) { rc.dialog.prepare({ dialog: { show: true, title: 'Remove setting', content: "Do you really want to remove setting '" + name + "'", buttons: { type: 'okcancel', actions: { ok: [ 'remove_setting', 'close-dialog' ], cancel: 'close-dialog' }, params: { id: id, name: name } } } }); }, add_stringlist_field: function(id) { var container = $('#container_'+id); var next = $('#settings_'+id+'_next'); var next_value = next.val(); var line = $('