summaryrefslogtreecommitdiffstats
path: root/public/js/module.js
diff options
context:
space:
mode:
Diffstat (limited to 'public/js/module.js')
-rw-r--r--public/js/module.js91
1 files changed, 91 insertions, 0 deletions
diff --git a/public/js/module.js b/public/js/module.js
new file mode 100644
index 0000000..49816bd
--- /dev/null
+++ b/public/js/module.js
@@ -0,0 +1,91 @@
+;(function (Icinga) {
+
+ var Toplevelview = function (module) {
+ this.module = module;
+ this.initialize();
+ };
+
+ Toplevelview.prototype = {
+ initialize: function () {
+ var addCSSRule = function (sheet, selector, rules, index) {
+ if ('insertRule' in sheet) {
+ sheet.insertRule(selector + '{' + rules + '}', index);
+ } else if ('addRule' in sheet) {
+ sheet.addRule(selector, rules, index);
+ } else {
+ Icinga.module.icinga.logger.debug('Can\'t insert CSS rule');
+ }
+ };
+
+ var sheet = (function () {
+ var style = document.createElement('style');
+ // WebKit hack
+ style.appendChild(document.createTextNode(''));
+ document.head.appendChild(style);
+ return style.sheet;
+ })();
+
+ addCSSRule(
+ sheet,
+ '#layout.twocols.wide-layout #col1.module-toplevelview,'
+ + '#layout.twocols.wide-layout #col1.module-toplevelview ~ #col2',
+ 'width: 50%',
+ 0
+ );
+
+ this.module.on('click', '.tlv-view-tree .tlv-tree-node', this.processTreeNodeClick);
+ this.module.on('click', 'div[href].action', this.buttonClick, this);
+ this.module.on('rendered', this.rendered);
+ },
+
+ rendered: function (ev) {
+ this.collapseOnLoad(ev);
+ var $container = $(ev.currentTarget);
+ $container.find('.codemirror').each(function (i, el) {
+ var mode = el.getAttribute('data-codemirror-mode');
+ var editor = CodeMirror.fromTextArea(el, {
+ lineNumbers: true,
+ mode: mode
+ });
+ // avoid entering tab chars
+ editor.setOption('extraKeys', {
+ Tab: function(cm) {
+ var spaces = new Array(cm.getOption('indentUnit') + 1).join(' ');
+ cm.replaceSelection(spaces);
+ },
+ 'Ctrl-F': 'findPersistent'
+ });
+ });
+ },
+
+ processTreeNodeClick: function (event) {
+ event.stopPropagation();
+ var $el = $(event.currentTarget);
+ var $parent = $el.parents('.tlv-tree-node');
+ var $all = $el.find('.tlv-tree-node');
+ if (($parent.length === 0 && $all.hasClass('tlv-collapsed')) || $el.hasClass('tlv-collapsed')) {
+ $el.removeClass('tlv-collapsed');
+ $all.removeClass('tlv-collapsed');
+ } else {
+ $el.addClass('tlv-collapsed');
+ $all.addClass('tlv-collapsed');
+ }
+ },
+
+ collapseOnLoad: function (event) {
+ var $el = $(event.currentTarget);
+ $el.find('.tlv-view-tree .tlv-tree-node.tlv-collapsible.ok').addClass('tlv-collapsed');
+ },
+
+ buttonClick: function (event) {
+ event.stopPropagation();
+ var $el = $(event.currentTarget);
+ var $links = $el.find('a[href]');
+ if ($links.length > 0) {
+ $links[0].click();
+ }
+ }
+ };
+
+ Icinga.availableModules.toplevelview = Toplevelview;
+}(Icinga));