summaryrefslogtreecommitdiffstats
path: root/install/ui/src/freeipa/facet.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/ui/src/freeipa/facet.js')
-rw-r--r--install/ui/src/freeipa/facet.js248
1 files changed, 164 insertions, 84 deletions
diff --git a/install/ui/src/freeipa/facet.js b/install/ui/src/freeipa/facet.js
index 74c13353f..863f71af2 100644
--- a/install/ui/src/freeipa/facet.js
+++ b/install/ui/src/freeipa/facet.js
@@ -1114,6 +1114,9 @@ exp.facet_header = IPA.facet_header = function(spec) {
that.facet.action_state.changed.attach(that.update_summary);
that.title_widget = IPA.facet_title();
+ that.tabs_widget = new exp.FacetGroupsWidget({
+ facet: this.facet
+ });
};
/**
@@ -1121,14 +1124,11 @@ exp.facet_header = IPA.facet_header = function(spec) {
*/
that.select_tab = function() {
if (that.facet.disable_facet_tabs) return;
-
- $(that.facet_tabs).find('a').removeClass('selected');
var facet_name = that.facet.name;
-
if (!facet_name || facet_name === 'default') {
- that.facet_tabs.find('a:first').addClass('selected');
+ that.tabs_widget.select_first();
} else {
- that.facet_tabs.find('a#' + facet_name ).addClass('selected');
+ that.tabs_widget.select(that.facet.get_full_name());
}
};
@@ -1160,6 +1160,12 @@ exp.facet_header = IPA.facet_header = function(spec) {
if (!that.breadcrumb) return;
+ if (pkey === undefined) {
+ pkey = that.facet.get_pkey();
+ var pkey_max = that.get_max_pkey_length();
+ pkey = IPA.limit_text(pkey, pkey_max);
+ }
+
var items = [];
var item, i, l, keys, target_facet, target_facet_keys, containing_entity;
@@ -1240,60 +1246,11 @@ exp.facet_header = IPA.facet_header = function(spec) {
return bc_item;
};
- /**
- * Create link for facet tab
- * @protected
- * @param {jQuery} container
- * @param {facet.facet} other_facet
- */
- that.create_facet_link = function(container, other_facet) {
-
- var li = $('<li/>', {
- name: other_facet.name,
- click: function() {
- if (li.hasClass('entity-facet-disabled')) {
- return false;
- }
-
- var pkeys = that.facet.get_pkeys();
- navigation.show(other_facet, pkeys);
-
- return false;
- }
- }).appendTo(container);
-
- $('<a/>', {
- text: other_facet.tab_label,
- id: other_facet.name
- }).appendTo(li);
- };
-
- /**
- * Create facet tab group
- * @protected
- * @param {jQuery} container
- * @param {Object} facet_group
- */
- that.create_facet_group = function(container, facet_group) {
-
- var section = $('<div/>', {
- name: facet_group.name,
- 'class': 'facet-group'
- }).appendTo(container);
-
- $('<div/>', {
- 'class': 'facet-group-label'
- }).appendTo(section);
-
- var ul = $('<ul/>', {
- 'class': 'facet-tab'
- }).appendTo(section);
-
- var facets = facet_group.facets.values;
- for (var i=0; i<facets.length; i++) {
- var facet = reg.facet.get(facets[i]);
- that.create_facet_link(ul, facet);
- }
+ that.create_facet_groups = function(container) {
+ var facet_groups = that.get_facet_groups();
+ this.tabs_widget.groups = facet_groups;
+ var tabs = this.tabs_widget.render();
+ container.append(tabs);
};
/**
@@ -1330,17 +1287,7 @@ exp.facet_header = IPA.facet_header = function(spec) {
that.title_widget.update({ text: that.facet.label });
if (!that.facet.disable_facet_tabs) {
- that.facet_tabs = $('<div/>', {
- 'class': 'facet-tabs'
- }).appendTo(container);
-
- var facet_groups = that.get_facet_groups();
- for (var i=0; i<facet_groups.length; i++) {
- var facet_group = facet_groups[i];
- if (facet_group.facets.length) {
- that.create_facet_group(that.facet_tabs, facet_group);
- }
- }
+ that.create_facet_groups(container);
}
};
@@ -1362,36 +1309,29 @@ exp.facet_header = IPA.facet_header = function(spec) {
if (!that.facet.disable_facet_tabs) {
var pkey = that.facet.get_pkey();
- var facet_groups = that.facet.entity.facet_groups.values;
+ var facet_groups = that.get_facet_groups();
for (var i=0; i<facet_groups.length; i++) {
var facet_group = facet_groups[i];
- var span = $('.facet-group[name='+facet_group.name+']', that.facet_tabs);
- if (!span.length) continue;
-
var label = facet_group.label;
if (pkey && label) {
var limited_pkey = IPA.limit_text(pkey, 20);
label = label.replace('${primary_key}', limited_pkey);
- } else {
+ } else if (!label) {
label = '';
}
- var label_container = $('.facet-group-label', span);
- label_container.text(label);
- if (pkey) label_container.attr('title', pkey);
+ this.tabs_widget.update_group(facet_group.name, label, pkey);
var facets = facet_group.facets.values;
for (var j=0; j<facets.length; j++) {
- var facet = facets[j];
- var link = $('li[name='+facet.name+'] a', span);
-
+ var facet = reg.facet.get(facets[j]);
var values = result ? result[facet.name] : null;
+ label = facet.tab_label;
if (values) {
- link.text(facet.tab_label+' ('+values.length+')');
- } else {
- link.text(facet.tab_label);
+ label = facet.tab_label + ' (' + values.length + ')';
}
+ this.tabs_widget.update_tab(facet.get_full_name(), label);
}
}
}
@@ -1442,6 +1382,146 @@ exp.facet_header = IPA.facet_header = function(spec) {
return that;
};
+exp.FacetGroupsWidget = declare([], {
+
+ facet: null,
+ groups: null,
+ group_els: null,
+ el: null,
+ css_class: 'facet-tabs',
+ group_el_type: '<div/>',
+ group_class: 'facet-group',
+ group_label_el_type: '<div/>',
+ group_label_class: 'facet-group-label',
+ group_label_title_el_type: '<span/>',
+ group_label_title_class: '',
+ tab_cont_el_type: '<div/>',
+ tab_cont_class: '',
+ tab_list_el_type: '<ul/>',
+ tab_list_class: 'facet-tab',
+ tab_el_type: '<li/>',
+ tab_class: 't',
+ selected_class: 'selected',
+
+ render: function() {
+
+ this.group_els = {};
+ this.tab_els = {};
+
+ this.el = $('<div/>', { 'class': this.css_class });
+
+ for (var i=0; i<this.groups.length; i++) {
+ var group = this.groups[i];
+ if (group.facets.length) {
+ var group_el = this.render_group(group);
+ this.el.append(group_el);
+ }
+ }
+ return this.el;
+ },
+
+ render_group: function(group) {
+
+ var gr = this.group_els[group.name] = { tab_els: {}};
+
+ gr.group_el = $(this.group_el_type, {
+ 'class': this.group_class,
+ name: group.name
+ });
+
+ gr.label_el = $(this.group_label_el_type, {
+ 'class': this.group_label_class
+ }).appendTo(gr.group_el);
+
+ gr.label_title_el = $(this.group_label_title_el_type, {
+ 'class': this.group_label_title_class,
+ text: ''
+ }).appendTo(gr.label_el);
+
+
+ var tab_cont = $(this.tab_cont_el_type, { 'class': this.tab_cont_class });
+ var tab_list = $(this.tab_list_el_type, { 'class': this.tab_list_class });
+ tab_list.appendTo(tab_cont);
+ var facets = group.facets.values;
+ for (var i=0,l=facets.length; i<l ;i++) {
+ var facet = reg.facet.get(facets[i]);
+ var tab_el = this.tab_els[facet.get_full_name()] = this.render_tab(facet);
+ tab_list.append(tab_el);
+ }
+ gr.group_el.append(tab_cont);
+
+ return gr.group_el;
+ },
+
+ render_tab: function(tab) {
+ var self = this;
+ var el = $(this.tab_el_type, {
+ name: tab.name,
+ 'class': this.tab_class,
+ click: function() {
+ if (el.hasClass('entity-facet-disabled')) {
+ return false;
+ }
+ self.on_click(tab);
+ return false;
+ }
+ });
+
+ $('<a/>', {
+ text: tab.tab_label,
+ 'class': 'tab-link',
+ href: "#" + navigation.create_hash(tab, {}),
+ name: tab.name
+ }).appendTo(el);
+
+ return el;
+ },
+
+ on_click: function(facet) {
+ var pkeys = this.facet.get_pkeys();
+ navigation.show(facet, pkeys);
+ },
+
+ update_group: function(group_name, text, title) {
+ if (!this.group_els[group_name]) return;
+ var label_el = this.group_els[group_name].label_title_el;
+ label_el.text(text);
+ if (title) label_el.attr('title', title);
+ },
+
+ update_tab: function(tab_name, text, title) {
+ var tab_el = this.tab_els[tab_name];
+ var label_el = $('a', tab_el);
+ label_el.text(text);
+ if (title) label_el.attr('title', title);
+ },
+
+ select: function(tab_name) {
+ if (!this.el) return;
+ var cls = this.selected_class;
+ var tab_el = this.tab_els[tab_name];
+
+ this.el.find(this.tab_class).removeClass(cls);
+ this.el.find('.tab-link').removeClass(cls);
+
+ tab_el.addClass(cls);
+ tab_el.find('.tab-link').addClass(cls);
+ },
+
+ select_first: function() {
+ if (!this.el) return;
+ this.el.find('.tab-link').removeClass(this.selected_class);
+ this.el.find(this.tab_class).removeClass(this.selected_class);
+ var first = this.el.find('.tab-link:first');
+ first.addClass(this.selected_class);
+ first.parent().addClass(this.selected_class);
+ },
+
+ constructor: function(spec) {
+ lang.mixin(this, spec);
+ }
+});
+
/**
* Facet title widget
*