(function($) { Drupal.Collapsiblock = Drupal.Collapsiblock || {}; Drupal.behaviors.collapsiblock = { attach: function (context,settings) { var cookieData = Drupal.Collapsiblock.getCookieData(); var slidetype = settings.collapsiblock.slide_type; var defaultState = settings.collapsiblock.default_state; var slidespeed = parseInt(settings.collapsiblock.slide_speed); var title = settings.collapsiblock.block_title; var block = settings.collapsiblock.block; var block_content = settings.collapsiblock.block_content; $(block + ':not(.collapsiblock-processed)', context).addClass('collapsiblock-processed').each(function () { var id = this.id.replace(/_/g, '-'); var titleElt = $(title, this).not($('.content :header',this)); if (titleElt.size()) { titleElt = titleElt[0]; // Status values: 1 = not collapsible, 2 = collapsible and expanded, 3 = collapsible and collapsed, 4 = always collapsed var stat = settings.collapsiblock.blocks[id] ? settings.collapsiblock.blocks[id] : defaultState; if (stat == 1) { return; } titleElt.target = $(this).find(block_content); $(titleElt) .wrapInner('') .addClass('collapsiblock') .click(function (e) { var st = Drupal.Collapsiblock.getCookieData(); if ($(this).is('.collapsiblockCollapsed')) { $(this).removeClass('collapsiblockCollapsed'); if (slidetype == 1) { $(this.target).slideDown(slidespeed).attr('aria-hidden', false); ; } else { $(this.target).animate({ height:'show', opacity:'show' }, slidespeed); } // Don't save cookie data if the block is always collapsed. if (stat != 4) { st[id] = 1; } } else { $(this).addClass('collapsiblockCollapsed'); if (slidetype == 1) { $(this.target).slideUp(slidespeed).attr('aria-hidden', true); } else { $(this.target).animate({ height:'hide', opacity:'hide' }, slidespeed); } // Don't save cookie data if the block is always collapsed. if (stat != 4) { st[id] = 0; } } // Stringify the object in JSON format for saving in the cookie. var cookieString = '{ '; var cookieParts = []; $.each(st, function (id, setting) { cookieParts[cookieParts.length] = ' "' + id + '": ' + setting; }); cookieString += cookieParts.join(', ') + ' }'; $.cookie('collapsiblock', cookieString, { path: settings.basePath }); e.preventDefault(); }); // Leave active blocks uncollapsed. If the block is expanded, do nothing. if (stat == 4 || (cookieData[id] == 0 || (stat == 3 && cookieData[id] == undefined)) && !$(this).find('a.active').size()) { // Allow block content to assign class 'collapsiblock-force-open' to it's content to force // itself to stay open. E.g. useful if block contains a form that was just ajaxly updated and should be visible if (titleElt.target.hasClass('collapsiblock-force-open') || titleElt.target.find('.collapsiblock-force-open').size() > 0) { return; } $(titleElt).addClass('collapsiblockCollapsed'); $(titleElt.target).hide(); } } }); } }; Drupal.Collapsiblock.getCookieData = function () { if ($.cookie) { var cookieString = $.cookie('collapsiblock'); return cookieString ? $.parseJSON(cookieString) : {}; } else { return ''; } }; })(jQuery); ; /*! Tinycon - A small library for manipulating the Favicon Tom Moor, http://tommoor.com Copyright (c) 2012 Tom Moor MIT Licensed @version 0.5 */ (function(){var Tinycon={};var currentFavicon=null;var originalFavicon=null;var originalTitle=document.title;var faviconImage=null;var canvas=null;var options={};var defaults={width:7,height:9,font:'10px arial',colour:'#ffffff',background:'#F03D25',fallback:true,abbreviate:true};var ua=(function(){var agent=navigator.userAgent.toLowerCase();return function(browser){return agent.indexOf(browser)!==-1}}());var browser={ie:ua('msie'),chrome:ua('chrome'),webkit:ua('chrome')||ua('safari'),safari:ua('safari')&&!ua('chrome'),mozilla:ua('mozilla')&&!ua('chrome')&&!ua('safari')};var getFaviconTag=function(){var links=document.getElementsByTagName('link');for(var i=0,len=links.length;i0)drawBubble(context,label,colour);refreshFavicon()};if(!src.match(/^data/)){faviconImage.crossOrigin='anonymous'}faviconImage.src=src};var updateTitle=function(label){if(options.fallback){if((label+'').length>0){document.title='('+label+') '+originalTitle}else{document.title=originalTitle}}};var drawBubble=function(context,label,colour){if(typeof label=='number'&&label>99&&options.abbreviate){label=abbreviateNumber(label)}var len=(label+'').length-1;var width=options.width+(6*len);var w=16-width;var h=16-options.height;context.font=(browser.webkit?'bold ':'')+options.font;context.fillStyle=options.background;context.strokeStyle=options.background;context.lineWidth=1;context.fillRect(w,h,width-1,options.height);context.beginPath();context.moveTo(w-0.5,h+1);context.lineTo(w-0.5,15);context.stroke();context.beginPath();context.moveTo(15.5,h+1);context.lineTo(15.5,15);context.stroke();context.beginPath();context.strokeStyle="rgba(0,0,0,0.3)";context.moveTo(w,16);context.lineTo(15,16);context.stroke();context.fillStyle=options.colour;context.textAlign="right";context.textBaseline="top";context.fillText(label,15,browser.mozilla?7:6)};var refreshFavicon=function(){if(!getCanvas().getContext)return;setFaviconTag(getCanvas().toDataURL())};var abbreviateNumber=function(label){var metricPrefixes=[['G',1000000000],['M',1000000],['k',1000]];for(var i=0;i=metricPrefixes[i][1]){label=round(label/metricPrefixes[i][1])+metricPrefixes[i][0];break}}return label};var round=function(value,precision){var number=new Number(value);return number.toFixed(precision)};Tinycon.setOptions=function(custom){options={};for(var key in defaults){options[key]=custom.hasOwnProperty(key)?custom[key]:defaults[key]}return this};Tinycon.setImage=function(url){currentFavicon=url;refreshFavicon();return this};Tinycon.setBubble=function(label,colour){label=label||'';drawFavicon(label,colour);return this};Tinycon.reset=function(){setFaviconTag(originalFavicon)};Tinycon.setOptions(defaults);window.Tinycon=Tinycon})(); ; (function ($) { Drupal.behaviors.environment_indicatorToolbar = { attach: function (context, settings) { if (typeof(Drupal.settings.environment_indicator) != 'undefined' && typeof(Drupal.settings.environment_indicator['toolbar-color']) != 'undefined') { var environment_name = Drupal.settings.environment_indicator['environment-indicator-name'], environment_color = Drupal.settings.environment_indicator['toolbar-color'], environment_text_color = Drupal.settings.environment_indicator['toolbar-text-color'], $name = $('
').addClass('environment-indicator-name-wrapper').html(environment_name); $('#toolbar div.toolbar-menu', context).once('environment_indicator').prepend($name); $('#toolbar div.toolbar-menu', context).css('background-color', environment_color); $('#toolbar div.toolbar-menu .item-list', context).css('background-color', changeColor(environment_color, 0.15, true)); $('#toolbar div.toolbar-menu ul li:not(.environment-switcher) a', context).css('background-color', environment_color).css('color', environment_text_color); $('#toolbar div.toolbar-drawer', context).css('background-color', changeColor(environment_color, 0.25)).find('ul li a').css('color', changeColor(environment_text_color, 0.25)); $('#toolbar div.toolbar-menu ul li a', context).hover(function () { $(this).css('background-color', changeColor(environment_color, 0.1)).css('color', changeColor(environment_text_color, 0.1)); }, function () { $(this).css('background-color', environment_color).css('color', environment_text_color); $('#toolbar div.toolbar-menu ul li.active-trail a', context).css('background-color', changeColor(environment_color, 0.1)).css('color', changeColor(environment_text_color, 0.1)); }); $('#toolbar div.toolbar-menu ul li.active-trail a', context).css('background-image', 'none').css('background-color', changeColor(environment_color, 0.1)).css('color', changeColor(environment_text_color, 0.1)); $('#toolbar div.toolbar-drawer ul li a', context).hover(function () { $(this).css('background-color', changeColor(environment_color, 0.1, true)).css('color', changeColor(environment_text_color, 0.1, true)); }, function () { $(this).css('background-color', changeColor(environment_color, 0.25)).css('color', changeColor(environment_text_color, 0.25)); $('#toolbar div.toolbar-drawer ul li.active-trail a', context).css('background-color', changeColor(environment_color, 0.1, true)).css('color', changeColor(environment_text_color, 0.1, true)); }); $('#toolbar div.toolbar-drawer ul li.active-trail a', context).css('background-image', 'none').css('background-color', changeColor(environment_color, 0.1, true)).css('color', changeColor(environment_text_color, 0.1, true)); // Move switcher bar to the top var $switcher = $('#toolbar .environment-switcher-container').parent().clone(); $('#toolbar .environment-switcher-container').parent().remove(); $('#toolbar').prepend($switcher); }; } }; Drupal.behaviors.environment_indicatorTinycon = { attach: function (context, settings) { if (typeof(Drupal.settings.environment_indicator) != 'undefined' && typeof(Drupal.settings.environment_indicator.addFavicon) != 'undefined' && Drupal.settings.environment_indicator.addFavicon) { //Draw favicon label Tinycon.setBubble(Drupal.settings.environment_indicator.faviconLabel); Tinycon.setOptions({ background: Drupal.settings.environment_indicator.faviconColor, colour: Drupal.settings.environment_indicator.faviconTextColor }); } } } Drupal.behaviors.environment_indicatorAdminMenu = { attach: function (context, settings) { if (typeof(Drupal.admin) != 'undefined' && typeof(Drupal.settings.environment_indicator) != 'undefined' && typeof(Drupal.settings.environment_indicator['toolbar-color']) != 'undefined') { // Add the restyling behavior to the admin menu behaviors. Drupal.admin.behaviors['environment_indicator'] = function (context, settings) { $('#admin-menu, #admin-menu-wrapper', context).css('background-color', Drupal.settings.environment_indicator['toolbar-color']); $('#admin-menu, #admin-menu-wrapper > ul > li:not(.admin-menu-account) > a', context).css('color', Drupal.settings.environment_indicator['toolbar-text-color']); $('#admin-menu .item-list', context).css('background-color', changeColor(Drupal.settings.environment_indicator['toolbar-color'], 0.15, true)); $('#admin-menu .item-list ul li:not(.environment-switcher) a', context).css('background-color', Drupal.settings.environment_indicator['toolbar-color']).css('color', Drupal.settings.environment_indicator['toolbar-text-color']); }; }; } }; Drupal.behaviors.environment_indicatorSwitcher = { attach: function (context, settings) { // Check that the links actually point to the current path, if not, fix them $('.environment-switcher a', context).live('click', function (e) { e.preventDefault(); var current_location = window.location; window.location.href = current_location.protocol + '//' + e.currentTarget.hostname + current_location.pathname + current_location.search + current_location.hash; }); $('#environment-indicator .environment-indicator-name, #toolbar .environment-indicator-name-wrapper', context).live('click', function () { $('#environment-indicator .item-list, #toolbar .item-list', context).slideToggle('fast'); }); $('#environment-indicator.position-top.fixed-yes').once(function () { $('body').css('margin-top', $('#environment-indicator.position-top.fixed-yes').height() + 'px'); }); $('#environment-indicator.position-bottom.fixed-yes').once(function () { $('body').css('margin-bottom', $('#environment-indicator.position-bottom.fixed-yes').height() + 'px'); }); } } Drupal.behaviors.environment_indicator_admin = { attach: function() { // Add the farbtastic tie-in if ($.isFunction($.farbtastic) && $('#environment-indicator-color-picker').length > 0) { Drupal.settings.environment_indicator_color_picker = $('#environment-indicator-color-picker').farbtastic('#ctools-export-ui-edit-item-form #edit-color'); Drupal.settings.environment_indicator_text_color_picker = $('#environment-indicator-text-color-picker').farbtastic('#ctools-export-ui-edit-item-form #edit-text-color'); }; } } })(jQuery); ; var pad = function(num, totalChars) { var pad = '0'; num = num + ''; while (num.length < totalChars) { num = pad + num; } return num; }; // Ratio is between 0 and 1 var changeColor = function(color, ratio, darker) { // Trim trailing/leading whitespace color = color.replace(/^\s*|\s*$/, ''); // Expand three-digit hex color = color.replace( /^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i, '#$1$1$2$2$3$3' ); // Calculate ratio var difference = Math.round(ratio * 256) * (darker ? -1 : 1), // Determine if input is RGB(A) rgb = color.match(new RegExp('^rgba?\\(\\s*' + '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' + '\\s*,\\s*' + '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' + '\\s*,\\s*' + '(\\d|[1-9]\\d|1\\d{2}|2[0-4][0-9]|25[0-5])' + '(?:\\s*,\\s*' + '(0|1|0?\\.\\d+))?' + '\\s*\\)$' , 'i')), alpha = !!rgb && rgb[4] != null ? rgb[4] : null, // Convert hex to decimal decimal = !!rgb? [rgb[1], rgb[2], rgb[3]] : color.replace( /^#?([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])([a-f0-9][a-f0-9])/i, function() { return parseInt(arguments[1], 16) + ',' + parseInt(arguments[2], 16) + ',' + parseInt(arguments[3], 16); } ).split(/,/), returnValue; // Return RGB(A) return !!rgb ? 'rgb' + (alpha !== null ? 'a' : '') + '(' + Math[darker ? 'max' : 'min']( parseInt(decimal[0], 10) + difference, darker ? 0 : 255 ) + ', ' + Math[darker ? 'max' : 'min']( parseInt(decimal[1], 10) + difference, darker ? 0 : 255 ) + ', ' + Math[darker ? 'max' : 'min']( parseInt(decimal[2], 10) + difference, darker ? 0 : 255 ) + (alpha !== null ? ', ' + alpha : '') + ')' : // Return hex [ '#', pad(Math[darker ? 'max' : 'min']( parseInt(decimal[0], 10) + difference, darker ? 0 : 255 ).toString(16), 2), pad(Math[darker ? 'max' : 'min']( parseInt(decimal[1], 10) + difference, darker ? 0 : 255 ).toString(16), 2), pad(Math[darker ? 'max' : 'min']( parseInt(decimal[2], 10) + difference, darker ? 0 : 255 ).toString(16), 2) ].join(''); }; var lighterColor = function(color, ratio) { return changeColor(color, ratio, false); }; var darkerColor = function(color, ratio) { return changeColor(color, ratio, true); }; ;