2011-12-06 07:50:25 +04:00
|
|
|
/**
|
|
|
|
* (c) 2011 Christopher Thatcher
|
|
|
|
* (c) 2010 OpenSeadragon
|
|
|
|
* (c) 2010 CodePlex Foundation
|
|
|
|
*
|
|
|
|
* OpenSeadragon @VERSION@
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
* License: New BSD License (BSD)
|
|
|
|
* Copyright (c) 2010, OpenSeadragon
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions are met:
|
|
|
|
*
|
|
|
|
* * Redistributions of source code must retain the above copyright notice, this
|
|
|
|
* list of conditions and the following disclaimer.
|
|
|
|
*
|
|
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
|
|
* and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* * Neither the name of OpenSeadragon nor the names of its contributors may be
|
|
|
|
* used to endorse or promote products derived from this software without
|
|
|
|
* specific prior written permission.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
|
|
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
|
|
|
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
|
|
* POSSIBILITY OF SUCH DAMAGE.
|
|
|
|
*
|
|
|
|
* ----------------------------------------------------------------------------
|
|
|
|
*
|
|
|
|
**/
|
|
|
|
|
2011-12-07 05:26:06 +04:00
|
|
|
OpenSeadragon = window.OpenSeadragon || (function(){
|
|
|
|
|
|
|
|
//Taken from jquery 1.6.1
|
|
|
|
// [[Class]] -> type pairs
|
|
|
|
var class2type = {
|
|
|
|
'[object Boolean]': 'boolean',
|
|
|
|
'[object Number]': 'number',
|
|
|
|
'[object String]': 'string',
|
|
|
|
'[object Function]': 'function',
|
|
|
|
'[object Array]': 'array',
|
|
|
|
'[object Date]': 'date',
|
|
|
|
'[object RegExp]': 'regexp',
|
|
|
|
'[object Object]': 'object'
|
|
|
|
},
|
|
|
|
// Save a reference to some core methods
|
2011-12-08 06:10:13 +04:00
|
|
|
toString = Object.prototype.toString,
|
|
|
|
hasOwn = Object.prototype.hasOwnProperty,
|
|
|
|
push = Array.prototype.push,
|
|
|
|
slice = Array.prototype.slice,
|
|
|
|
trim = String.prototype.trim,
|
|
|
|
indexOf = Array.prototype.indexOf;
|
2011-12-07 05:26:06 +04:00
|
|
|
|
|
|
|
return {
|
|
|
|
// See test/unit/core.js for details concerning isFunction.
|
|
|
|
// Since version 1.3, DOM methods and functions like alert
|
|
|
|
// aren't supported. They return false on IE (#2968).
|
|
|
|
isFunction: function( obj ) {
|
|
|
|
return OpenSeadragon.type(obj) === "function";
|
|
|
|
},
|
|
|
|
|
|
|
|
isArray: Array.isArray || function( obj ) {
|
|
|
|
return OpenSeadragon.type(obj) === "array";
|
|
|
|
},
|
|
|
|
|
|
|
|
// A crude way of determining if an object is a window
|
|
|
|
isWindow: function( obj ) {
|
|
|
|
return obj && typeof obj === "object" && "setInterval" in obj;
|
|
|
|
},
|
|
|
|
|
|
|
|
type: function( obj ) {
|
|
|
|
return obj == null ?
|
|
|
|
String( obj ) :
|
|
|
|
class2type[ toString.call(obj) ] || "object";
|
|
|
|
},
|
|
|
|
|
|
|
|
isPlainObject: function( obj ) {
|
|
|
|
// Must be an Object.
|
|
|
|
// Because of IE, we also have to check the presence of the constructor property.
|
|
|
|
// Make sure that DOM nodes and window objects don't pass through, as well
|
|
|
|
if ( !obj || OpenSeadragon.type(obj) !== "object" || obj.nodeType || OpenSeadragon.isWindow( obj ) ) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Not own constructor property must be Object
|
|
|
|
if ( obj.constructor &&
|
|
|
|
!hasOwn.call(obj, "constructor") &&
|
|
|
|
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Own properties are enumerated firstly, so to speed up,
|
|
|
|
// if last one is own, then all properties are own.
|
|
|
|
|
|
|
|
var key;
|
|
|
|
for ( key in obj ) {}
|
|
|
|
|
|
|
|
return key === undefined || hasOwn.call( obj, key );
|
|
|
|
},
|
|
|
|
|
|
|
|
isEmptyObject: function( obj ) {
|
|
|
|
for ( var name in obj ) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}());
|
2011-12-06 07:50:25 +04:00
|
|
|
|
|
|
|
(function( $ ){
|
|
|
|
|
2011-12-06 16:21:30 +04:00
|
|
|
$.SIGNAL = "----seadragon----";
|
2011-12-06 07:50:25 +04:00
|
|
|
|
|
|
|
$.delegate = function(object, method) {
|
|
|
|
return function() {
|
|
|
|
if (arguments === undefined)
|
|
|
|
arguments = [];
|
|
|
|
return method.apply(object, arguments);
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
2011-12-07 05:26:06 +04:00
|
|
|
//Taken from jQuery 1.6.1:
|
|
|
|
$.extend = function() {
|
|
|
|
var options, name, src, copy, copyIsArray, clone,
|
|
|
|
target = arguments[0] || {},
|
|
|
|
i = 1,
|
|
|
|
length = arguments.length,
|
|
|
|
deep = false;
|
|
|
|
|
|
|
|
// Handle a deep copy situation
|
|
|
|
if ( typeof target === "boolean" ) {
|
|
|
|
deep = target;
|
|
|
|
target = arguments[1] || {};
|
|
|
|
// skip the boolean and the target
|
|
|
|
i = 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Handle case when target is a string or something (possible in deep copy)
|
|
|
|
if ( typeof target !== "object" && !OpenSeadragon.isFunction(target) ) {
|
|
|
|
target = {};
|
|
|
|
}
|
|
|
|
|
|
|
|
// extend jQuery itself if only one argument is passed
|
|
|
|
if ( length === i ) {
|
|
|
|
target = this;
|
|
|
|
--i;
|
|
|
|
}
|
|
|
|
|
|
|
|
for ( ; i < length; i++ ) {
|
|
|
|
// Only deal with non-null/undefined values
|
|
|
|
if ( (options = arguments[ i ]) != null ) {
|
|
|
|
// Extend the base object
|
|
|
|
for ( name in options ) {
|
|
|
|
src = target[ name ];
|
|
|
|
copy = options[ name ];
|
|
|
|
|
|
|
|
// Prevent never-ending loop
|
|
|
|
if ( target === copy ) {
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
|
|
|
// Recurse if we're merging plain objects or arrays
|
|
|
|
if ( deep && copy && ( OpenSeadragon.isPlainObject(copy) || (copyIsArray = OpenSeadragon.isArray(copy)) ) ) {
|
|
|
|
if ( copyIsArray ) {
|
|
|
|
copyIsArray = false;
|
|
|
|
clone = src && OpenSeadragon.isArray(src) ? src : [];
|
|
|
|
|
|
|
|
} else {
|
|
|
|
clone = src && OpenSeadragon.isPlainObject(src) ? src : {};
|
|
|
|
}
|
|
|
|
|
|
|
|
// Never move original objects, clone them
|
|
|
|
target[ name ] = OpenSeadragon.extend( deep, clone, copy );
|
|
|
|
|
|
|
|
// Don't bring in undefined values
|
|
|
|
} else if ( copy !== undefined ) {
|
|
|
|
target[ name ] = copy;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return the modified object
|
|
|
|
return target;
|
|
|
|
};
|
|
|
|
|
2011-12-06 07:50:25 +04:00
|
|
|
}( OpenSeadragon ));
|