summaryrefslogtreecommitdiffstats
path: root/install/static/details.js
diff options
context:
space:
mode:
Diffstat (limited to 'install/static/details.js')
-rw-r--r--install/static/details.js897
1 files changed, 0 insertions, 897 deletions
diff --git a/install/static/details.js b/install/static/details.js
deleted file mode 100644
index aad77a9c..00000000
--- a/install/static/details.js
+++ /dev/null
@@ -1,897 +0,0 @@
-/*jsl:import ipa.js */
-
-/* Authors:
- * Pavel Zuna <pzuna@redhat.com>
- * Adam Young <ayoung@redhat.com>
- * Endi S. Dewata <edewata@redhat.com>
- *
- * Copyright (C) 2010 Red Hat
- * see file 'COPYING' for use and warranty information
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* IPA Object Details - populating definiton lists from entry data */
-
-/* REQUIRES: ipa.js */
-
-IPA.expand_icon = 'ui-icon-minus';
-IPA.collapse_icon = 'ui-icon-plus';
-
-IPA.is_field_writable = function(rights){
- if (!rights){
- alert('no right');
- }
- return rights.indexOf('w') > -1;
-};
-
-IPA.details_field = function (spec) {
-
- spec = spec || {};
-
- var that = IPA.widget(spec);
-
- that.load = spec.load || load;
- that.save = spec.save || save;
-
- function load(record) {
- that.record = record;
- that.values = record[that.name];
- that.reset();
- }
-
- that.update = function() {
-
- if (!that.record) return;
-
- /* remove all <dd> tags i.e. all attribute values */
- $('dd', that.container).remove();
-
- var multivalue = false;
- var hint_span = null;
- var dd;
-
- var param_info = IPA.get_param_info(that.entity_name, that.name);
- if (param_info) {
- if (param_info['multivalue'] || param_info['class'] == 'List')
- multivalue = true;
- var hint = param_info['doc'];
- if (hint){
- hint_span = $('<span />',{
- 'class': 'attrhint',
- 'html': 'Hint: ' + hint});
- }
- }
-
- var rights = 'rsc';
-
- if (that.record.attributelevelrights){
- rights = that.record.attributelevelrights[this.name] || rights ;
- }
-
- if (that.values) {
- /*
- Too much logic currently assumes an array.
- This is true everywhere but ACIs. */
-
- if (!(that.values instanceof Array)){
- that.values = [that.values];
- }
-
- dd = IPA.create_first_dd(that.name);
- dd.append(that.create_value(that.values[0], hint_span, rights, 0));
- dd.appendTo(that.container);
-
- for (var i = 1; i < that.values.length; ++i) {
- dd = IPA.create_other_dd(that.name);
- dd.append(that.create_value(that.values[i], hint_span, rights, i));
- dd.appendTo(that.container);
- }
-
- if (multivalue && IPA.is_field_writable(rights) ) {
- dd = IPA.create_other_dd(that.name);
- dd.append(IPA.details_field_create_add_link.call(that, that.name, rights, that.values.length));
- dd.appendTo(that.container);
- }
-
- } else {
- if (multivalue && IPA.is_field_writable(rights)) {
- dd = IPA.create_first_dd(that.name);
- dd.append(IPA.details_field_create_add_link.call(that, that.name, rights, 0));
- dd.appendTo(that.container);
-
- } else {
- dd = IPA.create_first_dd(that.name);
- dd.append(that.create_value('', hint_span, rights, 0));
- dd.appendTo(that.container);
- }
- }
- };
-
- /* create an HTML element for displaying/editing an attribute
- * arguments:
- * attr - LDAP attribute name
- * value - the attributes value */
- that.create_value = function(value, hint, rights, index) {
-
- // if field is primary key or non-writable, return a label
-
- var label = $('<label/>', { html:value.toString() });
-
- if (!IPA.is_field_writable(rights)) return label;
-
- var param_info = IPA.get_param_info(that.entity_name, that.name);
- if (param_info) {
- if (param_info['primary_key']) return label;
- if ('no_update' in param_info['flags']) return label;
- }
-
- // otherwise, create input field
-
- var input = that.create_input(value, param_info, rights, index);
- if (param_info) {
- if (param_info['multivalue'] || param_info['class'] == 'List') {
- input.append(_ipa_create_remove_link(that.name, param_info));
- }
- }
-
- if (hint) input.after(hint);
-
- return input;
- };
-
- /* creates a input box for editing a string attribute */
- that.create_input = function(value, param_info, rights, index) {
-
- index = index || 0;
-
- function validate_input(text, param_info, error_link) {
- if (param_info && param_info.pattern) {
- var regex = new RegExp( param_info.pattern );
- if (!text.match(regex)) {
- error_link.style.display = "block";
- if (param_info.pattern_errmsg) {
- error_link.innerHTML = param_info.pattern_errmsg;
- }
- } else {
- error_link.style.display = "none";
- }
- }
- }
-
- var doc = that.name;
- if (param_info && param_info.doc) {
- doc = param_info.doc;
- }
- var span = $("<Span />");
- var input = $("<input/>", {
- type: "text",
- name: that.name,
- value: value.toString(),
- title: doc,
- keyup: function(){
- var undo_link = this.nextElementSibling;
- undo_link.style.display = "inline";
- var error_link = undo_link.nextElementSibling;
-
- var text = $(this).val();
- validate_input(text, param_info,error_link);
- }
- }).appendTo(span) ;
-
- if (!IPA.is_field_writable(rights)) {
- input.attr('disabled', 'disabled');
- }
-
- span.append($("<a/>", {
- html:"undo",
- "class":"ui-state-highlight ui-corner-all undo",
- style:"display:none",
- click: function(){
- var previous_value = that.values || '';
- if (index >= previous_value.length){
- previous_value = '';
- }else{
- previous_value= previous_value[index];
- }
-
- this.previousElementSibling.value = previous_value;
- this.style.display = "none";
- var error_link = this.nextElementSibling;
- validate_input(previous_value, param_info,error_link);
- }
- }));
- span.append($("<span/>", {
- html:"Does not match pattern",
- "class":"ui-state-error ui-corner-all",
- style:"display:none"
- }));
- return span;
- };
-
- function save() {
- var values = [];
-
- $('dd', that.container).each(function () {
-
- var input = $('input', $(this));
- if (!input.length) return;
-
- if (input.is('.strikethrough')) return;
-
- var value = $.trim(input.val());
- if (!value) value = '';
-
- values.push(value);
- });
-
- return values;
- }
-
- return that;
-};
-
-
-IPA.details_section = function (spec){
-
- spec = spec || {};
-
- var that = {};
-
- that.name = spec.name || '';
- that.label = spec.label || '';
- that.template = spec.template;
- that._entity_name = spec.entity_name;
-
- that.fields = [];
- that.fields_by_name = {};
-
- that.__defineGetter__("entity_name", function(){
- return that._entity_name;
- });
-
- that.__defineSetter__("entity_name", function(entity_name){
- that._entity_name = entity_name;
-
- for (var i=0; i<that.fields.length; i++) {
- that.fields[i].entity_name = entity_name;
- }
- });
-
- that.get_field = function(name) {
- return that.fields_by_name[name];
- };
-
- that.add_field = function(field) {
- field.entity_name = that.entity_name;
- that.fields.push(field);
- that.fields_by_name[field.name] = field;
- return field;
- };
-
- that.create_field = function(spec) {
-
- //TODO: replace IPA.details_field with class-specific implementation
- //Valid field classes: Str, IA5Str, Int, Bool and List
- var field = IPA.details_field(spec);
- that.add_field(field);
- return field;
- };
-
- that.create_text = function(spec) {
- var field = IPA.text_widget(spec);
- that.add_field(field);
- return field;
- };
-
- that.create_radio = function(spec) {
- var field = IPA.radio_widget(spec);
- that.add_field(field);
- return field;
- };
-
- that.create_textarea = function(spec) {
- var field = IPA.textarea_widget(spec);
- that.add_field(field);
- return field;
- };
-
- that.create_button = function(spec) {
- var field = IPA.button_widget(spec);
- that.add_field(field);
- return field;
- };
-
- that.init = function() {
- for (var i=0; i<that.fields.length; i++) {
- var field = that.fields[i];
- field.init();
- }
- };
-
- that.create = function(container) {
-
- if (that.template) return;
-
- var fields = that.fields;
- for (var i = 0; i < fields.length; ++i) {
- var field = fields[i];
-
- var span = $('<span/>', { 'name': field.name }).appendTo(container);
- field.create(span);
- }
- };
-
- that.setup = function(container) {
-
- that.container = container;
-
- if (that.template) return;
-
- var fields = that.fields;
- for (var i = 0; i < fields.length; ++i) {
- var field = fields[i];
-
- var span = $('span[name='+field.name+']', this.container).first();
- field.setup(span);
- }
- };
-
- that.load = function(record) {
-
- var fields = that.fields;
-
- if (that.template) {
- var template = IPA.get_template(that.template);
- this.container.load(
- template,
- function(data, text_status, xhr) {
- for (var i = 0; i < fields.length; ++i) {
- var field = fields[i];
- var span = $('span[name='+field.name+']', this.container).first();
- field.setup(span);
- field.load(record);
- }
- }
- );
- return;
- }
-
- for (var j=0; j<fields.length; j++) {
- var field = fields[j];
- var span = $('span[name='+field.name+']', this.container).first();
- field.load(record);
- }
- };
-
- that.reset = function() {
- for (var i=0; i<that.fields.length; i++) {
- var field = that.fields[i];
- var span = $('span[name='+field.name+']', this.container).first();
- field.reset();
- }
- };
-
- // methods that should be invoked by subclasses
- that.section_init = that.init;
- that.section_create = that.create;
- that.section_setup = that.setup;
- that.section_load = that.load;
-
- return that;
-};
-
-
-/**
- * This class creates a details section formatted as a list of
- * attributes names and values. The list is defined using <dl> tag.
- * The attribute name is defined inside a <dt> tag. The attribute
- * value is defined using a <dd> tag inside a <span> tag. If the
- * attribute has multiple values the content inside <span> will
- * be duplicated to display each value.
- *
- * Example:
- * <dl class="entryattrs">
- *
- * <dt title="givenname">First Name:</dt>
- * <span name="givenname">
- * <dd><input type="text" size="20"/></dd>
- * </span>
- *
- * <dt title="telephonenumber">Telephone Number:</dt>
- * <span name="telephonenumber">
- * <dd><input type="text" size="20"/></dd>
- * <dd><input type="text" size="20"/></dd>
- * </span>
- *
- * </dl>
- */
-IPA.details_list_section = function (spec){
-
- spec = spec || {};
-
- var that = IPA.details_section(spec);
-
- that.create = function(container) {
-
- // do not call section_create() here
-
- if (that.template) return;
-
- var dl = $('<dl/>', {
- 'id': that.name,
- 'class': 'entryattrs'
- }).appendTo(container);
-
- var fields = that.fields;
- for (var i = 0; i < fields.length; ++i) {
- var field = fields[i];
-
- var label = field.label;
-
- // no need to get i18n label from metadata
- // because it's already done by field.init()
-
- if (label !== '') {
- label += ':';
- }
-
- $('<dt/>', {
- html: label
- }).appendTo(dl);
-
- var span = $('<span/>', { 'name': field.name }).appendTo(dl);
- field.create(span);
- }
- };
-
- return that;
-};
-
-
-/* shorthand notation used for declarative definitions of details pages */
-IPA.stanza = function (spec) {
-
- spec = spec || {};
-
- var that = IPA.details_list_section(spec);
-
- // This is to allow declarative style programming for details
- that.input = function(spec) {
- that.create_field(spec);
- return that;
- };
-
- that.custom_input = function(input) {
- that.add_field(input);
- return that;
- };
-
- return that;
-};
-
-
-IPA.details_facet = function (spec) {
-
- spec = spec || {};
-
- var that = IPA.facet(spec);
-
- that.label = ( IPA.messages && IPA.messages.facets && IPA.messages.facets.details) || spec.label;
- that.is_dirty = spec.is_dirty || is_dirty;
- that.create = spec.create || create;
- that.setup = spec.setup || setup;
- that.load = spec.load || load;
- that.update = spec.update || IPA.details_update;
- that.reset = spec.reset || reset;
- that.refresh = spec.refresh || IPA.details_refresh;
-
- that.sections = [];
- that.sections_by_name = {};
-
- that.__defineGetter__("entity_name", function(){
- return that._entity_name;
- });
-
- that.__defineSetter__("entity_name", function(entity_name){
- that._entity_name = entity_name;
-
- for (var i=0; i<that.sections.length; i++) {
- that.sections[i].entity_name = entity_name;
- }
- });
-
- that.get_section = function(name) {
- return that.sections_by_name[name];
- };
-
- that.add_section = function(section) {
- section.entity_name = that.entity_name;
- that.sections.push(section);
- that.sections_by_name[section.name] = section;
- return section;
- };
-
- that.create_section = function(spec) {
- var section = IPA.details_section(spec);
- that.add_section(section);
- return section;
- };
-
- that.init = function() {
- for (var i=0; i<that.sections.length; i++) {
- var section = that.sections[i];
- section.init();
- }
- };
-
- that.get_primary_key = function() {
- var pkey_name = IPA.metadata[that.entity_name].primary_key;
- if (that.record[pkey_name] instanceof Array){
- return that.record[pkey_name][0];
- }else{
- return that.record[pkey_name];
- }
- };
-
- that.get_section_header_prefix = function(visible) {
- if (visible) {
- return '<span class="ui-icon '+
- IPA.collapse_icon +
- ' section-expand" ></span>';
- } else {
- return '<span class="ui-icon '+
- IPA.expand_icon +
- ' section-expand" />';
- }
- };
-
- function create(container) {
-
- container.attr('title', that.entity_name);
-
- $('<h1/>',{
- html: "<span id='headerpkey' />"+that.entity_name + ' Settings'
- }).append(IPA.create_network_spinner()).
- appendTo(container);
-
- var details = $('<div/>', {
- 'class': 'content'
- }).appendTo(container);
-
- var action_panel = that.get_action_panel();
-
- var ul = $('ul', action_panel);
- var buttons = $('.action-controls',action_panel);
-
- $('<input/>', {
- 'type': 'text',
- 'name': 'reset'
- }).appendTo(buttons);
-
- $('<input/>', {
- 'type': 'text',
- 'name': 'update'
- }).appendTo(buttons);
-
-
- for (var i = 0; i < that.sections.length; ++i) {
- var section = that.sections[i];
-
- $('<h2/>', {
- name: section.name,
- title: section.label,
- html: that.get_section_header_prefix(true) + ' ' + section.label
- }).appendTo(details);
-
- var div = $('<div/>', {
- 'id': that.entity_name+'-'+that.name+'-'+section.name,
- 'class': 'details-section'
- }).appendTo(details);
-
- section.create(div);
-
- details.append('<hr/>');
- }
- }
-
- function setup(container) {
-
- that.facet_setup(container);
-
- var button = $('input[name=reset]', that.container);
- that.reset_button = IPA.action_button({
- 'label': 'Reset',
- 'icon': 'ui-icon-refresh',
- 'class': 'details-reset',
- 'click': function() {
- that.reset();
- return false;
- }
- });
- button.replaceWith(that.reset_button);
-
- button = $('input[name=update]', that.container);
- that.update_button = IPA.action_button({
- 'label': 'Update',
- 'icon': 'ui-icon-check',
- 'class': 'details-update',
- 'click': function() {
- that.update();
- return false;
- }
- });
- button.replaceWith(that.update_button);
-
- for (var i = 0; i < that.sections.length; ++i) {
- var section = that.sections[i];
-
- var header = $('h2[name='+section.name+']', that.container);
-
- var div = $('#'+that.entity_name+'-'+that.name+'-'+section.name,
- that.container);
-
- header.click(function(section, header, div) {
- return function() {
- var visible = div.is(":visible");
- header.html(that.get_section_header_prefix(!visible) + ' ' + section.label);
- div.slideToggle();
- };
- }(section, header, div));
-
- section.setup(div);
- }
- }
-
- function is_dirty() {
- var pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
- return pkey != that.pkey;
- }
-
- function load(record) {
- that.record = record;
- for (var i=0; i<that.sections.length; i++) {
- var section = that.sections[i];
- section.load(record);
- }
- if (that.pkey){
- $('h1 #headerpkey',that.container).html(that.pkey+": ");
- }
- }
-
- function reset() {
-
- for (var i=0; i<that.sections.length; i++) {
- var section = that.sections[i];
- section.reset();
- }
- }
-
- that.details_facet_init = that.init;
- that.details_facet_create = that.create;
- that.details_facet_load = that.load;
-
- return that;
-};
-
-IPA.action_button = function(spec) {
- var button = IPA.button(spec);
- button.removeClass("ui-state-default").addClass("action-button");
- return button;
-};
-
-IPA.button = function(spec) {
-
- spec = spec || {};
-
- var button = $('<a/>', {
- id: spec.id,
- html: spec.label,
- title: spec.title || spec.label,
- 'class': 'ui-state-default ui-corner-all'
- });
-
- if (spec.click) button.click(spec.click);
- if (spec['class']) button.addClass(spec['class']);
-
- if (spec.icon) {
- button.addClass('input_link');
- button.append('<span class="ui-icon '+spec.icon+'" ></span> ');
- } else {
- button.addClass('button-without-icon');
- }
-
- return button;
-};
-
-IPA.details_refresh = function () {
-
- var that = this;
-
- that.pkey = $.bbq.getState(that.entity_name + '-pkey', true) || '';
-
- function on_success(data, text_status, xhr) {
- that.load(data.result.result);
- }
-
- function on_failure(xhr, text_status, error_thrown) {
- var details = $('.details', that.container).empty();
- details.append('<p>Error: '+error_thrown.name+'</p>');
- details.append('<p>'+error_thrown.title+'</p>');
- details.append('<p>'+error_thrown.message+'</p>');
- }
-
- var params = [];
- if (that.pkey) params.push(that.pkey);
-
- IPA.cmd( 'show', params, {all: true, rights: true}, on_success, on_failure,
- that.entity_name );
-};
-
-IPA.details_update = function (on_win, on_fail)
-{
- var that = this;
- var entity_name = that.entity_name;
-
- function update_on_win(data, text_status, xhr) {
- if (on_win)
- on_win(data, text_status, xhr);
- if (data.error)
- return;
-
- var result = data.result.result;
- that.load(result);
- }
-
- function update_on_fail(xhr, text_status, error_thrown) {
- if (on_fail)
- on_fail(xhr, text_status, error_thrown);
- }
-
- var values;
- var modlist = {'all': true, 'setattr': [], 'addattr': [], 'rights': true};
- var attrs_wo_option = {};
-
- for (var i=0; i<that.sections.length; i++) {
- var section = that.sections[i];
-
- if (section.save){
- section.save(modlist);
- continue;
- }
-
- var div = $('#'+that.entity_name+'-'+that.name+'-'+section.name, that.container);
-
- for (var j=0; j<section.fields.length; j++) {
- var field = section.fields[j];
-
- var span = $('span[name='+field.name+']', div).first();
- values = field.save();
- if (!values) continue;
-
- var param_info = IPA.get_param_info(entity_name, field.name);
- if (param_info) {
- if (param_info['primary_key']) continue;
- if (values.length === 1) {
- modlist[field.name] = values[0];
- }else if (values.length > 1){
- modlist[field.name] = values;
- } else if (param_info['multivalue']){
- modlist[field.name] = [];
- }
- } else {
- if (values.length) attrs_wo_option[field.name] = values;
- }
- }
- }
-
- for (var attr in attrs_wo_option) {
- values = attrs_wo_option[attr];
- modlist['setattr'].push(attr + '=' + values[0]);
- for (var k = 1; k < values.length; ++k){
- modlist['addattr'].push(attr + '=' + values[k]);
- }
- }
-
- var pkey = that.get_primary_key() ;
- if (pkey){
- pkey = [pkey];
- }else{
- pkey = [];
- }
-
- IPA.cmd('mod', pkey, modlist, update_on_win, null, entity_name);
-};
-
-
-IPA.create_first_dd = function (field_name, content){
- var dd = $('<dd/>', {
- 'class': 'first',
- 'title': field_name
- });
- if (content) dd.append(content);
- return dd;
-};
-
-IPA.create_other_dd = function (field_name, content){
- return $('<dd/>', {
- 'class': 'other',
- 'title': field_name
- }).append(content);
-};
-
-
-/* creates a Remove link for deleting attribute values */
-function _ipa_create_remove_link(attr, param_info)
-{
- if (param_info){
- /* check if the param is required or of the Password type
- * if it is, then we don't want people to be able to remove it */
- if ((param_info['required']) || (param_info['class'] == 'Password')){
- return ('');
- }
- }
- return $('<a/>',{
- href:"jslink",
- click: function (){return (_ipa_remove_on_click(this));},
- title: attr,
- text: 'Remove'});
-
-}
-
-IPA.details_field_create_add_link = function (title, rights, index) {
-
- var that = this;
-
- var link = $('<a/>', {
- 'href': 'jslink',
- 'title': title,
- 'html': 'Add',
- 'click': function () {
-
- var param_info = IPA.get_param_info(that.entity_name, '');
- var input = that.create_input('', param_info, rights, index);
-
- link.replaceWith(input);
- input.focus();
-
- var dd = IPA.create_other_dd(that.name);
- dd.append(IPA.details_field_create_add_link.call(that, that.name, rights, index+1));
- dd.appendTo(that.container);
-
- return false;
- }
- });
-
- return link;
-};
-
-
-function _ipa_remove_on_click(obj)
-{
- var jobj = $(obj);
- var attr = jobj.attr('title');
- var par = jobj.parent();
-
- var input = par.find('input');
-
- if (input.is('.strikethrough')){
- input.removeClass('strikethrough');
- jobj.text("Remove");
- }else{
- input.addClass('strikethrough');
- jobj.text("Undo");
- }
- return (false);
-}