258 lines
8.0 KiB
JavaScript
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);
|