summaryrefslogtreecommitdiffstats
path: root/install/static/entity.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/static/entity.js')
-rw-r--r--install/static/entity.js127
1 files changed, 74 insertions, 53 deletions
diff --git a/install/static/entity.js b/install/static/entity.js
index 24a49fc7..1eadea6d 100644
--- a/install/static/entity.js
+++ b/install/static/entity.js
@@ -30,8 +30,10 @@ function ipa_facet(spec) {
that.label = spec.label;
that._entity_name = spec.entity_name;
- that.init = spec.init;
- that.setup = spec.setup;
+ 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;
@@ -43,6 +45,25 @@ function ipa_facet(spec) {
that.setup_views = ipa_facet_setup_views;
+ that.super = function(name) {
+ var method = that[name];
+ return function () {
+ return method.apply(that, arguments);
+ };
+ };
+
+ function init() {
+ }
+
+ function create() {
+ }
+
+ function setup() {
+ }
+
+ function load() {
+ }
+
return that;
}
@@ -54,30 +75,34 @@ function ipa_entity(spec) {
that.name = spec.name;
that.label = spec.label;
- that.setup = spec.setup;
+ that.setup = spec.setup || ipa_entity_setup;
- that.add_dialog = null;
+ that.dialogs = [];
+ that.dialogs_by_name = {};
that.facets = [];
that.facets_by_name = {};
- this.facet_name = null;
+ that.facet_name = null;
that.associations = [];
that.associations_by_name = {};
- that.get_add_dialog = function() {
- return that.add_dialog;
+ that.super = function(name) {
+ var method = that[name];
+ return function () {
+ return method.apply(that, arguments);
+ };
};
- that.create_add_dialog = function(spec) {
- spec.entity_name = that.name;
- that.add_dialog = ipa_add_dialog(spec);
- return that.add_dialog;
+ that.get_dialog = function(name) {
+ return that.dialogs_by_name[name];
};
- that.get_facets = function() {
- return that.facets;
+ 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) {
@@ -90,25 +115,6 @@ function ipa_entity(spec) {
that.facets_by_name[facet.name] = facet;
};
- that.create_search_facet = function(spec) {
- var facet = ipa_search_facet(spec);
- that.add_facet(facet);
- return facet;
- };
-
- that.create_details_facet = function(spec) {
- var facet = ipa_details_facet(spec);
- that.add_facet(facet);
- facet.init();
- return facet;
- };
-
- that.create_association_facet = function(spec) {
- var facet = ipa_association_facet(spec);
- that.add_facet(facet);
- return facet;
- };
-
that.get_associations = function() {
return that.associations;
};
@@ -128,6 +134,13 @@ function ipa_entity(spec) {
return config;
};
+ that.init = function() {
+ for (var i=0; i<that.facets.length; i++) {
+ var facet = that.facets[i];
+ facet.init();
+ }
+ };
+
return that;
}
@@ -154,10 +167,11 @@ function ipa_entity_get_search_facet(entity_name) {
var facet = entity.get_facet('search');
if (facet) return facet;
- facet = entity.create_search_facet({
+ facet = ipa_search_facet({
'name': 'search',
'label': 'Search'
});
+ entity.add_facet(facet);
return facet;
}
@@ -180,18 +194,20 @@ function ipa_entity_set_add_definition(entity_name, data) {
var entity = ipa_get_entity(entity_name);
- var dialog = entity.create_add_dialog({
- 'name': data[0],
+ var dialog = ipa_add_dialog({
+ 'name': 'add',
'title': data[1]
});
+ entity.add_dialog(dialog);
+ dialog.init();
for (var i=0; i<data[2].length; i++) {
var field = data[2][i];
- dialog.create_field({
+ dialog.add_field(ipa_text_widget({
name: field[0],
label: field[1],
setup: field[2]
- });
+ }));
}
}
@@ -208,10 +224,11 @@ function ipa_entity_get_details_facet(entity_name) {
var facet = entity.get_facet('details');
if (facet) return facet;
- facet = entity.create_details_facet({
+ facet = ipa_details_facet({
'name': 'details',
'label': 'Details'
});
+ entity.add_facet(facet);
return facet;
}
@@ -233,9 +250,10 @@ function ipa_entity_get_association_facet(entity_name) {
var facet = entity.get_facet('associate');
if (facet) return facet;
- facet = entity.create_association_facet({
+ facet = ipa_association_facet({
'name': 'associate'
});
+ entity.add_facet(facet);
return facet;
}
@@ -293,9 +311,9 @@ function ipa_entity_setup(container, unspecified) {
container.empty();
- if (facet.setup) {
- facet.setup(container, unspecified);
- }
+ facet.create(container);
+ facet.setup(container, unspecified);
+ facet.load(container, unspecified);
}
function ipa_facet_setup_views(container) {
@@ -305,10 +323,9 @@ function ipa_facet_setup_views(container) {
var ul = $('<ul/>', {'class': 'entity-views'}).appendTo(container);
var entity = IPA.get_entity(facet.entity_name);
- var facets = entity.get_facets();
- for (var i=0; i<facets.length; i++) {
- var other_facet = facets[i];
+ for (var i=0; i<entity.facets.length; i++) {
+ var other_facet = entity.facets[i];
var facet_name = other_facet.name;
if (other_facet.label) {
@@ -352,17 +369,19 @@ function ipa_facet_setup_views(container) {
}
}
-function ipa_entity_quick_links(tr, attr, value, entry_attrs) {
+function ipa_entity_quick_links(container, name, value, entry_attrs) {
- var obj_name = tr.closest('.entity-container').attr('title');
+ var obj_name = container.closest('.entity-container').attr('title');
var pkey = IPA.metadata[obj_name].primary_key;
- var pkey_value = entry_attrs[pkey][0];
+ var pkey_value = entry_attrs[pkey];
- var td = $("<td/>").appendTo(tr);
+ var span = $('span[name="'+name+'"]', container);
+ span.empty();
$("<a/>", {
- href: "#details",
- title: "Details",
+ href: '#details',
+ title: 'Details',
+ text: 'Details',
click: function() {
var state = {};
state[obj_name+'-facet'] = 'details';
@@ -370,7 +389,7 @@ function ipa_entity_quick_links(tr, attr, value, entry_attrs) {
nav_push_state(state);
return false;
}
- }).appendTo(td);
+ }).appendTo(span);
var attribute_members = IPA.metadata[obj_name].attribute_members;
for (attr_name in attribute_members) {
@@ -379,6 +398,8 @@ function ipa_entity_quick_links(tr, attr, value, entry_attrs) {
var m = objs[i];
var label = IPA.metadata[m].label;
+ span.append(' | ');
+
$("<a/>", {
href: '#'+m,
title: label,
@@ -393,7 +414,7 @@ function ipa_entity_quick_links(tr, attr, value, entry_attrs) {
return false;
}
}(m)
- }).append(' | ' ).appendTo(td);
+ }).appendTo(span);
}
}
}