From 8cba3d2a92f9b4cce195618221c40b9a14c74cec Mon Sep 17 00:00:00 2001 From: Thomas Gelf Date: Wed, 28 Oct 2015 22:55:04 +0100 Subject: [PATCH] js/module.js: added JS for collapsible fieldsets --- public/js/module.js | 65 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 public/js/module.js diff --git a/public/js/module.js b/public/js/module.js new file mode 100644 index 00000000..238204a6 --- /dev/null +++ b/public/js/module.js @@ -0,0 +1,65 @@ + +(function(Icinga) { + + var Director = function(module) { + this.module = module; + + this.initialize(); + + this.openedFieldsets = {}; + + this.module.icinga.logger.debug('Director module loaded'); + }; + + Director.prototype = { + + initialize: function() + { + /** + * Tell Icinga about our event handlers + */ + this.module.on('rendered', this.rendered); + this.module.on('click', 'fieldset > legend', this.toggleFieldset); + this.module.icinga.logger.debug('Director module initialized'); + }, + + toggleFieldset: function (ev) { + ev.stopPropagation(); + var $fieldset = $(ev.currentTarget).closest('fieldset'); + $fieldset.toggleClass('collapsed'); + this.openedFieldsets[$fieldset.attr('id')] = ! $fieldset.hasClass('collapsed'); + }, + + rendered: function(ev) { + this.module.icinga.logger.info('rendered'); + var $container = $(ev.currentTarget); + var self = this; + $('form', $container).each(self.restoreFieldsets.bind(self)); + }, + + restoreFieldsets: function(idx, form) { + var $form = $(form); + var formId = $form.attr('id'); + var self = this; + + $('fieldset', $form).each(function(idx, fieldset) { + var $fieldset = $(fieldset); + if ($('.required', $fieldset).length == 0 && (! self.fieldsetWasOpened($fieldset))) { + $fieldset.addClass('collapsed'); + } + }); + }, + + fieldsetWasOpened: function($fieldset) { + var id = $fieldset.attr('id'); + if (typeof this.openedFieldsets[id] === 'undefined') { + return false; + } + return this.openedFieldsets[id]; + } + }; + + Icinga.availableModules.director = Director; + +}(Icinga)); +