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
This commit is contained in:
parent
33dcdfb783
commit
2fc850c5b2
5 changed files with 590 additions and 636 deletions
206
themes/default/js/jquery.js
vendored
206
themes/default/js/jquery.js
vendored
|
|
@ -1,5 +1,5 @@
|
|||
/*!
|
||||
* jQuery JavaScript Library v1.8.2
|
||||
* jQuery JavaScript Library v1.8.3
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
|
|
@ -9,7 +9,7 @@
|
|||
* Released under the MIT license
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Date: Thu Sep 20 2012 21:13:05 GMT-0400 (Eastern Daylight Time)
|
||||
* Date: Tue Nov 13 2012 08:20:33 GMT-0500 (Eastern Standard Time)
|
||||
*/
|
||||
(function( window, undefined ) {
|
||||
var
|
||||
|
|
@ -186,7 +186,7 @@ jQuery.fn = jQuery.prototype = {
|
|||
selector: "",
|
||||
|
||||
// The current version of jQuery being used
|
||||
jquery: "1.8.2",
|
||||
jquery: "1.8.3",
|
||||
|
||||
// The default length of a jQuery object is 0
|
||||
length: 0,
|
||||
|
|
@ -999,8 +999,10 @@ jQuery.Callbacks = function( options ) {
|
|||
(function add( args ) {
|
||||
jQuery.each( args, function( _, arg ) {
|
||||
var type = jQuery.type( arg );
|
||||
if ( type === "function" && ( !options.unique || !self.has( arg ) ) ) {
|
||||
list.push( arg );
|
||||
if ( type === "function" ) {
|
||||
if ( !options.unique || !self.has( arg ) ) {
|
||||
list.push( arg );
|
||||
}
|
||||
} else if ( arg && arg.length && type !== "string" ) {
|
||||
// Inspect recursively
|
||||
add( arg );
|
||||
|
|
@ -1253,24 +1255,23 @@ jQuery.support = (function() {
|
|||
clickFn,
|
||||
div = document.createElement("div");
|
||||
|
||||
// Preliminary tests
|
||||
// Setup
|
||||
div.setAttribute( "className", "t" );
|
||||
div.innerHTML = " <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
|
||||
|
||||
// Support tests won't run in some limited or non-browser environments
|
||||
all = div.getElementsByTagName("*");
|
||||
a = div.getElementsByTagName("a")[ 0 ];
|
||||
a.style.cssText = "top:1px;float:left;opacity:.5";
|
||||
|
||||
// Can't get basic test support
|
||||
if ( !all || !all.length ) {
|
||||
if ( !all || !a || !all.length ) {
|
||||
return {};
|
||||
}
|
||||
|
||||
// First batch of supports tests
|
||||
// First batch of tests
|
||||
select = document.createElement("select");
|
||||
opt = select.appendChild( document.createElement("option") );
|
||||
input = div.getElementsByTagName("input")[ 0 ];
|
||||
|
||||
a.style.cssText = "top:1px;float:left;opacity:.5";
|
||||
support = {
|
||||
// IE strips leading whitespace when .innerHTML is used
|
||||
leadingWhitespace: ( div.firstChild.nodeType === 3 ),
|
||||
|
|
@ -1312,7 +1313,7 @@ jQuery.support = (function() {
|
|||
// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)
|
||||
getSetAttribute: div.className !== "t",
|
||||
|
||||
// Tests for enctype support on a form(#6743)
|
||||
// Tests for enctype support on a form (#6743)
|
||||
enctype: !!document.createElement("form").enctype,
|
||||
|
||||
// Makes sure cloning an html5 element does not cause problems
|
||||
|
|
@ -2217,26 +2218,25 @@ jQuery.extend({
|
|||
},
|
||||
select: {
|
||||
get: function( elem ) {
|
||||
var value, i, max, option,
|
||||
index = elem.selectedIndex,
|
||||
values = [],
|
||||
var value, option,
|
||||
options = elem.options,
|
||||
one = elem.type === "select-one";
|
||||
|
||||
// Nothing was selected
|
||||
if ( index < 0 ) {
|
||||
return null;
|
||||
}
|
||||
index = elem.selectedIndex,
|
||||
one = elem.type === "select-one" || index < 0,
|
||||
values = one ? null : [],
|
||||
max = one ? index + 1 : options.length,
|
||||
i = index < 0 ?
|
||||
max :
|
||||
one ? index : 0;
|
||||
|
||||
// Loop through all the selected options
|
||||
i = one ? index : 0;
|
||||
max = one ? index + 1 : options.length;
|
||||
for ( ; i < max; i++ ) {
|
||||
option = options[ i ];
|
||||
|
||||
// Don't return options that are disabled or in a disabled optgroup
|
||||
if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
|
||||
(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
|
||||
// oldIE doesn't update selected after form reset (#2551)
|
||||
if ( ( option.selected || i === index ) &&
|
||||
// Don't return options that are disabled or in a disabled optgroup
|
||||
( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) &&
|
||||
( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
|
||||
|
||||
// Get the specific value for the option
|
||||
value = jQuery( option ).val();
|
||||
|
|
@ -2251,11 +2251,6 @@ jQuery.extend({
|
|||
}
|
||||
}
|
||||
|
||||
// Fixes Bug #2551 -- select.val() broken in IE after form.reset()
|
||||
if ( one && !values.length && options.length ) {
|
||||
return jQuery( options[ index ] ).val();
|
||||
}
|
||||
|
||||
return values;
|
||||
},
|
||||
|
||||
|
|
@ -3233,7 +3228,7 @@ jQuery.removeEvent = document.removeEventListener ?
|
|||
|
||||
if ( elem.detachEvent ) {
|
||||
|
||||
// #8545, #7054, preventing memory leaks for custom events in IE6-8 –
|
||||
// #8545, #7054, preventing memory leaks for custom events in IE6-8
|
||||
// detachEvent needed property on element, by name of that event, to properly expose it to GC
|
||||
if ( typeof elem[ name ] === "undefined" ) {
|
||||
elem[ name ] = null;
|
||||
|
|
@ -3725,7 +3720,8 @@ var cachedruns,
|
|||
delete cache[ keys.shift() ];
|
||||
}
|
||||
|
||||
return (cache[ key ] = value);
|
||||
// Retrieve with (key + " ") to avoid collision with native Object.prototype properties (see Issue #157)
|
||||
return (cache[ key + " " ] = value);
|
||||
}, cache );
|
||||
},
|
||||
|
||||
|
|
@ -4259,13 +4255,13 @@ Expr = Sizzle.selectors = {
|
|||
},
|
||||
|
||||
"CLASS": function( className ) {
|
||||
var pattern = classCache[ expando ][ className ];
|
||||
if ( !pattern ) {
|
||||
pattern = classCache( className, new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)") );
|
||||
}
|
||||
return function( elem ) {
|
||||
return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
|
||||
};
|
||||
var pattern = classCache[ expando ][ className + " " ];
|
||||
|
||||
return pattern ||
|
||||
(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
|
||||
classCache( className, function( elem ) {
|
||||
return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" );
|
||||
});
|
||||
},
|
||||
|
||||
"ATTR": function( name, operator, check ) {
|
||||
|
|
@ -4511,7 +4507,7 @@ Expr = Sizzle.selectors = {
|
|||
|
||||
"focus": function( elem ) {
|
||||
var doc = elem.ownerDocument;
|
||||
return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href);
|
||||
return elem === doc.activeElement && (!doc.hasFocus || doc.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
|
||||
},
|
||||
|
||||
"active": function( elem ) {
|
||||
|
|
@ -4519,11 +4515,11 @@ Expr = Sizzle.selectors = {
|
|||
},
|
||||
|
||||
// Positional types
|
||||
"first": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
||||
"first": createPositionalPseudo(function() {
|
||||
return [ 0 ];
|
||||
}),
|
||||
|
||||
"last": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
||||
"last": createPositionalPseudo(function( matchIndexes, length ) {
|
||||
return [ length - 1 ];
|
||||
}),
|
||||
|
||||
|
|
@ -4531,14 +4527,14 @@ Expr = Sizzle.selectors = {
|
|||
return [ argument < 0 ? argument + length : argument ];
|
||||
}),
|
||||
|
||||
"even": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
||||
"even": createPositionalPseudo(function( matchIndexes, length ) {
|
||||
for ( var i = 0; i < length; i += 2 ) {
|
||||
matchIndexes.push( i );
|
||||
}
|
||||
return matchIndexes;
|
||||
}),
|
||||
|
||||
"odd": createPositionalPseudo(function( matchIndexes, length, argument ) {
|
||||
"odd": createPositionalPseudo(function( matchIndexes, length ) {
|
||||
for ( var i = 1; i < length; i += 2 ) {
|
||||
matchIndexes.push( i );
|
||||
}
|
||||
|
|
@ -4659,7 +4655,9 @@ baseHasDuplicate = !hasDuplicate;
|
|||
// Document sorting and removing duplicates
|
||||
Sizzle.uniqueSort = function( results ) {
|
||||
var elem,
|
||||
i = 1;
|
||||
duplicates = [],
|
||||
i = 1,
|
||||
j = 0;
|
||||
|
||||
hasDuplicate = baseHasDuplicate;
|
||||
results.sort( sortOrder );
|
||||
|
|
@ -4667,9 +4665,12 @@ Sizzle.uniqueSort = function( results ) {
|
|||
if ( hasDuplicate ) {
|
||||
for ( ; (elem = results[i]); i++ ) {
|
||||
if ( elem === results[ i - 1 ] ) {
|
||||
results.splice( i--, 1 );
|
||||
j = duplicates.push( i );
|
||||
}
|
||||
}
|
||||
while ( j-- ) {
|
||||
results.splice( duplicates[ j ], 1 );
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
|
|
@ -4680,8 +4681,9 @@ Sizzle.error = function( msg ) {
|
|||
};
|
||||
|
||||
function tokenize( selector, parseOnly ) {
|
||||
var matched, match, tokens, type, soFar, groups, preFilters,
|
||||
cached = tokenCache[ expando ][ selector ];
|
||||
var matched, match, tokens, type,
|
||||
soFar, groups, preFilters,
|
||||
cached = tokenCache[ expando ][ selector + " " ];
|
||||
|
||||
if ( cached ) {
|
||||
return parseOnly ? 0 : cached.slice( 0 );
|
||||
|
|
@ -4696,7 +4698,8 @@ function tokenize( selector, parseOnly ) {
|
|||
// Comma and first run
|
||||
if ( !matched || (match = rcomma.exec( soFar )) ) {
|
||||
if ( match ) {
|
||||
soFar = soFar.slice( match[0].length );
|
||||
// Don't consume trailing commas as valid
|
||||
soFar = soFar.slice( match[0].length ) || soFar;
|
||||
}
|
||||
groups.push( tokens = [] );
|
||||
}
|
||||
|
|
@ -4715,8 +4718,7 @@ function tokenize( selector, parseOnly ) {
|
|||
// Filters
|
||||
for ( type in Expr.filter ) {
|
||||
if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
|
||||
// The last two arguments here are (context, xml) for backCompat
|
||||
(match = preFilters[ type ]( match, document, true ))) ) {
|
||||
(match = preFilters[ type ]( match ))) ) {
|
||||
|
||||
tokens.push( matched = new Token( match.shift() ) );
|
||||
soFar = soFar.slice( matched.length );
|
||||
|
|
@ -4836,18 +4838,13 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
|||
postFinder = setMatcher( postFinder, postSelector );
|
||||
}
|
||||
return markFunction(function( seed, results, context, xml ) {
|
||||
// Positional selectors apply to seed elements, so it is invalid to follow them with relative ones
|
||||
if ( seed && postFinder ) {
|
||||
return;
|
||||
}
|
||||
|
||||
var i, elem, postFilterIn,
|
||||
var temp, i, elem,
|
||||
preMap = [],
|
||||
postMap = [],
|
||||
preexisting = results.length,
|
||||
|
||||
// Get initial elements from seed or context
|
||||
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [], seed ),
|
||||
elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
|
||||
|
||||
// Prefilter to get matcher input, preserving a map for seed-results synchronization
|
||||
matcherIn = preFilter && ( seed || !selector ) ?
|
||||
|
|
@ -4872,27 +4869,45 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS
|
|||
|
||||
// Apply postFilter
|
||||
if ( postFilter ) {
|
||||
postFilterIn = condense( matcherOut, postMap );
|
||||
postFilter( postFilterIn, [], context, xml );
|
||||
temp = condense( matcherOut, postMap );
|
||||
postFilter( temp, [], context, xml );
|
||||
|
||||
// Un-match failing elements by moving them back to matcherIn
|
||||
i = postFilterIn.length;
|
||||
i = temp.length;
|
||||
while ( i-- ) {
|
||||
if ( (elem = postFilterIn[i]) ) {
|
||||
if ( (elem = temp[i]) ) {
|
||||
matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Keep seed and results synchronized
|
||||
if ( seed ) {
|
||||
// Ignore postFinder because it can't coexist with seed
|
||||
i = preFilter && matcherOut.length;
|
||||
while ( i-- ) {
|
||||
if ( (elem = matcherOut[i]) ) {
|
||||
seed[ preMap[i] ] = !(results[ preMap[i] ] = elem);
|
||||
if ( postFinder || preFilter ) {
|
||||
if ( postFinder ) {
|
||||
// Get the final matcherOut by condensing this intermediate into postFinder contexts
|
||||
temp = [];
|
||||
i = matcherOut.length;
|
||||
while ( i-- ) {
|
||||
if ( (elem = matcherOut[i]) ) {
|
||||
// Restore matcherIn since elem is not yet a final match
|
||||
temp.push( (matcherIn[i] = elem) );
|
||||
}
|
||||
}
|
||||
postFinder( null, (matcherOut = []), temp, xml );
|
||||
}
|
||||
|
||||
// Move matched elements from seed to results to keep them synchronized
|
||||
i = matcherOut.length;
|
||||
while ( i-- ) {
|
||||
if ( (elem = matcherOut[i]) &&
|
||||
(temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) {
|
||||
|
||||
seed[temp] = !(results[temp] = elem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Add elements to results, through postFinder if defined
|
||||
} else {
|
||||
matcherOut = condense(
|
||||
matcherOut === results ?
|
||||
|
|
@ -4933,7 +4948,6 @@ function matcherFromTokens( tokens ) {
|
|||
if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
|
||||
matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];
|
||||
} else {
|
||||
// The concatenated values are (context, xml) for backCompat
|
||||
matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
|
||||
|
||||
// Return special upon seeing a positional matcher
|
||||
|
|
@ -5062,7 +5076,7 @@ compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
|
|||
var i,
|
||||
setMatchers = [],
|
||||
elementMatchers = [],
|
||||
cached = compilerCache[ expando ][ selector ];
|
||||
cached = compilerCache[ expando ][ selector + " " ];
|
||||
|
||||
if ( !cached ) {
|
||||
// Generate a function of recursive functions that can be used to check each element
|
||||
|
|
@ -5085,11 +5099,11 @@ compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) {
|
|||
return cached;
|
||||
};
|
||||
|
||||
function multipleContexts( selector, contexts, results, seed ) {
|
||||
function multipleContexts( selector, contexts, results ) {
|
||||
var i = 0,
|
||||
len = contexts.length;
|
||||
for ( ; i < len; i++ ) {
|
||||
Sizzle( selector, contexts[i], results, seed );
|
||||
Sizzle( selector, contexts[i], results );
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
|
@ -5167,15 +5181,14 @@ if ( document.querySelectorAll ) {
|
|||
rescape = /'|\\/g,
|
||||
rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,
|
||||
|
||||
// qSa(:focus) reports false when true (Chrome 21),
|
||||
// qSa(:focus) reports false when true (Chrome 21), no need to also add to buggyMatches since matches checks buggyQSA
|
||||
// A support test would require too much code (would include document ready)
|
||||
rbuggyQSA = [":focus"],
|
||||
rbuggyQSA = [ ":focus" ],
|
||||
|
||||
// matchesSelector(:focus) reports false when true (Chrome 21),
|
||||
// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
|
||||
// A support test would require too much code (would include document ready)
|
||||
// just skip matchesSelector for :active
|
||||
rbuggyMatches = [ ":active", ":focus" ],
|
||||
rbuggyMatches = [ ":active" ],
|
||||
matches = docElem.matchesSelector ||
|
||||
docElem.mozMatchesSelector ||
|
||||
docElem.webkitMatchesSelector ||
|
||||
|
|
@ -5229,7 +5242,7 @@ if ( document.querySelectorAll ) {
|
|||
// Only use querySelectorAll when not filtering,
|
||||
// when this is not xml,
|
||||
// and when no QSA bugs apply
|
||||
if ( !seed && !xml && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
|
||||
if ( !seed && !xml && !rbuggyQSA.test( selector ) ) {
|
||||
var groups, i,
|
||||
old = true,
|
||||
nid = expando,
|
||||
|
|
@ -5298,7 +5311,7 @@ if ( document.querySelectorAll ) {
|
|||
expr = expr.replace( rattributeQuotes, "='$1']" );
|
||||
|
||||
// rbuggyMatches always contains :active, so no need for an existence check
|
||||
if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && (!rbuggyQSA || !rbuggyQSA.test( expr )) ) {
|
||||
if ( !isXML( elem ) && !rbuggyMatches.test( expr ) && !rbuggyQSA.test( expr ) ) {
|
||||
try {
|
||||
var ret = matches.call( elem, expr );
|
||||
|
||||
|
|
@ -6533,7 +6546,7 @@ var curCSS, iframe, iframeDoc,
|
|||
rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ),
|
||||
rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ),
|
||||
rrelNum = new RegExp( "^([-+])=(" + core_pnum + ")", "i" ),
|
||||
elemdisplay = {},
|
||||
elemdisplay = { BODY: "block" },
|
||||
|
||||
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
|
||||
cssNormalTransform = {
|
||||
|
|
@ -6814,7 +6827,9 @@ if ( window.getComputedStyle ) {
|
|||
|
||||
if ( computed ) {
|
||||
|
||||
ret = computed[ name ];
|
||||
// getPropertyValue is only needed for .css('filter') in IE9, see #12537
|
||||
ret = computed.getPropertyValue( name ) || computed[ name ];
|
||||
|
||||
if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
|
||||
ret = jQuery.style( elem, name );
|
||||
}
|
||||
|
|
@ -7843,9 +7858,12 @@ jQuery.extend({
|
|||
|
||||
// A cross-domain request is in order when we have a protocol:host:port mismatch
|
||||
if ( s.crossDomain == null ) {
|
||||
parts = rurl.exec( s.url.toLowerCase() ) || false;
|
||||
s.crossDomain = parts && ( parts.join(":") + ( parts[ 3 ] ? "" : parts[ 1 ] === "http:" ? 80 : 443 ) ) !==
|
||||
( ajaxLocParts.join(":") + ( ajaxLocParts[ 3 ] ? "" : ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) );
|
||||
parts = rurl.exec( s.url.toLowerCase() );
|
||||
s.crossDomain = !!( parts &&
|
||||
( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
|
||||
( parts[ 3 ] || ( parts[ 1 ] === "http:" ? 80 : 443 ) ) !=
|
||||
( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? 80 : 443 ) ) )
|
||||
);
|
||||
}
|
||||
|
||||
// Convert data if not already a string
|
||||
|
|
@ -8464,7 +8482,7 @@ if ( jQuery.support.ajax ) {
|
|||
// on any attempt to access responseText (#11426)
|
||||
try {
|
||||
responses.text = xhr.responseText;
|
||||
} catch( _ ) {
|
||||
} catch( e ) {
|
||||
}
|
||||
|
||||
// Firefox throws an exception when accessing
|
||||
|
|
@ -8617,7 +8635,9 @@ function Animation( elem, properties, options ) {
|
|||
tick = function() {
|
||||
var currentTime = fxNow || createFxNow(),
|
||||
remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
|
||||
percent = 1 - ( remaining / animation.duration || 0 ),
|
||||
// archaic crash bug won't allow us to use 1 - ( 0.5 || 0 ) (#12497)
|
||||
temp = remaining / animation.duration || 0,
|
||||
percent = 1 - temp,
|
||||
index = 0,
|
||||
length = animation.tweens.length;
|
||||
|
||||
|
|
@ -8769,7 +8789,7 @@ jQuery.Animation = jQuery.extend( Animation, {
|
|||
});
|
||||
|
||||
function defaultPrefilter( elem, props, opts ) {
|
||||
var index, prop, value, length, dataShow, tween, hooks, oldfire,
|
||||
var index, prop, value, length, dataShow, toggle, tween, hooks, oldfire,
|
||||
anim = this,
|
||||
style = elem.style,
|
||||
orig = {},
|
||||
|
|
@ -8843,6 +8863,7 @@ function defaultPrefilter( elem, props, opts ) {
|
|||
value = props[ index ];
|
||||
if ( rfxtypes.exec( value ) ) {
|
||||
delete props[ index ];
|
||||
toggle = toggle || value === "toggle";
|
||||
if ( value === ( hidden ? "hide" : "show" ) ) {
|
||||
continue;
|
||||
}
|
||||
|
|
@ -8853,6 +8874,14 @@ function defaultPrefilter( elem, props, opts ) {
|
|||
length = handled.length;
|
||||
if ( length ) {
|
||||
dataShow = jQuery._data( elem, "fxshow" ) || jQuery._data( elem, "fxshow", {} );
|
||||
if ( "hidden" in dataShow ) {
|
||||
hidden = dataShow.hidden;
|
||||
}
|
||||
|
||||
// store state if its toggle - enables .stop().toggle() to "reverse"
|
||||
if ( toggle ) {
|
||||
dataShow.hidden = !hidden;
|
||||
}
|
||||
if ( hidden ) {
|
||||
jQuery( elem ).show();
|
||||
} else {
|
||||
|
|
@ -9149,6 +9178,8 @@ jQuery.fx.tick = function() {
|
|||
timers = jQuery.timers,
|
||||
i = 0;
|
||||
|
||||
fxNow = jQuery.now();
|
||||
|
||||
for ( ; i < timers.length; i++ ) {
|
||||
timer = timers[ i ];
|
||||
// Checks the timer has not already been removed
|
||||
|
|
@ -9160,6 +9191,7 @@ jQuery.fx.tick = function() {
|
|||
if ( !timers.length ) {
|
||||
jQuery.fx.stop();
|
||||
}
|
||||
fxNow = undefined;
|
||||
};
|
||||
|
||||
jQuery.fx.timer = function( timer ) {
|
||||
|
|
|
|||
4
themes/default/js/jquery.min.js
vendored
4
themes/default/js/jquery.min.js
vendored
File diff suppressed because one or more lines are too long
|
|
@ -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;
|
||||
}
|
||||
.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;
|
||||
/*
|
||||
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-tracker { width: 100%; height: 100%; }
|
||||
/* 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;}
|
||||
|
||||
.custom .jcrop-vline,
|
||||
.custom .jcrop-hline
|
||||
/* 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
|
||||
{
|
||||
background: yellow;
|
||||
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 */
|
||||
}
|
||||
.custom .jcrop-handle
|
||||
|
||||
/* 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;}
|
||||
|
||||
/* The "jcrop-light" class/extension */
|
||||
.jcrop-light .jcrop-vline,.jcrop-light .jcrop-hline
|
||||
{
|
||||
border-color: black;
|
||||
background-color: #C7BB00;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
background:#FFF;
|
||||
filter:Alpha(opacity=70)!important;
|
||||
opacity:.70!important;
|
||||
}
|
||||
.jcrop-light .jcrop-handle
|
||||
{
|
||||
-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; }
|
||||
|
|
|
|||
|
|
@ -1,8 +1,9 @@
|
|||
/**
|
||||
* jquery.Jcrop.js v0.9.9
|
||||
* jQuery Image Cropping Plugin
|
||||
* @author Kelly Hallman <khallman@gmail.com>
|
||||
* 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 <khallman@gmail.com>
|
||||
* 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;
|
||||
|
||||
$img.width($origimg.width());
|
||||
$img.height($origimg.height());
|
||||
$origimg.after($img).hide();
|
||||
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();
|
||||
|
||||
} 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 = $('<img />')
|
||||
.attr('src', $img.attr('src')).css(img_css).width(boundx).height(boundy),
|
||||
var $img2 = $('<div />'),
|
||||
|
||||
$img_holder = $('<div />')
|
||||
.width(pct(100)).height(pct(100)).css({
|
||||
.width('100%').height('100%').css({
|
||||
zIndex: 310,
|
||||
position: 'absolute',
|
||||
overflow: 'hidden'
|
||||
}).append($img2),
|
||||
}),
|
||||
|
||||
$hdl_holder = $('<div />')
|
||||
.width(pct(100)).height(pct(100)).css('zIndex', 320),
|
||||
.width('100%').height('100%').css('zIndex', 320),
|
||||
|
||||
$sel = $('<div />')
|
||||
.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 = $('<img />')
|
||||
.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 = $('<div />').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 $('<div />').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,36 +896,37 @@
|
|||
//}}}
|
||||
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++).addClass('jcrop-dragbar');
|
||||
}
|
||||
//}}}
|
||||
function createDragbars(li) //{{{
|
||||
{
|
||||
var i;
|
||||
for (i = 0; i < li.length; i++) {
|
||||
dragbar[li[i]] = insertDragbar(li[i]);
|
||||
}
|
||||
}
|
||||
//}}}
|
||||
function createBorders(li) //{{{
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
return dragDiv(ord, hdep++).width(w).height(h).css({
|
||||
top: px(-t + 1),
|
||||
left: px(-l + 1)
|
||||
});
|
||||
}
|
||||
//}}}
|
||||
function createHandles(li) //{{{
|
||||
|
|
@ -795,60 +937,14 @@
|
|||
}
|
||||
}
|
||||
//}}}
|
||||
function moveHandles(c) //{{{
|
||||
{
|
||||
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)
|
||||
});
|
||||
}
|
||||
if (handle.b) {
|
||||
handle.b.css({
|
||||
top: px(south)
|
||||
});
|
||||
handle.r.css({
|
||||
left: px(east)
|
||||
});
|
||||
}
|
||||
}
|
||||
//}}}
|
||||
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')) {
|
||||
|
||||
if (bgopacity != options.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 (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 () {}
|
||||
};
|
||||
|
||||
|
|
|
|||
262
themes/default/js/plugins/jquery.Jcrop.min.js
vendored
262
themes/default/js/plugins/jquery.Jcrop.min.js
vendored
|
|
@ -1,246 +1,22 @@
|
|||
/**
|
||||
* jquery.Jcrop.min.js v0.9.9 (build:20110607)
|
||||
* jQuery Image Cropping Plugin
|
||||
* @author Kelly Hallman <khallman@gmail.com>
|
||||
* 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=$('<div></div>').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=$('<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=$('<img />').attr('src',$img.attr('src')).css(img_css).width(boundx).height(boundy),$img_holder=$('<div />').width(pct(100)).height(pct(100)).css({zIndex:310,position:'absolute',overflow:'hidden'}).append($img2),$hdl_holder=$('<div />').width(pct(100)).height(pct(100)).css('zIndex',320),$sel=$('<div />').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;i<events.length;i++){var eventName=events[i];eventName='on'+eventName;var isSupported=(eventName in el);if(!isSupported){el.setAttribute(eventName,'return;');isSupported=typeof el[eventName]=='function';}
|
||||
support[events[i]]=isSupported;}
|
||||
return support.touchstart&&support.touchend&&support.touchmove;}
|
||||
catch(err){return false;}}
|
||||
function detectSupport(){if((options.touchSupport===true)||(options.touchSupport===false))return options.touchSupport;else return hasTouchSupport();}
|
||||
return{createDragger:function(ord){return function(e){e.pageX=e.originalEvent.changedTouches[0].pageX;e.pageY=e.originalEvent.changedTouches[0].pageY;if(options.disabled){return false;}
|
||||
if((ord==='move')&&!options.allowMove){return false;}
|
||||
btndown=true;startDragMode(ord,mouseAbs(e));e.stopPropagation();e.preventDefault();return false;};},newSelection:function(e){e.pageX=e.originalEvent.changedTouches[0].pageX;e.pageY=e.originalEvent.changedTouches[0].pageY;return newSelection(e);},isSupported:hasTouchSupport,support:detectSupport()};}());var Coords=(function(){var x1=0,y1=0,x2=0,y2=0,ox,oy;function setPressed(pos)
|
||||
{pos=rebound(pos);x2=x1=pos[0];y2=y1=pos[1];}
|
||||
function setCurrent(pos)
|
||||
{pos=rebound(pos);ox=pos[0]-x2;oy=pos[1]-y2;x2=pos[0];y2=pos[1];}
|
||||
function getOffset()
|
||||
{return[ox,oy];}
|
||||
function moveOffset(offset)
|
||||
{var ox=offset[0],oy=offset[1];if(0>x1+ox){ox-=ox+x1;}
|
||||
if(0>y1+oy){oy-=oy+y1;}
|
||||
if(boundy<y2+oy){oy+=boundy-(y2+oy);}
|
||||
if(boundx<x2+ox){ox+=boundx-(x2+ox);}
|
||||
x1+=ox;x2+=ox;y1+=oy;y2+=oy;}
|
||||
function getCorner(ord)
|
||||
{var c=getFixed();switch(ord){case'ne':return[c.x2,c.y];case'nw':return[c.x,c.y];case'se':return[c.x2,c.y2];case'sw':return[c.x,c.y2];}}
|
||||
function getFixed()
|
||||
{if(!options.aspectRatio){return getRect();}
|
||||
var aspect=options.aspectRatio,min_x=options.minSize[0]/xscale,max_x=options.maxSize[0]/xscale,max_y=options.maxSize[1]/yscale,rw=x2-x1,rh=y2-y1,rwa=Math.abs(rw),rha=Math.abs(rh),real_ratio=rwa/rha,xx,yy;if(max_x===0){max_x=boundx*10;}
|
||||
if(max_y===0){max_y=boundy*10;}
|
||||
if(real_ratio<aspect){yy=y2;w=rha*aspect;xx=rw<0?x1-w:w+x1;if(xx<0){xx=0;h=Math.abs((xx-x1)/aspect);yy=rh<0?y1-h:h+y1;}else if(xx>boundx){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-x1<min_x){xx=x1+min_x;}else if(xx-x1>max_x){xx=x1+max_x;}
|
||||
if(yy>y1){yy=y1+(xx-x1)/aspect;}else{yy=y1-(xx-x1)/aspect;}}else if(xx<x1){if(x1-xx<min_x){xx=x1-min_x;}else if(x1-xx>max_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(x2<x1){xa=x2;xb=x1;}
|
||||
if(y2<y1){ya=y2;yb=y1;}
|
||||
return[Math.round(xa),Math.round(ya),Math.round(xb),Math.round(yb)];}
|
||||
function getRect()
|
||||
{var xsize=x2-x1,ysize=y2-y1,delta;if(xlimit&&(Math.abs(xsize)>xlimit)){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)<ymin/yscale)){y2=(ysize>0)?(y1+ymin/yscale):(y1-ymin/yscale);}
|
||||
if(xmin/xscale&&(Math.abs(xsize)<xmin/xscale)){x2=(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=$('<div />').css({position:'absolute',opacity:options.borderOpacity}).addClass(cssClass(type));$img_holder.append(jq);return jq;}
|
||||
function dragDiv(ord,zi)
|
||||
{var jq=$('<div />').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<li.length;i++){handle[li[i]]=insertHandle(li[i]);}}
|
||||
function moveHandles(c)
|
||||
{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)});}
|
||||
if(handle.b){handle.b.css({top:px(south)});handle.r.css({left:px(east)});}}
|
||||
function moveto(x,y)
|
||||
{$img2.css({top:px(-y),left:px(-x)});$sel.css({top:px(y),left:px(x)});}
|
||||
function resize(w,h)
|
||||
{$sel.width(w).height(h);}
|
||||
function refresh()
|
||||
{var c=Coords.getFixed();Coords.setPressed([c.x,c.y]);Coords.setCurrent([c.x2,c.y2]);updateVisible();}
|
||||
function updateVisible()
|
||||
{if(awake){return update();}}
|
||||
function update()
|
||||
{var c=Coords.getFixed();resize(c.w,c.h);moveto(c.x,c.y);if(seehandles){moveHandles(c);}
|
||||
if(!awake){show();}
|
||||
options.onChange.call(api,unscale(c));}
|
||||
function show()
|
||||
{$sel.show();if(options.bgFade){$img.fadeTo(options.fadeTime,bgopacity);}else{$img.css('opacity',bgopacity);}
|
||||
awake=true;}
|
||||
function release()
|
||||
{disableHandles();$sel.hide();if(options.bgFade){$img.fadeTo(options.fadeTime,1);}else{$img.css('opacity',1);}
|
||||
awake=false;options.onRelease.call(api);}
|
||||
function showHandles()
|
||||
{if(seehandles){moveHandles(Coords.getFixed());$hdl_holder.show();}}
|
||||
function enableHandles()
|
||||
{seehandles=true;if(options.allowResize){moveHandles(Coords.getFixed());$hdl_holder.show();return true;}}
|
||||
function disableHandles()
|
||||
{seehandles=false;$hdl_holder.hide();}
|
||||
function animMode(v)
|
||||
{if(animating===v){disableHandles();}else{enableHandles();}}
|
||||
function done()
|
||||
{animMode(false);refresh();}
|
||||
if(options.drawBorders){borders={top:insertBorder('hline'),bottom:insertBorder('hline bottom'),left:insertBorder('vline'),right:insertBorder('vline right')};}
|
||||
if(options.dragEdges){handle.t=insertDragbar('n');handle.b=insertDragbar('s');handle.r=insertDragbar('e');handle.l=insertDragbar('w');}
|
||||
if(options.sideHandles){createHandles(['n','s','e','w']);}
|
||||
if(options.cornerHandles){createHandles(['sw','nw','ne','se']);}
|
||||
var $track=newTracker().mousedown(createDragger('move')).css({cursor:'move',position:'absolute',zIndex:360});if(Touch.support){$track.bind('touchstart.jcrop',Touch.createDragger('move'));}
|
||||
$img_holder.append($track);disableHandles();return{updateVisible:updateVisible,update:update,release:release,refresh:refresh,isAwake:function(){return awake;},setCursor:function(cursor){$track.css('cursor',cursor);},enableHandles:enableHandles,enableOnly:function(){seehandles=true;},showHandles:showHandles,disableHandles:disableHandles,animMode:animMode,done:done};}());var Tracker=(function(){var onMove=function(){},onDone=function(){},trackDoc=options.trackDocument;function toFront()
|
||||
{$trk.css({zIndex:450});if(trackDoc){$(document).bind('mousemove',trackMove).bind('mouseup',trackUp);}}
|
||||
function toBack()
|
||||
{$trk.css({zIndex:290});if(trackDoc){$(document).unbind('mousemove',trackMove).unbind('mouseup',trackUp);}}
|
||||
function trackMove(e)
|
||||
{onMove(mouseAbs(e));return false;}
|
||||
function trackUp(e)
|
||||
{e.preventDefault();e.stopPropagation();if(btndown){btndown=false;onDone(mouseAbs(e));if(Selection.isAwake()){options.onSelect.call(api,unscale(Coords.getFixed()));}
|
||||
toBack();onMove=function(){};onDone=function(){};}
|
||||
return false;}
|
||||
function activateHandlers(move,done)
|
||||
{btndown=true;onMove=move;onDone=done;toFront();return false;}
|
||||
function trackTouchMove(e)
|
||||
{e.pageX=e.originalEvent.changedTouches[0].pageX;e.pageY=e.originalEvent.changedTouches[0].pageY;return trackMove(e);}
|
||||
function trackTouchEnd(e)
|
||||
{e.pageX=e.originalEvent.changedTouches[0].pageX;e.pageY=e.originalEvent.changedTouches[0].pageY;return trackUp(e);}
|
||||
function setCursor(t)
|
||||
{$trk.css('cursor',t);}
|
||||
if(Touch.support){$(document).bind('touchmove',trackTouchMove).bind('touchend',trackTouchEnd);}
|
||||
if(!trackDoc){$trk.mousemove(trackMove).mouseup(trackUp).mouseout(trackUp);}
|
||||
$img.before($trk);return{activateHandlers:activateHandlers,setCursor:setCursor};}());var KeyManager=(function(){var $keymgr=$('<input type="radio" />').css({position:'fixed',left:'-120px',width:'12px'}),$keywrap=$('<div />').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));
|
||||
(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("<div></div>").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("<div />").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("<div />"),J=a("<div />").width("100%").height("100%").css({zIndex:310,position:"absolute",overflow:"hidden"}),K=a("<div />").width("100%").height("100%").css("zIndex",320),L=a("<div />").css({position:"absolute",zIndex:600}).dblclick(function(){var a=ba.getFixed();d.onDblClick.call(bt,a)}).insertBefore(E).append(J,K);C&&(I=a("<img />").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;d<b.length;d++){var e=b[d];e="on"+e;var f=e in c;f||(c.setAttribute(e,"return;"
|
||||
),f=typeof c[e]=="function"),a[b[d]]=f}return a.touchstart&&a.touchend&&a.touchmove}catch(g){return!1}}function b(){return d.touchSupport===!0||d.touchSupport===!1?d.touchSupport:a()}return{createDragger:function(a){return function(b){return b.pageX=b.originalEvent.changedTouches[0].pageX,b.pageY=b.originalEvent.changedTouches[0].pageY,d.disabled?!1:a==="move"&&!d.allowMove?!1:(X=!0,n(a,l(b)),b.stopPropagation(),b.preventDefault(),!1)}},newSelection:function(a){return a.pageX=a.originalEvent.changedTouches[0].pageX,a.pageY=a.originalEvent.changedTouches[0].pageY,v(a)},isSupported:a,support:b()}}(),ba=function(){function h(d){d=n(d),c=a=d[0],e=b=d[1]}function i(a){a=n(a),f=a[0]-c,g=a[1]-e,c=a[0],e=a[1]}function j(){return[f,g]}function k(d){var f=d[0],g=d[1];0>a+f&&(f-=f+a),0>b+g&&(g-=g+b),G<e+g&&(g+=G-(e+g)),F<c+f&&(f+=F-(c+f)),a+=f,c+=f,b+=g,e+=g}function l(a){var b=m();switch(a){case"ne":return[b.x2,b.y];case"nw":return[b.x,b.y];case"se":return[b.x2,b.y2];case"sw":return[b.x,b.y2]}}function m(){if(!d.aspectRatio
|
||||
)return p();var f=d.aspectRatio,g=d.minSize[0]/U,h=d.maxSize[0]/U,i=d.maxSize[1]/V,j=c-a,k=e-b,l=Math.abs(j),m=Math.abs(k),n=l/m,r,s,t,u;return h===0&&(h=F*10),i===0&&(i=G*10),n<f?(s=e,t=m*f,r=j<0?a-t:t+a,r<0?(r=0,u=Math.abs((r-a)/f),s=k<0?b-u:u+b):r>F&&(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-a<g?r=a+g:r-a>h&&(r=a+h),s>b?s=b+(r-a)/f:s=b-(r-a)/f):r<a&&(a-r<g?r=a-g:a-r>h&&(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 c<a&&(e=c,f=a),d<b&&(g=d,h=b),[e,g,f,h]}function p(){var d=c-a,f=e-b,g;return Q&&Math.abs(d)>Q&&(c=d>0?a+Q:a-Q),R&&Math.abs(f)>R&&(e=f>0?b+R:b-R),T/V&&Math.abs(f)<T/V&&(e=f>0?b+T/V:b-T/V),S/U&&Math.abs(d)<S/U&&(c=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("<div />").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("<div />").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("<div />").css({position:"absolute",opacity:d.borderOpacity}).addClass(i(b));return J.append(c),c}function l(b,c){var d=a("<div />").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<a.length;b++)g[a[b]]=n(a[b])}function p(a){var b,c;for(c=0;c<a.length;c++){switch(a[c]){case"n":b="hline";break;case"s":b="hline bottom";break;case"e":b="vline right";break;case"w":b="vline"}e[a[c]]=k(b)}}function q(a){var b;for(b=0;b<a.length;b++)f[a[b]]=m(a[b])}function s(a,b){d.shade||I.css({top:h(-b),left:h(-a)}),L.css({top:h(b),left:h(a)})}function u(a,b){L.width(a).height(b)}function v(){var a=ba.getFixed();ba.setPressed([a.x,a.y]),ba.setCurrent([a.x2,a.y2]),w()}function w(a){if(b)return x(a)}function x(a){var c=ba.getFixed();u(c.w,c.h),s(c.x,c.y),d.shade&&bb.updateRaw(c),b||A(),a?d.onSelect.call(bt,t(c)):d.onChange.call(bt,t(c))}function y(a,c,e){if(!b&&!c)return;d.bgFade&&!e?E.animate({opacity:a},{queue:!1,duration:d.fadeTime}):E.css("opacity",a)}function A(){L.show(),d.shade?bb.opacity(P):y(P,!0),b=!0}function B(){F(),L.hide(),d.shade?bb.opacity(1):y(1),b=!1,d.onRelease.call(bt)}function C(){j&&K.show()}function D(){j=!0;if(d.allowResize)return K.show(),!0}function F(){j=!1,K.hide(
|
||||
)}function G(a){Y===a?F():D()}function H(){G(!1),v()}var b,c=370,e={},f={},g={},j=!1;d.dragEdges&&a.isArray(d.createDragbars)&&o(d.createDragbars),a.isArray(d.createHandles)&&q(d.createHandles),d.drawBorders&&a.isArray(d.createBorders)&&p(d.createBorders),a(document).bind("touchstart.jcrop-ios",function(b){a(b.currentTarget).hasClass("jcrop-tracker")&&b.stopPropagation()});var M=z().mousedown(r("move")).css({cursor:"move",position:"absolute",zIndex:360});return _.support&&M.bind("touchstart.jcrop",_.createDragger("move")),J.append(M),F(),{updateVisible:w,update:x,release:B,refresh:v,isAwake:function(){return b},setCursor:function(a){M.css("cursor",a)},enableHandles:D,enableOnly:function(){j=!0},showHandles:C,disableHandles:F,animMode:G,setBgOpacity:y,done:H}}(),bd=function(){function f(){N.css({zIndex:450}),_.support&&a(document).bind("touchmove.jcrop",k).bind("touchend.jcrop",m),e&&a(document).bind("mousemove.jcrop",h).bind("mouseup.jcrop",i)}function g(){N.css({zIndex:290}),a(document).unbind(".jcrop")}function h
|
||||
(a){return b(l(a)),!1}function i(a){return a.preventDefault(),a.stopPropagation(),X&&(X=!1,c(l(a)),bc.isAwake()&&d.onSelect.call(bt,t(ba.getFixed())),g(),b=function(){},c=function(){}),!1}function j(a,d){return X=!0,b=a,c=d,f(),!1}function k(a){return a.pageX=a.originalEvent.changedTouches[0].pageX,a.pageY=a.originalEvent.changedTouches[0].pageY,h(a)}function m(a){return a.pageX=a.originalEvent.changedTouches[0].pageX,a.pageY=a.originalEvent.changedTouches[0].pageY,i(a)}function n(a){N.css("cursor",a)}var b=function(){},c=function(){},e=d.trackDocument;return e||N.mousemove(h).mouseup(i).mouseout(i),E.before(N),{activateHandlers:j,setCursor:n}}(),be=function(){function e(){d.keySupport&&(b.show(),b.focus())}function f(a){b.hide()}function h(a,b,c){d.allowMove&&(ba.moveOffset([b,c]),bc.updateVisible(!0)),a.preventDefault(),a.stopPropagation()}function i(a){if(a.ctrlKey||a.metaKey)return!0;Z=a.shiftKey?!0:!1;var b=Z?10:1;switch(a.keyCode){case 37:h(a,-b,0);break;case 39:h(a,b,0);break;case 38:h(a,0,-b);break;case 40
|
||||
:h(a,0,b);break;case 27:d.allowSelect&&bc.release();break;case 9:return!0}return!1}var b=a('<input type="radio" />').css({position:"fixed",left:"-120px",width:"12px"}),c=a("<div />").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);
|
||||
Loading…
Add table
Add a link
Reference in a new issue