From 5db9fed8a5c62a65adf43f1d8c24a0e061f6b301 Mon Sep 17 00:00:00 2001 From: "Endi S. Dewata" Date: Wed, 2 Nov 2011 12:21:39 -0500 Subject: Moved facet code into facet.js. Facet-related code has been moved from entity.js into a new facet.js because the file is getting too big. --- install/ui/facet.js | 588 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 588 insertions(+) create mode 100644 install/ui/facet.js (limited to 'install/ui/facet.js') diff --git a/install/ui/facet.js b/install/ui/facet.js new file mode 100644 index 00000000..5b6d964d --- /dev/null +++ b/install/ui/facet.js @@ -0,0 +1,588 @@ +/*jsl:import ipa.js */ + +/* Authors: + * Pavel Zuna + * Endi Sukma Dewata + * Adam Young + * Petr Vobornik + * + * Copyright (C) 2010-2011 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.entity = spec.entity; + + that.name = spec.name; + that.label = spec.label; + that.title = spec.title || that.label; + that.display_class = spec.display_class; + + that.disable_breadcrumb = spec.disable_breadcrumb; + that.disable_facet_tabs = spec.disable_facet_tabs; + + that.header = spec.header || IPA.facet_header({ facet: that }); + + that.entity_name = spec.entity_name; + that._needs_update = spec.needs_update; + + that.dialogs = $.ordered_map(); + + // facet group name + that.facet_group = spec.facet_group; + + that.state = {}; + + that.get_dialog = function(name) { + return that.dialogs.get(name); + }; + + that.dialog = function(dialog) { + that.dialogs.put(dialog.name, dialog); + return that; + }; + + that.create = function(container) { + + that.container = container; + + if (that.disable_facet_tabs) that.container.addClass('no-facet-tabs'); + that.container.addClass(that.display_class); + + that.header_container = $('
', { + 'class': 'facet-header' + }).appendTo(container); + that.create_header(that.header_container); + + that.content = $('
', { + 'class': 'facet-content' + }).appendTo(container); + that.create_content(that.content); + }; + + that.create_header = function(container) { + + that.header.create(container); + + that.controls = $('
', { + 'class': 'facet-controls' + }).appendTo(container); + }; + + that.create_content = function(container) { + }; + + that.set_title = function(container, title) { + var element = $('h1', that.title_container); + element.html(title); + }; + + that.show = function() { + that.container.css('display', 'block'); + }; + + that.hide = function() { + that.container.css('display', 'none'); + }; + + that.load = function(data) { + that.data = data; + that.header.load(data); + }; + + that.clear = function() { + }; + + that.needs_update = function() { + if (that._needs_update !== undefined) return that._needs_update; + return true; + }; + + that.is_dirty = function() { + return false; + }; + + that.report_error = function(error_thrown) { + // TODO: The error message should be displayed in the facet footer. + // There should be a standard footer section for all facets. + that.content.empty(); + that.content.append('

'+IPA.get_message('errors.error', 'Error')+': '+error_thrown.name+'

'); + that.content.append('

'+error_thrown.message+'

'); + }; + + that.redirect = function() { + var entity = that.entity; + while (entity.containing_entity) { + entity = entity.get_containing_entity(); + } + + IPA.nav.show_page( + entity.name, + that.entity.redirect_facet); + }; + + var redirect_errors = [4001]; + + that.on_error = function(xhr, text_status, error_thrown) { + + /*If the error is in talking to the server, don't attempt to redirect, + as there is nothing any other facet can do either. */ + if (that.entity.redirect_facet) { + for (var i=0; i', { + 'class': 'breadcrumb-element', + text: IPA.nav.get_state(entity.name+'-pkey'), + title: entity.metadata.label_singular, + click: function(entity) { + return function() { + IPA.nav.show_page(entity.name, 'default'); + return false; + }; + }(entity) + })); + + entity = entity.get_containing_entity(); + } + + that.path.empty(); + + for (var i=0; i', { + 'class': 'breadcrumb-element', + text: value + }).appendTo(that.path); + } + + that.title_container.empty(); + var h3 = $('

').appendTo(that.title_container); + h3.append(that.facet.title); + h3.append(': '); + + $('', { + 'class': 'facet-pkey', + text: value + }).appendTo(h3); + }; + + that.create_facet_link = function(container, other_facet) { + + var li = $('
  • ', { + name: other_facet.name, + title: other_facet.name, + click: function() { + if (li.hasClass('entity-facet-disabled')) { + return false; + } + + var pkey = IPA.nav.get_state(that.facet.entity.name+'-pkey'); + IPA.nav.show_page(that.facet.entity.name, other_facet.name, pkey); + + return false; + } + }).appendTo(container); + + $('', { + text: other_facet.label, + id: other_facet.name + }).appendTo(li); + }; + + that.create_facet_group = function(container, facet_group) { + + var section = $('', { + name: facet_group.name, + 'class': 'facet-group' + }).appendTo(container); + + $('
    ', { + 'class': 'facet-group-label' + }).appendTo(section); + + var ul = $('