Honor 'enabled' option for widgets.

https://fedorahosted.org/freeipa/ticket/3793
This commit is contained in:
Ana Krivokapic 2013-07-17 21:13:42 +02:00 committed by Petr Vobornik
parent 2934160b9c
commit 2ca280c56d
5 changed files with 93 additions and 57 deletions

View File

@ -530,7 +530,6 @@ IPA.association_table_widget = function (spec) {
$('.action-button', that.table).addClass('action-button-disabled');
that.unselect_all();
}
that.enabled = enabled;
};
that.select_changed = function() {

View File

@ -603,7 +603,7 @@ IPA.dnszone_adder_dialog = function(spec) {
var zone = zone_w.save()[0] || '';
var ns = ns_w.save()[0] || '';
var zone_is_reverse = !zone_w.is_enabled() ||
var zone_is_reverse = !zone_w.enabled ||
ends_with(zone, '.in-addr.arpa.') ||
ends_with(zone, '.ip6.arpa.');
var relative_ns = true;
@ -1767,7 +1767,6 @@ IPA.dns.record_type_table_widget = function(spec) {
$('.action-button', that.table).addClass('action-button-disabled');
that.unselect_all();
}
that.enabled = enabled;
};
that.select_changed = function() {

View File

@ -1940,7 +1940,7 @@ exp.action_button_widget = IPA.action_button_widget = function(spec) {
};
that.set_enabled = function(enabled) {
that.enabled = enabled;
that.widget_set_enabled(enabled);
if (that.button_element) {
if (enabled) {

View File

@ -112,8 +112,6 @@ IPA.rule_association_table_widget = function(spec) {
that.external = spec.external;
that.enabled = spec.enabled !== undefined ? spec.enabled : true;
that.setup_column = function(column, div, record) {
var suppress_link = false;
if (that.external) {

View File

@ -51,6 +51,7 @@ IPA.widget = function(spec) {
that.measurement_unit = spec.measurement_unit;
that.entity = IPA.get_entity(spec.entity); //some old widgets still need it
that.facet = spec.facet;
that.enabled = spec.enabled === undefined ? true : spec.enabled;
that.create = function(container) {
container.addClass('widget');
@ -60,6 +61,10 @@ IPA.widget = function(spec) {
that.clear = function() {
};
that.set_enabled = function(value) {
that.enabled = value;
};
that.set_visible = function(visible) {
if (visible) {
@ -81,6 +86,7 @@ IPA.widget = function(spec) {
};
that.widget_create = that.create;
that.widget_set_enabled = that.set_enabled;
return that;
};
@ -200,6 +206,14 @@ IPA.input_widget = function(spec) {
}
};
that.set_enabled = function(value) {
that.widget_set_enabled(value);
if (that.input) {
that.input.prop('disabled', !value);
}
};
that.on_value_changed = function() {
var value = that.save();
that.value_changed.notify([value], that);
@ -257,7 +271,6 @@ IPA.text_widget = function(spec) {
that.input = $('<input/>', {
type: that.input_type,
name: that.name,
disabled: that.disabled,
size: that.size,
title: that.tooltip,
keyup: function() {
@ -274,6 +287,7 @@ IPA.text_widget = function(spec) {
}
that.create_error_link(container);
that.set_enabled(that.enabled);
};
that.update = function(values) {
@ -303,15 +317,6 @@ IPA.text_widget = function(spec) {
}
};
that.is_enabled = function(value) {
return !that.input.prop('disabled');
};
that.set_enabled = function(value) {
that.input.prop('disabled', !value);
};
that.clear = function() {
that.input.val('');
that.display_control.text('');
@ -474,7 +479,8 @@ IPA.multivalued_widget = function(spec) {
name: that.name+'-'+row_index,
undo: that.undo || row.is_new,
read_only: that.read_only,
writable: that.writable
writable: that.writable,
enabled: that.enabled
});
row.widget.create(row.container);
@ -756,6 +762,8 @@ IPA.option_widget_base = function(spec, that) {
that._child_widgets.push(option.widget);
}
}
option.enabled = spec.enabled === undefined ? true : spec.enabled;
option.label = text.get(option.label);
option.combine_values = option.combine_values === undefined ? true :
!!option.combine_values;
@ -794,11 +802,13 @@ IPA.option_widget_base = function(spec, that) {
that._create_option = function(option, container) {
var input_name = that.get_input_name();
var id = that._option_next_id + input_name;
var enabled = that.enabled && option.enabled;
$('<input/>', {
id: id,
type: that.input_type,
name: input_name,
disabled: !enabled,
value: option.value,
title: option.tooltip || that.tooltip,
change: that.on_input_change
@ -900,7 +910,7 @@ IPA.option_widget_base = function(spec, that) {
var parents_selected = [];
$(that._selector+':checked', that.container).each(function() {
$(that._selector+':checked', that.$node).each(function() {
var value = $(this).val();
var option = that.get_option(value);
if (option && option.nested) {
@ -914,7 +924,7 @@ IPA.option_widget_base = function(spec, that) {
if (option.nested) {
var selected = parents_selected.indexOf(option.value) > -1;
option.widget.set_enabled(selected, true);
option.widget.update_enabled(selected, true);
}
}
}
@ -927,7 +937,7 @@ IPA.option_widget_base = function(spec, that) {
if (that.$node) {
$(that._selector+':checked', that.container).each(function() {
$(that._selector+':checked', that.$node).each(function() {
var value = $(this).val();
var child_values = [];
var option = that.get_option(value);
@ -958,9 +968,9 @@ IPA.option_widget_base = function(spec, that) {
// uncheck all inputs
check(that._selector, true /*uncheck*/);
var writable = !that.read_only && !!that.writable;
var writable = !that.read_only && !!that.writable && that.enabled;
if (!that.nested) {
that.set_enabled(writable);
that.update_enabled(writable);
}
if (values && values.length > 0) {
@ -986,7 +996,7 @@ IPA.option_widget_base = function(spec, that) {
check(that._selector+'[value="'+ option.value +'"]');
}
if (option.widget) {
option.widget.set_enabled(writable && has_opt, false);
option.widget.update_enabled(writable && has_opt, false);
}
}
} else {
@ -1003,6 +1013,7 @@ IPA.option_widget_base = function(spec, that) {
var widget = that._child_widgets[j];
widget.writable = that.writable;
widget.read_only = that.read_only;
widget.enabled = that.enabled;
widget.update(values);
}
}
@ -1010,12 +1021,22 @@ IPA.option_widget_base = function(spec, that) {
that.updated.notify([], that);
};
that.set_enabled = function(enabled, clear) {
that.set_enabled = function(enabled) {
that.enabled = enabled;
that.update_enabled(enabled);
};
that.update_enabled = function(enabled, clear) {
if (!that.$node) return;
$(that._selector, that.$node).prop('disabled', !enabled);
$(that._selector, that.container).prop('disabled', !enabled);
if (!enabled && clear) that.clear();
for (var i=0; i<that._child_widgets.length;i++) {
that._child_widgets[i].set_enabled(enabled, clear);
that._child_widgets[i].update_enabled(enabled, clear);
}
};
@ -1074,7 +1095,7 @@ IPA.checkbox_widget = function (spec) {
spec.input_type = spec.input_type || 'checkbox';
if (!spec.options) {
spec.options = [ { value: checked, label: '' } ];
spec.options = [ { value: checked, label: '', enabled: spec.enabled } ];
}
if (spec.checked) spec.default_value = spec.checked;
@ -1137,6 +1158,15 @@ IPA.select_widget = function(spec) {
}
that.create_error_link(container);
that.set_enabled(that.enabled);
};
that.set_enabled = function(value) {
that.widget_set_enabled(value);
if (that.select) {
that.select.prop('disabled', !value);
}
};
that.create_options = function() {
@ -1231,7 +1261,6 @@ IPA.textarea_widget = function (spec) {
name: that.name,
rows: that.rows,
cols: that.cols,
disabled: that.disabled,
readOnly: !!that.read_only,
title: that.tooltip,
keyup: function() {
@ -1250,6 +1279,7 @@ IPA.textarea_widget = function (spec) {
}
that.create_error_link(container);
that.set_enabled(that.enabled);
};
that.save = function() {
@ -1786,6 +1816,8 @@ IPA.table_widget = function (spec) {
name: 'total_pages'
}).appendTo(that.pagination_control);
}
that.set_enabled(that.enabled);
};
that.prev_page = function() {
@ -1994,7 +2026,11 @@ IPA.table_widget = function (spec) {
};
that.set_enabled = function(enabled) {
$('input[name="'+that.name+'"]', that.table).prop('disabled', !enabled);
that.widget_set_enabled(enabled);
if (that.table) {
$('input[name="'+that.name+'"]', that.table).prop('disabled', !enabled);
}
};
that.clear = function() {
@ -2122,7 +2158,6 @@ IPA.attribute_table_widget = function(spec) {
$('.action-button', that.table).addClass('action-button-disabled');
that.unselect_all();
}
that.enabled = enabled;
};
that.select_changed = function() {
@ -2489,6 +2524,7 @@ IPA.combobox_widget = function(spec) {
}
that.create_error_link(container);
that.set_enabled(that.enabled);
};
that.on_no_close = function() {
@ -2633,7 +2669,7 @@ IPA.combobox_widget = function(spec) {
};
that.open = function() {
if (!that.read_only) {
if (!that.read_only && that.enabled) {
that.list_container.css('visibility', 'visible');
}
};
@ -2989,33 +3025,19 @@ IPA.button_widget = function(spec) {
style: that.style,
click: that.on_click
}).appendTo(container);
};
that.get_enabled = function() {
var enabled = true;
if (that.button) {
enabled = that.button.hasClass(that.disabled_class);
}
return enabled;
that.set_enabled(that.enabled);
};
that.set_enabled = function(enabled) {
that.widget_set_enabled(enabled);
enabled ? that.enable() : that.disable();
};
that.enable = function() {
if (that.button) {
that.button.removeClass(that.disabled_class);
}
};
that.disable = function() {
if (that.button) {
that.button.addClass(that.disabled_class);
if (enabled) {
that.button.removeClass(that.disabled_class);
} else {
that.button.addClass(that.disabled_class);
}
}
};
@ -3313,6 +3335,8 @@ IPA.multiple_choice_section = function(spec) {
choice = choices[i];
that.create_choice(choice);
}
that.set_enabled(that.enabled);
};
that.create_choice = function(choice) {
@ -3353,6 +3377,7 @@ IPA.multiple_choice_section = function(spec) {
id: radio_id,
value: choice.name,
checked: enabled,
disabled: !that.enabled,
change: function() {
that.select_choice(this.value);
}
@ -3375,11 +3400,11 @@ IPA.multiple_choice_section = function(spec) {
for (i=0; i<that.choices.values.length; i++) {
choice = that.choices.values[i];
enabled = choice.name === choice_name;
that.set_enabled(choice, enabled);
that.set_choice_enabled(choice, enabled);
}
};
that.set_enabled = function (choice, enabled) {
that.set_choice_enabled = function (choice, enabled) {
var i, field_name, field, fields, required;
@ -3395,7 +3420,21 @@ IPA.multiple_choice_section = function(spec) {
}
};
that.set_enabled = function(value) {
var i, choice;
that.widget_set_enabled(value);
for (i=0; i<that.choices.values.length; i++) {
choice = that.choices.values[i];
that.set_choice_enabled(choice, value);
}
};
that.init_enabled = function() {
if (!that.enabled) {
return;
}
var i, choice;
@ -3790,7 +3829,8 @@ IPA.sshkey_widget = function(spec) {
dialog.textarea = $('<textarea/>', {
'class': 'certificate',
readonly: that.read_only
readonly: that.read_only,
disabled: !that.enabled
}).appendTo(dialog.container);
var key = that.key.key || '';
@ -3868,7 +3908,7 @@ IPA.action_panel = function(spec) {
if (!action.visible) return;
classes = ['action'];
state = action.enabled ? 'enabled' : 'disabled';
state = action.enabled && that.enabled ? 'enabled' : 'disabled';
classes.push(state);
li = $('<li/>');
@ -3908,7 +3948,7 @@ IPA.action_panel = function(spec) {
that.action_clicked = function(action) {
if (!action.enabled || !action.visible) return;
if (!that.enabled || !action.enabled || !action.visible) return;
action.execute(that.facet);
};