diff options
Diffstat (limited to '')
-rw-r--r-- | public/js/combined.js | 69 | ||||
-rw-r--r-- | public/js/loader.js | 54 | ||||
-rw-r--r-- | public/js/module.js | 19 |
3 files changed, 142 insertions, 0 deletions
diff --git a/public/js/combined.js b/public/js/combined.js new file mode 100644 index 0000000..83b19a5 --- /dev/null +++ b/public/js/combined.js @@ -0,0 +1,69 @@ +(function(window, $) { + 'use strict'; + + var Web = function () { + }; + + Web.prototype = { + initialize: function (icinga) { + this.icinga = icinga; + $(document).on('focus', 'form.gipfl-form input, form.gipfl-form textarea, form.gipfl-form select', this.formElementFocus); + $(document).on('click', '.gipfl-collapsible-control', this.toggleCollapsible); + }, + + toggleCollapsible: function (ev) { + var $toggle = $(ev.currentTarget); + var $collapsible = $toggle.parent(); + $collapsible.toggleClass('collapsed'); + }, + + formElementFocus: function (ev) { + var $input = $(ev.currentTarget); + if ($input.closest('form.editor').length) { + return; + } + var $set = $input.closest('.extensible-set'); + if ($set.length) { + var $textInputs = $('input[type=text]', $set); + if ($textInputs.length > 1) { + $textInputs.not(':first').attr('tabIndex', '-1'); + } + } + + var $dd = $input.closest('dd'); + if ($dd.attr('id') && $dd.attr('id').match(/button/)) { + return; + } + var $li = $input.closest('li'); + var $dt = $dd.prev(); + var $form = $dd.closest('form'); + + $form.find('dt, dd, dl, li').removeClass('active'); + $li.addClass('active'); + $dt.addClass('active'); + $dd.addClass('active'); + $dt.closest('dl').addClass('active'); + }, + + highlightFormErrors: function ($container) { + $container.find('dd ul.errors').each(function (idx, ul) { + var $ul = $(ul); + var $dd = $ul.closest('dd'); + var $dt = $dd.prev(); + + $dt.addClass('errors'); + $dd.addClass('errors'); + }); + }, + + toggleFieldset: function (ev) { + ev.stopPropagation(); + var $fieldset = $(ev.currentTarget).closest('fieldset'); + $fieldset.toggleClass('collapsed'); + this.fixFieldsetInfo($fieldset); + this.openedFieldsets[$fieldset.attr('id')] = ! $fieldset.hasClass('collapsed'); + } + }; + + window.incubatorComponentLoader.addComponent(new Web()); +})(window, jQuery); diff --git a/public/js/loader.js b/public/js/loader.js new file mode 100644 index 0000000..6cd3073 --- /dev/null +++ b/public/js/loader.js @@ -0,0 +1,54 @@ +(function(window, $) { + 'use strict'; + + var IncubatorComponentLoader = function () { + this.components = []; + }; + + IncubatorComponentLoader.prototype = { + initialize: function (icinga) { + this.icinga = icinga; + // Trigger module loading - always + icinga.module('incubator'); + $.each(this.components, function (_, component) { + component.initialize(icinga); + }); + icinga.logger.info('Incubator is ready'); + }, + + addComponent: function (component) { + this.components.push(component); + }, + + destroy: function () { + // Eventually: this.unbindEventHandlers(); + + $.each(this.components, function (_, component) { + if (typeof component.destroy === 'function') { + component.destroy(); + } + }); + + this.components = []; + this.icinga = null; + } + }; + + var startup; + var w = window; + function safeLaunch() + { + if (typeof(w.icinga) !== 'undefined' && w.icinga.initialized) { + clearInterval(startup); + w.incubatorComponentLoader.initialize(w.icinga); + } else { + console.log('Incubator module is still waiting for icinga'); + } + } + + $(document).ready(function () { + startup = setInterval(safeLaunch, 30); + safeLaunch(); + }); + w.incubatorComponentLoader = new IncubatorComponentLoader(); +})(window, jQuery); diff --git a/public/js/module.js b/public/js/module.js new file mode 100644 index 0000000..ff4086f --- /dev/null +++ b/public/js/module.js @@ -0,0 +1,19 @@ +(function(window, $) { + 'use strict'; + + var Incubator = function (icinga) { + this.icinga = icinga; + }; + + Incubator.prototype = { + initialize: function (icinga) { + }, + + destroy: function () { + window.incubatorComponentLoader.destroy(); + this.icinga = null; + } + }; + + Icinga.availableModules.incubator = Incubator; +})(window, jQuery); |