Merge branch 'feature/cleanup-forms-html2-5705'

resolves #5705
This commit is contained in:
Alexander Klimov 2014-03-06 12:33:15 +01:00
commit a633aecc99
14 changed files with 400 additions and 408 deletions

View File

@ -134,6 +134,8 @@ class DbBackendForm extends BaseBackendForm
*/ */
public function isValidAuthenticationBackend() public function isValidAuthenticationBackend()
{ {
// @TODO fix validation of authentication backends (AK #5712)
return true;
try { try {
$name = $this->getBackendName(); $name = $this->getBackendName();
$dbBackend = new DbUserBackend( $dbBackend = new DbUserBackend(

View File

@ -114,10 +114,9 @@ class ReorderForm extends Form
array( array(
'type' => 'submit', 'type' => 'submit',
'escape' => false, 'escape' => false,
'class' => 'btn btn-cta btn-wide',
'value' => 'btn_' . $this->getBackendName() . '_reorder_up', 'value' => 'btn_' . $this->getBackendName() . '_reorder_up',
'name' => 'btn_' . $this->getBackendName() . '_reorder_up', 'name' => 'btn_' . $this->getBackendName() . '_reorder_up',
'label' => '<i class="icinga-icon-up"></i> Move up in authentication order', 'label' => '<img src="/icingaweb/img/icons/up.png" title="Move up in authentication order" />',
) )
); );
} }
@ -137,10 +136,9 @@ class ReorderForm extends Form
array( array(
'type' => 'submit', 'type' => 'submit',
'escape' => false, 'escape' => false,
'class' => 'btn btn-cta btn-wide',
'value' => 'btn_' . $this->getBackendName() . '_reorder_down', 'value' => 'btn_' . $this->getBackendName() . '_reorder_down',
'name' => 'btn_' . $this->getBackendName() . '_reorder_down', 'name' => 'btn_' . $this->getBackendName() . '_reorder_down',
'label' => '<i class="icinga-icon-down"></i> Move down in authentication order', 'label' => '<img src="/icingaweb/img/icons/down.png" title="Move down in authentication order" />',
) )
); );

View File

@ -397,8 +397,7 @@ class GeneralForm extends Form
'type' => 'submit', 'type' => 'submit',
'escape' => false, 'escape' => false,
'value' => '1', 'value' => '1',
'class' => 'btn btn-cta btn-common', 'label' => '<img src="/icingaweb/img/icons/save.png" title="Save Changes" /> Save Changes'
'label' => '<i class="icinga-icon-save"></i> Save Changes'
) )
); );
} }

View File

@ -12,35 +12,33 @@ $createDbBackend = $this->href('/config/createAuthenticationBackend', array('typ
<?= $this->messageBox->render() ?> <?= $this->messageBox->render() ?>
<?php endif ?> <?php endif ?>
<div class="panel panel-default"> <h1>Create Authentication Provider</h1>
<div class="panel-heading panel-title"> <p>
Create Authentication Provider <a href="<?= $createLdapBackend ?>"><?= $this->img('img/icons/create.png'); ?> Create A New LDAP Authentication Backend</a>
</div>
<div class="panel-body">
<a href="<?= $createLdapBackend ?>"><i class="icinga-icon-create"></i> Create A New LDAP Authentication Backend</a><br/>
<a href="<?= $createDbBackend ?>"><i class="icinga-icon-create"></i> Create A New DB Authentication Backend</a>
</div>
</div>
<?php foreach ($this->backends as $backend): ?>
<div class="panel panel-default">
<div class="panel-heading panel-title">
Backend <?= $this->escape($backend->name); ?>
<br /> <br />
<a href="<?= $createDbBackend ?>"><?= $this->img('img/icons/create.png'); ?> Create A New DB Authentication Backend</a>
</p>
<table class="configTable">
<?php foreach ($this->backends as $backend): ?>
<tr>
<td class="configTable">
<div>
<b>Backend:</b>&ensp;<?= $this->escape($backend->name); ?>
</div>
<div class="config-form-buttons">
<div class="config-form-group">
<?= $backend->reorderForm; ?> <?= $backend->reorderForm; ?>
</div> </div>
<div class="panel-body">
<a href="<?= $this->href('config/editAuthenticationBackend', array('auth_backend' => $backend->name));?>"> <a href="<?= $this->href('config/editAuthenticationBackend', array('auth_backend' => $backend->name));?>">
<i class="icinga-icon-edit"></i> Edit This Authentication Provider <?= $this->img('img/icons/edit.png'); ?> Edit</a>&emsp;
</a>
<br/>
<?php if (count($this->backends) > 1): ?> <?php if (count($this->backends) > 1): ?>
<a href="<?= $this->href('config/removeAuthenticationBackend', array('auth_backend' => $backend->name));?>"> <a href="<?= $this->href('config/removeAuthenticationBackend', array('auth_backend' => $backend->name));?>">
<i class="icinga-icon-remove"></i> Remove This Authentication Provider <?= $this->img('img/icons/remove.png'); ?> Remove</a>&emsp;
</a>
<br/>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </td>
</tr>
<?php endforeach; ?> <?php endforeach; ?>
</table>
</div> </div>

View File

@ -8,7 +8,7 @@
<?php endif ?> <?php endif ?>
<?php if ($this->form->getErrorMessages()): ?> <?php if ($this->form->getErrorMessages()): ?>
<div class="alert alert-danger"> <div>
<?php foreach ($this->form->getErrorMessages() as $error): ?> <?php foreach ($this->form->getErrorMessages() as $error): ?>
<?= $this->escape($error); ?><br/> <?= $this->escape($error); ?><br/>
<?php endforeach; ?> <?php endforeach; ?>

View File

@ -10,14 +10,14 @@
<?php endif ?> <?php endif ?>
<?php if ($this->successMessage): ?> <?php if ($this->successMessage): ?>
<div class="alert alert-success"> <div>
<i class="icinga-icon-success"></i> <i class="icinga-icon-success"></i>
<strong><?= $this->escape($this->successMessage); ?></strong> <strong><?= $this->escape($this->successMessage); ?></strong>
</div> </div>
<?php endif; ?> <?php endif; ?>
<?php if (!empty($errors)) : ?> <?php if (!empty($errors)) : ?>
<div class="alert alert-danger"> <div>
<h4>Errors occured when trying to save the project.</h4> <h4>Errors occured when trying to save the project.</h4>
<p> <p>
The following errors occured when trying to save the configuration: The following errors occured when trying to save the configuration:

View File

@ -5,7 +5,7 @@
?> ?>
<?= $this->tabs->render($this); ?> <?= $this->tabs->render($this); ?>
<br/> <br/>
<div class="alert alert-error"> <div>
<h1>Could not <?= $action; ?> module "<?= $moduleName; ?>"</h1> <h1>Could not <?= $action; ?> module "<?= $moduleName; ?>"</h1>
<p> <p>
While operation the following error occurred: While operation the following error occurred:

View File

@ -1,4 +1,4 @@
<table class="table table-bordered" > <table >
<thead> <thead>
<tr style="text-align:left"> <tr style="text-align:left">
<th width="70%">Module</th> <th width="70%">Module</th>

View File

@ -11,39 +11,27 @@ $createResource = $this->href('/config/createresource');
<?= $this->messageBox->render() ?> <?= $this->messageBox->render() ?>
<?php endif ?> <?php endif ?>
<div class="panel panel-default"> <h1>Create Resource</h1>
<div class="panel-heading panel-title"> <p><a href="<?= $createResource ?>"><?= $this->img('img/icons/create.png'); ?> Create A New Resource</a></p>
Create Resource
</div>
<div class="panel-body">
<a href="<?= $createResource ?>"><i class="icinga-icon-create"></i> Create A New Resource</a><br/>
</div>
</div>
<table class="configTable">
<?php foreach ($this->resources as $name => $resource): ?> <?php foreach ($this->resources as $name => $resource): ?>
<div class="panel panel-default"> <tr>
<td class="configTable">
<div class="panel-heading panel-title"> <div>
<b>Resource: </b> <?= $this->escape($name); ?> <b>Resource:</b>&ensp;<?= $this->escape($name); ?>
<br/>
</div> </div>
<div class="panel-body"> <div>
<a href="<?= $this->href('config/editresource', array('resource' => $name));?>"> <a href="<?= $this->href('config/editresource', array('resource' => $name));?>">
<i class="icinga-icon-edit"></i> Edit This Resource <?= $this->img('img/icons/edit.png'); ?> Edit</a>&emsp;
</a>
<br/>
<?php if (count($this->resources) > 1): ?> <?php if (count($this->resources) > 1): ?>
<a href="<?= $this->href('config/removeresource', array('resource' => $name));?>"> <a href="<?= $this->href('config/removeresource', array('resource' => $name));?>">
<i class="icinga-icon-remove"></i> Remove This Resource <?= $this->img('img/icons/remove.png'); ?> Remove</a>&emsp;
</a>
<br/>
<?php endif; ?> <?php endif; ?>
</div>
</div> </div>
</td>
</tr>
<?php endforeach; ?> <?php endforeach; ?>
</table>
</div> </div>

View File

@ -8,7 +8,7 @@
<?php endif ?> <?php endif ?>
<?php if ($this->form->getErrorMessages()): ?> <?php if ($this->form->getErrorMessages()): ?>
<div class="alert alert-danger"> <div>
<?php foreach ($this->form->getErrorMessages() as $error): ?> <?php foreach ($this->form->getErrorMessages() as $error): ?>
<?= $this->escape($error); ?><br/> <?= $this->escape($error); ?><br/>
<?php endforeach; ?> <?php endforeach; ?>

View File

@ -2,7 +2,7 @@
<br/> <br/>
<div class="alert alert-error"> <div>
<h4><i>WARNING ICON</i>Saving "<?= $this->escape($this->file); ?>.ini" Failed</h4> <h4><i>WARNING ICON</i>Saving "<?= $this->escape($this->file); ?>.ini" Failed</h4>
<br/> <br/>
<p> <p>

View File

@ -1,56 +1,66 @@
<?php use Icinga\Web\Url; ?> <?php use Icinga\Web\Url; ?>
<div class="controls">
<?= $this->tabs->render($this); ?> <?= $this->tabs->render($this); ?>
</div>
<h3>Monitoring Backends</h3> <div class="content">
<h1>Monitoring Backends</h1>
<?php if (isset($this->messageBox)): ?> <?php if (isset($this->messageBox)): ?>
<?= $this->messageBox->render() ?> <?= $this->messageBox->render() ?>
<?php endif ?> <?php endif ?>
<div> <p>
<a href="<?= Url::fromPath('/monitoring/config/createbackend')->getAbsoluteUrl();?>"> <a href="<?= Url::fromPath('/monitoring/config/createbackend')->getAbsoluteUrl();?>">
<?= $this->img('img/icons/create.png') ?> Create New Monitoring Backend <?= $this->img('img/icons/create.png'); ?> Create New Monitoring Backend
</a> </a>
</div> </p>
<br/>
<table class="configTable">
<?php foreach ($this->backends as $backendName => $config): ?> <?php foreach ($this->backends as $backendName => $config): ?>
<div> <tr>
<?php $removeUrl = Url::fromPath('/monitoring/config/removebackend', array('backend' => $backendName)); ?> <td class="configTable">
<?php $editUrl = Url::fromPath('/monitoring/config/editbackend', array('backend' => $backendName)); ?> <?php
$removeUrl = Url::fromPath('/monitoring/config/removebackend', array('backend' => $backendName));
$editUrl = Url::fromPath('/monitoring/config/editbackend', array('backend' => $backendName));
?>
<b><?= $this->escape($backendName); ?></b> <b><?= $this->escape($backendName); ?></b>
<small>(Type: <?= $this->escape($config['type'] === 'ido' ? 'IDO' : ucfirst($config['type'])); ?>)</small> <small>(Type: <?= $this->escape($config['type'] === 'ido' ? 'IDO' : ucfirst($config['type'])); ?>)</small>
<div> <div>
<a href="<?= $removeUrl; ?>"><i class="icinga-icon-remove"></i> Remove This Backend</a><br/> <a href="<?= $removeUrl; ?>"><?= $this->img('img/icons/remove.png'); ?> Remove</a>&emsp;
<a href="<?= $editUrl; ?>"><i class="icinga-icon-edit"></i> Edit This Backend</a> <a href="<?= $editUrl; ?>"><?= $this->img('img/icons/edit.png'); ?> Edit</a>
</div> </div>
</div> </td>
<br/> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</table>
<br/> <h1>Monitoring Instances</h1>
<h3>Monitoring Instances</h3> <p>
<div>
<a href="<?= Url::fromPath('/monitoring/config/createinstance')->getAbsoluteUrl();?>"> <a href="<?= Url::fromPath('/monitoring/config/createinstance')->getAbsoluteUrl();?>">
<i class="icinga-icon-create"></i> Create New Instance <?= $this->img('img/icons/create.png'); ?> Create New Instance
</a> </a>
</div> </p>
<br/> <table class="configTable">
<?php foreach ($this->instances as $instanceName => $config): ?> <?php foreach ($this->instances as $instanceName => $config): ?>
<?php $removeUrl = Url::fromPath('/monitoring/config/removeinstance', array('instance' => $instanceName)); ?> <tr>
<?php $editUrl = Url::fromPath('/monitoring/config/editinstance', array('instance' => $instanceName)); ?> <td class="configTable">
<?php
$removeUrl = Url::fromPath('/monitoring/config/removeinstance', array('instance' => $instanceName));
$editUrl = Url::fromPath('/monitoring/config/editinstance', array('instance' => $instanceName));
?>
<div> <div>
<b><?= $this->escape($instanceName); ?></b> <b><?= $this->escape($instanceName); ?></b>
<small>(Type: <?= isset($config['host']) ? 'Remote' : 'Local'; ?>)</small> <small>(Type: <?= isset($config['host']) ? 'Remote' : 'Local'; ?>)</small>
<div> <div>
<a href="<?= $removeUrl; ?>"><i class="icinga-icon-remove"></i> Remove This Instance</a><br/> <a href="<?= $removeUrl; ?>"><?= $this->img('img/icons/remove.png'); ?> Remove</a>&emsp;
<a href="<?= $editUrl; ?>"><i class="icinga-icon-edit"></i> Edit This Instance</a> <a href="<?= $editUrl; ?>"><?= $this->img('img/icons/edit.png'); ?> Edit</a>
</div> </div>
</div> </div>
<br/> </td>
</tr>
<?php endforeach; ?> <?php endforeach; ?>
</table>
</div>

View File

@ -1,4 +1,24 @@
div.config-form-buttons {
margin-top: 5px;
}
table.configTable {
border-spacing: 15px;
border-collapse: separate;
}
td.configTable {
border: solid;
border-width: thin;
padding: 10px;
min-width: 300px;
}
div.config-form-group {
float: right;
}
.form-group { .form-group {
margin-bottom: 1em; margin-bottom: 1em;
} }
@ -23,7 +43,6 @@ input, select {
select { select {
/* https://bugzilla.mozilla.org/show_bug.cgi?id=649849 */ /* https://bugzilla.mozilla.org/show_bug.cgi?id=649849 */
-moz-appearance: none; -moz-appearance: none;
text-indent: 5px;
padding-right: 5px; padding-right: 5px;
text-overflow: ''; text-overflow: '';
-webkit-appearance: none; -webkit-appearance: none;

View File

@ -1,11 +1,4 @@
/** (function(Icinga) {
* Icinga.Events
*
* Event handlers
*/
(function (Icinga, $) {
'use strict';
Icinga.Events = function(icinga) { Icinga.Events = function(icinga) {
this.icinga = icinga; this.icinga = icinga;
@ -16,23 +9,21 @@
/** /**
* Icinga will call our initialize() function once it's ready * Icinga will call our initialize() function once it's ready
*/ */
initialize: function () { initialize: function()
{
this.applyGlobalDefaults(); this.applyGlobalDefaults();
this.applyHandlers($('#layout'));
this.icinga.ui.prepareContainers(); this.icinga.ui.prepareContainers();
}, },
// TODO: What's this? // TODO: What's this?
applyHandlers: function (el) { applyHandlers: function(el)
{
var icinga = this.icinga; var icinga = this.icinga;
$('.dashboard > div', el).each(function(idx, el) { $('.dashboard > div', el).each(function(idx, el) {
var url = $(el).attr('data-icinga-url'); var url = $(el).attr('data-icinga-url');
if (typeof url === 'undefined') return; if (typeof url === 'undefined') return;
icinga.loader.loadUrl(url, $(el)).autorefresh = true; icinga.loader.loadUrl(url, $(el)).autorefresh = true;
}); });
// Set first links href in a action table tr as row href: // Set first links href in a action table tr as row href:
$('table.action tr', el).each(function(idx, el) { $('table.action tr', el).each(function(idx, el) {
var $a = $('a[href]', el).first(); var $a = $('a[href]', el).first();
@ -40,9 +31,8 @@
$(el).attr('href', $a.attr('href')); $(el).attr('href', $a.attr('href'));
} }
}); });
$('.icinga-module', el).each(function(idx, mod) { $('.icinga-module', el).each(function(idx, mod) {
var $mod = $(mod); $mod = $(mod);
var moduleName = $mod.data('icinga-module'); var moduleName = $mod.data('icinga-module');
if (icinga.hasModule(moduleName)) { if (icinga.hasModule(moduleName)) {
var module = icinga.module(moduleName); var module = icinga.module(moduleName);
@ -50,22 +40,21 @@
} }
}); });
$('input.autofocus', el).focus();
$('.inlinepie', el).sparkline('html', { $('.inlinepie', el).sparkline('html', {
type: 'pie', type: 'pie',
sliceColors: ['#44bb77', '#ffaa44', '#ff5566', '#dcd'], sliceColors: ['#44bb77', '#ffaa44', '#ff5566', '#dcd'],
width: '2em', width: '2em',
height: '2em', height: '2em',
}); });
},
},
/** /**
* Global default event handlers * Global default event handlers
*/ */
applyGlobalDefaults: function () { applyGlobalDefaults: function()
{
// We catch resize events // We catch resize events
$(window).on('resize', { self: this.icinga.ui }, this.icinga.ui.onWindowResize); $(window).on('resize', { self: this }, this.onWindowResize);
// Destroy Icinga, clean up and interrupt pending requests on unload // Destroy Icinga, clean up and interrupt pending requests on unload
$( window ).on('unload', { self: this }, this.onUnload); $( window ).on('unload', { self: this }, this.onUnload);
@ -86,10 +75,7 @@
// We support an 'autosubmit' class on dropdown form elements // We support an 'autosubmit' class on dropdown form elements
$(document).on('change', 'form select.autosubmit', { self: this }, this.submitForm); $(document).on('change', 'form select.autosubmit', { self: this }, this.submitForm);
$(document).on('keyup', '#menu input.search', {self: this}, this.submitForm); $(window).on('popstate', { self: this }, this.historyChanged);
$(document).on('mouseenter', '.historycolorgrid td', this.historycolorgridHover);
$(document).on('mouseleave', '.historycolorgrid td', this.historycolorgidUnhover);
// TBD: a global autocompletion handler // TBD: a global autocompletion handler
// $(document).on('keyup', 'form.auto input', this.formChangeDelayed); // $(document).on('keyup', 'form.auto input', this.formChangeDelayed);
@ -97,32 +83,50 @@
// $(document).on('change', 'form.auto select', this.submitForm); // $(document).on('change', 'form.auto select', this.submitForm);
}, },
onUnload: function (event) { onUnload: function(event)
{
var icinga = event.data.self.icinga; var icinga = event.data.self.icinga;
icinga.logger.info('Unloading Icinga'); icinga.logger.info('Unloading Icinga');
icinga.destroy(); icinga.destroy();
}, },
historyChanged: function(event)
{
var icinga = event.data.self.icinga;
if (event.originalEvent.state === null) {
icinga.logger.debug('No more history steps available');
} else {
icinga.logger.debug(event.originalEvent.state);
}
icinga.loader.loadUrl(
document.location.pathname + document.location.search,
$('#col1')
).historyTriggered = true;
},
/** /**
* A scroll event happened in one of our containers * Our window got resized, let's fix our UI
*/ */
onContainerScroll: function (event) { onWindowResize: function(event)
// Ugly. And PLEASE, not so often {
var icinga = event.data.self.icinga;
icinga.ui.fixControls(); icinga.ui.fixControls();
}, },
historycolorgridHover: function () { /**
$(this).addClass('hover'); * A scroll event happened in one of our containers
}, */
onContainerScroll: function(event)
historycolorgidUnhover: function() { {
$(this).removeClass('hover'); // Yet ugly. And PLEASE, not so often
icinga.ui.fixControls();
}, },
/** /**
* *
*/ */
submitForm: function (event) { submitForm: function (event)
{
var icinga = event.data.self.icinga; var icinga = event.data.self.icinga;
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
@ -138,66 +142,38 @@
icinga.logger.debug('Submitting form: ' + method + ' ' + url); icinga.logger.debug('Submitting form: ' + method + ' ' + url);
// We should move this to a generic target-finder: // We should move this to a generic target-finder:
var $target = null; var $target = $form.closest('.container');
if ($form.closest('[data-base-target]').length) { if ($target.length == 0) {
$target = $( $target = $('#body');
'#' + $form.closest('[data-base-target]').data('baseTarget')
);
} else if ($form.closest('.container').length) {
$target = $form.closest('.container');
} else {
icinga.logger.error('No form target found, stopping here');
return false;
} }
icinga.loader.loadUrl(url, $target, data, method); icinga.loader.loadUrl(url, $target, data, method);
// TODO: Do we really need to return false with stop/preventDefault? // TODO: Do we really need to return false with stop/preventDefault?
return false; return false;
}, },
layout1col: function () {
if (! $('#layout').hasClass('twocols')) { return; }
var $col2 = $('#col2');
icinga.logger.debug('Switching to single col');
$('#layout').removeClass('twocols');
$col2.removeAttr('data-icinga-url');
$col2.removeAttr('data-icinga-refresh');
$col2.removeData('icingaUrl');
$col2.removeData('icingaRefresh');
this.icinga.loader.stopPendingRequestsFor($col2);
$col2.html('');
this.icinga.ui.fixControls();
},
layout2col: function () {
if ($('#layout').hasClass('twocols')) { return; }
icinga.logger.debug('Switching to double col');
$('#layout').addClass('twocols');
this.icinga.ui.fixControls();
},
/** /**
* Someone clicked a link or tr[href] * Someone clicked a link or tr[href]
*/ */
linkClicked: function (event) { linkClicked: function(event)
{
var icinga = event.data.self.icinga; var icinga = event.data.self.icinga;
var $a = $(this); var $a = $(this);
var href = $a.attr('href'); var href = $a.attr('href');
var $li;
var targetId;
if ($a.attr('target') === '_blank') { if ($a.attr('target') === '_blank') {
return true; return true;
} }
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
// If link is hash tag...
if (href === '#') { if (href === '#') {
if ($a.closest('#menu')) { if ($a.closest('#menu')) {
$li = $a.closest('li'); var $li = $a.closest('li');
$('#menu .active').removeClass('active'); $li.siblings('li.active').removeClass('active');
$li.addClass('active'); $li.addClass('active');
} }
return; return;
@ -207,20 +183,19 @@
if ($container.length) { if ($container.length) {
$target = $container; $target = $container;
} }
// If link is hash tag...
if ($a.closest('table.action').length) { if ($a.closest('table.action').length) {
$target = $('#col2'); $target = $('#col2');
icinga.events.layout2col(); $('#layout').addClass('twocols');
icinga.ui.fixControls();
} }
if ($a.closest('[data-base-target]').length) { if ($a.closest('[data-base-target]').length) {
targetId = $a.closest('[data-base-target]').data('baseTarget'); $target = $('#' + $a.closest('[data-base-target]').data('baseTarget'));
$target = $('#' + targetId); $('#layout').addClass('twocols');
if (targetId === 'col2') { icinga.ui.fixControls();
icinga.events.layout2col();
}
} }
if ($a.closest('.tree').length) { if ($a.closest('.tree').length) {
$li = $a.closest('li'); var $li = $a.closest('li');
if ($li.find('li').length) { if ($li.find('li').length) {
if ($li.hasClass('collapsed')) { if ($li.hasClass('collapsed')) {
$li.removeClass('collapsed'); $li.removeClass('collapsed');
@ -231,41 +206,46 @@
return false; return false;
} else { } else {
$target = $('#col2'); $target = $('#col2');
icinga.events.layout2col(); $('#layout').addClass('twocols');
icinga.ui.fixControls();
} }
} }
icinga.loader.loadUrl(href, $target); icinga.loader.loadUrl(href, $target);
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
if ($a.closest('#menu').length) { if ($a.closest('#menu').length) {
icinga.events.layout1col(); $('#layout').removeClass('twocols');
$('#col2').html('<ul class="tabs"></ul>');
icinga.ui.fixControls();
return false; return false;
} }
if ($a.closest('table').length) {
if ($a.closest('table.action').length) {
if ($('#layout').hasClass('twocols')) { if ($('#layout').hasClass('twocols')) {
if ($target.attr('id') === 'col2') { if ($target.attr('id') === 'col2') return;
return; icinga.logger.debug('Switching to single col');
} $('#layout').removeClass('twocols');
icinga.events.layout1col(); icinga.ui.fixControls();
} else { } else {
icinga.events.layout2col(); icinga.logger.debug('Switching to double col');
$('#layout').addClass('twocols');
icinga.ui.fixControls();
} }
return false; return false;
} }
}, },
/* /*
hrefIsHashtag: function(href) { hrefIsHashtag: function(href)
{
// WARNING: IE gives full URL :( // WARNING: IE gives full URL :(
// Also it doesn't support negativ indexes in substr // Also it doesn't support negativ indexes in substr
return href.substr(href.length - 1, 1) == '#'; return href.substr(href.length - 1, 1) == '#';
}, },
*/ */
unbindGlobalHandlers: function () { unbindGlobalHandlers: function()
{
$(window).off('popstate', this.historyChanged);
$(window).off('resize', this.onWindowResize); $(window).off('resize', this.onWindowResize);
$(window).off('unload', this.onUnload); $(window).off('unload', this.onUnload);
$(window).off('beforeunload', this.onUnload); $(window).off('beforeunload', this.onUnload);
@ -274,8 +254,6 @@
$(document).off('click', 'tr[href]', this.linkClicked); $(document).off('click', 'tr[href]', this.linkClicked);
$(document).off('submit', 'form', this.submitForm); $(document).off('submit', 'form', this.submitForm);
$(document).off('change', 'form select.autosubmit', this.submitForm); $(document).off('change', 'form select.autosubmit', this.submitForm);
$(document).off('mouseenter', '.historycolorgrid td', this.historycolorgridHover);
$(document).off('mouseenter', '.historycolorgrid td', this.historycolorgidUnhover);
}, },
destroy: function() { destroy: function() {
@ -285,4 +263,4 @@
} }
}; };
}(Icinga, jQuery)); }(Icinga));