summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2010-10-01 12:53:13 -0500
committerAdam Young <ayoung@redhat.com>2010-10-01 16:17:51 -0400
commitaa7ecb6f5ff234fa9001bbea3ebe2e5360656139 (patch)
tree8c9957db5803b46daefe12c2889a470f2f83f564
parent38490d35d3b8410a8077fb035b57cea86dd3bdab (diff)
downloadfreeipa-aa7ecb6f5ff234fa9001bbea3ebe2e5360656139.tar.gz
freeipa-aa7ecb6f5ff234fa9001bbea3ebe2e5360656139.tar.xz
freeipa-aa7ecb6f5ff234fa9001bbea3ebe2e5360656139.zip
Autogenerating Quick Links.
ipa_entity_quick_links() has been added to generate quick links automatically from object's attribute_members, the same logic used for generating facet list. The search definition for each entity has been updated to use the new function. A unit test has been added for this function.
-rw-r--r--install/static/entity.js47
-rw-r--r--install/static/group.js46
-rw-r--r--install/static/host.js3
-rw-r--r--install/static/hostgroup.js3
-rw-r--r--install/static/netgroup.js3
-rw-r--r--install/static/rolegroup.js72
-rw-r--r--install/static/service.js33
-rw-r--r--install/static/test/entity_tests.html1
-rw-r--r--install/static/test/entity_tests.js115
-rw-r--r--install/static/test/ipa_tests.js6
-rw-r--r--install/static/user.js59
11 files changed, 173 insertions, 215 deletions
diff --git a/install/static/entity.js b/install/static/entity.js
index 39836fe39..5be67a394 100644
--- a/install/static/entity.js
+++ b/install/static/entity.js
@@ -202,3 +202,50 @@ function ipa_entity_generate_views(obj_name, container, switch_view)
container.append(ul);
}
+
+function ipa_entity_quick_links(tr, attr, value, entry_attrs) {
+
+ var obj_name = tr.closest('.search-container').attr('title');
+ var pkey = ipa_objs[obj_name].primary_key;
+ var pkey_value = entry_attrs[pkey][0];
+
+ var td = $("<td/>");
+ tr.append(td);
+
+ $("<a/>", {
+ href: "#details",
+ click: function() {
+ var state = {};
+ state[obj_name+'-facet'] = 'details';
+ state[obj_name+'-pkey'] = pkey_value;
+ nav_push_state(state);
+ return false;
+ }
+ }).append($('<img/>', {
+ src: obj_name+'_details.png'
+ })).appendTo(td);
+
+ var attribute_members = ipa_objs[obj_name].attribute_members;
+ for (attr_name in attribute_members) {
+ var objs = attribute_members[attr_name];
+ for (var i = 0; i < objs.length; ++i) {
+ var m = objs[i];
+
+ $("<a/>", {
+ href: '#'+m,
+ click: function(m) {
+ return function() {
+ var state = {};
+ state[obj_name+'-facet'] = 'associate';
+ state[obj_name+'-enroll'] = m;
+ state[obj_name+'-pkey'] = pkey_value;
+ nav_push_state(state);
+ return false;
+ }
+ }(m)
+ }).append($('<img/>', {
+ src: m+'_member.png'
+ })).appendTo(td);
+ }
+ }
+}
diff --git a/install/static/group.js b/install/static/group.js
index b1c0d895e..4c2c5b0a4 100644
--- a/install/static/group.js
+++ b/install/static/group.js
@@ -24,7 +24,7 @@ ipa_entity_set_search_definition('group', [
['cn', 'Name', null],
['gidnumber', 'GID', null],
['description', 'Description', null],
- ['quick_links', 'Quick Links', group_render_quick_links]
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('group', [
@@ -64,47 +64,3 @@ function f_posix(dlg, mode)
return (false);
}
}
-
-function group_render_quick_links(tr, attr, value, entry_attrs) {
-
- var td = $("<td/>");
- tr.append(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='group_details.png' />"),
- click: function() {
- var state = {};
- state['group-facet'] = 'details';
- state['group-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='user_enroll.png' />"),
- click: function() {
- var state = {};
- state['group-facet'] = 'associate';
- state['group-enroll'] = 'user';
- state['group-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='netgroup_member.png' />"),
- click: function() {
- var state = {};
- state['group-facet'] = 'associate';
- state['group-enroll'] = 'netgroup';
- state['group-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-}
diff --git a/install/static/host.js b/install/static/host.js
index f59c1a3c0..432f2f755 100644
--- a/install/static/host.js
+++ b/install/static/host.js
@@ -24,7 +24,8 @@ ipa_entity_set_search_definition('host', [
['fqdn', 'Name', null],
['description', 'Description', null],
['enrolled', 'Enrolled?', null],
- ['manages', 'Manages?', null]
+ ['manages', 'Manages?', null],
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('host', [
diff --git a/install/static/hostgroup.js b/install/static/hostgroup.js
index 512ebcf8a..e3863fe38 100644
--- a/install/static/hostgroup.js
+++ b/install/static/hostgroup.js
@@ -22,7 +22,8 @@
ipa_entity_set_search_definition('hostgroup', [
['cn', 'Name', null],
- ['description', 'Description', null]
+ ['description', 'Description', null],
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('hostgroup', [
diff --git a/install/static/netgroup.js b/install/static/netgroup.js
index 625ebfdd4..577590ac2 100644
--- a/install/static/netgroup.js
+++ b/install/static/netgroup.js
@@ -22,7 +22,8 @@
ipa_entity_set_search_definition('netgroup', [
['cn', 'Name', null],
- ['description', 'Description', null]
+ ['description', 'Description', null],
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('netgroup', [
diff --git a/install/static/rolegroup.js b/install/static/rolegroup.js
index 2e52f1055..0297554d1 100644
--- a/install/static/rolegroup.js
+++ b/install/static/rolegroup.js
@@ -23,7 +23,7 @@
ipa_entity_set_search_definition('rolegroup', [
['cn', 'Role-group name', null],
['description', 'Description', null],
- ['quick_links', 'Quick Links', rolegroup_render_quick_links]
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('rolegroup', [
@@ -39,73 +39,3 @@ ipa_entity_set_details_definition('rolegroup', [
['description', 'Description', null],
]]
]);
-
-function rolegroup_render_quick_links(tr, attr, value, entry_attrs) {
-
- var td = $("<td/>");
- tr.append(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='rolegroup_details.png' />"),
- click: function() {
- var state = {};
- state['rolegroup-facet'] = 'details';
- state['rolegroup-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='user_member.png' />"),
- click: function() {
- var state = {};
- state['rolegroup-facet'] = 'associate';
- state['rolegroup-enroll'] = 'user';
- state['rolegroup-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='group_member.png' />"),
- click: function() {
- var state = {};
- state['rolegroup-facet'] = 'associate';
- state['rolegroup-enroll'] = 'group';
- state['rolegroup-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='host_member.png' />"),
- click: function() {
- var state = {};
- state['rolegroup-facet'] = 'associate';
- state['rolegroup-enroll'] = 'host';
- state['rolegroup-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='hostgroup_member.png' />"),
- click: function() {
- var state = {};
- state['rolegroup-facet'] = 'associate';
- state['rolegroup-enroll'] = 'hostgroup';
- state['rolegroup-pkey'] = entry_attrs['cn'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-}
diff --git a/install/static/service.js b/install/static/service.js
index 8d8e103d9..c12e5636d 100644
--- a/install/static/service.js
+++ b/install/static/service.js
@@ -22,7 +22,7 @@
ipa_entity_set_search_definition('service', [
['krbprincipalname', 'Principal', null],
- ['quick_links', 'Quick Links', service_render_quick_links]
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('service', [
@@ -39,37 +39,6 @@ ipa_entity_set_details_definition('service', [
]]
]);
-function service_render_quick_links(tr, attr, value, entry_attrs) {
-
- var td = $("<td/>");
- tr.append(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='service_details.png' />"),
- click: function() {
- var state = {};
- state['service-facet'] = 'details';
- state['service-pkey'] = entry_attrs['krbprincipalname'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='host_enroll.png' />"),
- click: function() {
- var state = {};
- state['service-facet'] = 'associate';
- state['service-enroll'] = 'host';
- state['service-pkey'] = entry_attrs['krbprincipalname'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-}
-
function service_add_krbprincipalname(add_dialog, flag) {
if (flag == IPA_ADD_UPDATE) {
var service = add_dialog.find('input[name=service]').val();
diff --git a/install/static/test/entity_tests.html b/install/static/test/entity_tests.html
index 224bb23da..a6d3f72fe 100644
--- a/install/static/test/entity_tests.html
+++ b/install/static/test/entity_tests.html
@@ -9,6 +9,7 @@
<script type="text/javascript" src="../details.js"></script>
<script type="text/javascript" src="../search.js"></script>
<script type="text/javascript" src="../add.js"></script>
+ <script type="text/javascript" src="../navigation.js"></script>
<script type="text/javascript" src="../entity.js"></script>
<script type="text/javascript" src="entity_tests.js"></script>
</head>
diff --git a/install/static/test/entity_tests.js b/install/static/test/entity_tests.js
index 78fa2d4f3..09967c2c5 100644
--- a/install/static/test/entity_tests.js
+++ b/install/static/test/entity_tests.js
@@ -69,11 +69,11 @@ test("Testing ipa_entity_generate_views().", function() {
ipa_init(
"data",
true,
- function(data, status, xhr) {
+ function(data, text_status, xhr) {
ok(true, "ipa_init() succeeded.");
},
- function(xhr, options, thrownError) {
- ok(false, "ipa_init() failed: "+thrownError);
+ function(xhr, text_status, error_thrown) {
+ ok(false, "ipa_init() failed: "+error_thrown);
}
);
@@ -135,3 +135,112 @@ test("Testing ipa_entity_generate_views().", function() {
"Checking callback invocations"
);
});
+
+test("Testing ipa_entity_quick_links().", function() {
+
+ var orig_push_state = nav_push_state;
+ var orig_get_state = nav_get_state;
+ var orig_remove_state = nav_remove_state;
+
+ var state = {};
+
+ nav_push_state = function(params) {
+ $.extend(state, params);
+ };
+ nav_get_state = function(key) {
+ return state[key];
+ };
+ nav_remove_state = function(key) {
+ delete state[key];
+ };
+
+ ipa_ajax_options["async"] = false;
+
+ ipa_init(
+ "data",
+ true,
+ function(data, text_status, xhr) {
+ ok(true, "ipa_init() succeeded.");
+ },
+ function(xhr, text_status, error_thrown) {
+ ok(false, "ipa_init() failed: "+error_thrown);
+ }
+ );
+
+ var obj_name = "user";
+ var pkey = ipa_objs[obj_name].primary_key;
+ var pkey_value = "test";
+
+ var entry_attrs = {};
+ entry_attrs[pkey] = [pkey_value];
+
+ var container = $("<div/>", {
+ title: obj_name,
+ class: "search-container"
+ });
+
+ var search_table = $('<table/>', {
+ class: 'search-table'
+ }).appendTo(container);
+
+ var tbody = $("<tbody/>").appendTo(search_table);
+ var tr = $("<tr/>").appendTo(tbody);
+
+ ipa_entity_quick_links(tr, null, null, entry_attrs);
+
+ var td = tr.children().first();
+ var link = td.children().first();
+
+ equals(
+ link.attr("href"), "#details",
+ "Checking details link"
+ );
+
+ link.click();
+
+ equals(
+ state[obj_name+"-facet"], "details",
+ "Checking state[\""+obj_name+"-facet\"]"
+ );
+
+ equals(
+ state[obj_name+"-pkey"], pkey_value,
+ "Checking state[\""+obj_name+"-pkey\"]"
+ );
+
+ var attribute_members = ipa_objs[obj_name].attribute_members;
+ for (attr_name in attribute_members) {
+ var objs = attribute_members[attr_name];
+ for (var i = 0; i < objs.length; ++i) {
+ var m = objs[i];
+
+ link = link.next();
+
+ equals(
+ link.attr("href"), "#"+m,
+ "Checking "+m+" link"
+ );
+
+ link.click();
+
+ equals(
+ state[obj_name+"-facet"], "associate",
+ "Checking state[\""+obj_name+"-facet\"]"
+ );
+
+ equals(
+ state[obj_name+"-enroll"], m,
+ "Checking state[\""+obj_name+"-enroll\"]"
+ );
+
+ equals(
+ state[obj_name+"-pkey"], pkey_value,
+ "Checking state[\""+obj_name+"-pkey\"]"
+ );
+ }
+ }
+
+ nav_push_state = orig_push_state;
+ nav_get_state = orig_get_state;
+ nav_remove_state = orig_remove_state;
+});
diff --git a/install/static/test/ipa_tests.js b/install/static/test/ipa_tests.js
index 8617a8439..58315585d 100644
--- a/install/static/test/ipa_tests.js
+++ b/install/static/test/ipa_tests.js
@@ -27,11 +27,11 @@ test("Testing ipa_init().", function() {
ipa_init(
"data",
true,
- function(data, status, xhr) {
+ function(data, text_status, xhr) {
ok(true, "ipa_init() succeeded.");
},
- function(xhr, options, thrownError) {
- ok(false, "ipa_init() failed: "+thrownError);
+ function(xhr, text_status, error_thrown) {
+ ok(false, "ipa_init() failed: "+error_thrown);
}
);
});
diff --git a/install/static/user.js b/install/static/user.js
index 5ac7f0ae3..2698c8b00 100644
--- a/install/static/user.js
+++ b/install/static/user.js
@@ -27,7 +27,7 @@ ipa_entity_set_search_definition('user', [
['mail', 'EMAIL', null],
['telephonenumber', 'Phone', null],
['title', 'Job Title', null],
- ['quick_links', 'Quick Links', user_render_quick_links]
+ ['quick_links', 'Quick Links', ipa_entity_quick_links]
]);
ipa_entity_set_add_definition('user', [
@@ -208,60 +208,3 @@ function a_numbers(jobj, result, mode)
function a_manager(jobj, result, mode)
{
}
-
-function user_render_quick_links(tr, attr, value, entry_attrs) {
-
- var td = $("<td/>");
- tr.append(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='user_details.png' />"),
- click: function() {
- var state = {};
- state['user-facet'] = 'details';
- state['user-pkey'] = entry_attrs['uid'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='group_member.png' />"),
- click: function() {
- var state = {};
- state['user-facet'] = 'associate';
- state['user-enroll'] = 'group';
- state['user-pkey'] = entry_attrs['uid'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='netgroup_member.png' />"),
- click: function() {
- var state = {};
- state['user-facet'] = 'associate';
- state['user-enroll'] = 'netgroup';
- state['user-pkey'] = entry_attrs['uid'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-
- $("<a/>", {
- href: "jslink",
- html: $("<img src='rolegroup_member.png' />"),
- click: function() {
- var state = {};
- state['user-facet'] = 'associate';
- state['user-enroll'] = 'role';
- state['user-pkey'] = entry_attrs['uid'][0];
- $.bbq.pushState(state);
- return false;
- }
- }).appendTo(td);
-}