diff options
author | Petr Vobornik <pvoborni@redhat.com> | 2012-11-26 14:28:32 +0100 |
---|---|---|
committer | Petr Vobornik <pvoborni@redhat.com> | 2013-01-18 15:10:36 +0100 |
commit | b9ef6ab0c412913234f05f788b3fcd3c3277eb69 (patch) | |
tree | 2af9ef49ce74fd152c4c7b6f0aad543b4793ba59 /install/ui/dialog.js | |
parent | 8f8e790d9468245c031320d6a506a420f486638f (diff) | |
download | freeipa.git-b9ef6ab0c412913234f05f788b3fcd3c3277eb69.tar.gz freeipa.git-b9ef6ab0c412913234f05f788b3fcd3c3277eb69.tar.xz freeipa.git-b9ef6ab0c412913234f05f788b3fcd3c3277eb69.zip |
Move of core Web UI files to AMD directory
SSIA
https://fedorahosted.org/freeipa/ticket/112
Diffstat (limited to 'install/ui/dialog.js')
-rw-r--r-- | install/ui/dialog.js | 849 |
1 files changed, 0 insertions, 849 deletions
diff --git a/install/ui/dialog.js b/install/ui/dialog.js deleted file mode 100644 index 4e603155..00000000 --- a/install/ui/dialog.js +++ /dev/null @@ -1,849 +0,0 @@ -/*jsl:import ipa.js */ -/* Authors: - * Endi Sukma Dewata <edewata@redhat.com> - * Petr Vobornik <pvoborni@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/>. - */ - -/* REQUIRES: widget.js, details.js */ - -IPA.opened_dialogs = { - - dialogs: [], - - top_dialog: function() { - var top = null; - if (this.dialogs.length) top = this.dialogs[this.dialogs.length - 1]; - return top; - }, - - focus_top: function() { - var top = this.top_dialog(); - if (top) { - top.container.dialog('moveToTop'); //make sure the last dialog is top dialog - top.focus_first_element(); - } - }, - - add_dialog: function(dialog) { - this.dialogs.push(dialog); - }, - - remove_dialog: function(dialog) { - var index = this.dialogs.indexOf(dialog); - if (index > -1) this.dialogs.splice(index, 1); - } -}; - -IPA.dialog_button = function(spec) { - - spec = spec || {}; - - var that = {}; - - that.name = spec.name; - that.label = spec.label || spec.name; - that.click = spec.click || click; - that.visible = spec.visible !== undefined ? spec.visible : true; - - function click() { - } - - that.set_enabled = function(enabled) { - if (enabled) { - that.element.removeClass('ui-state-disabled'); - } else { - that.element.addClass('ui-state-disabled'); - } - }; - - that.is_enabled = function() { - return !that.element.hasClass('ui-state-disabled'); - }; - - return that; -}; - -/** - * This is a base class for dialog boxes. - */ -IPA.dialog = function(spec) { - - spec = spec || {}; - - var that = {}; - - that.entity = IPA.get_entity(spec.entity); - that.name = spec.name || 'dialog'; - that.id = spec.id; - that.title = spec.title; - that.width = spec.width || 500; - that.height = spec.height; - that.close_on_escape = spec.close_on_escape !== undefined ? - spec.close_on_escape : true; - - that.widgets = IPA.widget_container(); - that.fields = IPA.field_container({ container: that }); - that.buttons = $.ordered_map(); - that.policies = IPA.facet_policies({ - container: that, - policies: spec.policies - }); - - that.create_button = function(spec) { - var factory = spec.factory || IPA.dialog_button; - var button = factory(spec); - that.add_button(button); - return button; - }; - - that.add_button = function(button) { - that.buttons.put(button.name, button); - }; - - that.get_button = function(name) { - return that.buttons.get(name); - }; - - that.field = function(field) { - that.fields.add_field(field); - return that; - }; - - that.validate = function() { - var valid = true; - var fields = that.fields.get_fields(); - for (var i=0; i<fields.length; i++) { - var field = fields[i]; - valid = field.validate() && field.validate_required() && valid; - } - return valid; - }; - - that.get_id = function() { - if (that.id) return that.id; - if (that.name) return that.name; - return null; - }; - - - /** - * Create content layout - */ - that.create = function() { - - that.message_container = $('<div/>', { - style: 'display: none', - 'class': 'dialog-message ui-state-highlight ui-corner-all' - }).appendTo(that.container); - - var widgets = that.widgets.get_widgets(); - for (var i=0; i<widgets.length; i++) { - var widget = widgets[i]; - - var div = $('<div/>', { - name: widget.name, - 'class': 'dialog-section' - }).appendTo(that.container); - - widget.create(div); - } - - that.policies.post_create(); - }; - - that.show_message = function(message) { - that.message_container.text(message); - that.message_container.css('display', ''); - }; - - that.hide_message = function() { - that.message_container.css('display', 'none'); - }; - - /** - * Open dialog - */ - that.open = function(container) { - - that.container = $('<div/>', { - id : that.get_id(), - 'data-name': that.name - }); - - if (container) { - container.append(that.container); - } - - that.create(); - that.reset(); - - that.container.dialog({ - title: that.title, - modal: true, - closeOnEscape: that.close_on_escape, - width: that.width, - minWidth: that.width, - height: that.height, - minHeight: that.height, - close: function(event, ui) { - that.close(); - } - }); - - that.set_buttons(); - that.register_listeners(); - IPA.opened_dialogs.add_dialog(that); - that.focus_first_element(); - }; - - that.focus_first_element = function() { - // set focus to the first tabbable element in the content area or the first button - // if there are no tabbable elements, set focus on the dialog itself - - var element = that.container; - var ui_dialog = that.container.parent('.ui-dialog'); // jq dialog div - - // code taken from jquery dialog source code - $(element.find(':tabbable').get().concat( - ui_dialog.find('.ui-dialog-buttonpane :tabbable').get().concat( - ui_dialog.get()))).eq(0).focus(); - }; - - that.option = function(name, value) { - that.container.dialog('option', name, value); - }; - - that.set_buttons = function() { - - // create a map of button labels and handlers - var dialog_buttons = {}; - for (var i=0; i<that.buttons.values.length; i++) { - var button = that.buttons.values[i]; - if (!button.visible) continue; - dialog_buttons[button.label] = button.click; - } - - //set buttons to dialog - that.option('buttons', dialog_buttons); - - // find button elements - var parent = that.container.parent(); - var buttons = $('.ui-dialog-buttonpane .ui-dialog-buttonset button', parent); - - buttons.each(function(index) { - var button = that.buttons.values[index]; - button.element = $(this); - }); - }; - - that.display_buttons = function(names) { - - for (var i=0; i<that.buttons.values.length; i++) { - var button = that.buttons.values[i]; - - button.visible = names.indexOf(button.name) > -1; - } - that.set_buttons(); - }; - - that.save = function(record) { - var fields = that.fields.get_fields(); - for (var i=0; i<fields.length; i++) { - var field = fields[i]; - field.save(record); - } - }; - - that.close = function() { - that.container.dialog('destroy'); - that.container.remove(); - that.remove_listeners(); - IPA.opened_dialogs.remove_dialog(that); - IPA.opened_dialogs.focus_top(); - }; - - that.reset = function() { - var fields = that.fields.get_fields(); - for (var i=0; i<fields.length; i++) { - fields[i].reset(); - } - }; - - that.register_listeners = function() {}; - that.remove_listeners = function() {}; - - that.create_builder = function() { - - var widget_builder = IPA.widget_builder({ - widget_options: { - entity: that.entity, - facet: that - } - }); - var field_builder = IPA.field_builder({ - field_options: { - undo: false, - entity: that.entity, - facet: that - } - }); - var section_builder = IPA.section_builder({ - container: that, - section_factory: IPA.details_table_section_nc, - widget_builder: widget_builder, - field_builder: field_builder - }); - - that.builder = IPA.details_builder({ - container: that, - widget_builder: widget_builder, - field_builder: field_builder, - section_builder: section_builder - }); - }; - - that.init = function() { - - that.create_builder(); - that.builder.build(spec); - that.fields.widgets_created(); - that.policies.init(); - }; - - that.init(); - - that.dialog_create = that.create; - that.dialog_open = that.open; - that.dialog_close = that.close; - that.dialog_save = that.save; - that.dialog_reset = that.reset; - that.dialog_validate = that.validate; - - return that; -}; - -/** - * This dialog provides an interface for searching and selecting - * values from the available results. - */ -IPA.adder_dialog = function(spec) { - - spec = spec || {}; - - spec.name = spec.name || 'adder_dialog'; - - var that = IPA.dialog(spec); - - IPA.confirm_mixin().apply(that); - - that.external = spec.external; - that.width = spec.width || 600; - that.height = spec.height || 360; - - if (!that.entity) { - var except = { - expected: false, - message:'Adder dialog created without entity.' - }; - throw except; - } - - var init = function() { - that.available_table = IPA.table_widget({ - entity: that.entity, - name: 'available', - scrollable: true - }); - - that.selected_table = IPA.table_widget({ - entity: that.entity, - name: 'selected', - scrollable: true - }); - - if (spec.columns) { - for (var i=0; i<spec.columns.length; i++) { - that.create_column(spec.columns[i]); - } - } - }; - - that.get_column = function(name) { - return that.available_table.get_column(name); - }; - - that.get_columns = function() { - return that.available_table.get_columns(); - }; - - that.add_column = function(column) { - that.available_table.add_column(column); - that.selected_table.add_column(column); - }; - - that.set_columns = function(columns) { - that.clear_columns(); - for (var i=0; i<columns.length; i++) { - that.add_column(columns[i]); - } - }; - - that.clear_columns = function() { - that.available_table.clear_columns(); - that.selected_table.clear_columns(); - }; - - that.create_column = function(spec) { - spec.entity = that.entity; - var column = IPA.column(spec); - that.add_column(column); - return column; - }; - - that.create = function() { - - // do not call that.dialog_create(); - - var container = $('<div/>', { - 'class': 'adder-dialog' - }).appendTo(that.container); - - var top_panel = $('<div/>', { - 'class': 'adder-dialog-top' - }).appendTo(container); - - $('<input/>', { - type: 'text', - name: 'filter', - keyup: function(event) { - if (event.keyCode === $.ui.keyCode.ENTER) { - that.search(); - return false; - } - } - }).appendTo(top_panel); - - top_panel.append(' '); - - that.find_button = IPA.button({ - name: 'find', - label: IPA.messages.buttons.find, - click: function() { - that.search(); - return false; - } - }).appendTo(top_panel); - - top_panel.append(IPA.create_network_spinner()); - - var left_panel = $('<div/>', { - 'class': 'adder-dialog-left' - }).appendTo(container); - - var available_panel = $('<div/>', { - name: 'available', - 'class': 'adder-dialog-available' - }).appendTo(left_panel); - - $('<div/>', { - html: IPA.messages.dialogs.available, - 'class': 'adder-dialog-header ui-widget-header' - }).appendTo(available_panel); - - var available_content = $('<div/>', { - 'class': 'adder-dialog-content' - }).appendTo(available_panel); - - that.available_table.create(available_content); - - - var right_panel = $('<div/>', { - 'class': 'adder-dialog-right' - }).appendTo(container); - - var selected_panel = $('<div/>', { - name: 'selected', - 'class': 'adder-dialog-selected' - }).appendTo(right_panel); - - $('<div/>', { - html: IPA.messages.dialogs.prospective, - 'class': 'adder-dialog-header ui-widget-header' - }).appendTo(selected_panel); - - var selected_content = $('<div/>', { - 'class': 'adder-dialog-content' - }).appendTo(selected_panel); - - that.selected_table.create(selected_content); - - - var buttons_panel = $('<div/>', { - name: 'buttons', - 'class': 'adder-dialog-buttons' - }).appendTo(container); - - var div = $('<div/>').appendTo(buttons_panel); - IPA.button({ - name: 'add', - label: '>>', - click: function() { - that.add(); - that.update_buttons(); - return false; - } - }).appendTo(div); - - div = $('<div/>').appendTo(buttons_panel); - IPA.button({ - name: 'remove', - label: '<<', - click: function() { - that.remove(); - that.update_buttons(); - return false; - } - }).appendTo(div); - - that.filter_field = $('input[name=filter]', that.container); - - if (that.external) { - container.addClass('adder-dialog-with-external'); - - var external_panel = $('<div/>', { - name: 'external', - 'class': 'adder-dialog-external' - }).appendTo(left_panel); - - $('<div/>', { - html: IPA.messages.objects.sudorule.external, - 'class': 'adder-dialog-header ui-widget-header' - }).appendTo(external_panel); - - var external_content = $('<div/>', { - 'class': 'adder-dialog-content' - }).appendTo(external_panel); - - that.external_field = $('<input/>', { - type: 'text', - name: 'external' - }).appendTo(external_content); - } - - that.search(); - }; - - that.open = function(container) { - - var add_button = that.create_button({ - name: 'add', - label: IPA.messages.buttons.add, - click: function() { - if (!add_button.is_enabled()) return; - that.execute(); - } - }); - - that.create_button({ - name: 'cancel', - label: IPA.messages.buttons.cancel, - click: function() { - that.close(); - } - }); - - that.dialog_open(container); - - that.update_buttons(); - }; - - that.add = function() { - var rows = that.available_table.remove_selected_rows(); - that.selected_table.add_rows(rows); - }; - - that.remove = function() { - var rows = that.selected_table.remove_selected_rows(); - that.available_table.add_rows(rows); - }; - - that.update_buttons = function() { - - var values = that.selected_table.save(); - - var button = that.get_button('add'); - button.set_enabled(values && values.length); - }; - - that.get_filter = function() { - return that.filter_field.val(); - }; - - that.clear_available_values = function() { - that.available_table.empty(); - }; - - that.clear_selected_values = function() { - that.selected_table.empty(); - }; - - that.add_available_value = function(record) { - that.available_table.add_record(record); - }; - - that.get_selected_values = function() { - return that.selected_table.save(); - }; - - that.execute = function() { - }; - - that.on_confirm = function() { - - var add_button = that.get_button('add'); - if (add_button.is_enabled()) { - that.execute(); - } - }; - - init(); - - that.adder_dialog_create = that.create; - - return that; -}; - -/** - * This dialog displays the values to be deleted. - */ -IPA.deleter_dialog = function (spec) { - - spec = spec || {}; - - spec.title = spec.title || IPA.messages.buttons.remove; - spec.name = spec.name || 'deleter_dialog'; - spec.message = spec.message || IPA.messages.search.delete_confirm; - spec.ok_label = spec.ok_label || IPA.messages.buttons.remove; - - var that = IPA.confirm_dialog(spec); - that.values = spec.values || []; - that.on_ok = spec.on_ok || function() { - that.execute(); - }; - - that.add_value = function(value) { - that.values.push(value); - }; - - that.set_values = function(values) { - that.values = values; - }; - - that.create = function() { - - $('<p/>', { - 'text': that.message - }).appendTo(that.container); - - var div = $('<div/>', { - style: 'overflow:auto; max-height: 100px' - }).appendTo(that.container); - - var ul = $('<ul/>'); - ul.appendTo(div); - - for (var i=0; i<that.values.length; i++) { - var value = that.values[i]; - if (value instanceof Object){ - var first = true; - var str_value = ""; - for (var key in value){ - if (value.hasOwnProperty(key)){ - if (!first){ - str_value += ','; - } - str_value += (key + ':' +value[key]); - first = false; - } - } - value = str_value; - } - - $('<li/>',{ - 'text': value - }).appendTo(ul); - } - }; - - that.deleter_dialog_create = that.create; - - return that; -}; - -IPA.message_dialog = function(spec) { - - spec = spec || {}; - - spec.name = spec.name || 'message_dialog'; - - var that = IPA.confirm_dialog(spec); - - that.open = function(container) { - - that.confirm_dialog_open(container); - that.confirmed = true; // there are no options to confirm - }; - - that.buttons.remove('cancel'); - - that.message_dialog_create = that.create; - - return that; -}; - -IPA.confirm_dialog = function(spec) { - - spec = spec || {}; - spec.name = spec.name || 'confirm_dialog'; - spec.title = spec.title || IPA.messages.dialogs.confirmation; - - var that = IPA.dialog(spec); - IPA.confirm_mixin().apply(that); - - that.message = spec.message || ''; - that.on_ok = spec.on_ok; - that.on_cancel = spec.on_cancel; - that.ok_label = spec.ok_label || IPA.messages.buttons.ok; - that.cancel_label = spec.cancel_label || IPA.messages.buttons.cancel; - that.confirmed = false; - that.confirm_on_enter = spec.confirm_on_enter !== undefined ? spec.confirm_on_enter : true; - - that.create = function() { - $('<p/>', { - 'text': that.message - }).appendTo(that.container); - }; - - that.close = function() { - - that.dialog_close(); - - if (that.confirmed) { - if (that.on_ok) { - that.on_ok(); - } - } else { - if (that.on_cancel) { - that.on_cancel(); - } - } - }; - - that.open = function(container) { - - that.confirmed = false; - that.dialog_open(container); - }; - - that.on_confirm = function() { - that.confirmed = true; - that.close(); - }; - - that.create_buttons = function() { - - that.create_button({ - name: 'ok', - label: that.ok_label, - click: function() { - that.confirmed = true; - that.close(); - } - }); - - that.create_button({ - name: 'cancel', - label: that.cancel_label, - click: function() { - that.confirmed = false; - that.close(); - } - }); - }; - - that.create_buttons(); - - that.confirm_dialog_close = that.close; - that.confirm_dialog_open = that.open; - - return that; -}; - -IPA.confirm_mixin = function() { - - return { - mixin: { - - ignore_enter_rules: { - src_elements: ['a', 'button'], - src_types: ['textarea', 'select-one'] - }, - - test_ignore: function(event) { - - var ir = this.ignore_enter_rules, - t = event.target, - - ignore = ir.src_elements.indexOf(t.tagName.toLowerCase()) > -1 || - ir.src_types.indexOf(t.type) > -1; - - return ignore; - }, - - register_listeners: function() { - var self = this; - this._on_key_up_listener = function(e) { self.on_key_up(e); }; - var dialog_container = this.container.parent('.ui-dialog'); - dialog_container.bind('keyup', this._on_key_up_listener); - }, - - remove_listeners: function() { - var dialog_container = this.container.parent('.ui-dialog'); - dialog_container.unbind('keyup', this._on_key_up_listener); - }, - - on_key_up: function(event) { - if (event.keyCode === $.ui.keyCode.ENTER && - !this.test_ignore(event) && - !!this.on_confirm) { - event.preventDefault(); - this.on_confirm(); - } else if (event.keyCode === $.ui.keyCode.ESCAPE && - !!this.on_cancel) { - event.preventDefault(); - this.on_cancel(); - } - } - }, - - apply: function(obj) { - $.extend(obj, this.mixin); - } - }; -}; |