From 2fc850c5b2684d990404c70d040021699686f4a2 Mon Sep 17 00:00:00 2001 From: rvelices Date: Mon, 31 Dec 2012 06:13:14 +0000 Subject: upgraded js libs jquery from 1.8.2 to 1.8.3 jquery jCrop from 0.9.9 to 0.9.10 git-svn-id: http://piwigo.org/svn/trunk@19682 68402e56-0260-453c-a942-63ccdbb3a9ee --- themes/default/js/plugins/jquery.Jcrop.css | 103 +++- themes/default/js/plugins/jquery.Jcrop.js | 651 +++++++++++++++----------- themes/default/js/plugins/jquery.Jcrop.min.js | 262 +---------- 3 files changed, 469 insertions(+), 547 deletions(-) (limited to 'themes/default/js/plugins') diff --git a/themes/default/js/plugins/jquery.Jcrop.css b/themes/default/js/plugins/jquery.Jcrop.css index 073e22746..1d5ccc580 100644 --- a/themes/default/js/plugins/jquery.Jcrop.css +++ b/themes/default/js/plugins/jquery.Jcrop.css @@ -1,35 +1,86 @@ -/* Fixes issue here http://code.google.com/p/jcrop/issues/detail?id=1 */ -.jcrop-holder { text-align: left; } +/* jquery.Jcrop.css v0.9.10 - MIT License */ -.jcrop-vline, .jcrop-hline -{ - font-size: 0px; - position: absolute; - background: white url('Jcrop.gif') top left repeat; +/* + The outer-most container in a typical Jcrop instance + If you are having difficulty with formatting related to styles + on a parent element, place any fixes here or in a like selector + + You can also style this element if you want to add a border, etc + A better method for styling can be seen below with .jcrop-light + (Add a class to the holder and style elements for that extended class) +*/ +.jcrop-holder { + direction: ltr; + text-align: left; } -.jcrop-vline { height: 100%; width: 1px !important; } -.jcrop-hline { width: 100%; height: 1px !important; } -.jcrop-vline.right { right: 0px; } -.jcrop-hline.bottom { bottom: 0px; } -.jcrop-handle { - font-size: 1px; - width: 7px !important; - height: 7px !important; - border: 1px #eee solid; - background-color: #333; + +/* These styles define the border lines */ +.jcrop-vline,.jcrop-hline{background:#FFF url(Jcrop.gif) top left repeat;font-size:0;position:absolute;} +.jcrop-vline{height:100%;width:1px!important;} +.jcrop-hline{height:1px!important;width:100%;} +.jcrop-vline.right{right:0;} +.jcrop-hline.bottom{bottom:0;} + +/* Handle style - size is set by Jcrop handleSize option (currently) */ +.jcrop-handle{background-color:#333;border:1px #eee solid;font-size:1px;} + +/* This style is used for invisible click targets */ +.jcrop-tracker +{ + height: 100%; + width: 100%; + -webkit-tap-highlight-color: transparent; /* "turn off" link highlight */ + -webkit-touch-callout: none; /* disable callout, image save panel */ + -webkit-user-select: none; /* disable cut copy paste */ } -.jcrop-tracker { width: 100%; height: 100%; } +/* Positioning of handles and drag bars */ +.jcrop-handle.ord-n{left:50%;margin-left:-4px;margin-top:-4px;top:0;} +.jcrop-handle.ord-s{bottom:0;left:50%;margin-bottom:-4px;margin-left:-4px;} +.jcrop-handle.ord-e{margin-right:-4px;margin-top:-4px;right:0;top:50%;} +.jcrop-handle.ord-w{left:0;margin-left:-4px;margin-top:-4px;top:50%;} +.jcrop-handle.ord-nw{left:0;margin-left:-4px;margin-top:-4px;top:0;} +.jcrop-handle.ord-ne{margin-right:-4px;margin-top:-4px;right:0;top:0;} +.jcrop-handle.ord-se{bottom:0;margin-bottom:-4px;margin-right:-4px;right:0;} +.jcrop-handle.ord-sw{bottom:0;left:0;margin-bottom:-4px;margin-left:-4px;} +.jcrop-dragbar.ord-n,.jcrop-dragbar.ord-s{height:7px;width:100%;} +.jcrop-dragbar.ord-e,.jcrop-dragbar.ord-w{height:100%;width:7px;} +.jcrop-dragbar.ord-n{margin-top:-4px;} +.jcrop-dragbar.ord-s{bottom:0;margin-bottom:-4px;} +.jcrop-dragbar.ord-e{margin-right:-4px;right:0;} +.jcrop-dragbar.ord-w{margin-left:-4px;} -.custom .jcrop-vline, -.custom .jcrop-hline +/* The "jcrop-light" class/extension */ +.jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline { - background: yellow; + background:#FFF; + filter:Alpha(opacity=70)!important; + opacity:.70!important; } -.custom .jcrop-handle +.jcrop-light .jcrop-handle { - border-color: black; - background-color: #C7BB00; - -moz-border-radius: 3px; - -webkit-border-radius: 3px; + -moz-border-radius:3px; + -webkit-border-radius:3px; + background-color:#000; + border-color:#FFF; + border-radius:3px; } + +/* The "jcrop-dark" class/extension */ +.jcrop-dark .jcrop-vline,.jcrop-dark .jcrop-hline +{ + background:#000; + filter:Alpha(opacity=70)!important; + opacity:.7!important; +} +.jcrop-dark .jcrop-handle +{ + -moz-border-radius:3px; + -webkit-border-radius:3px; + background-color:#FFF; + border-color:#000; + border-radius:3px; +} + +/* Fix for twitter bootstrap et al. */ +.jcrop-holder img,img.jcrop-preview{ max-width: none; } diff --git a/themes/default/js/plugins/jquery.Jcrop.js b/themes/default/js/plugins/jquery.Jcrop.js index 22731d606..2bf9f70f0 100644 --- a/themes/default/js/plugins/jquery.Jcrop.js +++ b/themes/default/js/plugins/jquery.Jcrop.js @@ -1,8 +1,9 @@ /** - * jquery.Jcrop.js v0.9.9 - * jQuery Image Cropping Plugin - * @author Kelly Hallman - * Copyright (c) 2008-2011 Kelly Hallman - released under MIT License {{{ + * jquery.Jcrop.js v0.9.10 + * jQuery Image Cropping Plugin - released under MIT License + * Author: Kelly Hallman + * http://github.com/tapmodo/Jcrop + * Copyright (c) 2008-2012 Tapmodo Interactive LLC {{{ * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation @@ -36,10 +37,7 @@ // Internal Methods {{{ function px(n) { - return parseInt(n, 10) + 'px'; - } - function pct(n) { - return parseInt(n, 10) + '%'; + return n + 'px'; } function cssClass(cl) { return options.baseClass + '-' + cl; @@ -49,7 +47,6 @@ } function getPos(obj) //{{{ { - // Updated in v0.9.4 to use built-in dimensions plugin var pos = $(obj).offset(); return [pos.left, pos.top]; } @@ -61,28 +58,12 @@ //}}} function setOptions(opt) //{{{ { - if (typeof(opt) !== 'object') { - opt = {}; - } + if (typeof(opt) !== 'object') opt = {}; options = $.extend(options, opt); - if (typeof(options.onChange) !== 'function') { - options.onChange = function () {}; - } - if (typeof(options.onSelect) !== 'function') { - options.onSelect = function () {}; - } - if (typeof(options.onRelease) !== 'function') { - options.onRelease = function () {}; - } - } - //}}} - function myCursor(type) //{{{ - { - if (type !== lastcurs) { - Tracker.setCursor(type); - lastcurs = type; - } + $.each(['onChange','onSelect','onRelease','onDblClick'],function(i,e) { + if (typeof(options[e]) !== 'function') options[e] = function () {}; + }); } //}}} function startDragMode(mode, pos) //{{{ @@ -187,6 +168,11 @@ if ((ord === 'move') && !options.allowMove) { return false; } + + // Fix position of crop area when dragged the very first time. + // Necessary when crop image is in a hidden element when page is loaded. + docOffset = getPos($img); + btndown = true; startDragMode(ord, mouseAbs(e)); e.stopPropagation(); @@ -215,12 +201,12 @@ function unscale(c) //{{{ { return { - x: parseInt(c.x * xscale, 10), - y: parseInt(c.y * yscale, 10), - x2: parseInt(c.x2 * xscale, 10), - y2: parseInt(c.y2 * yscale, 10), - w: parseInt(c.w * xscale, 10), - h: parseInt(c.h * yscale, 10) + x: c.x * xscale, + y: c.y * yscale, + x2: c.x2 * xscale, + y2: c.y2 * yscale, + w: c.w * xscale, + h: c.h * yscale }; } //}}} @@ -247,7 +233,7 @@ btndown = true; docOffset = getPos($img); Selection.disableHandles(); - myCursor('crosshair'); + Tracker.setCursor('crosshair'); var pos = mouseAbs(e); Coords.setPressed(pos); Selection.update(); @@ -299,17 +285,43 @@ // character in the DOM will be as you left it. var img_css = { border: 'none', + visibility: 'visible', margin: 0, padding: 0, - position: 'absolute' + position: 'absolute', + top: 0, + left: 0 }; - var $origimg = $(obj); - var $img = $origimg.clone().removeAttr('id').css(img_css); + var $origimg = $(obj), + img_mode = true; + + if (obj.tagName == 'IMG') { + // Fix size of crop image. + // Necessary when crop image is within a hidden element when page is loaded. + if ($origimg[0].width != 0 && $origimg[0].height != 0) { + // Obtain dimensions from contained img element. + $origimg.width($origimg[0].width); + $origimg.height($origimg[0].height); + } else { + // Obtain dimensions from temporary image in case the original is not loaded yet (e.g. IE 7.0). + var tempImage = new Image(); + tempImage.src = $origimg[0].src; + $origimg.width(tempImage.width); + $origimg.height(tempImage.height); + } + + var $img = $origimg.clone().removeAttr('id').css(img_css).show(); - $img.width($origimg.width()); - $img.height($origimg.height()); - $origimg.after($img).hide(); + $img.width($origimg.width()); + $img.height($origimg.height()); + $origimg.after($img).hide(); + + } else { + $img = $origimg.css(img_css).show(); + img_mode = false; + if (options.shade === null) { options.shade = true; } + } presize($img, options.boxWidth, options.boxHeight); @@ -322,30 +334,40 @@ backgroundColor: options.bgColor }).insertAfter($origimg).append($img); - delete(options.bgColor); if (options.addClass) { $div.addClass(options.addClass); } - var $img2 = $('') - .attr('src', $img.attr('src')).css(img_css).width(boundx).height(boundy), + var $img2 = $('
'), $img_holder = $('
') - .width(pct(100)).height(pct(100)).css({ + .width('100%').height('100%').css({ zIndex: 310, position: 'absolute', overflow: 'hidden' - }).append($img2), + }), $hdl_holder = $('
') - .width(pct(100)).height(pct(100)).css('zIndex', 320), + .width('100%').height('100%').css('zIndex', 320), $sel = $('
') .css({ position: 'absolute', - zIndex: 300 + zIndex: 600 + }).dblclick(function(){ + var c = Coords.getFixed(); + options.onDblClick.call(api,c); }).insertBefore($img).append($img_holder, $hdl_holder); + if (img_mode) { + + $img2 = $('') + .attr('src', $img.attr('src')).css(img_css).width(boundx).height(boundy), + + $img_holder.append($img2); + + } + if (ie6mode) { $sel.css({ overflowY: 'hidden' @@ -362,7 +384,8 @@ /* }}} */ // Set more variables {{{ - var bgopacity = options.bgOpacity, + var bgcolor = options.bgColor, + bgopacity = options.bgOpacity, xlimit, ylimit, xmin, ymin, xscale, yscale, enabled = true, btndown, animating, shift_down; @@ -516,7 +539,7 @@ rwa = Math.abs(rw), rha = Math.abs(rh), real_ratio = rwa / rha, - xx, yy; + xx, yy, w, h; if (max_x === 0) { max_x = boundx * 10; @@ -630,7 +653,7 @@ ya = y2; yb = y1; } - return [Math.round(xa), Math.round(ya), Math.round(xb), Math.round(yb)]; + return [xa, ya, xb, yb]; } //}}} function getRect() //{{{ @@ -718,13 +741,131 @@ }()); //}}} + // Shade Module {{{ + var Shade = (function() { + var enabled = false, + holder = $('
').css({ + position: 'absolute', + zIndex: 240, + opacity: 0 + }), + shades = { + top: createShade(), + left: createShade().height(boundy), + right: createShade().height(boundy), + bottom: createShade() + }; + + function resizeShades(w,h) { + shades.left.css({ height: px(h) }); + shades.right.css({ height: px(h) }); + } + function updateAuto() + { + return updateShade(Coords.getFixed()); + } + function updateShade(c) + { + shades.top.css({ + left: px(c.x), + width: px(c.w), + height: px(c.y) + }); + shades.bottom.css({ + top: px(c.y2), + left: px(c.x), + width: px(c.w), + height: px(boundy-c.y2) + }); + shades.right.css({ + left: px(c.x2), + width: px(boundx-c.x2) + }); + shades.left.css({ + width: px(c.x) + }); + } + function createShade() { + return $('
').css({ + position: 'absolute', + backgroundColor: options.shadeColor||options.bgColor + }).appendTo(holder); + } + function enableShade() { + if (!enabled) { + enabled = true; + holder.insertBefore($img); + updateAuto(); + Selection.setBgOpacity(1,0,1); + $img2.hide(); + + setBgColor(options.shadeColor||options.bgColor,1); + if (Selection.isAwake()) + { + setOpacity(options.bgOpacity,1); + } + else setOpacity(1,1); + } + } + function setBgColor(color,now) { + colorChangeMacro(getShades(),color,now); + } + function disableShade() { + if (enabled) { + holder.remove(); + $img2.show(); + enabled = false; + if (Selection.isAwake()) { + Selection.setBgOpacity(options.bgOpacity,1,1); + } else { + Selection.setBgOpacity(1,1,1); + Selection.disableHandles(); + } + colorChangeMacro($div,0,1); + } + } + function setOpacity(opacity,now) { + if (enabled) { + if (options.bgFade && !now) { + holder.animate({ + opacity: 1-opacity + },{ + queue: false, + duration: options.fadeTime + }); + } + else holder.css({opacity:1-opacity}); + } + } + function refreshAll() { + options.shade ? enableShade() : disableShade(); + if (Selection.isAwake()) setOpacity(options.bgOpacity); + } + function getShades() { + return holder.children(); + } + + return { + update: updateAuto, + updateRaw: updateShade, + getShades: getShades, + setBgColor: setBgColor, + enable: enableShade, + disable: disableShade, + resize: resizeShades, + refresh: refreshAll, + opacity: setOpacity + }; + }()); + // }}} // Selection Module {{{ var Selection = (function () { - var awake, hdep = 370; - var borders = {}; - var handle = {}; - var seehandles = false; - var hhs = options.handleOffset; + var awake, + hdep = 370, + borders = {}, + handle = {}, + dragbar = {}, + seehandles = false; // Private Methods function insertBorder(type) //{{{ @@ -743,10 +884,10 @@ cursor: ord + '-resize', position: 'absolute', zIndex: zi - }); + }).addClass('ord-'+ord); if (Touch.support) { - jq.bind('touchstart', Touch.createDragger(ord)); + jq.bind('touchstart.jcrop', Touch.createDragger(ord)); } $hdl_holder.append(jq); @@ -755,100 +896,55 @@ //}}} function insertHandle(ord) //{{{ { + var hs = options.handleSize; return dragDiv(ord, hdep++).css({ - top: px(-hhs + 1), - left: px(-hhs + 1), opacity: options.handleOpacity - }).addClass(cssClass('handle')); + }).width(hs).height(hs).addClass(cssClass('handle')); } //}}} function insertDragbar(ord) //{{{ { - var s = options.handleSize, - h = s, - w = s, - t = hhs, - l = hhs; - - switch (ord) { - case 'n': - case 's': - w = pct(100); - break; - case 'e': - case 'w': - h = pct(100); - break; - } - - return dragDiv(ord, hdep++).width(w).height(h).css({ - top: px(-t + 1), - left: px(-l + 1) - }); + return dragDiv(ord, hdep++).addClass('jcrop-dragbar'); } //}}} - function createHandles(li) //{{{ + function createDragbars(li) //{{{ { var i; for (i = 0; i < li.length; i++) { - handle[li[i]] = insertHandle(li[i]); + dragbar[li[i]] = insertDragbar(li[i]); } } //}}} - function moveHandles(c) //{{{ + function createBorders(li) //{{{ { - var midvert = Math.round((c.h / 2) - hhs), - midhoriz = Math.round((c.w / 2) - hhs), - north = -hhs + 1, - west = -hhs + 1, - east = c.w - hhs, - south = c.h - hhs, - x, y; - - if (handle.e) { - handle.e.css({ - top: px(midvert), - left: px(east) - }); - handle.w.css({ - top: px(midvert) - }); - handle.s.css({ - top: px(south), - left: px(midhoriz) - }); - handle.n.css({ - left: px(midhoriz) - }); - } - if (handle.ne) { - handle.ne.css({ - left: px(east) - }); - handle.se.css({ - top: px(south), - left: px(east) - }); - handle.sw.css({ - top: px(south) - }); + var cl,i; + for (i = 0; i < li.length; i++) { + switch(li[i]){ + case'n': cl='hline'; break; + case's': cl='hline bottom'; break; + case'e': cl='vline right'; break; + case'w': cl='vline'; break; + } + borders[li[i]] = insertBorder(cl); } - if (handle.b) { - handle.b.css({ - top: px(south) - }); - handle.r.css({ - left: px(east) - }); + } + //}}} + function createHandles(li) //{{{ + { + var i; + for (i = 0; i < li.length; i++) { + handle[li[i]] = insertHandle(li[i]); } } //}}} function moveto(x, y) //{{{ { - $img2.css({ - top: px(-y), - left: px(-x) - }); + if (!options.shade) { + $img2.css({ + top: px(-y), + left: px(-x) + }); + } $sel.css({ top: px(y), left: px(x) @@ -872,45 +968,51 @@ //}}} // Internal Methods - function updateVisible() //{{{ + function updateVisible(select) //{{{ { if (awake) { - return update(); + return update(select); } } //}}} - function update() //{{{ + function update(select) //{{{ { var c = Coords.getFixed(); resize(c.w, c.h); moveto(c.x, c.y); + if (options.shade) Shade.updateRaw(c); -/* - options.drawBorders && - borders.right.css({ left: px(c.w-1) }) && - borders.bottom.css({ top: px(c.h-1) }); - */ + awake || show(); - if (seehandles) { - moveHandles(c); + if (select) { + options.onSelect.call(api, unscale(c)); + } else { + options.onChange.call(api, unscale(c)); } - if (!awake) { - show(); + } + //}}} + function setBgOpacity(opacity,force,now) //{{{ + { + if (!awake && !force) return; + if (options.bgFade && !now) { + $img.animate({ + opacity: opacity + },{ + queue: false, + duration: options.fadeTime + }); + } else { + $img.css('opacity', opacity); } - - options.onChange.call(api, unscale(c)); } //}}} function show() //{{{ { $sel.show(); - if (options.bgFade) { - $img.fadeTo(options.fadeTime, bgopacity); - } else { - $img.css('opacity', bgopacity); - } + if (options.shade) Shade.opacity(bgopacity); + else setBgOpacity(bgopacity,true); awake = true; } @@ -920,11 +1022,8 @@ disableHandles(); $sel.hide(); - if (options.bgFade) { - $img.fadeTo(options.fadeTime, 1); - } else { - $img.css('opacity', 1); - } + if (options.shade) Shade.opacity(1); + else setBgOpacity(1); awake = false; options.onRelease.call(api); @@ -933,7 +1032,6 @@ function showHandles() //{{{ { if (seehandles) { - moveHandles(Coords.getFixed()); $hdl_holder.show(); } } @@ -942,7 +1040,6 @@ { seehandles = true; if (options.allowResize) { - moveHandles(Coords.getFixed()); $hdl_holder.show(); return true; } @@ -969,37 +1066,25 @@ refresh(); } //}}} - /* Insert draggable elements {{{*/ - + // Insert draggable elements {{{ // Insert border divs for outline - if (options.drawBorders) { - borders = { - top: insertBorder('hline'), - bottom: insertBorder('hline bottom'), - left: insertBorder('vline'), - right: insertBorder('vline right') - }; - } - // Insert handles on edges - if (options.dragEdges) { - handle.t = insertDragbar('n'); - handle.b = insertDragbar('s'); - handle.r = insertDragbar('e'); - handle.l = insertDragbar('w'); - } + if (options.dragEdges && $.isArray(options.createDragbars)) + createDragbars(options.createDragbars); - // Insert side and corner handles - if (options.sideHandles) { - createHandles(['n', 's', 'e', 'w']); - } - if (options.cornerHandles) { - createHandles(['sw', 'nw', 'ne', 'se']); - } + if ($.isArray(options.createHandles)) + createHandles(options.createHandles); + + if (options.drawBorders && $.isArray(options.createBorders)) + createBorders(options.createBorders); - //}}} + // This is a hack for iOS5 to support drag/move touch functionality + $(document).bind('touchstart.jcrop-ios',function(e) { + if ($(e.currentTarget).hasClass('jcrop-tracker')) e.stopPropagation(); + }); + var $track = newTracker().mousedown(createDragger('move')).css({ cursor: 'move', position: 'absolute', @@ -1031,6 +1116,7 @@ showHandles: showHandles, disableHandles: disableHandles, animMode: animMode, + setBgOpacity: setBgOpacity, done: done }; }()); @@ -1047,10 +1133,15 @@ $trk.css({ zIndex: 450 }); + if (Touch.support) { + $(document) + .bind('touchmove.jcrop', trackTouchMove) + .bind('touchend.jcrop', trackTouchEnd); + } if (trackDoc) { $(document) - .bind('mousemove',trackMove) - .bind('mouseup',trackUp); + .bind('mousemove.jcrop',trackMove) + .bind('mouseup.jcrop',trackUp); } } //}}} @@ -1059,11 +1150,7 @@ $trk.css({ zIndex: 290 }); - if (trackDoc) { - $(document) - .unbind('mousemove', trackMove) - .unbind('mouseup', trackUp); - } + $(document).unbind('.jcrop'); } //}}} function trackMove(e) //{{{ @@ -1123,12 +1210,6 @@ } //}}} - if (Touch.support) { - $(document) - .bind('touchmove', trackTouchMove) - .bind('touchend', trackTouchEnd); - } - if (!trackDoc) { $trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp); } @@ -1169,7 +1250,7 @@ { if (options.allowMove) { Coords.moveOffset([x, y]); - Selection.updateVisible(); + Selection.updateVisible(true); } e.preventDefault(); e.stopPropagation(); @@ -1177,7 +1258,7 @@ //}}} function parseKey(e) //{{{ { - if (e.ctrlKey) { + if (e.ctrlKey || e.metaKey) { return true; } shift_down = e.shiftKey ? true : false; @@ -1197,7 +1278,7 @@ doNudge(e, 0, nudge); break; case 27: - Selection.release(); + if (options.allowSelect) Selection.release(); break; case 9: return true; @@ -1235,10 +1316,10 @@ //}}} function animateTo(a, callback) //{{{ { - var x1 = parseInt(a[0], 10) / xscale, - y1 = parseInt(a[1], 10) / yscale, - x2 = parseInt(a[2], 10) / xscale, - y2 = parseInt(a[3], 10) / yscale; + var x1 = a[0] / xscale, + y1 = a[1] / yscale, + x2 = a[2] / xscale, + y2 = a[3] / yscale; if (animating) { return; @@ -1295,8 +1376,9 @@ //}}} function setSelect(rect) //{{{ { - setSelectRaw([ - parseInt(rect[0], 10) / xscale, parseInt(rect[1], 10) / yscale, parseInt(rect[2], 10) / xscale, parseInt(rect[3], 10) / yscale]); + setSelectRaw([rect[0] / xscale, rect[1] / yscale, rect[2] / xscale, rect[3] / yscale]); + options.onSelect.call(api, unscale(Coords.getFixed())); + Selection.enableHandles(); } //}}} function setSelectRaw(l) //{{{ @@ -1368,6 +1450,7 @@ $img2.width(boundx).height(boundy); $trk.width(boundx + (bound * 2)).height(boundy + (bound * 2)); $div.width(boundx).height(boundy); + Shade.resize(boundx,boundy); enableCrop(); if (typeof(callback) === 'function') { @@ -1377,6 +1460,19 @@ img.src = src; } //}}} + function colorChangeMacro($obj,color,now) { + var mycolor = color || options.bgColor; + if (options.bgFade && supportsColorFade() && options.fadeTime && !now) { + $obj.animate({ + backgroundColor: mycolor + }, { + queue: false, + duration: options.fadeTime + }); + } else { + $obj.css('backgroundColor', mycolor); + } + } function interfaceUpdate(alt) //{{{ // This method tweaks the interface based on options object. // Called when options are changed and at end of initialization. @@ -1394,6 +1490,10 @@ Tracker.setCursor(options.allowSelect ? 'crosshair' : 'default'); Selection.setCursor(options.allowMove ? 'move' : 'default'); + if (options.hasOwnProperty('trueSize')) { + xscale = options.trueSize[0] / boundx; + yscale = options.trueSize[1] / boundy; + } if (options.hasOwnProperty('setSelect')) { setSelect(options.setSelect); @@ -1401,36 +1501,22 @@ delete(options.setSelect); } - if (options.hasOwnProperty('trueSize')) { - xscale = options.trueSize[0] / boundx; - yscale = options.trueSize[1] / boundy; - } - if (options.hasOwnProperty('bgColor')) { + Shade.refresh(); - if (supportsColorFade() && options.fadeTime) { - $div.animate({ - backgroundColor: options.bgColor - }, { - queue: false, - duration: options.fadeTime - }); - } else { - $div.css('backgroundColor', options.bgColor); - } - - delete(options.bgColor); + if (options.bgColor != bgcolor) { + colorChangeMacro( + options.shade? Shade.getShades(): $div, + options.shade? + (options.shadeColor || options.bgColor): + options.bgColor + ); + bgcolor = options.bgColor; } - if (options.hasOwnProperty('bgOpacity')) { - bgopacity = options.bgOpacity; - if (Selection.isAwake()) { - if (options.fadeTime) { - $img.fadeTo(options.fadeTime, bgopacity); - } else { - $div.css('opacity', options.opacity); - } - } - delete(options.bgOpacity); + if (bgopacity != options.bgOpacity) { + bgopacity = options.bgOpacity; + if (options.shade) Shade.refresh(); + else Selection.setBgOpacity(bgopacity); } xlimit = options.maxSize[0] || 0; @@ -1448,9 +1534,7 @@ //}}} //}}} - if (Touch.support) { - $trk.bind('touchstart', Touch.newSelection); - } + if (Touch.support) $trk.bind('touchstart.jcrop', Touch.newSelection); $hdl_holder.hide(); interfaceUpdate(true); @@ -1481,6 +1565,10 @@ getScaleFactor: function () { return [xscale, yscale]; }, + getOptions: function() { + // careful: internal values are returned + return options; + }, ui: { holder: $div, @@ -1488,66 +1576,70 @@ } }; - if ($.browser.msie) { - $div.bind('selectstart', function () { - return false; - }); - } + if ($.browser.msie) + $div.bind('selectstart', function () { return false; }); $origimg.data('Jcrop', api); return api; }; $.fn.Jcrop = function (options, callback) //{{{ { - - function attachWhenDone(from) //{{{ - { - var opt = (typeof(options) === 'object') ? options : {}; - var loadsrc = opt.useImg || from.src; - var img = new Image(); - img.onload = function () { - function attachJcrop() { - var api = $.Jcrop(from, opt); - if (typeof(callback) === 'function') { - callback.call(api); - } - } - - function attachAttempt() { - if (!img.width || !img.height) { - window.setTimeout(attachAttempt, 50); - } else { - attachJcrop(); - } - } - window.setTimeout(attachAttempt, 50); - }; - img.src = loadsrc; - } - //}}} - + var api; // Iterate over each object, attach Jcrop this.each(function () { // If we've already attached to this object if ($(this).data('Jcrop')) { // The API can be requested this way (undocumented) - if (options === 'api') { - return $(this).data('Jcrop'); - } + if (options === 'api') return $(this).data('Jcrop'); // Otherwise, we just reset the options... - else { - $(this).data('Jcrop').setOptions(options); - } + else $(this).data('Jcrop').setOptions(options); } // If we haven't been attached, preload and attach else { - attachWhenDone(this); + if (this.tagName == 'IMG') + $.Jcrop.Loader(this,function(){ + $(this).css({display:'block',visibility:'hidden'}); + api = $.Jcrop(this, options); + if ($.isFunction(callback)) callback.call(api); + }); + else { + $(this).css({display:'block',visibility:'hidden'}); + api = $.Jcrop(this, options); + if ($.isFunction(callback)) callback.call(api); + } } }); // Return "this" so the object is chainable (jQuery-style) return this; }; + //}}} + // $.Jcrop.Loader - basic image loader {{{ + + $.Jcrop.Loader = function(imgobj,success,error){ + var $img = $(imgobj), img = $img[0]; + + function completeCheck(){ + if (img.complete) { + $img.unbind('.jcloader'); + if ($.isFunction(success)) success.call(img); + } + else window.setTimeout(completeCheck,50); + } + + $img + .bind('load.jcloader',completeCheck) + .bind('error.jcloader',function(e){ + $img.unbind('.jcloader'); + if ($.isFunction(error)) error.call(img); + }); + + if (img.complete && $.isFunction(success)){ + $img.unbind('.jcloader'); + success.call(img); + } + }; + //}}} // Global Defaults {{{ $.Jcrop.defaults = { @@ -1567,18 +1659,20 @@ bgFade: false, borderOpacity: 0.4, handleOpacity: 0.5, - handleSize: 9, - handleOffset: 5, + handleSize: 7, aspectRatio: 0, keySupport: true, - cornerHandles: true, - sideHandles: true, + createHandles: ['n','s','e','w','nw','ne','se','sw'], + createDragbars: ['n','s','e','w'], + createBorders: ['n','s','e','w'], drawBorders: true, dragEdges: true, fixedSupport: true, touchSupport: null, + shade: null, + boxWidth: 0, boxHeight: 0, boundary: 2, @@ -1593,6 +1687,7 @@ // Callbacks / Event Handlers onChange: function () {}, onSelect: function () {}, + onDblClick: function () {}, onRelease: function () {} }; diff --git a/themes/default/js/plugins/jquery.Jcrop.min.js b/themes/default/js/plugins/jquery.Jcrop.min.js index a8a9f5035..2df51ad6d 100644 --- a/themes/default/js/plugins/jquery.Jcrop.min.js +++ b/themes/default/js/plugins/jquery.Jcrop.min.js @@ -1,246 +1,22 @@ /** - * jquery.Jcrop.min.js v0.9.9 (build:20110607) - * jQuery Image Cropping Plugin - * @author Kelly Hallman - * Copyright (c) 2008-2011 Kelly Hallman - released under MIT License + * jquery.Jcrop.min.js v0.9.10 (build:20120429) + * jQuery Image Cropping Plugin - released under MIT License + * Copyright (c) 2008-2012 Tapmodo Interactive LLC * https://github.com/tapmodo/Jcrop */ - -(function($){$.Jcrop=function(obj,opt){var options=$.extend({},$.Jcrop.defaults),docOffset,lastcurs,ie6mode=false;function px(n){return parseInt(n,10)+'px';} -function pct(n){return parseInt(n,10)+'%';} -function cssClass(cl){return options.baseClass+'-'+cl;} -function supportsColorFade(){return $.fx.step.hasOwnProperty('backgroundColor');} -function getPos(obj) -{var pos=$(obj).offset();return[pos.left,pos.top];} -function mouseAbs(e) -{return[(e.pageX-docOffset[0]),(e.pageY-docOffset[1])];} -function setOptions(opt) -{if(typeof(opt)!=='object'){opt={};} -options=$.extend(options,opt);if(typeof(options.onChange)!=='function'){options.onChange=function(){};} -if(typeof(options.onSelect)!=='function'){options.onSelect=function(){};} -if(typeof(options.onRelease)!=='function'){options.onRelease=function(){};}} -function myCursor(type) -{if(type!==lastcurs){Tracker.setCursor(type);lastcurs=type;}} -function startDragMode(mode,pos) -{docOffset=getPos($img);Tracker.setCursor(mode==='move'?mode:mode+'-resize');if(mode==='move'){return Tracker.activateHandlers(createMover(pos),doneSelect);} -var fc=Coords.getFixed();var opp=oppLockCorner(mode);var opc=Coords.getCorner(oppLockCorner(opp));Coords.setPressed(Coords.getCorner(opp));Coords.setCurrent(opc);Tracker.activateHandlers(dragmodeHandler(mode,fc),doneSelect);} -function dragmodeHandler(mode,f) -{return function(pos){if(!options.aspectRatio){switch(mode){case'e':pos[1]=f.y2;break;case'w':pos[1]=f.y2;break;case'n':pos[0]=f.x2;break;case's':pos[0]=f.x2;break;}}else{switch(mode){case'e':pos[1]=f.y+1;break;case'w':pos[1]=f.y+1;break;case'n':pos[0]=f.x+1;break;case's':pos[0]=f.x+1;break;}} -Coords.setCurrent(pos);Selection.update();};} -function createMover(pos) -{var lloc=pos;KeyManager.watchKeys();return function(pos){Coords.moveOffset([pos[0]-lloc[0],pos[1]-lloc[1]]);lloc=pos;Selection.update();};} -function oppLockCorner(ord) -{switch(ord){case'n':return'sw';case's':return'nw';case'e':return'nw';case'w':return'ne';case'ne':return'sw';case'nw':return'se';case'se':return'nw';case'sw':return'ne';}} -function createDragger(ord) -{return function(e){if(options.disabled){return false;} -if((ord==='move')&&!options.allowMove){return false;} -btndown=true;startDragMode(ord,mouseAbs(e));e.stopPropagation();e.preventDefault();return false;};} -function presize($obj,w,h) -{var nw=$obj.width(),nh=$obj.height();if((nw>w)&&w>0){nw=w;nh=(w/$obj.width())*$obj.height();} -if((nh>h)&&h>0){nh=h;nw=(h/$obj.height())*$obj.width();} -xscale=$obj.width()/nw;yscale=$obj.height()/nh;$obj.width(nw).height(nh);} -function unscale(c) -{return{x:parseInt(c.x*xscale,10),y:parseInt(c.y*yscale,10),x2:parseInt(c.x2*xscale,10),y2:parseInt(c.y2*yscale,10),w:parseInt(c.w*xscale,10),h:parseInt(c.h*yscale,10)};} -function doneSelect(pos) -{var c=Coords.getFixed();if((c.w>options.minSelect[0])&&(c.h>options.minSelect[1])){Selection.enableHandles();Selection.done();}else{Selection.release();} -Tracker.setCursor(options.allowSelect?'crosshair':'default');} -function newSelection(e) -{if(options.disabled){return false;} -if(!options.allowSelect){return false;} -btndown=true;docOffset=getPos($img);Selection.disableHandles();myCursor('crosshair');var pos=mouseAbs(e);Coords.setPressed(pos);Selection.update();Tracker.activateHandlers(selectDrag,doneSelect);KeyManager.watchKeys();e.stopPropagation();e.preventDefault();return false;} -function selectDrag(pos) -{Coords.setCurrent(pos);Selection.update();} -function newTracker() -{var trk=$('
').addClass(cssClass('tracker'));if($.browser.msie){trk.css({opacity:0,backgroundColor:'white'});} -return trk;} -if($.browser.msie&&($.browser.version.split('.')[0]==='6')){ie6mode=true;} -if(typeof(obj)!=='object'){obj=$(obj)[0];} -if(typeof(opt)!=='object'){opt={};} -setOptions(opt);var img_css={border:'none',margin:0,padding:0,position:'absolute'};var $origimg=$(obj);var $img=$origimg.clone().removeAttr('id').css(img_css);$img.width($origimg.width());$img.height($origimg.height());$origimg.after($img).hide();presize($img,options.boxWidth,options.boxHeight);var boundx=$img.width(),boundy=$img.height(),$div=$('
').width(boundx).height(boundy).addClass(cssClass('holder')).css({position:'relative',backgroundColor:options.bgColor}).insertAfter($origimg).append($img);delete(options.bgColor);if(options.addClass){$div.addClass(options.addClass);} -var $img2=$('').attr('src',$img.attr('src')).css(img_css).width(boundx).height(boundy),$img_holder=$('
').width(pct(100)).height(pct(100)).css({zIndex:310,position:'absolute',overflow:'hidden'}).append($img2),$hdl_holder=$('
').width(pct(100)).height(pct(100)).css('zIndex',320),$sel=$('
').css({position:'absolute',zIndex:300}).insertBefore($img).append($img_holder,$hdl_holder);if(ie6mode){$sel.css({overflowY:'hidden'});} -var bound=options.boundary;var $trk=newTracker().width(boundx+(bound*2)).height(boundy+(bound*2)).css({position:'absolute',top:px(-bound),left:px(-bound),zIndex:290}).mousedown(newSelection);var bgopacity=options.bgOpacity,xlimit,ylimit,xmin,ymin,xscale,yscale,enabled=true,btndown,animating,shift_down;docOffset=getPos($img);var Touch=(function(){function hasTouchSupport(){var support={},events=['touchstart','touchmove','touchend'],el=document.createElement('div'),i;try{for(i=0;ix1+ox){ox-=ox+x1;} -if(0>y1+oy){oy-=oy+y1;} -if(boundyboundx){xx=boundx;h=Math.abs((xx-x1)/aspect);yy=rh<0?y1-h:h+y1;}}else{xx=x2;h=rwa/aspect;yy=rh<0?y1-h:y1+h;if(yy<0){yy=0;w=Math.abs((yy-y1)*aspect);xx=rw<0?x1-w:w+x1;}else if(yy>boundy){yy=boundy;w=Math.abs(yy-y1)*aspect;xx=rw<0?x1-w:w+x1;}} -if(xx>x1){if(xx-x1max_x){xx=x1+max_x;} -if(yy>y1){yy=y1+(xx-x1)/aspect;}else{yy=y1-(xx-x1)/aspect;}}else if(xxmax_x){xx=x1-max_x;} -if(yy>y1){yy=y1+(x1-xx)/aspect;}else{yy=y1-(x1-xx)/aspect;}} -if(xx<0){x1-=xx;xx=0;}else if(xx>boundx){x1-=xx-boundx;xx=boundx;} -if(yy<0){y1-=yy;yy=0;}else if(yy>boundy){y1-=yy-boundy;yy=boundy;} -return makeObj(flipCoords(x1,y1,xx,yy));} -function rebound(p) -{if(p[0]<0){p[0]=0;} -if(p[1]<0){p[1]=0;} -if(p[0]>boundx){p[0]=boundx;} -if(p[1]>boundy){p[1]=boundy;} -return[p[0],p[1]];} -function flipCoords(x1,y1,x2,y2) -{var xa=x1,xb=x2,ya=y1,yb=y2;if(x2xlimit)){x2=(xsize>0)?(x1+xlimit):(x1-xlimit);} -if(ylimit&&(Math.abs(ysize)>ylimit)){y2=(ysize>0)?(y1+ylimit):(y1-ylimit);} -if(ymin/yscale&&(Math.abs(ysize)0)?(y1+ymin/yscale):(y1-ymin/yscale);} -if(xmin/xscale&&(Math.abs(xsize)0)?(x1+xmin/xscale):(x1-xmin/xscale);} -if(x1<0){x2-=x1;x1-=x1;} -if(y1<0){y2-=y1;y1-=y1;} -if(x2<0){x1-=x2;x2-=x2;} -if(y2<0){y1-=y2;y2-=y2;} -if(x2>boundx){delta=x2-boundx;x1-=delta;x2-=delta;} -if(y2>boundy){delta=y2-boundy;y1-=delta;y2-=delta;} -if(x1>boundx){delta=x1-boundy;y2-=delta;y1-=delta;} -if(y1>boundy){delta=y1-boundy;y2-=delta;y1-=delta;} -return makeObj(flipCoords(x1,y1,x2,y2));} -function makeObj(a) -{return{x:a[0],y:a[1],x2:a[2],y2:a[3],w:a[2]-a[0],h:a[3]-a[1]};} -return{flipCoords:flipCoords,setPressed:setPressed,setCurrent:setCurrent,getOffset:getOffset,moveOffset:moveOffset,getCorner:getCorner,getFixed:getFixed};}());var Selection=(function(){var awake,hdep=370;var borders={};var handle={};var seehandles=false;var hhs=options.handleOffset;function insertBorder(type) -{var jq=$('
').css({position:'absolute',opacity:options.borderOpacity}).addClass(cssClass(type));$img_holder.append(jq);return jq;} -function dragDiv(ord,zi) -{var jq=$('
').mousedown(createDragger(ord)).css({cursor:ord+'-resize',position:'absolute',zIndex:zi});if(Touch.support){jq.bind('touchstart',Touch.createDragger(ord));} -$hdl_holder.append(jq);return jq;} -function insertHandle(ord) -{return dragDiv(ord,hdep++).css({top:px(-hhs+1),left:px(-hhs+1),opacity:options.handleOpacity}).addClass(cssClass('handle'));} -function insertDragbar(ord) -{var s=options.handleSize,h=s,w=s,t=hhs,l=hhs;switch(ord){case'n':case's':w=pct(100);break;case'e':case'w':h=pct(100);break;} -return dragDiv(ord,hdep++).width(w).height(h).css({top:px(-t+1),left:px(-l+1)});} -function createHandles(li) -{var i;for(i=0;i').css({position:'fixed',left:'-120px',width:'12px'}),$keywrap=$('
').css({position:'absolute',overflow:'hidden'}).append($keymgr);function watchKeys() -{if(options.keySupport){$keymgr.show();$keymgr.focus();}} -function onBlur(e) -{$keymgr.hide();} -function doNudge(e,x,y) -{if(options.allowMove){Coords.moveOffset([x,y]);Selection.updateVisible();} -e.preventDefault();e.stopPropagation();} -function parseKey(e) -{if(e.ctrlKey){return true;} -shift_down=e.shiftKey?true:false;var nudge=shift_down?10:1;switch(e.keyCode){case 37:doNudge(e,-nudge,0);break;case 39:doNudge(e,nudge,0);break;case 38:doNudge(e,0,-nudge);break;case 40:doNudge(e,0,nudge);break;case 27:Selection.release();break;case 9:return true;} -return false;} -if(options.keySupport){$keymgr.keydown(parseKey).blur(onBlur);if(ie6mode||!options.fixedSupport){$keymgr.css({position:'absolute',left:'-20px'});$keywrap.append($keymgr).insertBefore($img);}else{$keymgr.insertBefore($img);}} -return{watchKeys:watchKeys};}());function setClass(cname) -{$div.removeClass().addClass(cssClass('holder')).addClass(cname);} -function animateTo(a,callback) -{var x1=parseInt(a[0],10)/xscale,y1=parseInt(a[1],10)/yscale,x2=parseInt(a[2],10)/xscale,y2=parseInt(a[3],10)/yscale;if(animating){return;} -var animto=Coords.flipCoords(x1,y1,x2,y2),c=Coords.getFixed(),initcr=[c.x,c.y,c.x2,c.y2],animat=initcr,interv=options.animationDelay,ix1=animto[0]-initcr[0],iy1=animto[1]-initcr[1],ix2=animto[2]-initcr[2],iy2=animto[3]-initcr[3],pcent=0,velocity=options.swingSpeed;x=animat[0];y=animat[1];x2=animat[2];y2=animat[3];Selection.animMode(true);var anim_timer;function queueAnimator(){window.setTimeout(animator,interv);} -var animator=(function(){return function(){pcent+=(100-pcent)/velocity;animat[0]=x+((pcent/100)*ix1);animat[1]=y+((pcent/100)*iy1);animat[2]=x2+((pcent/100)*ix2);animat[3]=y2+((pcent/100)*iy2);if(pcent>=99.8){pcent=100;} -if(pcent<100){setSelectRaw(animat);queueAnimator();}else{Selection.done();if(typeof(callback)==='function'){callback.call(api);}}};}());queueAnimator();} -function setSelect(rect) -{setSelectRaw([parseInt(rect[0],10)/xscale,parseInt(rect[1],10)/yscale,parseInt(rect[2],10)/xscale,parseInt(rect[3],10)/yscale]);} -function setSelectRaw(l) -{Coords.setPressed([l[0],l[1]]);Coords.setCurrent([l[2],l[3]]);Selection.update();} -function tellSelect() -{return unscale(Coords.getFixed());} -function tellScaled() -{return Coords.getFixed();} -function setOptionsNew(opt) -{setOptions(opt);interfaceUpdate();} -function disableCrop() -{options.disabled=true;Selection.disableHandles();Selection.setCursor('default');Tracker.setCursor('default');} -function enableCrop() -{options.disabled=false;interfaceUpdate();} -function cancelCrop() -{Selection.done();Tracker.activateHandlers(null,null);} -function destroy() -{$div.remove();$origimg.show();$(obj).removeData('Jcrop');} -function setImage(src,callback) -{Selection.release();disableCrop();var img=new Image();img.onload=function(){var iw=img.width;var ih=img.height;var bw=options.boxWidth;var bh=options.boxHeight;$img.width(iw).height(ih);$img.attr('src',src);$img2.attr('src',src);presize($img,bw,bh);boundx=$img.width();boundy=$img.height();$img2.width(boundx).height(boundy);$trk.width(boundx+(bound*2)).height(boundy+(bound*2));$div.width(boundx).height(boundy);enableCrop();if(typeof(callback)==='function'){callback.call(api);}};img.src=src;} -function interfaceUpdate(alt) -{if(options.allowResize){if(alt){Selection.enableOnly();}else{Selection.enableHandles();}}else{Selection.disableHandles();} -Tracker.setCursor(options.allowSelect?'crosshair':'default');Selection.setCursor(options.allowMove?'move':'default');if(options.hasOwnProperty('setSelect')){setSelect(options.setSelect);Selection.done();delete(options.setSelect);} -if(options.hasOwnProperty('trueSize')){xscale=options.trueSize[0]/boundx;yscale=options.trueSize[1]/boundy;} -if(options.hasOwnProperty('bgColor')){if(supportsColorFade()&&options.fadeTime){$div.animate({backgroundColor:options.bgColor},{queue:false,duration:options.fadeTime});}else{$div.css('backgroundColor',options.bgColor);} -delete(options.bgColor);} -if(options.hasOwnProperty('bgOpacity')){bgopacity=options.bgOpacity;if(Selection.isAwake()){if(options.fadeTime){$img.fadeTo(options.fadeTime,bgopacity);}else{$div.css('opacity',options.opacity);}} -delete(options.bgOpacity);} -xlimit=options.maxSize[0]||0;ylimit=options.maxSize[1]||0;xmin=options.minSize[0]||0;ymin=options.minSize[1]||0;if(options.hasOwnProperty('outerImage')){$img.attr('src',options.outerImage);delete(options.outerImage);} -Selection.refresh();} -if(Touch.support){$trk.bind('touchstart',Touch.newSelection);} -$hdl_holder.hide();interfaceUpdate(true);var api={setImage:setImage,animateTo:animateTo,setSelect:setSelect,setOptions:setOptionsNew,tellSelect:tellSelect,tellScaled:tellScaled,setClass:setClass,disable:disableCrop,enable:enableCrop,cancel:cancelCrop,release:Selection.release,destroy:destroy,focus:KeyManager.watchKeys,getBounds:function(){return[boundx*xscale,boundy*yscale];},getWidgetSize:function(){return[boundx,boundy];},getScaleFactor:function(){return[xscale,yscale];},ui:{holder:$div,selection:$sel}};if($.browser.msie){$div.bind('selectstart',function(){return false;});} -$origimg.data('Jcrop',api);return api;};$.fn.Jcrop=function(options,callback) -{function attachWhenDone(from) -{var opt=(typeof(options)==='object')?options:{};var loadsrc=opt.useImg||from.src;var img=new Image();img.onload=function(){function attachJcrop(){var api=$.Jcrop(from,opt);if(typeof(callback)==='function'){callback.call(api);}} -function attachAttempt(){if(!img.width||!img.height){window.setTimeout(attachAttempt,50);}else{attachJcrop();}} -window.setTimeout(attachAttempt,50);};img.src=loadsrc;} -this.each(function(){if($(this).data('Jcrop')){if(options==='api'){return $(this).data('Jcrop');} -else{$(this).data('Jcrop').setOptions(options);}} -else{attachWhenDone(this);}});return this;};$.Jcrop.defaults={allowSelect:true,allowMove:true,allowResize:true,trackDocument:true,baseClass:'jcrop',addClass:null,bgColor:'black',bgOpacity:0.6,bgFade:false,borderOpacity:0.4,handleOpacity:0.5,handleSize:9,handleOffset:5,aspectRatio:0,keySupport:true,cornerHandles:true,sideHandles:true,drawBorders:true,dragEdges:true,fixedSupport:true,touchSupport:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onRelease:function(){}};}(jQuery)); \ No newline at end of file +(function(a){a.Jcrop=function(b,c){function h(a){return a+"px"}function i(a){return d.baseClass+"-"+a}function j(){return a.fx.step.hasOwnProperty("backgroundColor")}function k(b){var c=a(b).offset();return[c.left,c.top]}function l(a){return[a.pageX-e[0],a.pageY-e[1]]}function m(b){typeof b!="object"&&(b={}),d=a.extend(d,b),a.each(["onChange","onSelect","onRelease","onDblClick"],function(a,b){typeof d[b]!="function"&&(d[b]=function(){})})}function n(a,b){e=k(E),bd.setCursor(a==="move"?a:a+"-resize");if(a==="move")return bd.activateHandlers(p(b),u);var c=ba.getFixed(),d=q(a),f=ba.getCorner(q(d));ba.setPressed(ba.getCorner(d)),ba.setCurrent(f),bd.activateHandlers(o(a,c),u)}function o(a,b){return function(c){if(!d.aspectRatio)switch(a){case"e":c[1]=b.y2;break;case"w":c[1]=b.y2;break;case"n":c[0]=b.x2;break;case"s":c[0]=b.x2}else switch(a){case"e":c[1]=b.y+1;break;case"w":c[1]=b.y+1;break;case"n":c[0]=b.x+1;break;case"s":c[0]=b.x+1}ba.setCurrent(c),bc.update()}}function p(a){var b=a;return be.watchKeys(),function( +a){ba.moveOffset([a[0]-b[0],a[1]-b[1]]),b=a,bc.update()}}function q(a){switch(a){case"n":return"sw";case"s":return"nw";case"e":return"nw";case"w":return"ne";case"ne":return"sw";case"nw":return"se";case"se":return"nw";case"sw":return"ne"}}function r(a){return function(b){return d.disabled?!1:a==="move"&&!d.allowMove?!1:(e=k(E),X=!0,n(a,l(b)),b.stopPropagation(),b.preventDefault(),!1)}}function s(a,b,c){var d=a.width(),e=a.height();d>b&&b>0&&(d=b,e=b/a.width()*a.height()),e>c&&c>0&&(e=c,d=c/a.height()*a.width()),U=a.width()/d,V=a.height()/e,a.width(d).height(e)}function t(a){return{x:a.x*U,y:a.y*V,x2:a.x2*U,y2:a.y2*V,w:a.w*U,h:a.h*V}}function u(a){var b=ba.getFixed();b.w>d.minSelect[0]&&b.h>d.minSelect[1]?(bc.enableHandles(),bc.done()):bc.release(),bd.setCursor(d.allowSelect?"crosshair":"default")}function v(a){if(d.disabled)return!1;if(!d.allowSelect)return!1;X=!0,e=k(E),bc.disableHandles(),bd.setCursor("crosshair");var b=l(a);return ba.setPressed(b),bc.update(),bd.activateHandlers(w,u),be.watchKeys(),a.stopPropagation +(),a.preventDefault(),!1}function w(a){ba.setCurrent(a),bc.update()}function z(){var b=a("
").addClass(i("tracker"));return a.browser.msie&&b.css({opacity:0,backgroundColor:"white"}),b}function bf(a){H.removeClass().addClass(i("holder")).addClass(a)}function bg(a,b){function t(){window.setTimeout(u,l)}var c=a[0]/U,e=a[1]/V,f=a[2]/U,g=a[3]/V;if(Y)return;var h=ba.flipCoords(c,e,f,g),i=ba.getFixed(),j=[i.x,i.y,i.x2,i.y2],k=j,l=d.animationDelay,m=h[0]-j[0],n=h[1]-j[1],o=h[2]-j[2],p=h[3]-j[3],q=0,r=d.swingSpeed;x=k[0],y=k[1],f=k[2],g=k[3],bc.animMode(!0);var s,u=function(){return function(){q+=(100-q)/r,k[0]=x+q/100*m,k[1]=y+q/100*n,k[2]=f+q/100*o,k[3]=g+q/100*p,q>=99.8&&(q=100),q<100?(bi(k),t()):(bc.done(),typeof b=="function"&&b.call(bt))}}();t()}function bh(a){bi([a[0]/U,a[1]/V,a[2]/U,a[3]/V]),d.onSelect.call(bt,t(ba.getFixed())),bc.enableHandles()}function bi(a){ba.setPressed([a[0],a[1]]),ba.setCurrent([a[2],a[3]]),bc.update()}function bj(){return t(ba.getFixed())}function bk(){return ba.getFixed()}function bl +(a){m(a),bs()}function bm(){d.disabled=!0,bc.disableHandles(),bc.setCursor("default"),bd.setCursor("default")}function bn(){d.disabled=!1,bs()}function bo(){bc.done(),bd.activateHandlers(null,null)}function bp(){H.remove(),B.show(),a(b).removeData("Jcrop")}function bq(a,b){bc.release(),bm();var c=new Image;c.onload=function(){var e=c.width,f=c.height,g=d.boxWidth,h=d.boxHeight;E.width(e).height(f),E.attr("src",a),I.attr("src",a),s(E,g,h),F=E.width(),G=E.height(),I.width(F).height(G),N.width(F+M*2).height(G+M*2),H.width(F).height(G),bb.resize(F,G),bn(),typeof b=="function"&&b.call(bt)},c.src=a}function br(a,b,c){var e=b||d.bgColor;d.bgFade&&j()&&d.fadeTime&&!c?a.animate({backgroundColor:e},{queue:!1,duration:d.fadeTime}):a.css("backgroundColor",e)}function bs(a){d.allowResize?a?bc.enableOnly():bc.enableHandles():bc.disableHandles(),bd.setCursor(d.allowSelect?"crosshair":"default"),bc.setCursor(d.allowMove?"move":"default"),d.hasOwnProperty("trueSize")&&(U=d.trueSize[0]/F,V=d.trueSize[1]/G),d.hasOwnProperty("setSelect" +)&&(bh(d.setSelect),bc.done(),delete d.setSelect),bb.refresh(),d.bgColor!=O&&(br(d.shade?bb.getShades():H,d.shade?d.shadeColor||d.bgColor:d.bgColor),O=d.bgColor),P!=d.bgOpacity&&(P=d.bgOpacity,d.shade?bb.refresh():bc.setBgOpacity(P)),Q=d.maxSize[0]||0,R=d.maxSize[1]||0,S=d.minSize[0]||0,T=d.minSize[1]||0,d.hasOwnProperty("outerImage")&&(E.attr("src",d.outerImage),delete d.outerImage),bc.refresh()}var d=a.extend({},a.Jcrop.defaults),e,f,g=!1;a.browser.msie&&a.browser.version.split(".")[0]==="6"&&(g=!0),typeof b!="object"&&(b=a(b)[0]),typeof c!="object"&&(c={}),m(c);var A={border:"none",visibility:"visible",margin:0,padding:0,position:"absolute",top:0,left:0},B=a(b),C=!0;if(b.tagName=="IMG"){if(B[0].width!=0&&B[0].height!=0)B.width(B[0].width),B.height(B[0].height);else{var D=new Image;D.src=B[0].src,B.width(D.width),B.height(D.height)}var E=B.clone().removeAttr("id").css(A).show();E.width(B.width()),E.height(B.height()),B.after(E).hide()}else E=B.css(A).show(),C=!1,d.shade===null&&(d.shade=!0);s(E,d.boxWidth,d. +boxHeight);var F=E.width(),G=E.height(),H=a("
").width(F).height(G).addClass(i("holder")).css({position:"relative",backgroundColor:d.bgColor}).insertAfter(B).append(E);d.addClass&&H.addClass(d.addClass);var I=a("
"),J=a("
").width("100%").height("100%").css({zIndex:310,position:"absolute",overflow:"hidden"}),K=a("
").width("100%").height("100%").css("zIndex",320),L=a("
").css({position:"absolute",zIndex:600}).dblclick(function(){var a=ba.getFixed();d.onDblClick.call(bt,a)}).insertBefore(E).append(J,K);C&&(I=a("").attr("src",E.attr("src")).css(A).width(F).height(G),J.append(I)),g&&L.css({overflowY:"hidden"});var M=d.boundary,N=z().width(F+M*2).height(G+M*2).css({position:"absolute",top:h(-M),left:h(-M),zIndex:290}).mousedown(v),O=d.bgColor,P=d.bgOpacity,Q,R,S,T,U,V,W=!0,X,Y,Z;e=k(E);var _=function(){function a(){var a={},b=["touchstart","touchmove","touchend"],c=document.createElement("div"),d;try{for(d=0;da+f&&(f-=f+a),0>b+g&&(g-=g+b),GF&&(r=F,u=Math.abs((r-a)/f),s=k<0?b-u:u+b)):(r=c,u=l/f,s=k<0?b-u:b+u,s<0?(s=0,t=Math.abs((s-b)*f),r=j<0?a-t:t+a):s>G&&(s=G,t=Math.abs(s-b)*f,r=j<0?a-t:t+a)),r>a?(r-ah&&(r=a+h),s>b?s=b+(r-a)/f:s=b-(r-a)/f):rh&&(r=a-h),s>b?s=b+(a-r)/f:s=b-(a-r)/f),r<0?(a-=r,r=0):r>F&&(a-=r-F,r=F),s<0?(b-=s,s=0):s>G&&(b-=s-G,s=G),q(o(a,b,r,s))}function n(a){return a[0]<0&&(a[0]=0),a[1]<0&&(a[1]=0),a[0]>F&&(a[0]=F),a[1]>G&&(a[1]=G),[a[0],a[1]]}function o(a,b,c,d){var e=a,f=c,g=b,h=d;return cQ&&(c=d>0?a+Q:a-Q),R&&Math.abs(f)>R&&(e=f>0?b+R:b-R),T/V&&Math.abs(f)0?b+T/V:b-T/V),S/U&&Math.abs(d)0?a+S/U:a-S/U),a<0&&(c-=a,a-=a),b<0&&(e-=b,b-=b),c<0&& +(a-=c,c-=c),e<0&&(b-=e,e-=e),c>F&&(g=c-F,a-=g,c-=g),e>G&&(g=e-G,b-=g,e-=g),a>F&&(g=a-G,e-=g,b-=g),b>G&&(g=b-G,e-=g,b-=g),q(o(a,b,c,e))}function q(a){return{x:a[0],y:a[1],x2:a[2],y2:a[3],w:a[2]-a[0],h:a[3]-a[1]}}var a=0,b=0,c=0,e=0,f,g;return{flipCoords:o,setPressed:h,setCurrent:i,getOffset:j,moveOffset:k,getCorner:l,getFixed:m}}(),bb=function(){function f(a,b){e.left.css({height:h(b)}),e.right.css({height:h(b)})}function g(){return i(ba.getFixed())}function i(a){e.top.css({left:h(a.x),width:h(a.w),height:h(a.y)}),e.bottom.css({top:h(a.y2),left:h(a.x),width:h(a.w),height:h(G-a.y2)}),e.right.css({left:h(a.x2),width:h(F-a.x2)}),e.left.css({width:h(a.x)})}function j(){return a("
").css({position:"absolute",backgroundColor:d.shadeColor||d.bgColor}).appendTo(c)}function k(){b||(b=!0,c.insertBefore(E),g(),bc.setBgOpacity(1,0,1),I.hide(),l(d.shadeColor||d.bgColor,1),bc.isAwake()?n(d.bgOpacity,1):n(1,1))}function l(a,b){br(p(),a,b)}function m(){b&&(c.remove(),I.show(),b=!1,bc.isAwake()?bc.setBgOpacity(d.bgOpacity +,1,1):(bc.setBgOpacity(1,1,1),bc.disableHandles()),br(H,0,1))}function n(a,e){b&&(d.bgFade&&!e?c.animate({opacity:1-a},{queue:!1,duration:d.fadeTime}):c.css({opacity:1-a}))}function o(){d.shade?k():m(),bc.isAwake()&&n(d.bgOpacity)}function p(){return c.children()}var b=!1,c=a("
").css({position:"absolute",zIndex:240,opacity:0}),e={top:j(),left:j().height(G),right:j().height(G),bottom:j()};return{update:g,updateRaw:i,getShades:p,setBgColor:l,enable:k,disable:m,resize:f,refresh:o,opacity:n}}(),bc=function(){function k(b){var c=a("
").css({position:"absolute",opacity:d.borderOpacity}).addClass(i(b));return J.append(c),c}function l(b,c){var d=a("
").mousedown(r(b)).css({cursor:b+"-resize",position:"absolute",zIndex:c}).addClass("ord-"+b);return _.support&&d.bind("touchstart.jcrop",_.createDragger(b)),K.append(d),d}function m(a){var b=d.handleSize;return l(a,c++).css({opacity:d.handleOpacity}).width(b).height(b).addClass(i("handle"))}function n(a){return l(a,c++).addClass("jcrop-dragbar")}function o +(a){var b;for(b=0;b').css({position:"fixed",left:"-120px",width:"12px"}),c=a("
").css({position:"absolute",overflow:"hidden"}).append(b);return d.keySupport&&(b.keydown(i).blur(f),g||!d.fixedSupport?(b.css({position:"absolute",left:"-20px"}),c.append(b).insertBefore(E)):b.insertBefore(E)),{watchKeys:e}}();_.support&&N.bind("touchstart.jcrop",_.newSelection),K.hide(),bs(!0);var bt={setImage:bq,animateTo:bg,setSelect:bh,setOptions:bl,tellSelect:bj,tellScaled:bk,setClass:bf,disable:bm,enable:bn,cancel:bo,release:bc.release,destroy:bp,focus:be.watchKeys,getBounds:function(){return[F*U,G*V]},getWidgetSize:function(){return[F,G]},getScaleFactor:function(){return[U,V]},getOptions:function(){return d},ui:{holder:H,selection:L}};return a.browser.msie&&H.bind("selectstart",function(){return!1}),B.data("Jcrop",bt),bt},a.fn.Jcrop=function(b,c){var d;return this.each(function(){if(a(this).data("Jcrop")){if(b==="api")return a +(this).data("Jcrop");a(this).data("Jcrop").setOptions(b)}else this.tagName=="IMG"?a.Jcrop.Loader(this,function(){a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d)}):(a(this).css({display:"block",visibility:"hidden"}),d=a.Jcrop(this,b),a.isFunction(c)&&c.call(d))}),this},a.Jcrop.Loader=function(b,c,d){function g(){f.complete?(e.unbind(".jcloader"),a.isFunction(c)&&c.call(f)):window.setTimeout(g,50)}var e=a(b),f=e[0];e.bind("load.jcloader",g).bind("error.jcloader",function(b){e.unbind(".jcloader"),a.isFunction(d)&&d.call(f)}),f.complete&&a.isFunction(c)&&(e.unbind(".jcloader"),c.call(f))},a.Jcrop.defaults={allowSelect:!0,allowMove:!0,allowResize:!0,trackDocument:!0,baseClass:"jcrop",addClass:null,bgColor:"black",bgOpacity:.6,bgFade:!1,borderOpacity:.4,handleOpacity:.5,handleSize:7,aspectRatio:0,keySupport:!0,createHandles:["n","s","e","w","nw","ne","se","sw"],createDragbars:["n","s","e","w"],createBorders:["n","s","e","w"],drawBorders:!0,dragEdges:!0,fixedSupport:!0, +touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}}})(jQuery); \ No newline at end of file -- cgit v1.2.3