forked from GNUsocial/gnu-social
		
	
		
			
				
	
	
		
			271 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* Copyright (c) 2009 Alvaro A. Lima Jr http://alvarojunior.com/jquery/joverlay.html
 | 
						|
 * Licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 | 
						|
 * Version: 0.7.1 (JUN 15, 2009)
 | 
						|
 * Requires: jQuery 1.3+
 | 
						|
 */
 | 
						|
 | 
						|
(function($) {
 | 
						|
 | 
						|
	// Global vars
 | 
						|
	var isIE6 = $.browser.msie && $.browser.version == 6.0; // =(
 | 
						|
	var JOVERLAY_TIMER = null;
 | 
						|
	var	JOVERLAY_ELEMENT_PREV = null;
 | 
						|
 | 
						|
	$.fn.jOverlay = function(options) {
 | 
						|
 | 
						|
		// Element exist?
 | 
						|
		if ( $('#jOverlay').length ) {$.closeOverlay();}
 | 
						|
 | 
						|
		// Clear Element Prev
 | 
						|
		JOVERLAY_ELEMENT_PREV = null;
 | 
						|
 | 
						|
		// Clear Timer
 | 
						|
		if (JOVERLAY_TIMER !== null) {
 | 
						|
			clearTimeout( JOVERLAY_TIMER );
 | 
						|
		}
 | 
						|
 | 
						|
		// Set Options
 | 
						|
		var options = $.extend({}, $.fn.jOverlay.options, options);
 | 
						|
 | 
						|
		// private function
 | 
						|
		function center(id) {
 | 
						|
			if (options.center) {
 | 
						|
				$.center(id);
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		var element = this.is('*') ? this : '#jOverlayContent';
 | 
						|
		var position = isIE6 ? 'absolute' : 'fixed';
 | 
						|
		var isImage = /([^\/\\]+)\.(png|gif|jpeg|jpg|bmp)$/i.test( options.url );
 | 
						|
 | 
						|
		var imgLoading = options.imgLoading ? "<img id='jOverlayLoading' src='"+options.imgLoading+"' style='position:"+position+"; z-index:"+(options.zIndex + 9)+";'/>" : '';
 | 
						|
 | 
						|
		$('body').prepend(imgLoading + "<div id='jOverlay' />"
 | 
						|
			+ "<div id='jOverlayContent' style='position:"+position+"; z-index:"+(options.zIndex + 5)+"; display:none;'/>"
 | 
						|
		);
 | 
						|
 | 
						|
		// Loading Centered
 | 
						|
		$('#jOverlayLoading').load(function(){
 | 
						|
			center(this);
 | 
						|
		});
 | 
						|
 | 
						|
		//IE 6 FIX
 | 
						|
		if ( isIE6 ) {
 | 
						|
			$('select').hide();
 | 
						|
			$('#jOverlayContent select').show();
 | 
						|
		}
 | 
						|
 | 
						|
		// Overlay Style
 | 
						|
		$('#jOverlay').css({
 | 
						|
			backgroundColor : options.color,
 | 
						|
			position : position,
 | 
						|
			top : '0px',
 | 
						|
			left : '0px',
 | 
						|
			filter : 'alpha(opacity='+ (options.opacity * 100) +')', // IE =(
 | 
						|
			opacity : options.opacity, // Good Browser =D
 | 
						|
			zIndex : options.zIndex,
 | 
						|
			width : !isIE6 ? '100%' : $(window).width() + 'px',
 | 
						|
			height : !isIE6 ? '100%' : $(document).height() + 'px'
 | 
						|
		}).show();
 | 
						|
 | 
						|
		// ELEMENT
 | 
						|
		if ( this.is('*') ) {
 | 
						|
 | 
						|
			JOVERLAY_ELEMENT_PREV = this.prev();
 | 
						|
 | 
						|
			$('#jOverlayContent').html(
 | 
						|
				this.show().attr('display', options.autoHide ? 'none' : this.css('display') )
 | 
						|
			);
 | 
						|
			
 | 
						|
			if ( !isImage ) {
 | 
						|
 | 
						|
				center('#jOverlayContent');
 | 
						|
 | 
						|
				$('#jOverlayContent').show();
 | 
						|
				
 | 
						|
				// Execute callback
 | 
						|
				if ( !options.url && $.isFunction( options.success ) ) {
 | 
						|
					options.success( this );
 | 
						|
				}
 | 
						|
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		// IMAGE
 | 
						|
		if ( isImage ) {
 | 
						|
 | 
						|
			$('<img/>').load(function(){
 | 
						|
				var resize = $.resize(this.width, this.height);
 | 
						|
 | 
						|
				$(this).css({
 | 
						|
					width : resize.width,
 | 
						|
					height : resize.height
 | 
						|
				});
 | 
						|
 | 
						|
				$( element ).html(this);
 | 
						|
 | 
						|
				center('#jOverlayContent');
 | 
						|
 | 
						|
				$('#jOverlayLoading').fadeOut(500);
 | 
						|
				$('#jOverlayContent').show();
 | 
						|
 | 
						|
				// Execute callback
 | 
						|
				if ( $.isFunction( options.success ) ) {
 | 
						|
					options.success( this );
 | 
						|
				}
 | 
						|
 | 
						|
			}).error(function(){
 | 
						|
				alert('Image ('+options.url+') not found.');
 | 
						|
				$.closeOverlay();
 | 
						|
			}).attr({'src' : options.url, 'alt' : options.url});
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		// AJAX
 | 
						|
		if ( options.url && !isImage ) {
 | 
						|
 | 
						|
			$.ajax({
 | 
						|
				type: options.method,
 | 
						|
				data: options.data,
 | 
						|
				url: options.url,
 | 
						|
				success: function(responseText) {
 | 
						|
 | 
						|
					$('#jOverlayLoading').fadeOut(500);
 | 
						|
 | 
						|
					$( element ).html(responseText).show();
 | 
						|
 | 
						|
					center('#jOverlayContent');
 | 
						|
 | 
						|
					// Execute callback
 | 
						|
					if ($.isFunction( options.success )) {
 | 
						|
						options.success(responseText);
 | 
						|
					}
 | 
						|
 | 
						|
				},
 | 
						|
				error : function() {
 | 
						|
					alert('URL ('+options.url+') not found.');
 | 
						|
					$.closeOverlay();
 | 
						|
				}
 | 
						|
			});
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		// :(
 | 
						|
		if ( isIE6 ) {
 | 
						|
 | 
						|
			// Window scroll
 | 
						|
			$(window).scroll(function(){
 | 
						|
				center('#jOverlayContent');
 | 
						|
			});
 | 
						|
 | 
						|
			// Window resize
 | 
						|
			$(window).resize(function(){
 | 
						|
 | 
						|
				$('#jOverlay').css({
 | 
						|
					width: $(window).width() + 'px',
 | 
						|
					height: $(document).height() + 'px'
 | 
						|
				});
 | 
						|
 | 
						|
				center('#jOverlayContent');
 | 
						|
 | 
						|
			});
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		// Press ESC to close
 | 
						|
		$(document).keydown(function(event){
 | 
						|
			if (event.keyCode == 27) {
 | 
						|
				$.closeOverlay();
 | 
						|
			}
 | 
						|
		});
 | 
						|
 | 
						|
		// Click to close
 | 
						|
		if ( options.bgClickToClose ) {
 | 
						|
			$('#jOverlay').click($.closeOverlay);
 | 
						|
		}
 | 
						|
 | 
						|
		// Timeout (auto-close)
 | 
						|
		// time in millis to wait before auto-close
 | 
						|
		// set to 0 to disable
 | 
						|
		if ( Number(options.timeout) > 0 ) {
 | 
						|
			jOverlayTimer = setTimeout( $.closeOverlay, Number(options.timeout) );
 | 
						|
		}
 | 
						|
 | 
						|
		// ADD CSS
 | 
						|
		$('#jOverlayContent').css(options.css || {});
 | 
						|
	};
 | 
						|
 | 
						|
	// Resizing large images - orginal by Christian Montoya.
 | 
						|
	// Edited by - Cody Lindley (http://www.codylindley.com) (Thickbox 3.1)
 | 
						|
	$.resize = function(imageWidth, imageHeight) {
 | 
						|
		var x = $(window).width() - 150;
 | 
						|
		var y = $(window).height() - 150;
 | 
						|
		if (imageWidth > x) {
 | 
						|
			imageHeight = imageHeight * (x / imageWidth); 
 | 
						|
			imageWidth = x; 
 | 
						|
			if (imageHeight > y) { 
 | 
						|
				imageWidth = imageWidth * (y / imageHeight); 
 | 
						|
				imageHeight = y; 
 | 
						|
			}
 | 
						|
		} else if (imageHeight > y) { 
 | 
						|
			imageWidth = imageWidth * (y / imageHeight); 
 | 
						|
			imageHeight = y; 
 | 
						|
			if (imageWidth > x) { 
 | 
						|
				imageHeight = imageHeight * (x / imageWidth); 
 | 
						|
				imageWidth = x;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return {width:imageWidth, height:imageHeight};
 | 
						|
	};
 | 
						|
 | 
						|
	// Centered Element
 | 
						|
	$.center = function(element) {
 | 
						|
		var element = $(element);
 | 
						|
		var elemWidth = element.width();
 | 
						|
 | 
						|
		element.css({
 | 
						|
			width : elemWidth + 'px',
 | 
						|
			marginLeft : '-' + (elemWidth / 2) + 'px',
 | 
						|
			marginTop : '-' + element.height() / 2 + 'px',
 | 
						|
		 	height : 'auto',
 | 
						|
         	top : !isIE6 ? '50%' : $(window).scrollTop() + ($(window).height() / 2) + 'px',
 | 
						|
         	left : '50%'
 | 
						|
		});
 | 
						|
	};
 | 
						|
 | 
						|
	// Options default
 | 
						|
	$.fn.jOverlay.options = {
 | 
						|
		method : 'GET',
 | 
						|
		data : '',
 | 
						|
		url : '',
 | 
						|
		color : '#000',
 | 
						|
		opacity : '0.6',
 | 
						|
		zIndex : 9999,
 | 
						|
		center : true,
 | 
						|
		imgLoading : '',
 | 
						|
		bgClickToClose : true,
 | 
						|
		success : null,
 | 
						|
		timeout : 0,
 | 
						|
		autoHide : true,
 | 
						|
		css : {}
 | 
						|
	};
 | 
						|
 | 
						|
	// Close
 | 
						|
	$.closeOverlay = function() {
 | 
						|
 | 
						|
		if (isIE6) { $("select").show(); }
 | 
						|
 | 
						|
		if ( JOVERLAY_ELEMENT_PREV !== null ) {
 | 
						|
			if ( JOVERLAY_ELEMENT_PREV !== null ) {
 | 
						|
				var element = $('#jOverlayContent').children();
 | 
						|
				JOVERLAY_ELEMENT_PREV.after( element.css('display', element.attr('display') ) );
 | 
						|
				element.removeAttr('display');
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		$('#jOverlayLoading, #jOverlayContent, #jOverlay').remove();
 | 
						|
 | 
						|
	};
 | 
						|
 | 
						|
})(jQuery); |