Bachir Soussi Chiadmi 1bc61b12ad first import
2015-04-08 11:40:19 +02:00

258 lines
8.0 KiB
JavaScript

(function($) {
Drupal.behaviors.adminToolbar = {};
Drupal.behaviors.adminToolbar.attach = function(context) {
$('#admin-toolbar:not(.processed)').each(function() {
var toolbar = $(this);
toolbar.addClass('processed');
// Set initial toolbar state.
Drupal.adminToolbar.init(toolbar);
// Admin toggle.
$('.admin-toggle', this).click(function() { Drupal.adminToolbar.toggle(toolbar); });
// Admin tabs.
$('div.admin-tab', this).click(function() { Drupal.adminToolbar.tab(toolbar, $(this), true); });
$(document).bind('drupalOverlayLoad', {adminToolbar: Drupal.adminToolbar, toolbar: toolbar}, function(event) {
var body = $(document.body);
var adminToolbar = event.data.adminToolbar;
var expand = parseInt(adminToolbar.getState('expanded'));
if (!expand) {
return;
}
var toolbar = event.data.toolbar;
var size = adminToolbar.SIZE + 'px';
adminToolbar.setOverlayState(toolbar, toolbar.is('.vertical'), expand);
});
});
$('div.admin-panes:not(.processed)').each(function() {
var panes = $(this);
panes.addClass('processed');
$('h2.admin-pane-title a').click(function() {
var target = $(this).attr('href').split('#')[1];
var panes = $(this).parents('div.admin-panes')[0];
$('.admin-pane-active', panes).removeClass('admin-pane-active');
$('div.admin-pane.' + target, panes).addClass('admin-pane-active');
$(this).addClass('admin-pane-active');
return false;
});
});
};
/**
* Admin toolbar methods.
*/
Drupal.adminToolbar = {};
/**
* The width or height of the toolbar, depending on orientation.
*/
Drupal.adminToolbar.SIZE = 260;
/**
* Set the initial state of the toolbar.
*/
Drupal.adminToolbar.init = function (toolbar) {
// Set expanded state.
var expanded = this.getState('expanded');
if (!$(document.body).hasClass('admin-ah')) {
if (expanded == 1) {
$(document.body).addClass('admin-expanded');
}
}
// Set default tab state.
var target = this.getState('activeTab');
if (target) {
if ($('div.admin-tab.'+target).size() > 0) {
var tab = $('div.admin-tab.'+target);
this.tab(toolbar, tab, false);
}
}
// Add layout class to body.
var classes = toolbar.attr('class').split(' ');
if (classes[0] === 'nw' || classes[0] === 'ne' || classes[0] === 'se' || classes[0] === 'sw' ) {
$(document.body).addClass('admin-'+classes[0]);
}
if (classes[1] === 'horizontal' || classes[1] === 'vertical') {
$(document.body).addClass('admin-'+classes[1]);
}
if (classes[2] === 'df' || classes[2] === 'ah') {
$(document.body).addClass('admin-'+classes[2]);
}
var vertical = true;
if(classes[1] === 'horizontal') {
vertical = false;
}
};
/**
* Set the active tab.
*/
Drupal.adminToolbar.tab = function(toolbar, tab, animate) {
if (!tab.is('.admin-tab-active')) {
var target = $('span', tab).attr('id').split('admin-tab-')[1];
// Vertical
// Use animations to make the vertical tab transition a bit smoother.
if (toolbar.is('.vertical') && animate) {
$('.admin-tab-active', toolbar).fadeOut('fast');
$(tab).fadeOut('fast', function() {
$('.admin-tab-active', toolbar).fadeIn('fast').removeClass('admin-tab-active');
$(tab).slideDown('fast').addClass('admin-tab-active');
Drupal.adminToolbar.setState('activeTab', target);
});
}
// Horizontal
// Tabs don't need animation assistance.
else {
$('div.admin-tab', toolbar).removeClass('admin-tab-active');
$(tab, toolbar).addClass('admin-tab-active');
Drupal.adminToolbar.setState('activeTab', target);
}
// Blocks
$('div.admin-block.admin-active', toolbar).removeClass('admin-active');
$('#block-'+target, toolbar).addClass('admin-active');
}
return false;
};
/**
* Set the width/height of the of the overlay body based on the state admin toolbar.
*
* @param vertical
* A boolean indicating if the toolbar is vertical.
* @param expanded
* A boolean indicating if the toolbar is expanded.
*/
Drupal.adminToolbar.setOverlayState = function(toolbar, vertical, expanded) {
var margin,
size = this.SIZE + 65;
if (!expanded) {
size = 0;
}
margin = {marginLeft: size+'px'};
if (vertical) {
if (toolbar.is('.ne') || toolbar.is('.se')) {
margin = {marginRight: size+'px'}
}
}
else {
if (toolbar.is('.ne') || toolbar.is('.nw')) {
margin = {marginTop: size+'px'};
}
else {
margin = {marginBottom: size+'px'};
}
}
$('iframe.overlay-element').contents().find('body').animate(margin, 'fast');
};
/**
* Toggle the toolbar open or closed.
*/
Drupal.adminToolbar.toggle = function (toolbar) {
var size = '0px';
if ($(document.body).is('.admin-expanded')) {
if ($(toolbar).is('.vertical')) {
$('div.admin-blocks', toolbar).animate({width:size}, 'fast');
if ($(toolbar).is('.nw') || $(toolbar).is('.sw')) {
$(document.body).animate({marginLeft:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
else {
$(document.body).animate({marginRight:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
this.setOverlayState(toolbar, true, false);
}
else {
$('div.admin-blocks', toolbar).animate({height:size}, 'fast');
if ($(toolbar).is('.nw') || $(toolbar).is('.ne')) {
$(document.body).animate({marginTop:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
else {
$(document.body).animate({marginBottom:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
this.setOverlayState(toolbar, false, false);
}
this.setState('expanded', 0);
}
else {
size = this.SIZE + 'px';
if ($(toolbar).is('.vertical')) {
$('div.admin-blocks', toolbar).animate({width:size}, 'fast');
if ($(toolbar).is('.nw') || $(toolbar).is('.sw')) {
$(document.body).animate({marginLeft:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
else {
$(document.body).animate({marginRight:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
this.setOverlayState(toolbar, true, true);
}
else {
$('div.admin-blocks', toolbar).animate({height:size}, 'fast');
if ($(toolbar).is('.nw') || $(toolbar).is('.ne')) {
$(document.body).animate({marginTop:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
else {
$(document.body).animate({marginBottom:size}, 'fast', function() { $(this).toggleClass('admin-expanded'); });
}
this.setOverlayState(toolbar, false, true);
}
if ($(document.body).hasClass('admin-ah')) {
this.setState('expanded', 0);
}
else {
this.setState('expanded', 1);
}
}
};
/**
* Get the value of a cookie variable.
*/
Drupal.adminToolbar.getState = function(key) {
if (!Drupal.adminToolbar.state) {
Drupal.adminToolbar.state = {};
var cookie = $.cookie('DrupalAdminToolbar');
var query = cookie ? cookie.split('&') : [];
if (query) {
for (var i in query) {
// Extra check to avoid js errors in Chrome, IE and Safari when
// combined with JS like twitter's widget.js.
// See http://drupal.org/node/798764.
if (typeof(query[i]) == 'string' && query[i].indexOf('=') != -1) {
var values = query[i].split('=');
if (values.length === 2) {
Drupal.adminToolbar.state[values[0]] = values[1];
}
}
}
}
}
return Drupal.adminToolbar.state[key] ? Drupal.adminToolbar.state[key] : false;
};
/**
* Set the value of a cookie variable.
*/
Drupal.adminToolbar.setState = function(key, value) {
var existing = Drupal.adminToolbar.getState(key);
if (existing != value) {
Drupal.adminToolbar.state[key] = value;
var query = [];
for (var i in Drupal.adminToolbar.state) {
query.push(i + '=' + Drupal.adminToolbar.state[i]);
}
$.cookie('DrupalAdminToolbar', query.join('&'), {expires: 7, path: '/'});
}
};
})(jQuery);