123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257 |
- (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);
|