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 || {};
|
spec = spec || {};
|
||||||
|
|
||||||
var that = {};
|
var that = {};
|
||||||
|
that.display_class = spec.display_class || 'entity-facet';
|
||||||
that.name = spec.name;
|
that.name = spec.name;
|
||||||
that.label = spec.label;
|
that.label = spec.label;
|
||||||
that._entity_name = spec.entity_name;
|
that._entity_name = spec.entity_name;
|
||||||
@ -290,11 +291,16 @@ function ipa_details_only_setup(container){
|
|||||||
ipa_entity_setup.call(this, container, 'details');
|
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) {
|
function ipa_entity_setup(container) {
|
||||||
|
|
||||||
var entity = this;
|
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);
|
var facet = entity.get_facet(facet_name);
|
||||||
if (!facet) return;
|
if (!facet) return;
|
||||||
@ -321,54 +327,69 @@ function ipa_entity_setup(container) {
|
|||||||
|
|
||||||
|
|
||||||
function action_panel(entity_name){
|
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/>', {
|
var div = $('<div/>', {
|
||||||
"class":"action-panel",
|
"class":"action-panel",
|
||||||
html: $('<h3>Actions</h3>')
|
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 ul = $('<ul/>', {'class': 'action'}).appendTo(div);
|
||||||
|
|
||||||
var entity = IPA.get_entity(entity_name);
|
var entity = IPA.get_entity(entity_name);
|
||||||
|
var facet_name = ipa_current_facet(entity);
|
||||||
|
|
||||||
for (var i=0; i<entity.facets.length; i++) {
|
for (var i=0; i<entity.facets.length; i++) {
|
||||||
var other_facet = entity.facets[i];
|
var other_facet = entity.facets[i];
|
||||||
var facet_name = other_facet.name;
|
var other_facet_name = other_facet.name;
|
||||||
|
|
||||||
if (other_facet.label) {
|
if (other_facet.label) {
|
||||||
|
ul.append(build_link(other_facet,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)
|
|
||||||
}));
|
|
||||||
|
|
||||||
} else { // For now empty label indicates an association facet
|
} else { // For now empty label indicates an association facet
|
||||||
|
|
||||||
var attribute_members = IPA.metadata[entity_name].attribute_members;
|
var attribute_members = IPA.metadata[entity_name].attribute_members;
|
||||||
for (var attribute_member in attribute_members) {
|
for (var attribute_member in attribute_members) {
|
||||||
var other_entities = attribute_members[attribute_member];
|
var other_entities = attribute_members[attribute_member];
|
||||||
for (var j = 0; j < other_entities.length; j++) {
|
for (var j = 0; j < other_entities.length; j++) {
|
||||||
var other_entity = other_entities[j];
|
var other_entity = other_entities[j];
|
||||||
var label = IPA.metadata[other_entity].label;
|
var label = IPA.metadata[other_entity].label;
|
||||||
|
ul.append(build_link(other_facet,label,other_entity));
|
||||||
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)
|
|
||||||
}));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*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;
|
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 {
|
.action-panel {
|
||||||
position:relative;
|
position:relative;
|
||||||
|
|
||||||
left: -1.2em;
|
left: -1.2em;
|
||||||
border-width: thin;
|
border-width: thin;
|
||||||
border-style: solid;
|
border-style: solid;
|
||||||
@ -313,6 +312,26 @@ span.main-separator{
|
|||||||
padding: 0.2em;
|
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 {
|
.client {
|
||||||
margin-top: 0.4em;
|
margin-top: 0.4em;
|
||||||
float: left;
|
float: left;
|
||||||
|
@ -101,6 +101,7 @@ var IPA = ( function () {
|
|||||||
that.entities_by_name[entity.name] = entity;
|
that.entities_by_name[entity.name] = entity;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
that.show_page = function (entity_name, facet_name, other_entity) {
|
that.show_page = function (entity_name, facet_name, other_entity) {
|
||||||
|
|
||||||
var state = {};
|
var state = {};
|
||||||
@ -109,6 +110,19 @@ var IPA = ( function () {
|
|||||||
$.bbq.pushState(state);
|
$.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;
|
return that;
|
||||||
}());
|
}());
|
||||||
|
|
||||||
|
@ -100,6 +100,28 @@ function ipa_search_widget(spec) {
|
|||||||
return false;
|
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) {
|
that.remove = function(container) {
|
||||||
|
|
||||||
var values = that.get_selected_values();
|
var values = that.get_selected_values();
|
||||||
@ -199,6 +221,8 @@ function ipa_search_facet(spec) {
|
|||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
|
|
||||||
|
spec.display_class = 'search-facet';
|
||||||
|
|
||||||
var that = ipa_facet(spec);
|
var that = ipa_facet(spec);
|
||||||
|
|
||||||
that.init = spec.init || init;
|
that.init = spec.init || init;
|
||||||
|
@ -63,7 +63,7 @@ test('Testing ipa_entity_set_search_definition().', function() {
|
|||||||
|
|
||||||
test('Testing ipa_facet_setup_views().', 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.ajax_options.async = false;
|
||||||
|
|
||||||
IPA.init(
|
IPA.init(
|
||||||
@ -83,6 +83,12 @@ test('Testing ipa_facet_setup_views().', function() {
|
|||||||
|
|
||||||
IPA.add_entity(entity);
|
IPA.add_entity(entity);
|
||||||
|
|
||||||
|
entity.add_facet(ipa_search_facet({
|
||||||
|
'name': 'search',
|
||||||
|
'label': 'Search'
|
||||||
|
}));
|
||||||
|
|
||||||
|
|
||||||
var facet = ipa_association_facet({
|
var facet = ipa_association_facet({
|
||||||
'name': 'associate'
|
'name': 'associate'
|
||||||
});
|
});
|
||||||
@ -91,7 +97,7 @@ test('Testing ipa_facet_setup_views().', function() {
|
|||||||
var container = $('<div/>');
|
var container = $('<div/>');
|
||||||
|
|
||||||
var counter = 0;
|
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++;
|
counter++;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -102,33 +108,49 @@ test('Testing ipa_facet_setup_views().', function() {
|
|||||||
var views = list.children();
|
var views = list.children();
|
||||||
|
|
||||||
equals(
|
equals(
|
||||||
views.length, 4,
|
views.length, 5,
|
||||||
'Checking number of views'
|
'Checking number of views'
|
||||||
);
|
);
|
||||||
|
|
||||||
facet = views.first();
|
facet = views.first();
|
||||||
|
ok( facet.hasClass('entity-search',
|
||||||
|
'Checking the search facet'
|
||||||
|
);
|
||||||
|
|
||||||
|
facet = facet.next();
|
||||||
|
|
||||||
var attribute_members = IPA.metadata['user'].attribute_members;
|
var attribute_members = IPA.metadata['user'].attribute_members;
|
||||||
for (attribute_member in attribute_members) {
|
for (attribute_member in attribute_members) {
|
||||||
var objects = attribute_members[attribute_member];
|
var objects = attribute_members[attribute_member];
|
||||||
for (var i = 0; i < objects.length; i++) {
|
for (var i = 0; i < objects.length; i++) {
|
||||||
var object = objects[i];
|
var object = objects[i];
|
||||||
|
|
||||||
equals(
|
equals(
|
||||||
facet.attr('title'), object,
|
facet.attr('title'), object,
|
||||||
'Checking the '+object+' facet'
|
'Checking the '+object+' facet'
|
||||||
);
|
);
|
||||||
|
|
||||||
facet.click();
|
|
||||||
|
|
||||||
facet = facet.next();
|
facet = facet.next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
equals(
|
var action_panel = $('.action-panel', container);
|
||||||
counter, 4,
|
ok(action_panel.length, 'action panel exists');
|
||||||
'Checking callback invocations'
|
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);
|
}).appendTo(td);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
that.select_changed = function(){
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
that.setup = function(container) {
|
that.setup = function(container) {
|
||||||
|
|
||||||
that.widget_setup(container);
|
that.widget_setup(container);
|
||||||
@ -563,6 +568,8 @@ function ipa_table_widget(spec) {
|
|||||||
for (var i=0; i<checkboxes.length; i++) {
|
for (var i=0; i<checkboxes.length; i++) {
|
||||||
checkboxes[i].checked = checked;
|
checkboxes[i].checked = checked;
|
||||||
}
|
}
|
||||||
|
that.select_changed();
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
that.row = that.tbody.children().first();
|
that.row = that.tbody.children().first();
|
||||||
@ -627,6 +634,11 @@ function ipa_table_widget(spec) {
|
|||||||
if (column.primary_key) {
|
if (column.primary_key) {
|
||||||
// set checkbox value
|
// set checkbox value
|
||||||
$('input[name="select"]', tr).val(value);
|
$('input[name="select"]', tr).val(value);
|
||||||
|
|
||||||
|
$('input[name="select"]', tr).click(function(){
|
||||||
|
that.select_changed();
|
||||||
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
column.setup(tr, name, value, record);
|
column.setup(tr, name, value, record);
|
||||||
|
Loading…
Reference in New Issue
Block a user