/sites/all/modules/contrib/ctools/js/mc.js
JavaScript | 178 lines | 111 code | 24 blank | 43 comment | 42 complexity | e16a8f19e53950dc768fdd4152a2cb48 MD5 | raw file
- /**
- * Modified modalContent jQuery Plugin
- */
- (function ($) {
- // Make sure our objects are defined.
- Drupal.CTools = Drupal.CTools || {};
- Drupal.CTools.Modal = Drupal.CTools.Modal || {};
- /**
- * modalContent
- * @param content string to display in the content box
- * @param css obj of css attributes
- * @param animation (fadeIn, slideDown, show)
- * @param speed (valid animation speeds slow, medium, fast or # in ms)
- */
- Drupal.CTools.Modal.modalContent = function(content, css, animation, speed) {
- // If our animation isn't set, make it just show/pop
- if (!animation) {
- animation = 'show';
- }
- else {
- // If our animation isn't "fadeIn" or "slideDown" then it always is show
- if (animation != 'fadeIn' && animation != 'slideDown') {
- animation = 'show';
- }
- }
- if (!speed) {
- speed = 'fast';
- }
- // Build our base attributes and allow them to be overriden
- css = jQuery.extend({
- position: 'absolute',
- left: '0px',
- margin: '0px',
- background: '#000',
- opacity: '.55'
- }, css);
- content.hide();
- // if we already ahve a modalContent, remove it
- if ( $('#modalBackdrop')) $('#modalBackdrop').remove();
- if ( $('#modalContent')) $('#modalContent').remove();
- // position code lifted from http://www.quirksmode.org/viewport/compatibility.html
- if (self.pageYOffset) { // all except Explorer
- var wt = self.pageYOffset;
- } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict
- var wt = document.documentElement.scrollTop;
- } else if (document.body) { // all other Explorers
- var wt = document.body.scrollTop;
- }
- // Get our dimensions
- // Get the docHeight and (ugly hack) add 50 pixels to make sure we dont have a *visible* border below our div
- var docHeight = $(document).outerHeight() + 50;
- var docWidth = $(document).innerWidth();
- var winHeight = $(window).height();
- var winWidth = $(window).innerWidth();
- if( docHeight < winHeight ) docHeight = winHeight;
- // Create our divs
- $('body').append('<div id="modalBackdrop" style="z-index: 1000; display: none;"></div><div id="modalContent" style="z-index: 1001; position: absolute;">' + $(content).html() + '</div>');
- // Keyboard and focus event handler ensures focus stays on modal elements only
- modalEventHandler = function( event ) {
- target = null;
- if ( event ) { //Mozilla
- target = event.target;
- } else { //IE
- event = window.event;
- target = event.srcElement;
- }
- if( $(target).filter('*:visible').parents('#modalContent').size()) {
- // allow the event only if target is a visible child node of #modalContent
- return true;
- }
- if ( $('#modalContent')) $('#modalContent').get(0).focus();
- return false;
- };
- $('body').bind( 'focus', modalEventHandler );
- $('body').bind( 'keypress', modalEventHandler );
- // Create our content div, get the dimensions, and hide it
- var modalContent = $('#modalContent').css('top','-1000px');
- var mdcTop = wt + ( winHeight / 2 ) - ( modalContent.outerHeight() / 2);
- var mdcLeft = ( winWidth / 2 ) - ( modalContent.outerWidth() / 2);
- $('#modalBackdrop').css(css).css('top', 0).css('height', docHeight + 'px').css('width', docWidth + 'px').show();
- modalContent.css({top: mdcTop + 'px', left: mdcLeft + 'px'}).hide()[animation](speed);
- // Bind a click for closing the modalContent
- modalContentClose = function(){close(); return false;};
- $('.close').bind('click', modalContentClose);
- // Close the open modal content and backdrop
- function close() {
- // Unbind the events
- $(window).unbind('resize', modalContentResize);
- $('body').unbind( 'focus', modalEventHandler);
- $('body').unbind( 'keypress', modalEventHandler );
- $('.close').unbind('click', modalContentClose);
- // Set our animation parameters and use them
- if ( animation == 'fadeIn' ) animation = 'fadeOut';
- if ( animation == 'slideDown' ) animation = 'slideUp';
- if ( animation == 'show' ) animation = 'hide';
- // Close the content
- modalContent.hide()[animation](speed);
- // Remove the content
- $('#modalContent').remove();
- $('#modalBackdrop').remove();
- };
- // Move and resize the modalBackdrop and modalContent on resize of the window
- modalContentResize = function(){
- // Get our heights
- var docHeight = $(document).outerHeight();
- var docWidth = $(document).innerWidth();
- var winHeight = $(window).height();
- var winWidth = $(window).width();
- if( docHeight < winHeight ) docHeight = winHeight;
- // Get where we should move content to
- var modalContent = $('#modalContent');
- var mdcTop = ( winHeight / 2 ) - ( modalContent.outerHeight() / 2);
- var mdcLeft = ( winWidth / 2 ) - ( modalContent.outerWidth() / 2);
- // Apply the changes
- $('#modalBackdrop').css('height', docHeight + 'px').css('width', docWidth + 'px').show();
- modalContent.css('top', mdcTop + 'px').css('left', mdcLeft + 'px').show();
- };
- $(window).bind('resize', modalContentResize);
- $('#modalContent').focus();
- };
- /**
- * unmodalContent
- * @param content (The jQuery object to remove)
- * @param animation (fadeOut, slideUp, show)
- * @param speed (valid animation speeds slow, medium, fast or # in ms)
- */
- Drupal.CTools.Modal.unmodalContent = function(content, animation, speed)
- {
- // If our animation isn't set, make it just show/pop
- if (!animation) { var animation = 'show'; } else {
- // If our animation isn't "fade" then it always is show
- if (( animation != 'fadeOut' ) && ( animation != 'slideUp')) animation = 'show';
- }
- // Set a speed if we dont have one
- if ( !speed ) var speed = 'fast';
- // Unbind the events we bound
- $(window).unbind('resize', modalContentResize);
- $('body').unbind('focus', modalEventHandler);
- $('body').unbind('keypress', modalEventHandler);
- $('.close').unbind('click', modalContentClose);
- // jQuery magic loop through the instances and run the animations or removal.
- content.each(function(){
- if ( animation == 'fade' ) {
- $('#modalContent').fadeOut(speed,function(){$('#modalBackdrop').fadeOut(speed, function(){$(this).remove();});$(this).remove();});
- } else {
- if ( animation == 'slide' ) {
- $('#modalContent').slideUp(speed,function(){$('#modalBackdrop').slideUp(speed, function(){$(this).remove();});$(this).remove();});
- } else {
- $('#modalContent').remove();$('#modalBackdrop').remove();
- }
- }
- });
- };
- })(jQuery);