mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
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
This commit is contained in:
parent
7abd8c6ecb
commit
632639b62d
@ -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;
|
||||
}
|
||||
|
||||
|
57
install/static/index.html
Normal file
57
install/static/index.html
Normal file
@ -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>
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}());
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
});
|
||||
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user