mirror of
https://github.com/opensourcepos/opensourcepos.git
synced 2026-03-19 23:47:01 -04:00
113 lines
3.9 KiB
JavaScript
113 lines
3.9 KiB
JavaScript
/*
|
|
* imgPreview jQuery plugin
|
|
* Copyright (c) 2009 James Padolsey
|
|
* j@qd9.co.uk | http://james.padolsey.com
|
|
* Dual licensed under MIT and GPL.
|
|
* Updated: 09/02/09
|
|
* @author James Padolsey
|
|
* @version 0.22
|
|
*/
|
|
(function($){
|
|
|
|
$.expr[':'].linkingToImage = function(elem, index, match){
|
|
// This will return true if the specified attribute contains a valid link to an image:
|
|
return !! ($(elem).attr(match[3]) && $(elem).attr(match[3]).match(/\.(gif|jpe?g|png|bmp)$/i));
|
|
};
|
|
|
|
$.fn.imgPreview = function(userDefinedSettings){
|
|
|
|
var s = $.extend({
|
|
|
|
/* DEFAULTS */
|
|
|
|
// CSS to be applied to image:
|
|
imgCSS: {},
|
|
// Distance between cursor and preview:
|
|
distanceFromCursor: {top:10, left:10},
|
|
// Boolean, whether or not to preload images:
|
|
preloadImages: true,
|
|
// Callback: run when link is hovered: container is shown:
|
|
onShow: function(){},
|
|
// Callback: container is hidden:
|
|
onHide: function(){},
|
|
// Callback: Run when image within container has loaded:
|
|
onLoad: function(){},
|
|
// ID to give to container (for CSS styling):
|
|
containerID: 'imgPreviewContainer',
|
|
// Class to be given to container while image is loading:
|
|
containerLoadingClass: 'loading',
|
|
// Prefix (if using thumbnails), e.g. 'thumb_'
|
|
thumbPrefix: '',
|
|
// Where to retrieve the image from:
|
|
srcAttr: 'href'
|
|
|
|
}, userDefinedSettings),
|
|
|
|
$container = $('<div/>').attr('id', s.containerID)
|
|
.append('<img/>').hide()
|
|
.css('position','absolute')
|
|
.appendTo('body'),
|
|
|
|
$img = $('img', $container).css(s.imgCSS),
|
|
|
|
// Get all valid elements (linking to images / ATTR with image link):
|
|
$collection = this.filter(':linkingToImage(' + s.srcAttr + ')');
|
|
|
|
// Re-usable means to add prefix (from setting):
|
|
function addPrefix(src) {
|
|
return src && src.replace(/(\/?)([^\/]+)$/,'$1' + s.thumbPrefix + '$2');
|
|
}
|
|
|
|
if (s.preloadImages) {
|
|
(function(i){
|
|
var tempIMG = new Image(),
|
|
callee = arguments.callee;
|
|
var src = $($collection[i]).attr(s.srcAttr)
|
|
if (src)
|
|
{
|
|
tempIMG.src = addPrefix(src);
|
|
tempIMG.onload = function(){
|
|
$collection[i + 1] && callee(i + 1);
|
|
};
|
|
}
|
|
})(0);
|
|
}
|
|
|
|
$collection
|
|
.mousemove(function(e){
|
|
|
|
$container.css({
|
|
top: e.pageY + s.distanceFromCursor.top + 'px',
|
|
left: e.pageX + s.distanceFromCursor.left + 'px'
|
|
});
|
|
|
|
})
|
|
.hover(function(){
|
|
|
|
var link = this;
|
|
$container
|
|
.addClass(s.containerLoadingClass)
|
|
.show();
|
|
$img
|
|
.load(function(){
|
|
$container.removeClass(s.containerLoadingClass);
|
|
$img.show();
|
|
s.onLoad.call($img[0], link);
|
|
})
|
|
.attr( 'src' , addPrefix($(link).attr(s.srcAttr)) );
|
|
s.onShow.call($container[0], link);
|
|
|
|
}, function(){
|
|
|
|
$container.hide();
|
|
$img.unbind('load').attr('src','').hide();
|
|
s.onHide.call($container[0], this);
|
|
|
|
});
|
|
|
|
// Return full selection, not $collection!
|
|
return this;
|
|
|
|
};
|
|
|
|
})(jQuery); |