diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2012-05-21 15:24:37 +0200 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2012-06-04 10:45:07 +0200 |
commit | 890151dca823cd06b2d6980e2b255c218a16e6a1 (patch) | |
tree | 4b88a414491924f796892174d8baa92213795ed7 /install/ui/widget.js | |
parent | bd36600efee8b06b68262d5bf21285ab724eb797 (diff) | |
download | freeipa.git-890151dca823cd06b2d6980e2b255c218a16e6a1.tar.gz freeipa.git-890151dca823cd06b2d6980e2b255c218a16e6a1.tar.xz freeipa.git-890151dca823cd06b2d6980e2b255c218a16e6a1.zip |
Action panel
This patch implements action panel. Action panel is a box located in facet details section which contains actions related to that object/section.
In spec file can be configured actions and title used in action panel. Default title is 'Actions'. Actions are specified by their name. They have to be defined in action collection in facet.
https://fedorahosted.org/freeipa/ticket/2248
Diffstat (limited to 'install/ui/widget.js')
-rw-r--r-- | install/ui/widget.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/install/ui/widget.js b/install/ui/widget.js index 172e43a5..85bc7132 100644 --- a/install/ui/widget.js +++ b/install/ui/widget.js @@ -37,6 +37,7 @@ IPA.widget = function(spec) { that.label = spec.label; that.tooltip = spec.tooltip; that.entity = IPA.get_entity(spec.entity); //some old widgets still need it + that.facet = spec.facet; that.create = function(container) { container.addClass('widget'); @@ -55,6 +56,24 @@ IPA.widget = function(spec) { } }; + that.build_child = function(spec, factory) { + + if (typeof spec === 'function') { + spec = { + factory: spec + }; + } + + $.extend(spec, { + parent: that, + entity: that.entity, + facet: that.facet + }); + + var child = IPA.build(spec, factory); + return child; + }; + that.widget_create = that.create; return that; @@ -2639,12 +2658,18 @@ IPA.details_table_section = function(spec) { var that = IPA.details_section(spec); + that.action_panel = that.build_child(spec.action_panel); + that.rows = $.ordered_map(); that.composite_widget_create = function(container) { that.widget_create(container); + if (that.action_panel) { + that.action_panel.create(container); + } + var table = $('<table/>', { 'class': 'section-table' }).appendTo(container); @@ -3134,6 +3159,127 @@ IPA.sshkey_widget = function(spec) { return that; }; +IPA.action_panel = function(spec) { + + spec = spec || {}; + + var that = IPA.widget(spec); + + that.action_names = spec.actions; + that.actions = $.ordered_map(); + that.facet = spec.facet; + that.initialized = false; + + that.init = function() { + + for (var i=0; i<that.action_names.length; i++) { + var name = that.action_names[i]; + var action = that.facet.actions.get(name); + + that.add_action(action, true); + + that.actions.put(name, action); + } + + that.initialized = true; + }; + + that.add_action = function(action, batch) { + that.actions.put(action.name, action); + action.enabled_changed.attach(that.action_enabled_changed); + action.visible_changed.attach(that.action_visible_changed); + + if (!batch) { + that.create_items(); + } + }; + + that.create = function(container) { + + if (!that.initialized) that.init(); + + that.element = $('<div/>', { + 'data-name': that.name, + 'class': 'action-panel' + }); + + that.header_element = $('<h3/>', { + 'class': 'action-title' + }).appendTo(that.element); + + that.list_element = $('<ul/>', { + 'class': 'action-panel-list' + }).appendTo(that.element); + + that.element.appendTo(container); + + that.create_items(); + }; + + that.create_item = function(action) { + + var classes, state, li, a; + + classes = ['action']; + state = action.enabled ? 'enabled' : 'disabled'; + classes.push(state); + + li = $('<li/>'); + a = $('<a/>', { + 'data-name': action.name, + href: '#', + text: action.label, + 'class': classes.join(' '), + onclick: function() { + that.action_clicked(action); + return false; + } + }).appendTo(li); + li.appendTo(that.list_element); + }; + + that.clear_items = function() { + + that.list_element.empty(); + }; + + that.create_items = function() { + + if (!that.element) return; + + that.clear_items(); + + var actions = that.actions.values; + + for (var i=0; i<actions.length; i++) { + var action = actions[i]; + that.create_item(action); + } + + that.header_element.text(that.label); + }; + + that.action_clicked = function(action) { + + if (!action.enabled || !action.visible) return; + + action.execute(that.facet); + }; + + that.action_enabled_changed = function() { + + that.create_items(); + }; + + that.action_visible_changed = function() { + + that.create_items(); + }; + + + return that; +}; + IPA.widget_factories['attribute_table'] = IPA.attribute_table_widget; IPA.widget_factories['button'] = IPA.button_widget; |