51 lines
1.6 KiB
JavaScript
51 lines
1.6 KiB
JavaScript
/*! Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
|
|
|
|
(function(Icinga, $) {
|
|
|
|
"use strict";
|
|
|
|
Icinga.Behaviors = Icinga.Behaviors || {};
|
|
|
|
var Tristate = function (icinga) {
|
|
Icinga.EventListener.call(this, icinga);
|
|
this.on('click', 'div.tristate .tristate-dummy', this.clickTriState, this);
|
|
};
|
|
Tristate.prototype = new Icinga.EventListener();
|
|
|
|
Tristate.prototype.clickTriState = function (event) {
|
|
var self = event.data.self;
|
|
var $tristate = $(this);
|
|
var triState = parseInt($tristate.data('icinga-tristate'), 10);
|
|
|
|
// load current values
|
|
var old = $tristate.data('icinga-old').toString();
|
|
var value = $tristate.parent().find('input:radio:checked').first().prop('checked', false).val();
|
|
|
|
// calculate the new value
|
|
if (triState) {
|
|
// 1 => 0
|
|
// 0 => unchanged
|
|
// unchanged => 1
|
|
value = value === '1' ? '0' : (value === '0' ? 'unchanged' : '1');
|
|
} else {
|
|
// 1 => 0
|
|
// 0 => 1
|
|
value = value === '1' ? '0' : '1';
|
|
}
|
|
|
|
// update form value
|
|
$tristate.parent().find('input:radio[value="' + value + '"]').prop('checked', true);
|
|
// update dummy
|
|
|
|
if (value !== old) {
|
|
$tristate.parent().find('b.tristate-changed').css('visibility', 'visible');
|
|
} else {
|
|
$tristate.parent().find('b.tristate-changed').css('visibility', 'hidden');
|
|
}
|
|
self.icinga.ui.setTriState(value.toString(), $tristate);
|
|
};
|
|
|
|
Icinga.Behaviors.Tristate = Tristate;
|
|
|
|
}) (Icinga, jQuery);
|