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/entity.js | 592 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 592 insertions(+) create mode 100644 install/ui/entity.js (limited to 'install/ui/entity.js') diff --git a/install/ui/entity.js b/install/ui/entity.js new file mode 100644 index 00000000..9c58ee3d --- /dev/null +++ b/install/ui/entity.js @@ -0,0 +1,592 @@ +/*jsl:import ipa.js */ +/*jsl:import navigation.js */ + +/* 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, 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, details.js, search.js, add.js */ + +IPA.facet = function (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; + + 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; +}; + + +IPA.entity = function (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.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(attribute_member, other_entity, label, facet_group) { + + 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, + 'facet_group': facet_group, + 'attribute_member': attribute_member + }); + }; + + that.create_association_facets = function() { + + var attribute_members = IPA.metadata[that.name].attribute_members; + + for (var attribute_member in attribute_members) { + + // skip non-assignable associations + if (attribute_member === 'memberindirect') continue; + if (attribute_member === 'enrolledby') continue; + + var other_entities = attribute_members[attribute_member]; + + for (var j = 0; j < other_entities.length; j++) { + var other_entity = other_entities[j]; + var other_entity_name = IPA.metadata[other_entity].label; + + var label = other_entity_name; + + var relationships = IPA.metadata[that.name].relationships; + + var relationship = relationships[attribute_member]; + if (!relationship) + relationship = ['Member', '', 'no_']; + var facet_group = relationship[0]; + + var facet = that.create_association_facet( + attribute_member, other_entity, label, facet_group); + + if (that.get_facet(facet.name)) continue; + + that.add_facet(facet); + } + } + }; + + that.init = function() { + + if (!that.label) { + that.label = IPA.metadata[that.name].label; + } + + 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 ){ + if ( entity.facets[0].name === IPA.current_facet( entity)){ + ul.append($('
    • ')); + + }else{ + main_facet.html( + $('',{ + "class":"input_link" + }). + append(IPA.back_icon + ' Back to List ')); + main_facet.addClass('back-to-search'); + main_facet.appendTo(ul); + } + ul.append($('

    • ')); + + } + var facet_groups = {}; + var li; + for (var i=1; i', { + 'class': 'entity-facet entity-facet-relation-label', + 'text': other_facet.facet_group, + 'title': other_facet.facet_group + }); + ul.append(li); + facet_groups[facet_group] = li; + } + li = facet_groups[facet_group]; + var link = build_link(other_facet, other_facet.label); + link.addClass('facet-group-member'); + li.after(link ); + /* + If we are on the current facet, we make the text black, non-clickable, + add an icon and make sure the action controls are positioned underneath it. + */ + if ( other_facet.name === IPA.current_facet( entity)){ + var text = link.text(); + link.text(''); + link.append($('
        '). + append($('
      • ',{ + 'class': 'entity-facet-selected', + html: IPA.selected_icon + text + })). + append($('
      • ',{ + html:$('',{ + 'class':"action-controls" + }) + }))); + } + facet_groups[facet_group] = li.next(); + } else { + var innerlist = $('
          ').appendTo(ul); + var facet_link = build_link(other_facet, other_facet.label); + facet_link.addClass('entity-facet-selected'); + facet_link.prepend(IPA.selected_icon); + innerlist.append(facet_link); + if ( other_facet.name === IPA.current_facet( entity)){ + + innerlist.append($('
        • ')); + } + } + } + }else{ + $('
        • ', { + 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; +}; -- cgit