diff --git a/build.properties b/build.properties
index 33f337fa..04f9c9a1 100644
--- a/build.properties
+++ b/build.properties
@@ -6,7 +6,7 @@
PROJECT: openseadragon
BUILD_MAJOR: 0
BUILD_MINOR: 9
-BUILD_ID: 111
+BUILD_ID: 113s
BUILD: ${PROJECT}.${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}
VERSION: ${BUILD_MAJOR}.${BUILD_MINOR}.${BUILD_ID}
diff --git a/grunt.js b/grunt.js
new file mode 100644
index 00000000..f734d18b
--- /dev/null
+++ b/grunt.js
@@ -0,0 +1,71 @@
+module.exports = function(grunt) {
+
+ var distribution = "openseadragon.js",
+ sources = [
+ "src/openseadragon.js",
+ "src/eventhandler.js",
+ "src/mousetracker.js",
+ "src/control.js",
+ "src/controldock.js",
+ "src/viewer.js",
+ "src/navigator.js",
+ "src/strings.js",
+ "src/point.js",
+ //"src/profiler.js",
+ "src/tilesource.js",
+ "src/dzitilesource.js",
+ "src/iiiftilesource.js",
+ "src/osmtilesource.js",
+ "src/tmstilesource.js",
+ "src/legacytilesource.js",
+ "src/tilesourcecollection.js",
+ "src/button.js",
+ "src/buttongroup.js",
+ "src/rectangle.js",
+ "src/referencestrip.js",
+ "src/displayrectangle.js",
+ "src/spring.js",
+ "src/tile.js",
+ "src/overlay.js",
+ "src/drawer.js",
+ "src/viewport.js"
+ ];
+
+ // Project configuration.
+ grunt.initConfig({
+ concat: {
+ dist: {
+ src: sources,
+ dest: distribution
+ }
+ },
+ lint: {
+ beforeconcat: sources,
+ afterconcat: [ distribution ]
+ },
+ jshint: {
+ options: {
+ browser: true,
+ eqeqeq: false,
+ loopfunc: false
+ /*curly: true,
+ eqeqeq: true,
+ immed: true,
+ latedef: true,
+ newcap: true,
+ noarg: true,
+ sub: true,
+ undef: true,
+ eqnull: true,*/
+ },
+ globals: {
+ OpenSeadragon: true
+ }
+ }
+ });
+
+
+ // Default task.
+ grunt.registerTask('default', 'lint:beforeconcat concat lint:afterconcat');
+
+};
\ No newline at end of file
diff --git a/openseadragon.js b/openseadragon.js
index ecfaf58c..ca1ef96b 100644
--- a/openseadragon.js
+++ b/openseadragon.js
@@ -1,7 +1,7 @@
-/*globals OpenSeadragon */
+/*globals OpenSeadragon*/
/**
- * @version OpenSeadragon 0.9.111
+ * @version OpenSeadragon 0.9.113s
*
* @fileOverview
*
@@ -315,7 +315,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
* @see jQuery
*/
$.type = function( obj ) {
- return obj == null ?
+ return ( obj === null ) || ( obj === undefined ) ?
String( obj ) :
class2type[ toString.call(obj) ] || "object";
};
@@ -419,7 +419,8 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
+ options = arguments[ i ];
+ if ( options !== null || options !== undefined ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
@@ -472,6 +473,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
//PAN AND ZOOM SETTINGS AND CONSTRAINTS
panHorizontal: true,
panVertical: true,
+ constrainDuringPan: false,
wrapHorizontal: false,
wrapVertical: false,
visibilityRatio: 0.5,
@@ -598,10 +600,12 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
* @param {Function} method
*/
delegate: function( object, method ) {
- return function() {
- if ( arguments === undefined )
- arguments = [];
- return method.apply( object, arguments );
+ return function(){
+ var args = arguments;
+ if ( args === undefined ){
+ args = [];
+ }
+ return method.apply( object, args );
};
},
@@ -832,21 +836,21 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
window.innerWidth,
window.innerHeight
);
- }
+ };
} else if ( docElement.clientWidth || docElement.clientHeight ) {
$.getWindowSize = function(){
return new $.Point(
document.documentElement.clientWidth,
document.documentElement.clientHeight
);
- }
+ };
} else if ( body.clientWidth || body.clientHeight ) {
$.getWindowSize = function(){
return new $.Point(
document.body.clientWidth,
document.body.clientHeight
);
- }
+ };
} else {
throw new Error("Unknown window size, no known technique.");
}
@@ -1113,7 +1117,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
$.cancelEvent = function( event ){
// W3C for preventing default
event.preventDefault();
- }
+ };
} else {
$.cancelEvent = function( event ){
event = $.getEvent( event );
@@ -1212,6 +1216,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
// we could determine once at startup which activeX object
// was supported. This will have significant impact on
// performance for IE Browsers DONE
+ /*jshint loopfunc:true*/
for ( i = 0; i < ACTIVEX.length; i++ ) {
try {
request = new ActiveXObject( ACTIVEX[ i ] );
@@ -1268,7 +1273,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
/** @ignore */
request.onreadystatechange = function() {
if ( request.readyState == 4) {
- request.onreadystatechange = new function() { };
+ request.onreadystatechange = function(){};
options.success( request );
}
};
@@ -1692,7 +1697,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
} else {
return element.offsetParent;
}
- };
+ }
/**
* @private
@@ -1724,7 +1729,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
}
return processDZIXml( doc, tilesUrl );
- };
+ }
/**
* @private
@@ -1758,7 +1763,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
}
throw new Error( $.getString( "Errors.Dzi" ) );
- };
+ }
/**
* @private
@@ -1772,10 +1777,10 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
var fileFormat = imageNode.getAttribute( "Format" ),
sizeNode = imageNode.getElementsByTagName( "Size" )[ 0 ],
dispRectNodes = imageNode.getElementsByTagName( "DisplayRect" ),
- width = parseInt( sizeNode.getAttribute( "Width" ) ),
- height = parseInt( sizeNode.getAttribute( "Height" ) ),
- tileSize = parseInt( imageNode.getAttribute( "TileSize" ) ),
- tileOverlap = parseInt( imageNode.getAttribute( "Overlap" ) ),
+ width = parseInt( sizeNode.getAttribute( "Width" ), 10 ),
+ height = parseInt( sizeNode.getAttribute( "Height" ), 10 ),
+ tileSize = parseInt( imageNode.getAttribute( "TileSize" ), 10 ),
+ tileOverlap = parseInt( imageNode.getAttribute( "Overlap" ), 10 ),
dispRects = [],
dispRectNode,
rectNode,
@@ -1792,12 +1797,12 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
rectNode = dispRectNode.getElementsByTagName( "Rect" )[ 0 ];
dispRects.push( new $.DisplayRect(
- parseInt( rectNode.getAttribute( "X" ) ),
- parseInt( rectNode.getAttribute( "Y" ) ),
- parseInt( rectNode.getAttribute( "Width" ) ),
- parseInt( rectNode.getAttribute( "Height" ) ),
+ parseInt( rectNode.getAttribute( "X" ), 10 ),
+ parseInt( rectNode.getAttribute( "Y" ), 10 ),
+ parseInt( rectNode.getAttribute( "Width" ), 10 ),
+ parseInt( rectNode.getAttribute( "Height" ), 10 ),
0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- parseInt( dispRectNode.getAttribute( "MaxLevel" ) )
+ parseInt( dispRectNode.getAttribute( "MaxLevel" ), 10 )
));
}
return new $.DziTileSource(
@@ -1809,7 +1814,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
fileFormat,
dispRects
);
- };
+ }
/**
* @private
@@ -1823,10 +1828,10 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
var fileFormat = imageData.Format,
sizeData = imageData.Size,
dispRectData = imageData.DisplayRect || [],
- width = parseInt( sizeData.Width ),
- height = parseInt( sizeData.Height ),
- tileSize = parseInt( imageData.TileSize ),
- tileOverlap = parseInt( imageData.Overlap ),
+ width = parseInt( sizeData.Width, 10 ),
+ height = parseInt( sizeData.Height, 10 ),
+ tileSize = parseInt( imageData.TileSize, 10 ),
+ tileOverlap = parseInt( imageData.Overlap, 10 ),
dispRects = [],
rectData,
i;
@@ -1841,12 +1846,12 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
rectData = dispRectData[ i ].Rect;
dispRects.push( new $.DisplayRect(
- parseInt( rectData.X ),
- parseInt( rectData.Y ),
- parseInt( rectData.Width ),
- parseInt( rectData.Height ),
+ parseInt( rectData.X, 10 ),
+ parseInt( rectData.Y, 10 ),
+ parseInt( rectData.Width, 10 ),
+ parseInt( rectData.Height, 10 ),
0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- parseInt( rectData.MaxLevel )
+ parseInt( rectData.MaxLevel, 10 )
));
}
return new $.DziTileSource(
@@ -1858,7 +1863,8 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
fileFormat,
dispRects
);
- };
+ }
+
/**
* @private
* @inner
@@ -1872,10 +1878,8 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
message = messageNode.firstChild.nodeValue;
throw new Error(message);
- };
+ }
-
-
}( OpenSeadragon ));
/*globals OpenSeadragon */
@@ -2084,23 +2088,23 @@ $.EventHandler.prototype = {
* Position of last mouse down
*/
THIS[ this.hash ] = {
- "mouseover": function( event ){ onMouseOver( _this, event ); },
- "mouseout": function( event ){ onMouseOut( _this, event ); },
- "mousedown": function( event ){ onMouseDown( _this, event ); },
- "mouseup": function( event ){ onMouseUp( _this, event ); },
- "click": function( event ){ onMouseClick( _this, event ); },
- "DOMMouseScroll": function( event ){ onMouseWheelSpin( _this, event ); },
- "mousewheel": function( event ){ onMouseWheelSpin( _this, event ); },
- "mouseupie": function( event ){ onMouseUpIE( _this, event ); },
- "mousemoveie": function( event ){ onMouseMoveIE( _this, event ); },
- "mouseupwindow": function( event ){ onMouseUpWindow( _this, event ); },
- "mousemove": function( event ){ onMouseMove( _this, event ); },
- "touchstart": function( event ){ onTouchStart( _this, event ); },
- "touchmove": function( event ){ onTouchMove( _this, event ); },
- "touchend": function( event ){ onTouchEnd( _this, event ); },
- "keypress": function( event ){ onKeyPress( _this, event ); },
- "focus": function( event ){ onFocus( _this, event ); },
- "blur": function( event ){ onBlur( _this, event ); },
+ mouseover: function( event ){ onMouseOver( _this, event ); },
+ mouseout: function( event ){ onMouseOut( _this, event ); },
+ mousedown: function( event ){ onMouseDown( _this, event ); },
+ mouseup: function( event ){ onMouseUp( _this, event ); },
+ click: function( event ){ onMouseClick( _this, event ); },
+ DOMMouseScroll: function( event ){ onMouseWheelSpin( _this, event ); },
+ mousewheel: function( event ){ onMouseWheelSpin( _this, event ); },
+ mouseupie: function( event ){ onMouseUpIE( _this, event ); },
+ mousemoveie: function( event ){ onMouseMoveIE( _this, event ); },
+ mouseupwindow: function( event ){ onMouseUpWindow( _this, event ); },
+ mousemove: function( event ){ onMouseMove( _this, event ); },
+ touchstart: function( event ){ onTouchStart( _this, event ); },
+ touchmove: function( event ){ onTouchMove( _this, event ); },
+ touchend: function( event ){ onTouchEnd( _this, event ); },
+ keypress: function( event ){ onKeyPress( _this, event ); },
+ focus: function( event ){ onFocus( _this, event ); },
+ blur: function( event ){ onBlur( _this, event ); },
tracking: false,
capturing: false,
buttonDown: false,
@@ -2355,32 +2359,32 @@ $.EventHandler.prototype = {
$.removeEvent(
tracker.element,
"mouseup",
- delegate[ "mouseup" ],
+ delegate.mouseup,
false
);
$.addEvent(
tracker.element,
"mouseup",
- delegate[ "mouseupie" ],
+ delegate.mouseupie,
true
);
$.addEvent(
tracker.element,
"mousemove",
- delegate[ "mousemoveie" ],
+ delegate.mousemoveie,
true
);
} else {
$.addEvent(
window,
"mouseup",
- delegate[ "mouseupwindow" ],
+ delegate.mouseupwindow,
true
);
$.addEvent(
window,
"mousemove",
- delegate[ "mousemove" ],
+ delegate.mousemove,
true
);
}
@@ -2402,32 +2406,32 @@ $.EventHandler.prototype = {
$.removeEvent(
tracker.element,
"mousemove",
- delegate[ "mousemoveie" ],
+ delegate.mousemoveie,
true
);
$.removeEvent(
tracker.element,
"mouseup",
- delegate[ "mouseupie" ],
+ delegate.mouseupie,
true
);
$.addEvent(
tracker.element,
"mouseup",
- delegate[ "mouseup" ],
+ delegate.mouseup,
false
);
} else {
$.removeEvent(
window,
"mousemove",
- delegate[ "mousemove" ],
+ delegate.mousemove,
true
);
$.removeEvent(
window,
"mouseup",
- delegate[ "mouseupwindow" ],
+ delegate.mouseupwindow,
true
);
}
@@ -2501,7 +2505,7 @@ $.EventHandler.prototype = {
event.keyCode ? event.keyCode : event.charCode,
event.shiftKey
);
- if( propagate === false ){
+ if( !propagate ){
$.cancelEvent( event );
}
}
@@ -2514,17 +2518,17 @@ $.EventHandler.prototype = {
*/
function onMouseOver( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( $.Browser.vendor == $.BROWSERS.IE &&
$.Browser.version < 9 &&
delegate.capturing &&
!isChild( event.srcElement, tracker.element ) ) {
triggerOthers( tracker, onMouseOver, event );
-
}
var to = event.target ?
@@ -2560,10 +2564,11 @@ $.EventHandler.prototype = {
* @inner
*/
function onMouseOut( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( $.Browser.vendor == $.BROWSERS.IE &&
$.Browser.version < 9 &&
delegate.capturing &&
@@ -2607,10 +2612,11 @@ $.EventHandler.prototype = {
* @inner
*/
function onMouseDown( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -2683,14 +2689,15 @@ $.EventHandler.prototype = {
* @inner
*/
function onMouseUp( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
//were we inside the tracked element when we were pressed
insideElementPress = delegate.buttonDown,
//are we still inside the tracked element when we released
insideElementRelease = delegate.insideElement,
propagate;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -2721,8 +2728,8 @@ $.EventHandler.prototype = {
*/
function onTouchEnd( tracker, event ) {
- if( event.touches.length == 0 &&
- event.targetTouches.length == 0 &&
+ if( event.touches.length === 0 &&
+ event.targetTouches.length === 0 &&
event.changedTouches.length == 1 ){
THIS[ tracker.hash ].lastTouch = null;
@@ -2748,10 +2755,11 @@ $.EventHandler.prototype = {
* @inner
*/
function onMouseUpIE( tracker, event ) {
- var event = $.getEvent( event ),
- othertracker,
+ var othertracker,
i;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -2846,10 +2854,11 @@ $.EventHandler.prototype = {
* @inner
*/
function handleMouseClick( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -2879,11 +2888,14 @@ $.EventHandler.prototype = {
* @inner
*/
function onMouseMove( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
- point = getMouseAbsolute( event ),
- delta = point.minus( delegate.lastPoint ),
- propagate;
+ var delegate = THIS[ tracker.hash ],
+ delta,
+ propagate,
+ point;
+
+ event = $.getEvent( event );
+ point = getMouseAbsolute( event );
+ delta = point.minus( delegate.lastPoint );
delegate.lastPoint = point;
@@ -3790,7 +3802,7 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype,
overlay = this.overlayControls[ i ];
- if ( overlay.point != null ) {
+ if ( overlay.point ) {
this.drawer.addOverlay(
overlay.id,
@@ -3836,7 +3848,7 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype,
if( this.drawer ){
this.drawer.clearOverlays();
}
-
+
this.source = null;
this.drawer = null;
@@ -4482,6 +4494,9 @@ function onCanvasDrag( tracker, position, delta, shift ) {
delta.negate()
)
);
+ if( this.constrainDuringPan ){
+ this.viewport.applyConstraints();
+ }
}
}
@@ -5081,7 +5096,7 @@ $.extend( $, {
}
return string.replace(/\{\d+\}/g, function(capture) {
- var i = parseInt( capture.match( /\d+/ ) ) + 1;
+ var i = parseInt( capture.match( /\d+/ ), 10 ) + 1;
return i < args.length ?
args[ i ] :
"";
@@ -5341,6 +5356,7 @@ $.TileSource = function( width, height, tileSize, tileOverlap, minLevel, maxLeve
$.extend( true, this, options );
//Any functions that are passed as arguments are bound to the ready callback
+ /*jshint loopfunc:true*/
for( i = 0; i < arguments.length; i++ ){
if( $.isFunction( arguments[i] ) ){
callback = arguments[ i ];
@@ -5470,7 +5486,6 @@ $.TileSource.prototype = {
*/
getImageInfo: function( url ) {
var _this = this,
- url = url,
error,
callbackName,
callback,
@@ -5630,6 +5645,7 @@ function processResponse( xhr ){
data = xhr.responseText;
}
}else if( responseText.match(/\s*[\{\[].*/) ){
+ /*jshint evil:true*/
data = eval( '('+responseText+')' );
}else{
data = responseText;
@@ -5772,7 +5788,7 @@ $.extend( $.DziTileSource.prototype, $.TileSource.prototype, {
}
if( url && !options.tilesUrl ){
- if( !( 'http' == url.substring( 0, 4 ) ) ){
+ if( 'http' !== url.substring( 0, 4 ) ){
host = location.protocol + '//' + location.host;
}
dziPath = url.split('/');
@@ -5881,11 +5897,11 @@ function configureFromXML( tileSource, xmlDoc ){
xmlns: "http://schemas.microsoft.com/deepzoom/2008",
Format: root.getAttribute( "Format" ),
DisplayRect: null,
- Overlap: parseInt( root.getAttribute( "Overlap" ) ),
- TileSize: parseInt( root.getAttribute( "TileSize" ) ),
+ Overlap: parseInt( root.getAttribute( "Overlap" ), 10 ),
+ TileSize: parseInt( root.getAttribute( "TileSize" ), 10 ),
Size: {
- Height: parseInt( sizeNode.getAttribute( "Height" ) ),
- Width: parseInt( sizeNode.getAttribute( "Width" ) )
+ Height: parseInt( sizeNode.getAttribute( "Height" ), 10 ),
+ Width: parseInt( sizeNode.getAttribute( "Width" ), 10 )
}
}
};
@@ -5903,12 +5919,12 @@ function configureFromXML( tileSource, xmlDoc ){
displayRects.push({
Rect: {
- X: parseInt( rectNode.getAttribute( "X" ) ),
- Y: parseInt( rectNode.getAttribute( "Y" ) ),
- Width: parseInt( rectNode.getAttribute( "Width" ) ),
- Height: parseInt( rectNode.getAttribute( "Height" ) ),
+ X: parseInt( rectNode.getAttribute( "X" ), 10 ),
+ Y: parseInt( rectNode.getAttribute( "Y" ), 10 ),
+ Width: parseInt( rectNode.getAttribute( "Width" ), 10 ),
+ Height: parseInt( rectNode.getAttribute( "Height" ), 10 ),
MinLevel: 0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- MaxLevel: parseInt( dispRectNode.getAttribute( "MaxLevel" ) )
+ MaxLevel: parseInt( dispRectNode.getAttribute( "MaxLevel" ), 10 )
}
});
}
@@ -5931,7 +5947,7 @@ function configureFromXML( tileSource, xmlDoc ){
}
throw new Error( $.getString( "Errors.Dzi" ) );
-};
+}
/**
* @private
@@ -5944,10 +5960,10 @@ function configureFromObject( tileSource, configuration ){
fileFormat = imageData.Format,
sizeData = imageData.Size,
dispRectData = imageData.DisplayRect || [],
- width = parseInt( sizeData.Width ),
- height = parseInt( sizeData.Height ),
- tileSize = parseInt( imageData.TileSize ),
- tileOverlap = parseInt( imageData.Overlap ),
+ width = parseInt( sizeData.Width, 10 ),
+ height = parseInt( sizeData.Height, 10 ),
+ tileSize = parseInt( imageData.TileSize, 10 ),
+ tileOverlap = parseInt( imageData.Overlap, 10 ),
displayRects = [],
rectData,
i;
@@ -5969,12 +5985,12 @@ function configureFromObject( tileSource, configuration ){
rectData = dispRectData[ i ].Rect;
displayRects.push( new $.DisplayRect(
- parseInt( rectData.X ),
- parseInt( rectData.Y ),
- parseInt( rectData.Width ),
- parseInt( rectData.Height ),
+ parseInt( rectData.X, 10 ),
+ parseInt( rectData.Y, 10 ),
+ parseInt( rectData.Width, 10 ),
+ parseInt( rectData.Height, 10 ),
0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- parseInt( rectData.MaxLevel )
+ parseInt( rectData.MaxLevel, 10 )
));
}
@@ -5991,7 +6007,7 @@ function configureFromObject( tileSource, configuration ){
displayRects: displayRects /* displayRects */
};
-};
+}
}( OpenSeadragon ));
(function( $ ){
@@ -6088,7 +6104,7 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, {
service = url.split('/');
service.pop(); //info.json or info.xml
service = service.join('/');
- if( !( 'http' == url.substring( 0, 4 ) ) ){
+ if( 'http' !== url.substring( 0, 4 ) ){
host = location.protocol + '//' + location.host;
service = host + service;
}
@@ -6188,7 +6204,6 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, {
*/
function configureFromXml( tileSource, xmlDoc ){
- var configuration = {};
//parse the xml
if ( !xmlDoc || !xmlDoc.documentElement ) {
@@ -6207,14 +6222,12 @@ function configureFromXml( tileSource, xmlDoc ){
try {
-
configuration = {
"ns": root.namespaceURI
};
parseXML( root, configuration );
-
return configureFromObject( tileSource, configuration );
} catch ( e ) {
@@ -6226,7 +6239,7 @@ function configureFromXml( tileSource, xmlDoc ){
throw new Error( $.getString( "Errors.IIIF" ) );
-};
+}
/**
@@ -6283,7 +6296,7 @@ function configureFromObject( tileSource, configuration ){
configuration.tilesUrl = configuration.image_host;
}
return configuration;
-};
+}
}( OpenSeadragon ));(function( $ ){
@@ -6360,7 +6373,7 @@ $.extend( $.OsmTileSource.prototype, $.TileSource.prototype, {
return (
data.type &&
"openstreetmaps" == data.type
- )
+ );
},
/**
@@ -6781,7 +6794,7 @@ $.TileSourceCollection = function( tileSize, tileSources, rows, layout ) {
tilesPerRow = Math.ceil( options.tileSources.length / options.rows ),
longSide = tilesPerRow >= options.rows ?
tilesPerRow :
- options.rows
+ options.rows;
if( 'horizontal' == options.layout ){
options.width = ( options.tileSize ) * tilesPerRow;
@@ -6840,7 +6853,7 @@ $.extend( $.TileSourceCollection.prototype, $.TileSource.prototype, {
* @name OpenSeadragon.TileSourceCollection.prototype.configure
*/
configure: function( data, url ){
- return
+ return;
},
@@ -7441,6 +7454,7 @@ $.Rect.prototype = {
}( OpenSeadragon ));
+
(function( $ ){
// dictionary from id to private properties
@@ -7473,6 +7487,7 @@ $.ReferenceStrip = function( options ){
miniViewer,
minPixelRatio,
element,
+ style,
i;
//We may need to create a new element and id if they did not
@@ -7501,7 +7516,6 @@ $.ReferenceStrip = function( options ){
});
$.extend( this, options );
-
//Private state properties
THIS[ this.id ] = {
"animating": false
@@ -7509,17 +7523,16 @@ $.ReferenceStrip = function( options ){
this.minPixelRatio = this.viewer.minPixelRatio;
- (function( style ){
- style.marginTop = '0px';
- style.marginRight = '0px';
- style.marginBottom = '0px';
- style.marginLeft = '0px';
- style.left = '0px';
- style.bottom = '0px';
- style.border = '0px';
- style.background = '#000';
- style.position = 'relative';
- }( this.element.style ));
+ style = thie.element.style;
+ style.marginTop = '0px';
+ style.marginRight = '0px';
+ style.marginBottom = '0px';
+ style.marginLeft = '0px';
+ style.left = '0px';
+ style.bottom = '0px';
+ style.border = '0px';
+ style.background = '#000';
+ style.position = 'relative';
$.setElementOpacity( this.element, 0.8 );
@@ -7533,8 +7546,6 @@ $.ReferenceStrip = function( options ){
keyHandler: $.delegate( this, onKeyPress )
}).setTracking( true );
-
-
//Controls the position and orientation of the reference strip and sets the
//appropriate width and height
if( options.width && options.height ){
@@ -7585,32 +7596,31 @@ $.ReferenceStrip = function( options ){
this.panelHeight = ( viewerSize.y * this.sizeRatio ) + 8;
this.panels = [];
+ /*jshint loopfunc:true*/
for( i = 0; i < viewer.tileSources.length; i++ ){
element = $.makeNeutralElement('div');
element.id = this.element.id + "-" + i;
- (function(style){
- style.width = _this.panelWidth + 'px';
- style.height = _this.panelHeight + 'px';
- style.display = 'inline';
- style.float = 'left'; //Webkit
- style.cssFloat = 'left'; //Firefox
- style.styleFloat = 'left'; //IE
- style.padding = '2px';
- }(element.style));
+ element.style.width = _this.panelWidth + 'px';
+ element.style.height = _this.panelHeight + 'px';
+ element.style.display = 'inline';
+ element.style.float = 'left'; //Webkit
+ element.style.cssFloat = 'left'; //Firefox
+ element.style.styleFloat = 'left'; //IE
+ element.style.padding = '2px';
element.innerTracker = new $.MouseTracker({
- element: element,
+ element: element,
clickTimeThreshold: this.clickTimeThreshold,
clickDistThreshold: this.clickDistThreshold,
pressHandler: function( tracker ){
- tracker.dragging = +new Date;
+ tracker.dragging = +new Date();
},
releaseHandler: function( tracker, position, insideElementPress, insideElementRelease ){
var id = tracker.element.id,
page = Number( id.split( '-' )[ 2 ] ),
- now = +new Date;
+ now = +new Date();
if ( insideElementPress &&
insideElementRelease &&
@@ -7747,7 +7757,7 @@ function onStripDrag( tracker, position, delta, shift ) {
}
return false;
-};
+}
@@ -7795,7 +7805,7 @@ function onStripScroll( tracker, position, scroll, shift ) {
}
//cancels event
return false;
-};
+}
function loadPanels(strip, viewerSize, scroll){
@@ -7803,6 +7813,7 @@ function loadPanels(strip, viewerSize, scroll){
activePanelsStart,
activePanelsEnd,
miniViewer,
+ style,
i;
if( 'horizontal' == strip.scroll ){
panelSize = strip.panelWidth;
@@ -7833,20 +7844,19 @@ function loadPanels(strip, viewerSize, scroll){
miniViewer.displayRegion.id = element.id + '-displayregion';
miniViewer.displayRegion.className = 'displayregion';
- (function( style ){
- style.position = 'relative';
- style.top = '0px';
- style.left = '0px';
- style.fontSize = '0px';
- style.overflow = 'hidden';
- style.float = 'left'; //Webkit
- style.cssFloat = 'left'; //Firefox
- style.styleFloat = 'left'; //IE
- style.zIndex = 999999999;
- style.cursor = 'default';
- style.width = ( strip.panelWidth - 4 ) + 'px';
- style.height = ( strip.panelHeight - 4 ) + 'px';
- }( miniViewer.displayRegion.style ));
+ style = miniViewer.displayRegion.style;
+ style.position = 'relative';
+ style.top = '0px';
+ style.left = '0px';
+ style.fontSize = '0px';
+ style.overflow = 'hidden';
+ style.float = 'left'; //Webkit
+ style.cssFloat = 'left'; //Firefox
+ style.styleFloat = 'left'; //IE
+ style.zIndex = 999999999;
+ style.cursor = 'default';
+ style.width = ( strip.panelWidth - 4 ) + 'px';
+ style.height = ( strip.panelHeight - 4 ) + 'px';
miniViewer.displayRegion.innerTracker = new $.MouseTracker({
element: miniViewer.displayRegion
@@ -7859,7 +7869,7 @@ function loadPanels(strip, viewerSize, scroll){
element.activePanel = true;
}
}
-};
+}
/**
@@ -7885,8 +7895,8 @@ function onStripEnter( tracker ) {
tracker.element.style.marginLeft = "0px";
}
- return false
-};
+ return false;
+}
/**
@@ -7915,7 +7925,7 @@ function onStripExit( tracker ) {
}
return false;
-};
+}
@@ -7957,7 +7967,7 @@ function onKeyPress( tracker, keyCode, shiftKey ){
//console.log( 'navigator keycode %s', keyCode );
return true;
}
-};
+}
@@ -8507,10 +8517,10 @@ var DEVICE_SCREEN = $.getWindowSize(),
( BROWSER == $.BROWSERS.IE && BROWSER_VERSION >= 9 )
),
- USE_CANVAS = SUBPIXEL_RENDERING
- && !( DEVICE_SCREEN.x <= 400 || DEVICE_SCREEN.y <= 400 )
- && !( navigator.appVersion.match( 'Mobile' ) )
- && $.isFunction( document.createElement( "canvas" ).getContext );
+ USE_CANVAS = SUBPIXEL_RENDERING &&
+ !( DEVICE_SCREEN.x <= 400 || DEVICE_SCREEN.y <= 400 ) &&
+ !( navigator.appVersion.match( 'Mobile' ) ) &&
+ $.isFunction( document.createElement( "canvas" ).getContext );
//console.error( 'USE_CANVAS ' + USE_CANVAS );
@@ -8604,50 +8614,7 @@ $.Drawer = function( options ) {
for( i = 0; i < this.overlays.length; i++ ){
if( $.isPlainObject( this.overlays[ i ] ) ){
- (function( _this, overlay ){
-
- var element = null,
- rect = ( overlay.height && overlay.width ) ? new $.Rect(
- overlay.x || overlay.px,
- overlay.y || overlay.py,
- overlay.width,
- overlay.height
- ) : new $.Point(
- overlay.x || overlay.px,
- overlay.y || overlay.py
- ),
- id = overlay.id ?
- overlay.id :
- "openseadragon-overlay-"+Math.floor(Math.random()*10000000);
-
- element = $.getElement(overlay.id);
- if( !element ){
- element = document.createElement("a");
- element.href = "#/overlay/"+id;
- }
- element.id = id;
- element.className = element.className + " " + ( overlay.className ?
- overlay.className :
- "openseadragon-overlay"
- );
-
-
- if(overlay.px !== undefined){
- //if they specified 'px' so its in pixel coordinates so
- //we need to translate to viewport coordinates
- rect = _this.viewport.imageToViewportRectangle( rect );
- }
- if( overlay.placement ){
- _this.overlays[ i ] = new $.Overlay(
- element,
- _this.viewport.pointFromPixel(rect),
- $.OverlayPlacement[overlay.placement.toUpperCase()]
- );
- }else{
- _this.overlays[ i ] = new $.Overlay( element, rect );
- }
-
- }( this, this.overlays[ i ] ));
+ addOverlayFromConfiguration( this, this.overlays[ i ]);
} else if ( $.isFunction( this.overlays[ i ] ) ){
//TODO
@@ -8851,6 +8818,55 @@ $.Drawer.prototype = {
}
};
+/**
+ * @private
+ * @inner
+ */
+ function addOverlayFromConfiguration( drawer, overlay ){
+
+ var element = null,
+ rect = ( overlay.height && overlay.width ) ? new $.Rect(
+ overlay.x || overlay.px,
+ overlay.y || overlay.py,
+ overlay.width,
+ overlay.height
+ ) : new $.Point(
+ overlay.x || overlay.px,
+ overlay.y || overlay.py
+ ),
+ id = overlay.id ?
+ overlay.id :
+ "openseadragon-overlay-"+Math.floor(Math.random()*10000000);
+
+ element = $.getElement(overlay.id);
+ if( !element ){
+ element = document.createElement("a");
+ element.href = "#/overlay/"+id;
+ }
+ element.id = id;
+ element.className = element.className + " " + ( overlay.className ?
+ overlay.className :
+ "openseadragon-overlay"
+ );
+
+
+ if(overlay.px !== undefined){
+ //if they specified 'px' so its in pixel coordinates so
+ //we need to translate to viewport coordinates
+ rect = drawer.viewport.imageToViewportRectangle( rect );
+ }
+ if( overlay.placement ){
+ drawer.overlays[ i ] = new $.Overlay(
+ element,
+ drawer.viewport.pointFromPixel(rect),
+ $.OverlayPlacement[overlay.placement.toUpperCase()]
+ );
+ }else{
+ drawer.overlays[ i ] = new $.Overlay( element, rect );
+ }
+
+}
+
/**
* @private
* @inner
@@ -9514,20 +9530,18 @@ function drawTiles( drawer, lastDrawn ){
]
});
- (function(style){
- //TODO: IE seems to barf on this, not sure if its just the border
- // but we probably need to clear this up with a better
- // test of support for various css features
- if( SUBPIXEL_RENDERING ){
- style['-webkit-box-reflect'] =
- 'below 0px -webkit-gradient('+
- 'linear,left '+
- 'top,left '+
- 'bottom,from(transparent),color-stop(62%,transparent),to(rgba(255,255,255,0.62))'+
- ')';
- style['border'] = '1px solid rgba(255,255,255,0.38)';
- }
- }(viewer.element.style));
+ //TODO: IE seems to barf on this, not sure if its just the border
+ // but we probably need to clear this up with a better
+ // test of support for various css features
+ if( SUBPIXEL_RENDERING ){
+ viewer.element.style.border = '1px solid rgba(255,255,255,0.38)';
+ viewer.element.style['-webkit-box-reflect'] =
+ 'below 0px -webkit-gradient('+
+ 'linear,left '+
+ 'top,left '+
+ 'bottom,from(transparent),color-stop(62%,transparent),to(rgba(255,255,255,0.62))'+
+ ')';
+ }
drawer.addOverlay(
viewer.element,
@@ -9579,7 +9593,7 @@ function drawDebugInfo( drawer, tile, count, i ){
tile.size.x,
tile.size.y
);
- if( tile.x == 0 && tile.y == 0 ){
+ if( tile.x === 0 && tile.y === 0 ){
drawer.context.fillText(
"Zoom: " + drawer.viewport.getZoom(),
tile.position.x,
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..7d89b89c
--- /dev/null
+++ b/package.json
@@ -0,0 +1,4 @@
+{
+ "name": "openseadragon",
+ "version": "0.9.113"
+}
\ No newline at end of file
diff --git a/src/drawer.js b/src/drawer.js
index 5f39bd0a..c5a86f45 100644
--- a/src/drawer.js
+++ b/src/drawer.js
@@ -14,10 +14,10 @@ var DEVICE_SCREEN = $.getWindowSize(),
( BROWSER == $.BROWSERS.IE && BROWSER_VERSION >= 9 )
),
- USE_CANVAS = SUBPIXEL_RENDERING
- && !( DEVICE_SCREEN.x <= 400 || DEVICE_SCREEN.y <= 400 )
- && !( navigator.appVersion.match( 'Mobile' ) )
- && $.isFunction( document.createElement( "canvas" ).getContext );
+ USE_CANVAS = SUBPIXEL_RENDERING &&
+ !( DEVICE_SCREEN.x <= 400 || DEVICE_SCREEN.y <= 400 ) &&
+ !( navigator.appVersion.match( 'Mobile' ) ) &&
+ $.isFunction( document.createElement( "canvas" ).getContext );
//console.error( 'USE_CANVAS ' + USE_CANVAS );
@@ -111,50 +111,7 @@ $.Drawer = function( options ) {
for( i = 0; i < this.overlays.length; i++ ){
if( $.isPlainObject( this.overlays[ i ] ) ){
- (function( _this, overlay ){
-
- var element = null,
- rect = ( overlay.height && overlay.width ) ? new $.Rect(
- overlay.x || overlay.px,
- overlay.y || overlay.py,
- overlay.width,
- overlay.height
- ) : new $.Point(
- overlay.x || overlay.px,
- overlay.y || overlay.py
- ),
- id = overlay.id ?
- overlay.id :
- "openseadragon-overlay-"+Math.floor(Math.random()*10000000);
-
- element = $.getElement(overlay.id);
- if( !element ){
- element = document.createElement("a");
- element.href = "#/overlay/"+id;
- }
- element.id = id;
- element.className = element.className + " " + ( overlay.className ?
- overlay.className :
- "openseadragon-overlay"
- );
-
-
- if(overlay.px !== undefined){
- //if they specified 'px' so its in pixel coordinates so
- //we need to translate to viewport coordinates
- rect = _this.viewport.imageToViewportRectangle( rect );
- }
- if( overlay.placement ){
- _this.overlays[ i ] = new $.Overlay(
- element,
- _this.viewport.pointFromPixel(rect),
- $.OverlayPlacement[overlay.placement.toUpperCase()]
- );
- }else{
- _this.overlays[ i ] = new $.Overlay( element, rect );
- }
-
- }( this, this.overlays[ i ] ));
+ addOverlayFromConfiguration( this, this.overlays[ i ]);
} else if ( $.isFunction( this.overlays[ i ] ) ){
//TODO
@@ -358,6 +315,55 @@ $.Drawer.prototype = {
}
};
+/**
+ * @private
+ * @inner
+ */
+ function addOverlayFromConfiguration( drawer, overlay ){
+
+ var element = null,
+ rect = ( overlay.height && overlay.width ) ? new $.Rect(
+ overlay.x || overlay.px,
+ overlay.y || overlay.py,
+ overlay.width,
+ overlay.height
+ ) : new $.Point(
+ overlay.x || overlay.px,
+ overlay.y || overlay.py
+ ),
+ id = overlay.id ?
+ overlay.id :
+ "openseadragon-overlay-"+Math.floor(Math.random()*10000000);
+
+ element = $.getElement(overlay.id);
+ if( !element ){
+ element = document.createElement("a");
+ element.href = "#/overlay/"+id;
+ }
+ element.id = id;
+ element.className = element.className + " " + ( overlay.className ?
+ overlay.className :
+ "openseadragon-overlay"
+ );
+
+
+ if(overlay.px !== undefined){
+ //if they specified 'px' so its in pixel coordinates so
+ //we need to translate to viewport coordinates
+ rect = drawer.viewport.imageToViewportRectangle( rect );
+ }
+ if( overlay.placement ){
+ drawer.overlays[ i ] = new $.Overlay(
+ element,
+ drawer.viewport.pointFromPixel(rect),
+ $.OverlayPlacement[overlay.placement.toUpperCase()]
+ );
+ }else{
+ drawer.overlays[ i ] = new $.Overlay( element, rect );
+ }
+
+}
+
/**
* @private
* @inner
@@ -1021,20 +1027,18 @@ function drawTiles( drawer, lastDrawn ){
]
});
- (function(style){
- //TODO: IE seems to barf on this, not sure if its just the border
- // but we probably need to clear this up with a better
- // test of support for various css features
- if( SUBPIXEL_RENDERING ){
- style['-webkit-box-reflect'] =
- 'below 0px -webkit-gradient('+
- 'linear,left '+
- 'top,left '+
- 'bottom,from(transparent),color-stop(62%,transparent),to(rgba(255,255,255,0.62))'+
- ')';
- style['border'] = '1px solid rgba(255,255,255,0.38)';
- }
- }(viewer.element.style));
+ //TODO: IE seems to barf on this, not sure if its just the border
+ // but we probably need to clear this up with a better
+ // test of support for various css features
+ if( SUBPIXEL_RENDERING ){
+ viewer.element.style.border = '1px solid rgba(255,255,255,0.38)';
+ viewer.element.style['-webkit-box-reflect'] =
+ 'below 0px -webkit-gradient('+
+ 'linear,left '+
+ 'top,left '+
+ 'bottom,from(transparent),color-stop(62%,transparent),to(rgba(255,255,255,0.62))'+
+ ')';
+ }
drawer.addOverlay(
viewer.element,
@@ -1086,7 +1090,7 @@ function drawDebugInfo( drawer, tile, count, i ){
tile.size.x,
tile.size.y
);
- if( tile.x == 0 && tile.y == 0 ){
+ if( tile.x === 0 && tile.y === 0 ){
drawer.context.fillText(
"Zoom: " + drawer.viewport.getZoom(),
tile.position.x,
diff --git a/src/dzitilesource.js b/src/dzitilesource.js
index 8539284e..d28f8afc 100644
--- a/src/dzitilesource.js
+++ b/src/dzitilesource.js
@@ -107,7 +107,7 @@ $.extend( $.DziTileSource.prototype, $.TileSource.prototype, {
}
if( url && !options.tilesUrl ){
- if( !( 'http' == url.substring( 0, 4 ) ) ){
+ if( 'http' !== url.substring( 0, 4 ) ){
host = location.protocol + '//' + location.host;
}
dziPath = url.split('/');
@@ -216,11 +216,11 @@ function configureFromXML( tileSource, xmlDoc ){
xmlns: "http://schemas.microsoft.com/deepzoom/2008",
Format: root.getAttribute( "Format" ),
DisplayRect: null,
- Overlap: parseInt( root.getAttribute( "Overlap" ) ),
- TileSize: parseInt( root.getAttribute( "TileSize" ) ),
+ Overlap: parseInt( root.getAttribute( "Overlap" ), 10 ),
+ TileSize: parseInt( root.getAttribute( "TileSize" ), 10 ),
Size: {
- Height: parseInt( sizeNode.getAttribute( "Height" ) ),
- Width: parseInt( sizeNode.getAttribute( "Width" ) )
+ Height: parseInt( sizeNode.getAttribute( "Height" ), 10 ),
+ Width: parseInt( sizeNode.getAttribute( "Width" ), 10 )
}
}
};
@@ -238,12 +238,12 @@ function configureFromXML( tileSource, xmlDoc ){
displayRects.push({
Rect: {
- X: parseInt( rectNode.getAttribute( "X" ) ),
- Y: parseInt( rectNode.getAttribute( "Y" ) ),
- Width: parseInt( rectNode.getAttribute( "Width" ) ),
- Height: parseInt( rectNode.getAttribute( "Height" ) ),
+ X: parseInt( rectNode.getAttribute( "X" ), 10 ),
+ Y: parseInt( rectNode.getAttribute( "Y" ), 10 ),
+ Width: parseInt( rectNode.getAttribute( "Width" ), 10 ),
+ Height: parseInt( rectNode.getAttribute( "Height" ), 10 ),
MinLevel: 0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- MaxLevel: parseInt( dispRectNode.getAttribute( "MaxLevel" ) )
+ MaxLevel: parseInt( dispRectNode.getAttribute( "MaxLevel" ), 10 )
}
});
}
@@ -266,7 +266,7 @@ function configureFromXML( tileSource, xmlDoc ){
}
throw new Error( $.getString( "Errors.Dzi" ) );
-};
+}
/**
* @private
@@ -279,10 +279,10 @@ function configureFromObject( tileSource, configuration ){
fileFormat = imageData.Format,
sizeData = imageData.Size,
dispRectData = imageData.DisplayRect || [],
- width = parseInt( sizeData.Width ),
- height = parseInt( sizeData.Height ),
- tileSize = parseInt( imageData.TileSize ),
- tileOverlap = parseInt( imageData.Overlap ),
+ width = parseInt( sizeData.Width, 10 ),
+ height = parseInt( sizeData.Height, 10 ),
+ tileSize = parseInt( imageData.TileSize, 10 ),
+ tileOverlap = parseInt( imageData.Overlap, 10 ),
displayRects = [],
rectData,
i;
@@ -304,12 +304,12 @@ function configureFromObject( tileSource, configuration ){
rectData = dispRectData[ i ].Rect;
displayRects.push( new $.DisplayRect(
- parseInt( rectData.X ),
- parseInt( rectData.Y ),
- parseInt( rectData.Width ),
- parseInt( rectData.Height ),
+ parseInt( rectData.X, 10 ),
+ parseInt( rectData.Y, 10 ),
+ parseInt( rectData.Width, 10 ),
+ parseInt( rectData.Height, 10 ),
0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- parseInt( rectData.MaxLevel )
+ parseInt( rectData.MaxLevel, 10 )
));
}
@@ -326,6 +326,6 @@ function configureFromObject( tileSource, configuration ){
displayRects: displayRects /* displayRects */
};
-};
+}
}( OpenSeadragon ));
diff --git a/src/iiiftilesource.js b/src/iiiftilesource.js
index 4b4b6111..1cf51de5 100644
--- a/src/iiiftilesource.js
+++ b/src/iiiftilesource.js
@@ -92,7 +92,7 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, {
service = url.split('/');
service.pop(); //info.json or info.xml
service = service.join('/');
- if( !( 'http' == url.substring( 0, 4 ) ) ){
+ if( 'http' !== url.substring( 0, 4 ) ){
host = location.protocol + '//' + location.host;
service = host + service;
}
@@ -192,7 +192,6 @@ $.extend( $.IIIFTileSource.prototype, $.TileSource.prototype, {
*/
function configureFromXml( tileSource, xmlDoc ){
- var configuration = {};
//parse the xml
if ( !xmlDoc || !xmlDoc.documentElement ) {
@@ -211,14 +210,12 @@ function configureFromXml( tileSource, xmlDoc ){
try {
-
configuration = {
"ns": root.namespaceURI
};
parseXML( root, configuration );
-
return configureFromObject( tileSource, configuration );
} catch ( e ) {
@@ -230,7 +227,7 @@ function configureFromXml( tileSource, xmlDoc ){
throw new Error( $.getString( "Errors.IIIF" ) );
-};
+}
/**
@@ -287,6 +284,6 @@ function configureFromObject( tileSource, configuration ){
configuration.tilesUrl = configuration.image_host;
}
return configuration;
-};
+}
}( OpenSeadragon ));
\ No newline at end of file
diff --git a/src/mousetracker.js b/src/mousetracker.js
index 1e5e8181..6bcb74eb 100644
--- a/src/mousetracker.js
+++ b/src/mousetracker.js
@@ -108,23 +108,23 @@
* Position of last mouse down
*/
THIS[ this.hash ] = {
- "mouseover": function( event ){ onMouseOver( _this, event ); },
- "mouseout": function( event ){ onMouseOut( _this, event ); },
- "mousedown": function( event ){ onMouseDown( _this, event ); },
- "mouseup": function( event ){ onMouseUp( _this, event ); },
- "click": function( event ){ onMouseClick( _this, event ); },
- "DOMMouseScroll": function( event ){ onMouseWheelSpin( _this, event ); },
- "mousewheel": function( event ){ onMouseWheelSpin( _this, event ); },
- "mouseupie": function( event ){ onMouseUpIE( _this, event ); },
- "mousemoveie": function( event ){ onMouseMoveIE( _this, event ); },
- "mouseupwindow": function( event ){ onMouseUpWindow( _this, event ); },
- "mousemove": function( event ){ onMouseMove( _this, event ); },
- "touchstart": function( event ){ onTouchStart( _this, event ); },
- "touchmove": function( event ){ onTouchMove( _this, event ); },
- "touchend": function( event ){ onTouchEnd( _this, event ); },
- "keypress": function( event ){ onKeyPress( _this, event ); },
- "focus": function( event ){ onFocus( _this, event ); },
- "blur": function( event ){ onBlur( _this, event ); },
+ mouseover: function( event ){ onMouseOver( _this, event ); },
+ mouseout: function( event ){ onMouseOut( _this, event ); },
+ mousedown: function( event ){ onMouseDown( _this, event ); },
+ mouseup: function( event ){ onMouseUp( _this, event ); },
+ click: function( event ){ onMouseClick( _this, event ); },
+ DOMMouseScroll: function( event ){ onMouseWheelSpin( _this, event ); },
+ mousewheel: function( event ){ onMouseWheelSpin( _this, event ); },
+ mouseupie: function( event ){ onMouseUpIE( _this, event ); },
+ mousemoveie: function( event ){ onMouseMoveIE( _this, event ); },
+ mouseupwindow: function( event ){ onMouseUpWindow( _this, event ); },
+ mousemove: function( event ){ onMouseMove( _this, event ); },
+ touchstart: function( event ){ onTouchStart( _this, event ); },
+ touchmove: function( event ){ onTouchMove( _this, event ); },
+ touchend: function( event ){ onTouchEnd( _this, event ); },
+ keypress: function( event ){ onKeyPress( _this, event ); },
+ focus: function( event ){ onFocus( _this, event ); },
+ blur: function( event ){ onBlur( _this, event ); },
tracking: false,
capturing: false,
buttonDown: false,
@@ -379,32 +379,32 @@
$.removeEvent(
tracker.element,
"mouseup",
- delegate[ "mouseup" ],
+ delegate.mouseup,
false
);
$.addEvent(
tracker.element,
"mouseup",
- delegate[ "mouseupie" ],
+ delegate.mouseupie,
true
);
$.addEvent(
tracker.element,
"mousemove",
- delegate[ "mousemoveie" ],
+ delegate.mousemoveie,
true
);
} else {
$.addEvent(
window,
"mouseup",
- delegate[ "mouseupwindow" ],
+ delegate.mouseupwindow,
true
);
$.addEvent(
window,
"mousemove",
- delegate[ "mousemove" ],
+ delegate.mousemove,
true
);
}
@@ -426,32 +426,32 @@
$.removeEvent(
tracker.element,
"mousemove",
- delegate[ "mousemoveie" ],
+ delegate.mousemoveie,
true
);
$.removeEvent(
tracker.element,
"mouseup",
- delegate[ "mouseupie" ],
+ delegate.mouseupie,
true
);
$.addEvent(
tracker.element,
"mouseup",
- delegate[ "mouseup" ],
+ delegate.mouseup,
false
);
} else {
$.removeEvent(
window,
"mousemove",
- delegate[ "mousemove" ],
+ delegate.mousemove,
true
);
$.removeEvent(
window,
"mouseup",
- delegate[ "mouseupwindow" ],
+ delegate.mouseupwindow,
true
);
}
@@ -525,7 +525,7 @@
event.keyCode ? event.keyCode : event.charCode,
event.shiftKey
);
- if( propagate === false ){
+ if( !propagate ){
$.cancelEvent( event );
}
}
@@ -538,17 +538,17 @@
*/
function onMouseOver( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( $.Browser.vendor == $.BROWSERS.IE &&
$.Browser.version < 9 &&
delegate.capturing &&
!isChild( event.srcElement, tracker.element ) ) {
triggerOthers( tracker, onMouseOver, event );
-
}
var to = event.target ?
@@ -584,10 +584,11 @@
* @inner
*/
function onMouseOut( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( $.Browser.vendor == $.BROWSERS.IE &&
$.Browser.version < 9 &&
delegate.capturing &&
@@ -631,10 +632,11 @@
* @inner
*/
function onMouseDown( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -707,14 +709,15 @@
* @inner
*/
function onMouseUp( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
//were we inside the tracked element when we were pressed
insideElementPress = delegate.buttonDown,
//are we still inside the tracked element when we released
insideElementRelease = delegate.insideElement,
propagate;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -745,8 +748,8 @@
*/
function onTouchEnd( tracker, event ) {
- if( event.touches.length == 0 &&
- event.targetTouches.length == 0 &&
+ if( event.touches.length === 0 &&
+ event.targetTouches.length === 0 &&
event.changedTouches.length == 1 ){
THIS[ tracker.hash ].lastTouch = null;
@@ -772,10 +775,11 @@
* @inner
*/
function onMouseUpIE( tracker, event ) {
- var event = $.getEvent( event ),
- othertracker,
+ var othertracker,
i;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -870,10 +874,11 @@
* @inner
*/
function handleMouseClick( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
+ var delegate = THIS[ tracker.hash ],
propagate;
+ event = $.getEvent( event );
+
if ( event.button == 2 ) {
return;
}
@@ -903,11 +908,14 @@
* @inner
*/
function onMouseMove( tracker, event ) {
- var event = $.getEvent( event ),
- delegate = THIS[ tracker.hash ],
- point = getMouseAbsolute( event ),
- delta = point.minus( delegate.lastPoint ),
- propagate;
+ var delegate = THIS[ tracker.hash ],
+ delta,
+ propagate,
+ point;
+
+ event = $.getEvent( event );
+ point = getMouseAbsolute( event );
+ delta = point.minus( delegate.lastPoint );
delegate.lastPoint = point;
diff --git a/src/openseadragon.js b/src/openseadragon.js
index bb938dd9..7fddd839 100644
--- a/src/openseadragon.js
+++ b/src/openseadragon.js
@@ -1,4 +1,4 @@
-/*globals OpenSeadragon */
+/*globals OpenSeadragon*/
/**
* @version OpenSeadragon @VERSION@
@@ -315,7 +315,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
* @see jQuery
*/
$.type = function( obj ) {
- return obj == null ?
+ return ( obj === null ) || ( obj === undefined ) ?
String( obj ) :
class2type[ toString.call(obj) ] || "object";
};
@@ -419,7 +419,8 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
- if ( ( options = arguments[ i ] ) != null ) {
+ options = arguments[ i ];
+ if ( options !== null || options !== undefined ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
@@ -472,6 +473,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
//PAN AND ZOOM SETTINGS AND CONSTRAINTS
panHorizontal: true,
panVertical: true,
+ constrainDuringPan: false,
wrapHorizontal: false,
wrapVertical: false,
visibilityRatio: 0.5,
@@ -598,10 +600,12 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
* @param {Function} method
*/
delegate: function( object, method ) {
- return function() {
- if ( arguments === undefined )
- arguments = [];
- return method.apply( object, arguments );
+ return function(){
+ var args = arguments;
+ if ( args === undefined ){
+ args = [];
+ }
+ return method.apply( object, args );
};
},
@@ -832,21 +836,21 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
window.innerWidth,
window.innerHeight
);
- }
+ };
} else if ( docElement.clientWidth || docElement.clientHeight ) {
$.getWindowSize = function(){
return new $.Point(
document.documentElement.clientWidth,
document.documentElement.clientHeight
);
- }
+ };
} else if ( body.clientWidth || body.clientHeight ) {
$.getWindowSize = function(){
return new $.Point(
document.body.clientWidth,
document.body.clientHeight
);
- }
+ };
} else {
throw new Error("Unknown window size, no known technique.");
}
@@ -1113,7 +1117,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
$.cancelEvent = function( event ){
// W3C for preventing default
event.preventDefault();
- }
+ };
} else {
$.cancelEvent = function( event ){
event = $.getEvent( event );
@@ -1212,6 +1216,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
// we could determine once at startup which activeX object
// was supported. This will have significant impact on
// performance for IE Browsers DONE
+ /*jshint loopfunc:true*/
for ( i = 0; i < ACTIVEX.length; i++ ) {
try {
request = new ActiveXObject( ACTIVEX[ i ] );
@@ -1268,7 +1273,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
/** @ignore */
request.onreadystatechange = function() {
if ( request.readyState == 4) {
- request.onreadystatechange = new function() { };
+ request.onreadystatechange = function(){};
options.success( request );
}
};
@@ -1692,7 +1697,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
} else {
return element.offsetParent;
}
- };
+ }
/**
* @private
@@ -1724,7 +1729,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
}
return processDZIXml( doc, tilesUrl );
- };
+ }
/**
* @private
@@ -1758,7 +1763,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
}
throw new Error( $.getString( "Errors.Dzi" ) );
- };
+ }
/**
* @private
@@ -1772,10 +1777,10 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
var fileFormat = imageNode.getAttribute( "Format" ),
sizeNode = imageNode.getElementsByTagName( "Size" )[ 0 ],
dispRectNodes = imageNode.getElementsByTagName( "DisplayRect" ),
- width = parseInt( sizeNode.getAttribute( "Width" ) ),
- height = parseInt( sizeNode.getAttribute( "Height" ) ),
- tileSize = parseInt( imageNode.getAttribute( "TileSize" ) ),
- tileOverlap = parseInt( imageNode.getAttribute( "Overlap" ) ),
+ width = parseInt( sizeNode.getAttribute( "Width" ), 10 ),
+ height = parseInt( sizeNode.getAttribute( "Height" ), 10 ),
+ tileSize = parseInt( imageNode.getAttribute( "TileSize" ), 10 ),
+ tileOverlap = parseInt( imageNode.getAttribute( "Overlap" ), 10 ),
dispRects = [],
dispRectNode,
rectNode,
@@ -1792,12 +1797,12 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
rectNode = dispRectNode.getElementsByTagName( "Rect" )[ 0 ];
dispRects.push( new $.DisplayRect(
- parseInt( rectNode.getAttribute( "X" ) ),
- parseInt( rectNode.getAttribute( "Y" ) ),
- parseInt( rectNode.getAttribute( "Width" ) ),
- parseInt( rectNode.getAttribute( "Height" ) ),
+ parseInt( rectNode.getAttribute( "X" ), 10 ),
+ parseInt( rectNode.getAttribute( "Y" ), 10 ),
+ parseInt( rectNode.getAttribute( "Width" ), 10 ),
+ parseInt( rectNode.getAttribute( "Height" ), 10 ),
0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- parseInt( dispRectNode.getAttribute( "MaxLevel" ) )
+ parseInt( dispRectNode.getAttribute( "MaxLevel" ), 10 )
));
}
return new $.DziTileSource(
@@ -1809,7 +1814,7 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
fileFormat,
dispRects
);
- };
+ }
/**
* @private
@@ -1823,10 +1828,10 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
var fileFormat = imageData.Format,
sizeData = imageData.Size,
dispRectData = imageData.DisplayRect || [],
- width = parseInt( sizeData.Width ),
- height = parseInt( sizeData.Height ),
- tileSize = parseInt( imageData.TileSize ),
- tileOverlap = parseInt( imageData.Overlap ),
+ width = parseInt( sizeData.Width, 10 ),
+ height = parseInt( sizeData.Height, 10 ),
+ tileSize = parseInt( imageData.TileSize, 10 ),
+ tileOverlap = parseInt( imageData.Overlap, 10 ),
dispRects = [],
rectData,
i;
@@ -1841,12 +1846,12 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
rectData = dispRectData[ i ].Rect;
dispRects.push( new $.DisplayRect(
- parseInt( rectData.X ),
- parseInt( rectData.Y ),
- parseInt( rectData.Width ),
- parseInt( rectData.Height ),
+ parseInt( rectData.X, 10 ),
+ parseInt( rectData.Y, 10 ),
+ parseInt( rectData.Width, 10 ),
+ parseInt( rectData.Height, 10 ),
0, // ignore MinLevel attribute, bug in Deep Zoom Composer
- parseInt( rectData.MaxLevel )
+ parseInt( rectData.MaxLevel, 10 )
));
}
return new $.DziTileSource(
@@ -1858,7 +1863,8 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
fileFormat,
dispRects
);
- };
+ }
+
/**
* @private
* @inner
@@ -1872,8 +1878,6 @@ window.OpenSeadragon = window.OpenSeadragon || function( options ){
message = messageNode.firstChild.nodeValue;
throw new Error(message);
- };
+ }
-
-
}( OpenSeadragon ));
diff --git a/src/osmtilesource.js b/src/osmtilesource.js
index 3672231c..4b72276c 100644
--- a/src/osmtilesource.js
+++ b/src/osmtilesource.js
@@ -73,7 +73,7 @@ $.extend( $.OsmTileSource.prototype, $.TileSource.prototype, {
return (
data.type &&
"openstreetmaps" == data.type
- )
+ );
},
/**
diff --git a/src/referencestrip.js b/src/referencestrip.js
index 5caa5f75..bb3051e4 100644
--- a/src/referencestrip.js
+++ b/src/referencestrip.js
@@ -1,3 +1,4 @@
+
(function( $ ){
// dictionary from id to private properties
@@ -30,6 +31,7 @@ $.ReferenceStrip = function( options ){
miniViewer,
minPixelRatio,
element,
+ style,
i;
//We may need to create a new element and id if they did not
@@ -58,7 +60,6 @@ $.ReferenceStrip = function( options ){
});
$.extend( this, options );
-
//Private state properties
THIS[ this.id ] = {
"animating": false
@@ -66,17 +67,16 @@ $.ReferenceStrip = function( options ){
this.minPixelRatio = this.viewer.minPixelRatio;
- (function( style ){
- style.marginTop = '0px';
- style.marginRight = '0px';
- style.marginBottom = '0px';
- style.marginLeft = '0px';
- style.left = '0px';
- style.bottom = '0px';
- style.border = '0px';
- style.background = '#000';
- style.position = 'relative';
- }( this.element.style ));
+ style = thie.element.style;
+ style.marginTop = '0px';
+ style.marginRight = '0px';
+ style.marginBottom = '0px';
+ style.marginLeft = '0px';
+ style.left = '0px';
+ style.bottom = '0px';
+ style.border = '0px';
+ style.background = '#000';
+ style.position = 'relative';
$.setElementOpacity( this.element, 0.8 );
@@ -90,8 +90,6 @@ $.ReferenceStrip = function( options ){
keyHandler: $.delegate( this, onKeyPress )
}).setTracking( true );
-
-
//Controls the position and orientation of the reference strip and sets the
//appropriate width and height
if( options.width && options.height ){
@@ -142,32 +140,31 @@ $.ReferenceStrip = function( options ){
this.panelHeight = ( viewerSize.y * this.sizeRatio ) + 8;
this.panels = [];
+ /*jshint loopfunc:true*/
for( i = 0; i < viewer.tileSources.length; i++ ){
element = $.makeNeutralElement('div');
element.id = this.element.id + "-" + i;
- (function(style){
- style.width = _this.panelWidth + 'px';
- style.height = _this.panelHeight + 'px';
- style.display = 'inline';
- style.float = 'left'; //Webkit
- style.cssFloat = 'left'; //Firefox
- style.styleFloat = 'left'; //IE
- style.padding = '2px';
- }(element.style));
+ element.style.width = _this.panelWidth + 'px';
+ element.style.height = _this.panelHeight + 'px';
+ element.style.display = 'inline';
+ element.style.float = 'left'; //Webkit
+ element.style.cssFloat = 'left'; //Firefox
+ element.style.styleFloat = 'left'; //IE
+ element.style.padding = '2px';
element.innerTracker = new $.MouseTracker({
- element: element,
+ element: element,
clickTimeThreshold: this.clickTimeThreshold,
clickDistThreshold: this.clickDistThreshold,
pressHandler: function( tracker ){
- tracker.dragging = +new Date;
+ tracker.dragging = +new Date();
},
releaseHandler: function( tracker, position, insideElementPress, insideElementRelease ){
var id = tracker.element.id,
page = Number( id.split( '-' )[ 2 ] ),
- now = +new Date;
+ now = +new Date();
if ( insideElementPress &&
insideElementRelease &&
@@ -304,7 +301,7 @@ function onStripDrag( tracker, position, delta, shift ) {
}
return false;
-};
+}
@@ -352,7 +349,7 @@ function onStripScroll( tracker, position, scroll, shift ) {
}
//cancels event
return false;
-};
+}
function loadPanels(strip, viewerSize, scroll){
@@ -360,6 +357,7 @@ function loadPanels(strip, viewerSize, scroll){
activePanelsStart,
activePanelsEnd,
miniViewer,
+ style,
i;
if( 'horizontal' == strip.scroll ){
panelSize = strip.panelWidth;
@@ -390,20 +388,19 @@ function loadPanels(strip, viewerSize, scroll){
miniViewer.displayRegion.id = element.id + '-displayregion';
miniViewer.displayRegion.className = 'displayregion';
- (function( style ){
- style.position = 'relative';
- style.top = '0px';
- style.left = '0px';
- style.fontSize = '0px';
- style.overflow = 'hidden';
- style.float = 'left'; //Webkit
- style.cssFloat = 'left'; //Firefox
- style.styleFloat = 'left'; //IE
- style.zIndex = 999999999;
- style.cursor = 'default';
- style.width = ( strip.panelWidth - 4 ) + 'px';
- style.height = ( strip.panelHeight - 4 ) + 'px';
- }( miniViewer.displayRegion.style ));
+ style = miniViewer.displayRegion.style;
+ style.position = 'relative';
+ style.top = '0px';
+ style.left = '0px';
+ style.fontSize = '0px';
+ style.overflow = 'hidden';
+ style.float = 'left'; //Webkit
+ style.cssFloat = 'left'; //Firefox
+ style.styleFloat = 'left'; //IE
+ style.zIndex = 999999999;
+ style.cursor = 'default';
+ style.width = ( strip.panelWidth - 4 ) + 'px';
+ style.height = ( strip.panelHeight - 4 ) + 'px';
miniViewer.displayRegion.innerTracker = new $.MouseTracker({
element: miniViewer.displayRegion
@@ -416,7 +413,7 @@ function loadPanels(strip, viewerSize, scroll){
element.activePanel = true;
}
}
-};
+}
/**
@@ -442,8 +439,8 @@ function onStripEnter( tracker ) {
tracker.element.style.marginLeft = "0px";
}
- return false
-};
+ return false;
+}
/**
@@ -472,7 +469,7 @@ function onStripExit( tracker ) {
}
return false;
-};
+}
@@ -514,7 +511,7 @@ function onKeyPress( tracker, keyCode, shiftKey ){
//console.log( 'navigator keycode %s', keyCode );
return true;
}
-};
+}
diff --git a/src/strings.js b/src/strings.js
index 22e676e6..16f2df8a 100644
--- a/src/strings.js
+++ b/src/strings.js
@@ -57,7 +57,7 @@ $.extend( $, {
}
return string.replace(/\{\d+\}/g, function(capture) {
- var i = parseInt( capture.match( /\d+/ ) ) + 1;
+ var i = parseInt( capture.match( /\d+/ ), 10 ) + 1;
return i < args.length ?
args[ i ] :
"";
diff --git a/src/tilesource.js b/src/tilesource.js
index 79d134c6..c28fa138 100644
--- a/src/tilesource.js
+++ b/src/tilesource.js
@@ -83,6 +83,7 @@ $.TileSource = function( width, height, tileSize, tileOverlap, minLevel, maxLeve
$.extend( true, this, options );
//Any functions that are passed as arguments are bound to the ready callback
+ /*jshint loopfunc:true*/
for( i = 0; i < arguments.length; i++ ){
if( $.isFunction( arguments[i] ) ){
callback = arguments[ i ];
@@ -212,7 +213,6 @@ $.TileSource.prototype = {
*/
getImageInfo: function( url ) {
var _this = this,
- url = url,
error,
callbackName,
callback,
@@ -372,6 +372,7 @@ function processResponse( xhr ){
data = xhr.responseText;
}
}else if( responseText.match(/\s*[\{\[].*/) ){
+ /*jshint evil:true*/
data = eval( '('+responseText+')' );
}else{
data = responseText;
diff --git a/src/tilesourcecollection.js b/src/tilesourcecollection.js
index 0102d54a..6de32155 100644
--- a/src/tilesourcecollection.js
+++ b/src/tilesourcecollection.js
@@ -29,7 +29,7 @@ $.TileSourceCollection = function( tileSize, tileSources, rows, layout ) {
tilesPerRow = Math.ceil( options.tileSources.length / options.rows ),
longSide = tilesPerRow >= options.rows ?
tilesPerRow :
- options.rows
+ options.rows;
if( 'horizontal' == options.layout ){
options.width = ( options.tileSize ) * tilesPerRow;
@@ -88,7 +88,7 @@ $.extend( $.TileSourceCollection.prototype, $.TileSource.prototype, {
* @name OpenSeadragon.TileSourceCollection.prototype.configure
*/
configure: function( data, url ){
- return
+ return;
},
diff --git a/src/viewer.js b/src/viewer.js
index e5e4c575..fa026253 100644
--- a/src/viewer.js
+++ b/src/viewer.js
@@ -471,7 +471,7 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype,
overlay = this.overlayControls[ i ];
- if ( overlay.point != null ) {
+ if ( overlay.point ) {
this.drawer.addOverlay(
overlay.id,
@@ -517,7 +517,7 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype,
if( this.drawer ){
this.drawer.clearOverlays();
}
-
+
this.source = null;
this.drawer = null;
@@ -1163,6 +1163,9 @@ function onCanvasDrag( tracker, position, delta, shift ) {
delta.negate()
)
);
+ if( this.constrainDuringPan ){
+ this.viewport.applyConstraints();
+ }
}
}
diff --git a/www/ui-zoom-and-pan.html b/www/ui-zoom-and-pan.html
index 1d5af620..9dff830d 100644
--- a/www/ui-zoom-and-pan.html
+++ b/www/ui-zoom-and-pan.html
@@ -9,12 +9,19 @@ the minimum and maximum zoom range as well as the range of panning.
the options:
-
panHorizontal(default:) true
+
-
panVertical(default:) true
+
+ -
+ constrainDuringPan(default:) false
+
-
wrapHorizontal(default:) false
+
-
wrapVertical(default:) false
+
-
visibilityRatio(default:) 0.5
@@ -40,13 +47,16 @@ the minimum and maximum zoom range as well as the range of panning.
-
Constraining by viewport visibility as a ratio.
+
Constraining by viewport visibility as a ratio, and constraining during panning
The option
visibilityRatio, which is by default 0.5,
ensure that you cannot pan the image far enough to fill the viewport with
more than 50% background. Setting it to 1, as in this example, ensure
- the image cannot be panned so as to show any background.
+ the image cannot be panned so as to show any background. Normally OpenSeadragon
+ will enforce this by 'bouncing' back when the pan dragging is released. In this
+ example we also add constrainDuringPan: true which stop the drag
+ immediately when it hits the bounding area.
@@ -60,7 +70,8 @@ the minimum and maximum zoom range as well as the range of panning.
id: "visibility-ratio-1",
prefixUrl: "/openseadragon/images/",
tileSources: "/openseadragon/examples/images/highsmith/highsmith.dzi",
- visibilityRatio: 1.0
+ visibilityRatio: 1.0,
+ constrainDuringPan: true
});
@@ -69,6 +80,7 @@ the minimum and maximum zoom range as well as the range of panning.
OpenSeadragon({
...
visibilityRatio: 1.0,
+ constrainDuringPan: true
...
});
@@ -83,7 +95,7 @@ the minimum and maximum zoom range as well as the range of panning.
- A visibilityRatio of 1.
+ Vertical scroll and zoom.