/* Authors: * Pavel Zuna * Endi S. Dewata * Adam Young * * 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; version 2 only * * 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, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ /* REQUIRES: ipa.js, details.js, search.js, add.js */ function ipa_facet(spec) { spec = spec || {}; var that = {}; that.display_class = spec.display_class || 'entity-facet'; that.name = spec.name; that.label = spec.label; that._entity_name = spec.entity_name; that.init = spec.init || init; that.create = spec.create || create; that.setup = spec.setup || setup; that.load = spec.load || load; that.__defineGetter__("entity_name", function(){ return that._entity_name; }); that.__defineSetter__("entity_name", function(entity_name){ that._entity_name = entity_name; }); that.create_action_panel = ipa_facet_create_action_panel; that.superior = function(name) { var method = that[name]; return function () { return method.apply(that, arguments); }; }; function init() { } function create(container) { } function setup(container) { that.container = container; } function load() { } that.get_client_area = function() { return $('.client', that.container); }; that.get_action_panel = function() { return $('.action-panel', that.container); }; that.facet_init = that.init; that.facet_create = that.create; that.facet_setup = that.setup; return that; } function ipa_entity(spec) { spec = spec || {}; var that = {}; that.name = spec.name; that.label = spec.label; that.setup = spec.setup || ipa_entity_setup; that.dialogs = []; that.dialogs_by_name = {}; that.facets = []; that.facets_by_name = {}; that.facet_name = null; that.autogenerate_associations = false; that.associations = []; that.associations_by_name = {}; that.superior = function(name) { var method = that[name]; return function () { return method.apply(that, arguments); }; }; that.get_dialog = function(name) { return that.dialogs_by_name[name]; }; that.add_dialog = function(dialog) { dialog.entity_name = that.name; that.dialogs.push(dialog); that.dialogs_by_name[dialog.name] = dialog; }; that.get_facet = function(name) { return that.facets_by_name[name]; }; that.add_facet = function(facet) { facet.entity_name = that.name; that.facets.push(facet); that.facets_by_name[facet.name] = facet; }; that.get_associations = function() { return that.associations; }; that.get_association = function(name) { return that.associations_by_name[name]; }; that.add_association = function(config) { that.associations.push(config); that.associations_by_name[config.name] = config; }; that.create_association = function(spec) { var config = ipa_association_config(spec); that.add_association(config); return config; }; that.create_association_facet = function(other_entity, attribute_member) { var label = IPA.metadata[other_entity].label; if (!attribute_member) { attribute_member = ipa_get_member_attribute( that.entity_name, other_entity ); } return ipa_association_facet({ 'name': attribute_member+'_'+other_entity, 'label': label, 'other_entity': other_entity }); }; that.create_association_facets = function() { var attribute_members = IPA.metadata[that.name].attribute_members; for (var attribute_member in attribute_members) { var other_entities = attribute_members[attribute_member]; for (var j = 0; j < other_entities.length; j++) { var other_entity = other_entities[j]; var facet = that.create_association_facet(other_entity, attribute_member); if (that.get_facet(facet.name)) continue; that.add_facet(facet); } } }; that.init = function() { if (that.autogenerate_associations) { that.create_association_facets(); } for (var i=0; i', { "class": "action-panel", html: $('

',{ text: IPA.metadata[entity_name].label }) }).appendTo(container); function build_link(other_facet,label){ var li = $('
  • ', { "class" : other_facet.display_class, title: other_facet.name, text: label, click: function(entity_name, other_facet_name) { return function() { if($(this).hasClass('entity-facet-disabled')){ return false; } var this_pkey = $('input[id=pkey]', action_panel).val(); IPA.switch_and_show_page( entity_name, other_facet_name, this_pkey); return false; }; }(entity_name, other_facet_name) }); return li; } /*Note, for debugging purposes, it is useful to set var pkey_type = 'text';*/ var pkey_type = 'hidden'; $('', { 'type': pkey_type, id:'pkey', name:'pkey' }).appendTo(action_panel); var ul = $('
      ', {'class': 'action'}).appendTo(action_panel); var entity = IPA.get_entity(entity_name); var facet_name = ipa_current_facet(entity); var other_facet = entity.facets[0]; var other_facet_name = other_facet.name; var nested_tabs = IPA.nested_tabs(entity_name); var main_facet = build_link(other_facet,other_facet.label) for (var nested_index = 0 ; nested_index < nested_tabs.length; nested_index += 1){ if (nested_tabs[nested_index] === entity_name){ /*assume for now that entities with only a single facet do not have search*/ if (entity.facets.length > 0 ){ main_facet.text( 'List ' + IPA.metadata[entity_name].label); } main_facet.appendTo(ul); ul.append($('
    • ')); for (var i=1; i', { title: nested_tabs[nested_index], text: IPA.metadata[nested_tabs[nested_index]].label, "class": "search-facet", click: function() { var state = {}; state[nested_tabs[0]+'-entity'] = this.title; nav_push_state(state); return false; } }).appendTo(ul); } } /*When we land on the search page, disable all facets that require a pkey until one is selected*/ if (facet_name === 'search'){ $('.entity-facet', action_panel).addClass('entity-facet-disabled'); } return action_panel; }