mirror of
https://github.com/openseadragon/openseadragon.git
synced 2024-11-25 06:36:11 +03:00
Merge remote branch 'upstream/master' into getString-error
Conflicts: test/test.html
This commit is contained in:
commit
eb14eae428
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,5 +1,3 @@
|
|||||||
*.sublime-workspace
|
*.sublime-workspace
|
||||||
node_modules
|
node_modules
|
||||||
build/
|
build/
|
||||||
openseadragon.zip
|
|
||||||
openseadragon.tar
|
|
||||||
|
39
Gruntfile.js
39
Gruntfile.js
@ -12,8 +12,11 @@ module.exports = function(grunt) {
|
|||||||
grunt.loadNpmTasks("grunt-git-describe");
|
grunt.loadNpmTasks("grunt-git-describe");
|
||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
var distribution = "build/openseadragon/openseadragon.js",
|
var packageJson = grunt.file.readJSON("package.json"),
|
||||||
|
distribution = "build/openseadragon/openseadragon.js",
|
||||||
minified = "build/openseadragon/openseadragon.min.js",
|
minified = "build/openseadragon/openseadragon.min.js",
|
||||||
|
packageDirName = "openseadragon-bin-" + packageJson.version,
|
||||||
|
packageDir = "build/" + packageDirName + "/",
|
||||||
releaseRoot = "../site-build/built-openseadragon/",
|
releaseRoot = "../site-build/built-openseadragon/",
|
||||||
sources = [
|
sources = [
|
||||||
"src/openseadragon.js",
|
"src/openseadragon.js",
|
||||||
@ -49,11 +52,12 @@ module.exports = function(grunt) {
|
|||||||
// ----------
|
// ----------
|
||||||
// Project configuration.
|
// Project configuration.
|
||||||
grunt.initConfig({
|
grunt.initConfig({
|
||||||
pkg: grunt.file.readJSON("package.json"),
|
pkg: packageJson,
|
||||||
clean: {
|
clean: {
|
||||||
build: ["build"],
|
build: ["build"],
|
||||||
|
package: [packageDir],
|
||||||
release: {
|
release: {
|
||||||
src: [releaseRoot],
|
src: [releaseRoot + '*', '!' + releaseRoot + 'releases'],
|
||||||
options: {
|
options: {
|
||||||
force: true
|
force: true
|
||||||
}
|
}
|
||||||
@ -84,18 +88,20 @@ module.exports = function(grunt) {
|
|||||||
compress: {
|
compress: {
|
||||||
zip: {
|
zip: {
|
||||||
options: {
|
options: {
|
||||||
archive: "build/openseadragon.zip"
|
archive: "build/releases/" + packageDirName + ".zip",
|
||||||
|
level: 9
|
||||||
},
|
},
|
||||||
files: [
|
files: [
|
||||||
{ expand: true, cwd: "build/", src: ["openseadragon/**"] }
|
{ expand: true, cwd: "build/", src: [ packageDirName + "/**" ] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
tar: {
|
tar: {
|
||||||
options: {
|
options: {
|
||||||
archive: "build/openseadragon.tar"
|
archive: "build/releases/" + packageDirName + ".tar.gz",
|
||||||
|
level: 9
|
||||||
},
|
},
|
||||||
files: [
|
files: [
|
||||||
{ expand: true, cwd: "build/", src: [ "openseadragon/**" ] }
|
{ expand: true, cwd: "build/", src: [ packageDirName + "/**" ] }
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -150,6 +156,21 @@ module.exports = function(grunt) {
|
|||||||
grunt.file.copy("changelog.txt", "build/changelog.txt");
|
grunt.file.copy("changelog.txt", "build/changelog.txt");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ----------
|
||||||
|
// Copy:package task.
|
||||||
|
// Creates a directory tree to be compressed into a package.
|
||||||
|
grunt.registerTask("copy:package", function() {
|
||||||
|
grunt.file.recurse("build/openseadragon", function(abspath, rootdir, subdir, filename) {
|
||||||
|
var dest = packageDir
|
||||||
|
+ (subdir ? subdir + "/" : '/')
|
||||||
|
+ filename;
|
||||||
|
grunt.file.copy(abspath, dest);
|
||||||
|
});
|
||||||
|
grunt.file.copy("changelog.txt", packageDir + "changelog.txt");
|
||||||
|
grunt.file.copy("licenses/mit.txt", packageDir + "licenses/mit.txt");
|
||||||
|
grunt.file.copy("licenses/new-bsd.txt", packageDir + "licenses/new-bsd.txt");
|
||||||
|
});
|
||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
// Copy:release task.
|
// Copy:release task.
|
||||||
// Copies the contents of the build folder into the release folder.
|
// Copies the contents of the build folder into the release folder.
|
||||||
@ -177,8 +198,8 @@ module.exports = function(grunt) {
|
|||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
// Package task.
|
// Package task.
|
||||||
// Builds and creates the .zip and .tar files.
|
// Builds and creates the .zip and .tar.gz files.
|
||||||
grunt.registerTask("package", ["build", "compress"]);
|
grunt.registerTask("package", ["build", "copy:package", "compress", "clean:package"]);
|
||||||
|
|
||||||
// ----------
|
// ----------
|
||||||
// Publish task.
|
// Publish task.
|
||||||
|
18
README.md
18
README.md
@ -1,10 +1,12 @@
|
|||||||
# OpenSeadragon
|
# OpenSeadragon
|
||||||
|
|
||||||
This project is a fork of the OpenSeadragon project at http://openseadragon.codeplex.com/
|
An open-source, web-based viewer for zoomable images, implemented in pure JavaScript.
|
||||||
|
|
||||||
## On the Web
|
See it in action at http://openseadragon.github.io/.
|
||||||
|
|
||||||
http://openseadragon.github.io/
|
## Stable Builds
|
||||||
|
|
||||||
|
See our [releases page](http://openseadragon.github.io/releases/).
|
||||||
|
|
||||||
## First Time Setup
|
## First Time Setup
|
||||||
|
|
||||||
@ -40,7 +42,7 @@ You can also publish the built version to the site-build repository. This assume
|
|||||||
|
|
||||||
grunt publish
|
grunt publish
|
||||||
|
|
||||||
... which will delete the existing openseadragon folder, along with the .zip and .tar files, out of the site-build folder and replace them with newly built ones from the source in this repository; you'll then need to commit the changes to site-build.
|
... which will delete the existing openseadragon folder, along with the .zip and .tar.gz files, out of the site-build folder and replace them with newly built ones from the source in this repository; you'll then need to commit the changes to site-build.
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
@ -60,6 +62,14 @@ OpenSeadragon is truly a community project; we welcome your involvement!
|
|||||||
|
|
||||||
When contributing, please attempt to match the code style already in the codebase. Note that we use four spaces per indentation stop. For more thoughts on code style, see https://github.com/rwldrn/idiomatic.js/.
|
When contributing, please attempt to match the code style already in the codebase. Note that we use four spaces per indentation stop. For more thoughts on code style, see https://github.com/rwldrn/idiomatic.js/.
|
||||||
|
|
||||||
|
When fixing bugs and adding features, when appropriate please also:
|
||||||
|
|
||||||
|
* Update changelog.txt
|
||||||
|
* Add/update related unit tests
|
||||||
|
* Update related doc comments
|
||||||
|
|
||||||
|
If you're new to the project, check out our [good first bug](https://github.com/openseadragon/openseadragon/issues?labels=good+first+bug&page=1&state=open) issues for some places to dip your toe in the water.
|
||||||
|
|
||||||
## Licenses
|
## Licenses
|
||||||
|
|
||||||
OpenSeadragon was initially released with a New BSD License ( preserved below ), while work done by Chris Thatcher is additionally licensed under the MIT License.
|
OpenSeadragon was initially released with a New BSD License ( preserved below ), while work done by Chris Thatcher is additionally licensed under the MIT License.
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
OPENSEADRAGON CHANGELOG
|
OPENSEADRAGON CHANGELOG
|
||||||
=======================
|
=======================
|
||||||
|
|
||||||
0.9.125: In Progress
|
0.9.127: (in progress)
|
||||||
|
|
||||||
|
0.9.126:
|
||||||
|
|
||||||
|
* DZI JSONp was broken; fixed.
|
||||||
|
|
||||||
|
0.9.125:
|
||||||
|
|
||||||
* Fully deprecated OpenSeadragon.createFromDZI, safely deprecated Viewer.openTileSource and
|
* Fully deprecated OpenSeadragon.createFromDZI, safely deprecated Viewer.openTileSource and
|
||||||
Viewer.openDZI to use Viewer.open internally. (#53 & #54).
|
Viewer.openDZI to use Viewer.open internally. (#53 & #54).
|
||||||
* Full page bug fix for when viewer is child of document body (#43).
|
* Full page bug fix for when viewer is child of document body (#43).
|
||||||
* Overlays for DZI bug fix (#45).
|
* Overlays for DZI bug fix (#45).
|
||||||
|
* DziTileSource: avoid changing relative paths (#56).
|
||||||
|
* Fix typo in preserveViewport handling (#77).
|
||||||
|
* Fix updateMulti timer leak after multiple Viewer.open() calls (#76).
|
||||||
|
* Minor documentation fixes.
|
||||||
|
|
||||||
0.9.124:
|
0.9.124:
|
||||||
|
|
||||||
|
@ -3,7 +3,13 @@
|
|||||||
[
|
[
|
||||||
{
|
{
|
||||||
"path": ".",
|
"path": ".",
|
||||||
"file_exclude_patterns": ["*.sublime-project", "*.sublime-workspace"]
|
"file_exclude_patterns": [
|
||||||
|
"*.sublime-project",
|
||||||
|
"*.sublime-workspace"
|
||||||
|
],
|
||||||
|
"folder_exclude_patterns": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"settings":
|
"settings":
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"name": "OpenSeadragon",
|
"name": "OpenSeadragon",
|
||||||
"version": "0.9.124",
|
"version": "0.9.126",
|
||||||
"description": "Provides a smooth, zoomable user interface for HTML/Javascript.",
|
"description": "Provides a smooth, zoomable user interface for HTML/Javascript.",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"grunt": "~0.4.0",
|
"grunt": "~0.4.0",
|
||||||
"grunt-contrib-compress": "~0.4.0",
|
"grunt-contrib-compress": "~0.5.0",
|
||||||
"grunt-contrib-concat": "~0.1.2",
|
"grunt-contrib-concat": "~0.1.2",
|
||||||
"grunt-contrib-jshint": "~0.1.1",
|
"grunt-contrib-jshint": "~0.1.1",
|
||||||
"grunt-contrib-uglify": "~0.1.1",
|
"grunt-contrib-uglify": "~0.1.1",
|
||||||
|
@ -109,7 +109,7 @@ $.extend( $.DziTileSource.prototype, $.TileSource.prototype, {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (url && !options.tilesUrl) {
|
if (url && !options.tilesUrl) {
|
||||||
options.tilesUrl = url.replace(/([^\/]+)\.dzi$/, '$1_files/');
|
options.tilesUrl = url.replace(/([^\/]+)\.(dzi|xml|js)$/, '$1_files/');
|
||||||
}
|
}
|
||||||
|
|
||||||
return options;
|
return options;
|
||||||
|
@ -6,21 +6,13 @@
|
|||||||
// pythons gettext might be a reasonable approach.
|
// pythons gettext might be a reasonable approach.
|
||||||
var I18N = {
|
var I18N = {
|
||||||
Errors: {
|
Errors: {
|
||||||
Failure: "Sorry, but Seadragon Ajax can't run on your browser!\n" +
|
|
||||||
"Please try using IE 7 or Firefox 3.\n",
|
|
||||||
Dzc: "Sorry, we don't support Deep Zoom Collections!",
|
Dzc: "Sorry, we don't support Deep Zoom Collections!",
|
||||||
Dzi: "Hmm, this doesn't appear to be a valid Deep Zoom Image.",
|
Dzi: "Hmm, this doesn't appear to be a valid Deep Zoom Image.",
|
||||||
Xml: "Hmm, this doesn't appear to be a valid Deep Zoom Image.",
|
Xml: "Hmm, this doesn't appear to be a valid Deep Zoom Image.",
|
||||||
Empty: "You asked us to open nothing, so we did just that.",
|
|
||||||
ImageFormat: "Sorry, we don't support {0}-based Deep Zoom Images.",
|
ImageFormat: "Sorry, we don't support {0}-based Deep Zoom Images.",
|
||||||
Security: "It looks like a security restriction stopped us from " +
|
Security: "It looks like a security restriction stopped us from " +
|
||||||
"loading this Deep Zoom Image.",
|
"loading this Deep Zoom Image.",
|
||||||
Status: "This space unintentionally left blank ({0} {1}).",
|
Status: "This space unintentionally left blank ({0} {1})."
|
||||||
Unknown: "Whoops, something inexplicably went wrong. Sorry!"
|
|
||||||
},
|
|
||||||
|
|
||||||
Messages: {
|
|
||||||
Loading: "Loading..."
|
|
||||||
},
|
},
|
||||||
|
|
||||||
Tooltips: {
|
Tooltips: {
|
||||||
|
@ -24,10 +24,12 @@ var THIS = {},
|
|||||||
* @param {String} options.xmlPath Xpath ( TODO: not sure! ),
|
* @param {String} options.xmlPath Xpath ( TODO: not sure! ),
|
||||||
* @param {String} options.prefixUrl Url used to prepend to paths, eg button
|
* @param {String} options.prefixUrl Url used to prepend to paths, eg button
|
||||||
* images, etc.
|
* images, etc.
|
||||||
* @param {Seadragon.Controls[]} options.controls Array of Seadragon.Controls,
|
* @param {OpenSeadragon.Control[]} options.controls Array of OpenSeadragon.Control,
|
||||||
* @param {Seadragon.Overlays[]} options.overlays Array of Seadragon.Overlays,
|
* @param {OpenSeadragon.Overlay[]} options.overlays Array of OpenSeadragon.Overlay,
|
||||||
* @param {Seadragon.Controls[]} options.overlayControls An Array of ( TODO:
|
* @param {OpenSeadragon.Control[]} options.overlayControls An Array of ( TODO:
|
||||||
* not sure! )
|
* not sure! )
|
||||||
|
* @property {OpenSeadragon.Viewport} viewport The viewer's viewport, where you
|
||||||
|
* can access zoom, pan, etc.
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
$.Viewer = function( options ) {
|
$.Viewer = function( options ) {
|
||||||
@ -115,8 +117,7 @@ $.Viewer = function( options ) {
|
|||||||
THIS[ this.hash ] = {
|
THIS[ this.hash ] = {
|
||||||
"fsBoundsDelta": new $.Point( 1, 1 ),
|
"fsBoundsDelta": new $.Point( 1, 1 ),
|
||||||
"prevContainerSize": null,
|
"prevContainerSize": null,
|
||||||
"lastOpenStartTime": 0,
|
"updateRequestId": null,
|
||||||
"lastOpenEndTime": 0,
|
|
||||||
"animating": false,
|
"animating": false,
|
||||||
"forceRedraw": false,
|
"forceRedraw": false,
|
||||||
"mouseInside": false,
|
"mouseInside": false,
|
||||||
@ -355,6 +356,10 @@ $.extend( $.Viewer.prototype, $.EventHandler.prototype, $.ControlDock.prototype,
|
|||||||
* @return {OpenSeadragon.Viewer} Chainable.
|
* @return {OpenSeadragon.Viewer} Chainable.
|
||||||
*/
|
*/
|
||||||
close: function ( ) {
|
close: function ( ) {
|
||||||
|
if ( THIS[ this.hash ].updateRequestId !== null ){
|
||||||
|
$.cancelAnimationFrame( THIS[ this.hash ].updateRequestId );
|
||||||
|
THIS[ this.hash ].updateRequestId = null;
|
||||||
|
}
|
||||||
|
|
||||||
if( this.drawer ){
|
if( this.drawer ){
|
||||||
this.drawer.clearOverlays();
|
this.drawer.clearOverlays();
|
||||||
@ -956,16 +961,6 @@ function openTileSource( viewer, source ) {
|
|||||||
_this.close( );
|
_this.close( );
|
||||||
}
|
}
|
||||||
|
|
||||||
// to ignore earlier opens
|
|
||||||
THIS[ _this.hash ].lastOpenStartTime = +new Date();
|
|
||||||
|
|
||||||
window.setTimeout( function () {
|
|
||||||
if ( THIS[ _this.hash ].lastOpenStartTime > THIS[ _this.hash ].lastOpenEndTime ) {
|
|
||||||
THIS[ _this.hash ].setMessage( $.getString( "Messages.Loading" ) );
|
|
||||||
}
|
|
||||||
}, 2000);
|
|
||||||
|
|
||||||
THIS[ _this.hash ].lastOpenEndTime = +new Date();
|
|
||||||
_this.canvas.innerHTML = "";
|
_this.canvas.innerHTML = "";
|
||||||
THIS[ _this.hash ].prevContainerSize = $.getElementSize( _this.container );
|
THIS[ _this.hash ].prevContainerSize = $.getElementSize( _this.container );
|
||||||
|
|
||||||
@ -1014,7 +1009,7 @@ function openTileSource( viewer, source ) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if( _this.preserveVewport ){
|
if( _this.preserveViewport ){
|
||||||
_this.viewport.resetContentSize( _this.source.dimensions );
|
_this.viewport.resetContentSize( _this.source.dimensions );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1076,7 +1071,7 @@ function openTileSource( viewer, source ) {
|
|||||||
|
|
||||||
THIS[ _this.hash ].animating = false;
|
THIS[ _this.hash ].animating = false;
|
||||||
THIS[ _this.hash ].forceRedraw = true;
|
THIS[ _this.hash ].forceRedraw = true;
|
||||||
scheduleUpdate( _this, updateMulti );
|
THIS[ _this.hash ].updateRequestId = scheduleUpdate( _this, updateMulti );
|
||||||
|
|
||||||
//Assuming you had programatically created a bunch of overlays
|
//Assuming you had programatically created a bunch of overlays
|
||||||
//and added them via configuration
|
//and added them via configuration
|
||||||
@ -1351,12 +1346,15 @@ function updateMulti( viewer ) {
|
|||||||
var beginTime;
|
var beginTime;
|
||||||
|
|
||||||
if ( !viewer.source ) {
|
if ( !viewer.source ) {
|
||||||
|
THIS[ viewer.hash ].updateRequestId = null;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
beginTime = +new Date();
|
beginTime = +new Date();
|
||||||
updateOnce( viewer );
|
updateOnce( viewer );
|
||||||
scheduleUpdate( viewer, arguments.callee, beginTime );
|
|
||||||
|
THIS[ viewer.hash ].updateRequestId = scheduleUpdate( viewer,
|
||||||
|
arguments.callee, beginTime );
|
||||||
}
|
}
|
||||||
|
|
||||||
function updateOnce( viewer ) {
|
function updateOnce( viewer ) {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
(function() {
|
(function() {
|
||||||
|
|
||||||
|
module('Basic');
|
||||||
|
|
||||||
// TODO: Tighten up springs and use "immediate" where possible, so tests run faster
|
// TODO: Tighten up springs and use "immediate" where possible, so tests run faster
|
||||||
// TODO: Test drag
|
// TODO: Test drag
|
||||||
|
|
||||||
@ -104,6 +106,7 @@
|
|||||||
asyncTest('Close', function() {
|
asyncTest('Close', function() {
|
||||||
var closeHandler = function() {
|
var closeHandler = function() {
|
||||||
viewer.removeHandler('close', closeHandler);
|
viewer.removeHandler('close', closeHandler);
|
||||||
|
$('#example').empty();
|
||||||
ok(true, 'Close event was sent');
|
ok(true, 'Close event was sent');
|
||||||
start();
|
start();
|
||||||
};
|
};
|
||||||
|
12
test/data/testpattern.js
Normal file
12
test/data/testpattern.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
testpattern({
|
||||||
|
Image: {
|
||||||
|
xmlns: 'http://schemas.microsoft.com/deepzoom/2008',
|
||||||
|
Format: 'jpg',
|
||||||
|
Overlap: 1,
|
||||||
|
TileSize: 254,
|
||||||
|
Size:{
|
||||||
|
Height: 1000,
|
||||||
|
Width: 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
51
test/dzi-jsonp.js
Normal file
51
test/dzi-jsonp.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
(function() {
|
||||||
|
|
||||||
|
// TODO: How to know if a tile has been drawn? The tile-drawn event used below
|
||||||
|
// is defunct.
|
||||||
|
|
||||||
|
module('DZI JSONp');
|
||||||
|
|
||||||
|
var viewer = null;
|
||||||
|
|
||||||
|
// ----------
|
||||||
|
asyncTest('Open', function() {
|
||||||
|
$(document).ready(function() {
|
||||||
|
viewer = OpenSeadragon({
|
||||||
|
id: 'example',
|
||||||
|
prefixUrl: '/build/openseadragon/images/',
|
||||||
|
tileSources: '/test/data/testpattern.js'
|
||||||
|
});
|
||||||
|
|
||||||
|
ok(viewer, 'Viewer exists');
|
||||||
|
|
||||||
|
var openHandler = function(eventSender, eventData) {
|
||||||
|
viewer.removeHandler('open', openHandler);
|
||||||
|
ok(true, 'Open event was sent');
|
||||||
|
viewer.drawer.viewer = viewer;
|
||||||
|
viewer.addHandler('tile-drawn', tileDrawnHandler);
|
||||||
|
};
|
||||||
|
|
||||||
|
var tileDrawnHandler = function(eventSender, eventData) {
|
||||||
|
viewer.removeHandler('tile-drawn', tileDrawnHandler);
|
||||||
|
ok(true, 'A tile has been drawn');
|
||||||
|
start();
|
||||||
|
};
|
||||||
|
|
||||||
|
viewer.addHandler('open', openHandler);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
// ----------
|
||||||
|
// asyncTest('Close', function() {
|
||||||
|
// var closeHandler = function() {
|
||||||
|
// viewer.removeHandler('close', closeHandler);
|
||||||
|
// $('#example').empty();
|
||||||
|
// ok(true, 'Close event was sent');
|
||||||
|
// start();
|
||||||
|
// };
|
||||||
|
|
||||||
|
// viewer.addHandler('close', closeHandler);
|
||||||
|
// viewer.close();
|
||||||
|
// });
|
||||||
|
|
||||||
|
})();
|
@ -17,5 +17,6 @@
|
|||||||
<script src="/test/util.js"></script>
|
<script src="/test/util.js"></script>
|
||||||
<script src="/test/basic.js"></script>
|
<script src="/test/basic.js"></script>
|
||||||
<script src="/test/strings.js"></script>
|
<script src="/test/strings.js"></script>
|
||||||
|
<!-- <script src="/test/dzi-jsonp.js"></script> -->
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
Loading…
Reference in New Issue
Block a user