diff options
author | Adam Young <ayoung@redhat.com> | 2010-11-15 16:41:21 -0500 |
---|---|---|
committer | Endi Sukma Dewata <edewata@redhat.com> | 2010-11-17 21:50:03 -0500 |
commit | 632639b62ddad72e31daa62ef21f992299ec0b8e (patch) | |
tree | 0e846397e8d6136678112bf1bd6dd0616066e323 /install | |
parent | 7abd8c6ecb0a0aafeaac9a4baa1d5db96722a3ab (diff) | |
download | freeipa-632639b62ddad72e31daa62ef21f992299ec0b8e.tar.gz freeipa-632639b62ddad72e31daa62ef21f992299ec0b8e.tar.xz freeipa-632639b62ddad72e31daa62ef21f992299ec0b8e.zip |
action select
if exactly one entity is selected, it enables the entity-facet links in the
action panel, and sets the pkey in bbq to the pkey of the selected
Diffstat (limited to 'install')
-rw-r--r-- | install/static/entity.js | 73 | ||||
-rw-r--r-- | install/static/index.html | 57 | ||||
-rw-r--r-- | install/static/ipa.css | 21 | ||||
-rw-r--r-- | install/static/ipa.js | 14 | ||||
-rw-r--r-- | install/static/search.js | 24 | ||||
-rw-r--r-- | install/static/test/entity_tests.js | 46 | ||||
-rwxr-xr-x | install/static/widget.js | 12 |
7 files changed, 208 insertions, 39 deletions
diff --git a/install/static/entity.js b/install/static/entity.js index 74a07d009..e68ed3f2a 100644 --- a/install/static/entity.js +++ b/install/static/entity.js @@ -26,6 +26,7 @@ function ipa_facet(spec) { spec = spec || {}; var that = {}; + that.display_class = spec.display_class || 'entity-facet'; that.name = spec.name; that.label = spec.label; that._entity_name = spec.entity_name; @@ -290,11 +291,16 @@ function ipa_details_only_setup(container){ ipa_entity_setup.call(this, container, 'details'); } +function ipa_current_facet(entity){ + return $.bbq.getState(entity.name + '-facet', true) || entity.default_facet || 'search'; +} + function ipa_entity_setup(container) { var entity = this; - var facet_name = $.bbq.getState(entity.name + '-facet', true) || entity.default_facet || 'search'; + var facet_name = ipa_current_facet(entity); + var facet = entity.get_facet(facet_name); if (!facet) return; @@ -321,54 +327,69 @@ function ipa_entity_setup(container) { function action_panel(entity_name){ + + function build_link(other_facet,label,other_entity){ + var li = $('<li/>', { + "class" : other_facet.display_class, + title: other_entity, + text: label, + click: function(entity_name, other_facet_name) { + return function() { + if($(this).hasClass('entity-facet-disabled')){ + return false; + } + var this_pkey = $('.action-panel input[id=pkey]').val(); + IPA.switch_and_show_page( + entity_name, other_facet_name, + this_pkey, other_entity); + + return false; + }; + }(entity_name, other_facet_name) + }); + return li; + } + var div = $('<div/>', { "class":"action-panel", html: $('<h3>Actions</h3>') }); + + /*Note, for debugging purposes, it is useful to set var pkey_type = 'text';*/ + var pkey_type = 'hidden'; + $('<input/>', + {'type': pkey_type, + id:'pkey', + name:'pkey'}).appendTo(div); + var ul = $('<ul/>', {'class': 'action'}).appendTo(div); var entity = IPA.get_entity(entity_name); + var facet_name = ipa_current_facet(entity); for (var i=0; i<entity.facets.length; i++) { var other_facet = entity.facets[i]; - var facet_name = other_facet.name; + var other_facet_name = other_facet.name; if (other_facet.label) { - - var label = other_facet.label; - - ul.append($('<li/>', { - title: other_facet.name, - text: label, - click: function(entity_name, facet_name) { - return function() { - IPA.show_page(entity_name, facet_name); - }; - }(entity_name, facet_name) - })); - + ul.append(build_link(other_facet,other_facet.label)); } else { // For now empty label indicates an association facet - var attribute_members = IPA.metadata[entity_name].attribute_members; for (var attribute_member in attribute_members) { var other_entities = attribute_members[attribute_member]; for (var j = 0; j < other_entities.length; j++) { var other_entity = other_entities[j]; var label = IPA.metadata[other_entity].label; - - ul.append($('<li/>', { - title: other_entity, - text: label, - click: function(entity_name, facet_name, other_entity) { - return function() { - IPA.show_page(entity_name, facet_name, other_entity); - }; - }(entity_name, facet_name, other_entity) - })); + ul.append(build_link(other_facet,label,other_entity)); } } } } + /*When we land on the search page, disable all facets + that require a pkey until one is selected*/ + if (facet_name === 'search'){ + $('.entity-facet', div).addClass('entity-facet-disabled'); + } return div; } diff --git a/install/static/index.html b/install/static/index.html new file mode 100644 index 000000000..73a84caa7 --- /dev/null +++ b/install/static/index.html @@ -0,0 +1,57 @@ +<!DOCTYPE html> +<html lang="en"> +<head> +<meta charset="utf-8"> + <title>IPA: Identity Policy Audit</title> + + <script type="text/javascript" src="json2.js"></script> + <script type="text/javascript" src="jquery.js"></script> + <script type="text/javascript" src="jquery.cookie.js"></script> + <script type="text/javascript" src="jquery-ui.js"></script> + <script type="text/javascript" src="jquery.ba-bbq.js"></script> + + <script type="text/javascript" src="ipa.js"></script> + <script type="text/javascript" src="widget.js"></script> + <script type="text/javascript" src="search.js"></script> + <script type="text/javascript" src="details.js"></script> + <script type="text/javascript" src="add.js"></script> + <script type="text/javascript" src="associate.js"></script> + <script type="text/javascript" src="entity.js"></script> + <script type="text/javascript" src="navigation.js"></script> + + <script type="text/javascript" src="certificate.js"></script> + <script type="text/javascript" src="user.js"></script> + <script type="text/javascript" src="group.js"></script> + <script type="text/javascript" src="hbac.js"></script> + <script type="text/javascript" src="hbacsvc.js"></script> + <script type="text/javascript" src="hbacsvcgroup.js"></script> + <script type="text/javascript" src="host.js"></script> + <script type="text/javascript" src="hostgroup.js"></script> + <script type="text/javascript" src="netgroup.js"></script> + <script type="text/javascript" src="service.js"></script> + <script type="text/javascript" src="serverconfig.js"></script> + <script type="text/javascript" src="policy.js"></script> + + + <script type="text/javascript" src="develop.js"></script> + <script type="text/javascript" src="webui.js"></script> + + <link rel="stylesheet" type="text/css" href="jquery-ui.css" /> + <link rel="stylesheet" type="text/css" href="ipa.css" /> +</head> + +<body> + <div class="header" > + <span class="header-logo"> + <a href="#"><img src="ipalogo.png" /></a> + </span> + <span id="loggedinas" class="header-loggedinas"> + <a href="#"><span id="login_header">Logged in as</span>: <strong>user@FREEIP.ORG</strong></a> + </span> + </div> + + <div id="navigation" class="tabs"></div> +</body> + +</html> + diff --git a/install/static/ipa.css b/install/static/ipa.css index 3843424fd..58428ebe4 100644 --- a/install/static/ipa.css +++ b/install/static/ipa.css @@ -289,7 +289,6 @@ span.main-separator{ .action-panel { position:relative; - left: -1.2em; border-width: thin; border-style: solid; @@ -313,6 +312,26 @@ span.main-separator{ padding: 0.2em; } +.action-panel li.search-facet { + color: black; + text-decoration: underline; + cursor: pointer; +} + +.action-panel li.entity-facet { + color: black; + text-decoration: underline; + cursor: pointer; +} + +.action-panel li.entity-facet-disabled { + color: gray; + cursor: default; + text-decoration: none; +} + + + .client { margin-top: 0.4em; float: left; diff --git a/install/static/ipa.js b/install/static/ipa.js index 4a01d9fb8..6ba8b67ec 100644 --- a/install/static/ipa.js +++ b/install/static/ipa.js @@ -101,6 +101,7 @@ var IPA = ( function () { that.entities_by_name[entity.name] = entity; }; + that.show_page = function (entity_name, facet_name, other_entity) { var state = {}; @@ -109,6 +110,19 @@ var IPA = ( function () { $.bbq.pushState(state); }; + that.switch_and_show_page = function ( + this_entity, facet_name, pkey, other_entity) { + if (!pkey){ + that.show_page(this_entity, facet_name, other_entity); + return; + } + var state = {}; + state[this_entity+'-pkey'] = pkey; + state[this_entity + '-facet'] = facet_name; + state[this_entity + '-enroll'] = other_entity ? other_entity : ''; + $.bbq.pushState(state); + }; + return that; }()); diff --git a/install/static/search.js b/install/static/search.js index 040508734..a107209b1 100644 --- a/install/static/search.js +++ b/install/static/search.js @@ -100,6 +100,28 @@ function ipa_search_widget(spec) { return false; }; + that.select_changed = function(){ + var count = 0; + var pkey; + $('input[name=select]:checked', that.tbody).each(function(input){ + count += 1; + pkey = $(this).val(); + }); + if(count == 1){ + $('.action-panel li.entity-facet'). + removeClass('entity-facet-disabled'); + var state = {}; + $('.action-panel input[id=pkey]').val(pkey); + }else{ + $('.action-panel li.entity-facet'). + addClass('entity-facet-disabled'); + $('.action-panel input').val(null); + + } + return false; + } + + that.remove = function(container) { var values = that.get_selected_values(); @@ -199,6 +221,8 @@ function ipa_search_facet(spec) { spec = spec || {}; + spec.display_class = 'search-facet'; + var that = ipa_facet(spec); that.init = spec.init || init; diff --git a/install/static/test/entity_tests.js b/install/static/test/entity_tests.js index 970f9a89b..c431031de 100644 --- a/install/static/test/entity_tests.js +++ b/install/static/test/entity_tests.js @@ -63,7 +63,7 @@ test('Testing ipa_entity_set_search_definition().', function() { test('Testing ipa_facet_setup_views().', function() { - var orig_show_page = IPA.show_page; + var orig_switch_and_show_page = IPA.switch_and_show_page; IPA.ajax_options.async = false; IPA.init( @@ -83,6 +83,12 @@ test('Testing ipa_facet_setup_views().', function() { IPA.add_entity(entity); + entity.add_facet(ipa_search_facet({ + 'name': 'search', + 'label': 'Search' + })); + + var facet = ipa_association_facet({ 'name': 'associate' }); @@ -91,7 +97,7 @@ test('Testing ipa_facet_setup_views().', function() { var container = $('<div/>'); var counter = 0; - IPA.show_page = function(entity_name, facet_name, other_entity) { + IPA.switch_and_show_page = function(entity_name, facet_name, other_entity) { counter++; }; @@ -102,33 +108,49 @@ test('Testing ipa_facet_setup_views().', function() { var views = list.children(); equals( - views.length, 4, + views.length, 5, 'Checking number of views' ); facet = views.first(); + ok( facet.hasClass('entity-search', + 'Checking the search facet' + ); + + facet = facet.next(); + var attribute_members = IPA.metadata['user'].attribute_members; for (attribute_member in attribute_members) { var objects = attribute_members[attribute_member]; for (var i = 0; i < objects.length; i++) { var object = objects[i]; - equals( facet.attr('title'), object, 'Checking the '+object+' facet' ); - - facet.click(); - facet = facet.next(); } } - equals( - counter, 4, - 'Checking callback invocations' - ); + var action_panel = $('.action-panel', container); + ok(action_panel.length, 'action panel exists'); + var pkey_input = $('input[name=pkey]', action_panel); + ok(pkey_input.length,'pkey input exists'); + var search_facets = $('li.search-facet', action_panel); + equals(search_facets.length,1,'one search facet in action panel'); + var entity_facets = $('li.entity-facet', action_panel); + equals(entity_facets.length,4,'4 entity facets in action panel'); - IPA.show_page = orig_show_page; + + for ( var entity_facet = entity_facets.first(); + entity_facet.length; + entity_facet = entity_facet.next()){ + entity_facet.click(); + } + +// equals(4, counter,'four clicks'); + + IPA.switch_and_show_page = orig_switch_and_show_page; }); + diff --git a/install/static/widget.js b/install/static/widget.js index 84b1d9aeb..1b99831e9 100755 --- a/install/static/widget.js +++ b/install/static/widget.js @@ -544,6 +544,11 @@ function ipa_table_widget(spec) { }).appendTo(td); }; + + that.select_changed = function(){ + } + + that.setup = function(container) { that.widget_setup(container); @@ -563,6 +568,8 @@ function ipa_table_widget(spec) { for (var i=0; i<checkboxes.length; i++) { checkboxes[i].checked = checked; } + that.select_changed(); + return false; }); that.row = that.tbody.children().first(); @@ -627,6 +634,11 @@ function ipa_table_widget(spec) { if (column.primary_key) { // set checkbox value $('input[name="select"]', tr).val(value); + + $('input[name="select"]', tr).click(function(){ + that.select_changed(); + }); + } column.setup(tr, name, value, record); |