/* 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 */ function ipa_search_widget(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); 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; } function ipa_search_facet(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)); }