/*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 = $('