From b9ad279ad2d8d93dd501115a028783cf8fe7fcbd Mon Sep 17 00:00:00 2001 From: Adam Young Date: Wed, 19 Jan 2011 12:26:14 -0500 Subject: rename static to ui Directory rename --- install/ui/search.js | 462 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 462 insertions(+) create mode 100644 install/ui/search.js (limited to 'install/ui/search.js') diff --git a/install/ui/search.js b/install/ui/search.js new file mode 100644 index 00000000..934000b9 --- /dev/null +++ b/install/ui/search.js @@ -0,0 +1,462 @@ +/*jsl:import ipa.js */ + +/* Authors: + * Pavel Zuna + * Adam Young + * Endi S. Dewata + * + * Copyright (C) 2010 Red Hat + * see file 'COPYING' for use and warranty information + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +/* REQUIRES: ipa.js */ + +IPA.search_widget = function (spec) { + + spec = spec || {}; + + var that = IPA.table_widget(spec); + + that.facet = spec.facet; + + that.create = function(container) { + + var search_controls = $('
', { + 'class': 'search-controls' + }).appendTo(container); + + var search_filter = $('', { + 'class': 'search-filter', + 'name': 'search-filter' + }).appendTo(search_controls); + + search_controls.append(IPA.create_network_spinner()); + + this.filter = $('', { + 'type': 'text', + 'name': 'search-' + that.entity_name + '-filter' + }).appendTo(search_filter); + + $('', { + 'type': 'button', + 'name': 'find', + 'value': 'Find' + }).appendTo(search_filter); + + var action_panel = that.facet.get_action_panel(); + var li = $('.action-controls', action_panel); + + var search_buttons = $('', { + 'class': 'search-buttons' + }).appendTo(li); + + $('', { + 'type': 'button', + 'name': 'remove', + 'value': 'Remove' + }).appendTo(search_buttons); + + $('', { + 'type': 'button', + 'name': 'add', + 'value': 'Add' + }).appendTo(search_buttons); + + $('
', { + 'class': 'search-results' + }).appendTo(container); + + that.table_create(container); + }; + + that.setup = function(container) { + + that.table_setup(container); + + var search_filter = $('span[name=search-filter]', that.container); + + var button = $('input[name=find]', search_filter); + that.find_button = IPA.button({ + 'label': IPA.messages.button.find, + 'icon': 'ui-icon-search', + 'click': function() { that.find(that.container); } + }); + button.replaceWith(that.find_button); + + var action_panel = that.facet.get_action_panel(); + var search_buttons = $('.search-buttons', action_panel); + + button = $('input[name=remove]', search_buttons); + that.remove_button = IPA.action_button({ + 'label': IPA.messages.button.remove, + 'icon': 'ui-icon-trash', + 'click': function() { that.remove(that.container); } + }); + button.replaceWith(that.remove_button); + + button = $('input[name=add]', search_buttons); + that.add_button = IPA.action_button({ + 'label': IPA.messages.button.add, + 'icon': 'ui-icon-plus', + 'click': function() { that.add(that.container); } + }); + button.replaceWith(that.add_button); + + var filter = $.bbq.getState(that.entity_name + '-filter', true) || ''; + this.filter.val(filter); + }; + + that.find = function(container) { + var filter = this.filter.val(); + var state = {}; + state[that.entity_name + '-filter'] = filter; + $.bbq.pushState(state); + }; + + that.add = function(container) { + + var entity = IPA.get_entity(that.entity_name); + + var dialog = entity.get_dialog('add'); + dialog.open(that.container); + + return false; + }; + + that.select_changed = function(){ + var count = 0; + var pkey; + $('input[name=select]:checked', that.tbody).each(function(input){ + count += 1; + pkey = $(this).val(); + }); + + var action_panel = that.facet.get_action_panel(); + if(count == 1){ + $('li.entity-facet', action_panel). + removeClass('entity-facet-disabled'); + var state = {}; + $('input[id=pkey]', action_panel).val(pkey); + }else{ + $('li.entity-facet', action_panel). + addClass('entity-facet-disabled'); + $('input', action_panel).val(null); + + } + return false; + }; + + + that.remove = function(container) { + + var values = that.get_selected_values(); + + if (!values.length) { + alert('Select '+that.label+' to be removed.'); + return; + } + + var title = 'Remove '+that.label; + + var dialog = IPA.deleter_dialog({ + 'title': title, + 'parent': that.container, + 'values': values + }); + + dialog.remove = function() { + + var batch = IPA.batch_command({ + 'on_success': function() { + that.refresh(); + dialog.close(); + }, + 'on_error': function() { + that.refresh(); + dialog.close(); + } + }); + + for (var i=0; iError: '+error_thrown.name+'

'); + summary.append('

'+error_thrown.title+'

'); + summary.append('

'+error_thrown.message+'

'); + } + + var filter = $.bbq.getState(that.entity_name + '-filter', true) || ''; + IPA.cmd( + 'find', [filter], {all: true}, on_success, on_error, + that.entity_name); + }; + + return that; +}; + +IPA.search_facet = function (spec) { + + spec = spec || {}; + + spec.display_class = 'search-facet'; + + var that = IPA.facet(spec); + + that.init = spec.init || init; + that.create = spec.create || create; + that.setup = spec.setup || setup; + that.refresh = spec.refresh || refresh; + + that.columns = []; + that.columns_by_name = {}; + + that.__defineGetter__("entity_name", function(){ + return that._entity_name; + }); + + that.__defineSetter__("entity_name", function(entity_name){ + that._entity_name = entity_name; + + for (var i=0; i', { + 'href': '#'+value, + 'html': value, + 'click': function (value) { + return function() { + var state = IPA.tab_state(that.entity_name); + state[that.entity_name + '-facet'] = 'details'; + state[that.entity_name + '-pkey'] = value; + $.bbq.pushState(state); + return false; + }; + }(value) + }).appendTo(container); + }; + }; + + function init() { + + that.facet_init(); + + that.table = IPA.search_widget({ + 'id': that.entity_name+'-search', + 'name': 'search', 'label': IPA.metadata[that.entity_name].label, + 'entity_name': that.entity_name, + 'facet': that + }); + + for (var i=0; i', { 'name': 'search' }).appendTo(container); + + that.table.create(span); + + } + + function setup(container) { + that.facet_setup(container); + var span = $('span[name=search]', that.container); + that.table.setup(span); + } + + function refresh() { + that.filter = $.bbq.getState(that.entity_name + '-filter', true) || ''; + that.table.refresh(); + } + + if (spec.columns) { + for (var i=0; i'); + var tr = tbody.children().last(); + search_generate_checkbox_td(tr, pkey_value); + + var ths = thead.find('th'); + for (var i = 1; i < ths.length; ++i) { + var jobj = $(ths[i]); + var attr = jobj.attr('abbr'); + var value = entry_attrs[attr]; + + var column = facet ? facet.get_column(attr) : null; + var render_call = window[jobj.attr('title')]; + + if (column && column.setup) { + column.setup(tr, attr, value, entry_attrs); + + } else if (typeof render_call == 'function') { + render_call(tr, attr, value, entry_attrs); + + } else + search_generate_td(tr, attr, value, entry_attrs); + } + + tbody.find('.search-a-pkey').click(function () { + var jobj = $(this); + + var state = {}; + state[obj_name + '-facet'] = 'details'; + state[obj_name + '-pkey'] = $(this).text(); + $.bbq.pushState(state); + + return (false); + }); +} + +function search_generate_checkbox_td(tr, pkey) +{ + var checkbox = $('', { + name: pkey, + title: pkey, + type: 'checkbox', + 'class': 'search-selector' + }); + var td = $(''); + + td.append(checkbox); + tr.append(td); +} + +var _search_td_template = 'V'; +var _search_a_pkey_template = 'V'; + +function search_generate_td(tr, attr, value, entry_attrs) +{ + var obj_name = tr.closest('.entity-container').attr('title'); + + var param_info = IPA.get_param_info(obj_name, attr); + if (param_info && param_info['primary_key']) + value = _search_a_pkey_template.replace('V', value); + + tr.append(_search_td_template.replace('A', attr).replace('V', value)); +} -- cgit