├── .gitignore ├── common ├── logo128.png ├── logo16.png ├── logo48.png ├── openseadragon │ ├── images │ │ ├── button_rest.png │ │ ├── flip_hover.png │ │ ├── flip_rest.png │ │ ├── home_hover.png │ │ ├── home_rest.png │ │ ├── next_hover.png │ │ ├── next_rest.png │ │ ├── zoomin_rest.png │ │ ├── button_hover.png │ │ ├── flip_pressed.png │ │ ├── fullpage_rest.png │ │ ├── home_pressed.png │ │ ├── next_pressed.png │ │ ├── previous_rest.png │ │ ├── zoomin_hover.png │ │ ├── zoomout_hover.png │ │ ├── zoomout_rest.png │ │ ├── button_pressed.png │ │ ├── flip_grouphover.png │ │ ├── fullpage_hover.png │ │ ├── fullpage_pressed.png │ │ ├── home_grouphover.png │ │ ├── next_grouphover.png │ │ ├── previous_hover.png │ │ ├── previous_pressed.png │ │ ├── rotateleft_hover.png │ │ ├── rotateleft_rest.png │ │ ├── rotateright_rest.png │ │ ├── zoomin_pressed.png │ │ ├── zoomout_pressed.png │ │ ├── button_grouphover.png │ │ ├── rotateleft_pressed.png │ │ ├── rotateright_hover.png │ │ ├── zoomin_grouphover.png │ │ ├── zoomout_grouphover.png │ │ ├── fullpage_grouphover.png │ │ ├── previous_grouphover.png │ │ ├── rotateleft_grouphover.png │ │ ├── rotateright_pressed.png │ │ └── rotateright_grouphover.png │ ├── LICENSE.txt │ └── changelog.txt ├── index.html ├── loading.svg ├── style.css └── index.js ├── .editorconfig ├── nbproject ├── project.xml ├── project.properties └── licenseheader.txt ├── webextension ├── manifest.json └── webextension.js ├── osd-browser-extension.sublime-project ├── package.json ├── LICENSE.txt ├── README.md └── Gruntfile.js /.gitignore: -------------------------------------------------------------------------------- 1 | .directory 2 | build/ 3 | node_modules/ 4 | *.sublime-workspace 5 | /nbproject/private/ 6 | -------------------------------------------------------------------------------- /common/logo128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/logo128.png -------------------------------------------------------------------------------- /common/logo16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/logo16.png -------------------------------------------------------------------------------- /common/logo48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/logo48.png -------------------------------------------------------------------------------- /common/openseadragon/images/button_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/button_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/flip_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/flip_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/flip_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/flip_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/home_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/home_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/home_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/home_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/next_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/next_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/next_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/next_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomin_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomin_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/button_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/button_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/flip_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/flip_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/fullpage_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/fullpage_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/home_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/home_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/next_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/next_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/previous_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/previous_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomin_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomin_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomout_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomout_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomout_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomout_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/button_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/button_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/flip_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/flip_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/fullpage_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/fullpage_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/fullpage_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/fullpage_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/home_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/home_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/next_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/next_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/previous_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/previous_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/previous_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/previous_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateleft_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateleft_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateleft_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateleft_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateright_rest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateright_rest.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomin_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomin_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomout_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomout_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/button_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/button_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateleft_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateleft_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateright_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateright_hover.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomin_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomin_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/zoomout_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/zoomout_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/fullpage_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/fullpage_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/previous_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/previous_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateleft_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateleft_grouphover.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateright_pressed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateright_pressed.png -------------------------------------------------------------------------------- /common/openseadragon/images/rotateright_grouphover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/openseadragon/browser-extension/HEAD/common/openseadragon/images/rotateright_grouphover.png -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | # We need to specify each folder specifically to avoid including common/openseadragon 5 | [{package.json,Gruntfile.js,common/*,chromium/**,firefox/**}] 6 | indent_style = space 7 | indent_size = 4 8 | end_of_line = lf 9 | charset = utf-8 10 | trim_trailing_whitespace = true 11 | insert_final_newline = true 12 | 13 | [{package.json,.travis.yml,.jshintrc}] 14 | indent_style = space 15 | indent_size = 2 -------------------------------------------------------------------------------- /nbproject/project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | org.netbeans.modules.web.clientproject 4 | 5 | 6 | browser-extension 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /webextension/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "name": "OpenSeadragonizer", 4 | "description": "Display big images in OpenSeadragon to enable zoom and pan.", 5 | "version": "1.2.3", 6 | "background": { 7 | "scripts": ["webextension.js"] 8 | }, 9 | "permissions": [ 10 | "contextMenus" 11 | ], 12 | "icons": { 13 | "16": "logo16.png", 14 | "48": "logo48.png", 15 | "128": "logo128.png" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /osd-browser-extension.sublime-project: -------------------------------------------------------------------------------- 1 | { 2 | "folders": 3 | [ 4 | { 5 | "path": ".", 6 | "file_exclude_patterns": [ 7 | "*.sublime-project", 8 | "*.sublime-workspace" 9 | ], 10 | "folder_exclude_patterns": [ 11 | "node_modules", 12 | "build" 13 | ] 14 | } 15 | ], 16 | "settings": 17 | { 18 | "tab_size": 4, 19 | "translate_tabs_to_spaces": true, 20 | "trim_trailing_white_space_on_save": true 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "openseadragon-browser-extension", 3 | "version": "0.0.1", 4 | "description": "Browser extension for OpenSeadragon. The version listed here is just to keep NPM happy, but it's not the current OpenSeadragon version (so we don't have to try to keep them in sync).", 5 | "license": "BSD-3-Clause", 6 | "repository": "https://github.com/openseadragon/browser-extension.git", 7 | "devDependencies": { 8 | "grunt": "^1.5.3", 9 | "grunt-contrib-clean": "^0.6.0", 10 | "grunt-contrib-compress": "^1.4.3", 11 | "grunt-contrib-watch": "^1.1.0" 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /common/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | OpenSeadragon 8 | 9 | 10 |
11 |
12 | 21 |
22 | 23 | loading 24 | Image loading... 25 | 26 |
27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) 2015 OpenSeadragon contributors 2 | 3 | Redistribution and use in source and binary forms, with or without 4 | modification, are permitted provided that the following conditions are met: 5 | 6 | - Redistributions of source code must retain the above copyright notice, 7 | this list of conditions and the following disclaimer. 8 | 9 | - Redistributions in binary form must reproduce the above copyright notice, 10 | this list of conditions and the following disclaimer in the documentation 11 | and/or other materials provided with the distribution. 12 | 13 | - Neither the name of OpenSeadragon nor the names of its contributors 14 | may be used to endorse or promote products derived from this software 15 | without specific prior written permission. 16 | 17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 18 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 19 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 20 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 21 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 24 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 25 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 26 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 27 | POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /common/openseadragon/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (C) 2009 CodePlex Foundation 2 | Copyright (C) 2010-2022 OpenSeadragon contributors 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | - Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | - Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | - Neither the name of CodePlex Foundation nor the names of its contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | POSSIBILITY OF SUCH DAMAGE. 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # OpenSeadragonizer: zooming browser extension 2 | 3 | ## Installation 4 | 5 | - [Chrome](https://chrome.google.com/webstore/detail/openseadragonizer/lbjfeiidhldnfohmhnnnjgcmgjbnibgd) 6 | - [Firefox](https://addons.mozilla.org/en-US/firefox/addon/openseadragonizer/) 7 | 8 | ## Usage 9 | 10 | With the browser extension installed, right click on any image on a webpage and select "View with OpenSeadragon". 11 | 12 | ## Development 13 | 14 | ### First Time Setup 15 | 16 | All command-line operations for building and testing OpenSeadragon are scripted using [Grunt](http://gruntjs.com/) which is based on [Node.js](http://nodejs.org/). To get set up: 17 | 18 | 1. Install Node, if you haven't already (available at the link above) 19 | 1. Install the Grunt command line runner (if you haven't already); on the command line, run `npm install -g grunt-cli` 20 | 1. Clone the browser-extension repository 21 | 1. On the command line, go in to the browser-extension folder 22 | 1. Run `npm install` 23 | 24 | You're set... continue reading for build and test instructions. 25 | 26 | ### Building from Source 27 | 28 | To build, just run (on the command line, in the browser-extension folder): 29 | 30 | grunt 31 | 32 | If you want Grunt to watch your source files and rebuild every time you change one, use: 33 | 34 | grunt watch 35 | 36 | ### Testing in Chrome 37 | 38 | 1. Go to your Chrome settings and then extensions. 39 | 1. Turn on the "Developer mode" checkbox. 40 | 1. Choose "Load unpacked extension" and select build/webextension from this repository. 41 | 42 | ### Testing in Firefox 43 | 44 | 1. Type `about:debugging` in the address bar. 45 | 1. Click on "Load Temporary Add-on" and select build/webextension from this repository. 46 | 47 | ### Publishing the standalone web site 48 | 49 | 1. Run `grunt publish`. 50 | 1. Commit and push the `../openseadragon.github.com` website. 51 | -------------------------------------------------------------------------------- /nbproject/project.properties: -------------------------------------------------------------------------------- 1 | auxiliary.org-netbeans-modules-css-prep.less_2e_compiler_2e_options= 2 | auxiliary.org-netbeans-modules-css-prep.less_2e_enabled=false 3 | auxiliary.org-netbeans-modules-css-prep.less_2e_mappings=/less:/css 4 | auxiliary.org-netbeans-modules-css-prep.sass_2e_compiler_2e_options= 5 | auxiliary.org-netbeans-modules-css-prep.sass_2e_enabled=false 6 | auxiliary.org-netbeans-modules-css-prep.sass_2e_mappings=/scss:/css 7 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true 8 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4 9 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4 10 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8 11 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80 12 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none 13 | auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project 14 | auxiliary.org-netbeans-modules-editor-indent.text.javascript.CodeStyle.project.indent-shift-width=4 15 | auxiliary.org-netbeans-modules-editor-indent.text.x-json.CodeStyle.project.indent-shift-width=4 16 | auxiliary.org-netbeans-modules-javascript-nodejs.enabled=false 17 | auxiliary.org-netbeans-modules-javascript-nodejs.node_2e_default=true 18 | auxiliary.org-netbeans-modules-javascript-nodejs.run_2e_enabled=false 19 | auxiliary.org-netbeans-modules-javascript-nodejs.sync_2e_enabled=true 20 | auxiliary.org-netbeans-modules-javascript2-requirejs.enabled=true 21 | auxiliary.org-netbeans-modules-web-clientproject-api.js_2e_libs_2e_folder=js/libs 22 | browser.autorefresh.Chromium.INTEGRATED=true 23 | browser.highlightselection.Chromium.INTEGRATED=true 24 | browser.run=true 25 | file.reference.openseadragon-browser-extension=. 26 | files.encoding=UTF-8 27 | project.licensePath=./nbproject/licenseheader.txt 28 | site.root.folder= 29 | source.folder= 30 | start.file=index.html 31 | web.context.root=/browser-extension 32 | -------------------------------------------------------------------------------- /webextension/webextension.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 OpenSeadragon contributors 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * 7 | * - Redistributions of source code must retain the above copyright notice, 8 | * this list of conditions and the following disclaimer. 9 | * 10 | * - Redistributions in binary form must reproduce the above copyright notice, 11 | * this list of conditions and the following disclaimer in the documentation 12 | * and/or other materials provided with the distribution. 13 | * 14 | * - Neither the name of OpenSeadragon nor the names of its contributors 15 | * may be used to endorse or promote products derived from this software 16 | * without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | * POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | (function () { 31 | chrome.contextMenus.create({ 32 | type: "normal", 33 | contexts: ["image"], 34 | title: "View with OpenSeadragon", 35 | onclick: function (event) { 36 | chrome.tabs.update({ 37 | url: "index.html?img=" + encodeURIComponent(event.srcUrl) + 38 | "&encoded=true" 39 | }); 40 | } 41 | }); 42 | })(); 43 | -------------------------------------------------------------------------------- /nbproject/licenseheader.txt: -------------------------------------------------------------------------------- 1 | <#if licenseFirst??> 2 | ${licenseFirst} 3 | 4 | ${licensePrefix}Copyright (C) 2015 OpenSeadragon contributors 5 | ${licensePrefix} 6 | ${licensePrefix}Redistribution and use in source and binary forms, with or without 7 | ${licensePrefix}modification, are permitted provided that the following conditions are met: 8 | ${licensePrefix} 9 | ${licensePrefix}- Redistributions of source code must retain the above copyright notice, 10 | ${licensePrefix} this list of conditions and the following disclaimer. 11 | ${licensePrefix} 12 | ${licensePrefix}- Redistributions in binary form must reproduce the above copyright notice, 13 | ${licensePrefix} this list of conditions and the following disclaimer in the documentation 14 | ${licensePrefix} and/or other materials provided with the distribution. 15 | ${licensePrefix} 16 | ${licensePrefix}- Neither the name of OpenSeadragon nor the names of its contributors 17 | ${licensePrefix} may be used to endorse or promote products derived from this software 18 | ${licensePrefix} without specific prior written permission. 19 | ${licensePrefix} 20 | ${licensePrefix}THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | ${licensePrefix}AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | ${licensePrefix}IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23 | ${licensePrefix}ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 24 | ${licensePrefix}LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 25 | ${licensePrefix}CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 26 | ${licensePrefix}SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 27 | ${licensePrefix}INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 28 | ${licensePrefix}CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 29 | ${licensePrefix}ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 30 | ${licensePrefix}POSSIBILITY OF SUCH DAMAGE. 31 | <#if licenseLast??> 32 | ${licenseLast} 33 | 34 | -------------------------------------------------------------------------------- /common/loading.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /common/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (C) 2015 OpenSeadragon contributors 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | - Redistributions of source code must retain the above copyright notice, 8 | this list of conditions and the following disclaimer. 9 | 10 | - Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | - Neither the name of OpenSeadragon nor the names of its contributors 15 | may be used to endorse or promote products derived from this software 16 | without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | body { 31 | margin: 0; 32 | color: #333; 33 | font-family: Helvetica, Arial, FreeSans, san-serif; 34 | background-color: #121621; 35 | } 36 | 37 | #loader { 38 | position: absolute; 39 | top: 0; 40 | left: 0; 41 | bottom: 0; 42 | right: 0; 43 | text-align: center; 44 | } 45 | 46 | #loader img { 47 | vertical-align: middle; 48 | max-width: 100%; 49 | max-height: 100%; 50 | } 51 | 52 | .img-vertical-align-helper { 53 | display: inline-block; 54 | height: 100%; 55 | vertical-align: middle; 56 | } 57 | 58 | #openseadragon { 59 | position: absolute; 60 | top: 0; 61 | left: 0; 62 | bottom: 0; 63 | right: 0; 64 | } 65 | 66 | #popup { 67 | display: none; 68 | position: absolute; 69 | top: 30%; 70 | left: 12.5%; 71 | background-color: #EEE; 72 | width: 75%; 73 | font-size: x-large; 74 | padding: 5px; 75 | border-radius: 5px; 76 | } 77 | 78 | #popup input { 79 | width: 100%; 80 | font-size: x-large; 81 | color: #333; 82 | margin-bottom: 5px; 83 | box-sizing: border-box; 84 | } 85 | 86 | #popup button { 87 | font-size: x-large; 88 | border-radius: 5px; 89 | color: #333; 90 | border: 1px solid black; 91 | } 92 | 93 | #error { 94 | margin-bottom: 1%; 95 | color: #800; 96 | font-size: large; 97 | font-style: italic; 98 | text-align: center; 99 | } 100 | 101 | #loading-popup { 102 | display: none; 103 | position: absolute; 104 | top: 30%; 105 | width: 100%; 106 | text-align: center; 107 | } 108 | 109 | #loading-message { 110 | background-color: rgba(255, 255, 255, 0.5); 111 | font-size: x-large; 112 | padding: 5px; 113 | border-radius: 5px; 114 | } 115 | 116 | #loading-message > * { 117 | vertical-align: middle; 118 | } 119 | 120 | .powered-by { 121 | position: absolute; 122 | color: #437AB2; 123 | right: 1%; 124 | bottom: 5%; 125 | font-size: medium; 126 | text-align: right; 127 | } 128 | 129 | .powered-by a { 130 | color: #437AB2; 131 | } 132 | -------------------------------------------------------------------------------- /Gruntfile.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 OpenSeadragon contributors 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * 7 | * - Redistributions of source code must retain the above copyright notice, 8 | * this list of conditions and the following disclaimer. 9 | * 10 | * - Redistributions in binary form must reproduce the above copyright notice, 11 | * this list of conditions and the following disclaimer in the documentation 12 | * and/or other materials provided with the distribution. 13 | * 14 | * - Neither the name of OpenSeadragon nor the names of its contributors 15 | * may be used to endorse or promote products derived from this software 16 | * without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | * POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | module.exports = function (grunt) { 31 | 32 | // ---------- 33 | grunt.loadNpmTasks("grunt-contrib-watch"); 34 | grunt.loadNpmTasks("grunt-contrib-clean"); 35 | grunt.loadNpmTasks("grunt-contrib-compress"); 36 | 37 | var releaseRoot = "../openseadragon.github.com/openseadragonizer/"; 38 | 39 | // ---------- 40 | // Project configuration. 41 | grunt.initConfig({ 42 | clean: { 43 | build: ["build"], 44 | webextension: ["build/webextension"], 45 | release: { 46 | src: [releaseRoot], 47 | options: { 48 | force: true 49 | } 50 | } 51 | }, 52 | watch: { 53 | files: ["Gruntfile.js", "webextension/*", "common/*"], 54 | tasks: "watchTask" 55 | }, 56 | compress: { 57 | webextension: { 58 | options: { 59 | archive: "build/webextension.zip" 60 | }, 61 | files: [{ 62 | expand: true, 63 | cwd: "build/webextension", 64 | src: ["**/*"], 65 | dest: "" 66 | } 67 | ] 68 | } 69 | } 70 | }); 71 | 72 | // ---------- 73 | // Watch task. 74 | grunt.registerTask("watchTask", function () { 75 | grunt.task.run("build"); 76 | }); 77 | 78 | function copyCommonDir(destination) { 79 | grunt.file.recurse("common", function (abspath, rootdir, subdir, filename) { 80 | // Only copy the minified version of OSD + the images dir. 81 | if (subdir === "openseadragon" && filename !== "openseadragon.min.js") { 82 | return; 83 | } 84 | subdir = subdir ? subdir + "/" : ""; 85 | grunt.file.copy(abspath, destination + subdir + filename); 86 | }); 87 | } 88 | 89 | // ---------- 90 | // WebExtension build task. 91 | grunt.registerTask("build:webextension", function () { 92 | copyCommonDir("build/webextension/"); 93 | grunt.file.recurse("webextension", function (abspath, rootdir, subdir, filename) { 94 | subdir = subdir ? subdir + "/" : ""; 95 | grunt.file.copy(abspath, "build/webextension/" + subdir + filename); 96 | }); 97 | grunt.task.run("compress:webextension"); 98 | }); 99 | 100 | // ---------- 101 | // Copy release task. 102 | grunt.registerTask("copy:release", function () { 103 | copyCommonDir(releaseRoot); 104 | }); 105 | 106 | // ---------- 107 | // Full build task. 108 | grunt.registerTask("build", ["clean", "build:webextension"]); 109 | 110 | // ---------- 111 | // Publish task. 112 | // Copies the content of common to ../openseadragon.github.com/openseadragonizer. 113 | grunt.registerTask("publish", ["clean:release", "build", "copy:release"]); 114 | 115 | // ---------- 116 | // Default task. 117 | // Does a normal build. 118 | grunt.registerTask("default", ["build"]); 119 | }; 120 | -------------------------------------------------------------------------------- /common/index.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 OpenSeadragon contributors 3 | * 4 | * Redistribution and use in source and binary forms, with or without 5 | * modification, are permitted provided that the following conditions are met: 6 | * 7 | * - Redistributions of source code must retain the above copyright notice, 8 | * this list of conditions and the following disclaimer. 9 | * 10 | * - Redistributions in binary form must reproduce the above copyright notice, 11 | * this list of conditions and the following disclaimer in the documentation 12 | * and/or other materials provided with the distribution. 13 | * 14 | * - Neither the name of OpenSeadragon nor the names of its contributors 15 | * may be used to endorse or promote products derived from this software 16 | * without specific prior written permission. 17 | * 18 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 | * POSSIBILITY OF SUCH DAMAGE. 29 | */ 30 | (function () { 31 | var loaderElt = document.getElementById("loader"); 32 | var popupElt = document.getElementById("popup"); 33 | var urlElt = document.getElementById("url"); 34 | var loadingPopupElt = document.getElementById("loading-popup"); 35 | 36 | function show() { 37 | location.href = '?img=' + encodeURIComponent(urlElt.value) + 38 | '&encoded=true'; 39 | } 40 | 41 | urlElt.onkeyup = function (event) { 42 | if (event.keyCode === 13) { 43 | show(); 44 | } 45 | }; 46 | 47 | document.getElementById("show-button").onclick = show; 48 | 49 | init(); 50 | 51 | function init() { 52 | popupElt.style.display = "none"; 53 | 54 | var imgUrlParameter = OpenSeadragon.getUrlParameter("img"); 55 | if (!imgUrlParameter) { 56 | popupElt.style.display = "block"; 57 | return; 58 | } 59 | var url = OpenSeadragon.getUrlParameter("encoded") ? 60 | decodeURIComponent(imgUrlParameter) : imgUrlParameter; 61 | 62 | var options = { 63 | src: url, 64 | container: document.getElementById("loader"), 65 | crossOrigin: 'Anonymous' 66 | }; 67 | loadImage(options, onImageLoaded, function (event) { 68 | loaderElt.removeChild(event.image); 69 | // We retry without CORS 70 | delete options.crossOrigin; 71 | loadImage(options, onImageLoaded, onError); 72 | }); 73 | document.title = "OpenSeadragon " + url; 74 | } 75 | 76 | function loadImage(options, successCallback, errorCallback) { 77 | loadingPopupElt.style.display = "block"; 78 | var image = new Image(); 79 | options.container.appendChild(image); 80 | image.onload = function () { 81 | loadingPopupElt.style.display = "none"; 82 | successCallback({ 83 | image: image, 84 | options: options 85 | }); 86 | }; 87 | image.onerror = function () { 88 | loadingPopupElt.style.display = "none"; 89 | errorCallback({ 90 | image: image, 91 | options: options 92 | }); 93 | }; 94 | if (options.crossOrigin) { 95 | image.crossOrigin = options.crossOrigin; 96 | } 97 | image.src = options.src; 98 | } 99 | 100 | function onImageLoaded(event) { 101 | var image = event.image; 102 | document.title = "OpenSeadragon " + image.src + 103 | " (" + image.naturalWidth + "x" + image.naturalHeight + ")"; 104 | var viewer = OpenSeadragon({ 105 | id: "openseadragon", 106 | prefixUrl: "openseadragon/images/", 107 | tileSources: { 108 | type: 'image', 109 | url: image.src, 110 | crossOriginPolicy: event.options.crossOrigin 111 | }, 112 | maxZoomPixelRatio: 2, 113 | showRotationControl: true 114 | }); 115 | viewer.addOnceHandler("tile-drawn", function() { 116 | document.body.removeChild(loaderElt); 117 | }); 118 | } 119 | 120 | function onError(event) { 121 | popupElt.style.display = "block"; 122 | loaderElt.removeChild(event.image); 123 | document.getElementById("error").textContent = 124 | "Cannot retrieve requested image."; 125 | } 126 | 127 | })(); 128 | -------------------------------------------------------------------------------- /common/openseadragon/changelog.txt: -------------------------------------------------------------------------------- 1 | OPENSEADRAGON CHANGELOG 2 | ======================= 3 | 4 | 4.1.0: 5 | 6 | * NEW BEHAVIOR: When `navigatorRotate` is false, while the navigator image doesn't rotate, the red outline now does (#2356 @lcl45) 7 | * The viewer no longer emits `canvas-key` events for both keydown and keypress events; canvas-key is now just for keydown, and the new `canvas-key-press` is for keypress (#2270 @hrghauri) 8 | * You can now specify a priority when calling addHandler, to control when your event handler gets called relative to others (#2273 @Aiosa) 9 | * Added tileRetryMax and tileRetryDelay options, so the viewer can retry loading failed tiles (#2238 @Ughuuu @paaddyy, #2334 @Ughuuu @Titan21) 10 | * All of the viewers keyboard handling is now in response to keydown events (it used to be split between keydown and keypress) (#2291 @MohitBansal321) 11 | * Added `canvas-focus` and `canvas-blur` events to Viewer (#2301 @MohitBansal321) 12 | * You can now more easily add custom buttons to the viewer (#2306 @MohitBansal321) 13 | * The fitBounds function now takes zoom constraints into account (#2293 @pearcetm) 14 | * The viewer now has an `after-resize` event what happens after the viewport bounds have been updated, to complement the `resize` event which happens before (#2317 @pearcetm) 15 | * IIIFTileSource now uses resolution level dimensions provided in the info.json "sizes" field for more accurate tile requests (#2337 @ruven) 16 | * Added setAjaxHeaders method to Viewer and TiledImage (#2346 @uschmidt83) 17 | * Improved documentation (#2297 @KevinBritten) 18 | * Fixed: The `tile-loaded` event's completionCallback could be called more than once in some circumstances (#2282 @Aiosa, @pearcetm) 19 | * Fixed: Navigator display rectangle was off if the page had `box-sizing: border-box` (#2276 @ambujsahu81) 20 | * Fixed: Code that required identifying functions would fail for async functions (#2273 @Aiosa) 21 | * Fixed: Reference strip click detection was not accurate for long reference strips (#2280 @damonsson) 22 | * Fixed: Translation problems in some circumstances with cropping polygons enabled (#2316 @pearcetm) 23 | * Fixed: The navigator area rectangle would grow larger when you zoom in very far (#2318 @donotloveshampo) 24 | * Fixed: JSON with embedded XML was being incorrectly identified as XML (#2328 @craigberry) 25 | * Fixed: Touch/pinch rotate was not working properly on some platforms (#2324 @rsimon, @pearcetm) 26 | * Fixed: Navigator rotation didn't honor `immediately` parameter (#2333 @robertjcolley) 27 | * Fixed: The navigator didn't update for its new size in certain circumstances (#2347 @pearcetm) 28 | 29 | 4.0.0: 30 | 31 | * NEW BEHAVIOR: Setting the viewport rotation now animates by default (pass true for the new `immediately` parameter to disable) (#2136 @jonasengelmann) 32 | * NEW BEHAVIOR: The auto resize now takes both width and height into account when scaling the contents proportionally to the viewer (#2256 @pearcetm) 33 | * DEPRECATION: Don't access the viewport's degrees property directly anymore; instead use setRotation and getRotation (#2136 @jonasengelmann) 34 | * New gesture: Double-click and drag to zoom (on by default for touch) (#2225 @HamzaTatheer) 35 | * You can now provide a pivot point when rotating the viewport (#2233 #2253 @pearcetm) 36 | * Improved the constraints that keep the image in the viewer, specifically when zoomed out a lot (#2160 @joedf, #2246 @pearcetm) 37 | * You can now provide an element for the navigator (as an alternative to an ID) (#1303 @cameronbaney, #2166 #2175 @joedf) 38 | * Now supporting IIIF "id" and "identifier" in addition to "@id" (#2173 @ahankinson) 39 | * We now delegate tile fetching and caching to the TileSource, to allow for custom tile formats (#2148 @Aiosa) 40 | * Added support for dynamic URLs from tile sources (#2247 @JohnReagan) 41 | * The viewer now emits before-destroy and destroy events (#2239 @pearcetm) 42 | * Auto resize detection is now more efficient (#2256 @pearcetm) 43 | * Improved documentation (#2211 @shyamkumaryadav) 44 | * Fixed: Cropping tiled images with polygons was broken (#2183 @altert) 45 | * Fixed: Boundary constraints were wrong when the viewport was rotated (#2249 @pearcetm) 46 | * Fixed: IIIF tile sizes would be calculated wrong on rare occasions (#2206 @filak) 47 | * Fixed: Disabling buttons only changed their appearance, but they were still clickable (#2187 @pearcetm) 48 | * Fixed: ImageTileSource produced an error having to do with getTileHashKey (#2190 @Aiosa) 49 | * Fixed: On startup you would get an unnecessary "Viewer.buttons is deprecated" warning (#2201 @joedf, #2219 @jssullivan, #2212 @joedf) 50 | 51 | 3.1.0: 52 | 53 | * Added subPixelRoundingForTransparency Viewer option to address seams that can appear in semi-transparent images (#2075 @TanukiSharp) 54 | * Added Viewer.isAnimating() (#2075 @TanukiSharp) 55 | * Added isFullScreen method to Viewer (#2067 @JachiOnuoha) 56 | * Added option to include POST data when loading files via Ajax (#2072 @Aiosa) 57 | * Exposed TiledImage's private functions for better maintainability (#2134 @Aiosa) 58 | * Tile cache keys are now generated by the tile source, so it's easier to override them as needed (#2138 @Aiosa) 59 | * Pinch to zoom now zooms around the center of the pinch, rather than the center of the viewer (#2158 @cavenel) 60 | * Added fallback and deprecation warning for Viewer.buttons (which got changed to buttonGroup in 3.0.0) (#2153 @devbyjonah) 61 | * Fixed an issue where turning off panVertical or panHorizontal would not affect the panning keyboard combos (#2069 @JachiOnuoha) 62 | * Cleaned up console.logs so that errors and warnings use console.error and console.warn as appropriate (#2073 @Abhishek-90) 63 | * Improved documentation (#2067 @JachiOnuoha, #2112 @shyamkumaryadav, #2152 @joedf, #2155 @samwilson) 64 | * Fixed: Setting useCanvas to false would break the viewer (#2116 @rvv-bouvet) 65 | * Allow silencing multi-image warnings on viewport coordinate conversion functions (#2120 @claycoleman) 66 | * Fixed: Swiping fast multiple times made contact points in MouseTracker out of sync for touch events (#2121 @ronnymikalsen) 67 | * Made MouseTracker more robust in certain scenarios (#2134, #2147 @Aiosa) 68 | * Fixed an issue where full page mode wouldn't grow properly if you resized the window (#2100 @TanukiSharp) 69 | * Now if you pass an error handler into makeAjaxRequest, it doesn't report errors into the console (#2142 @Aiosa) 70 | * Fixed error caused by attaching MouseTracker to the page's document element (#2145 @tdiprima) 71 | * Fixed an issue that would sometimes cause problems with freeing up ImageTileSource memory (#2162 @pearcetm) 72 | 73 | 3.0.0: 74 | 75 | * BREAKING CHANGE: Dropped support for older browsers (IE < 11) (#1872 #1949 #1951 @msalsbery, #1950 @rmontroy) 76 | * BREAKING CHANGE: Removed deprecated OpenSeadragon.getEvent function (#1949 @msalsbery) 77 | * DEPRECATION: MouseTracker exitHandler deprecated for name change to leaveHandler for consistency with DOM event names (#1872 @msalsbery) 78 | * Now when "simple image" tile sources are removed from the viewer, they free the memory used by the pyramid they create (#1789 @TakumaKira) 79 | * Improvements to docs (#1814 @kenanchristian, #1872 @msalsbery, #1996 @tdiprima) 80 | * Better cleanup on destruction, to avoid memory leaks (#1832 @JoFrMueller) 81 | * Better handle destruction when navigator in custom location (#1884 @woodchuck) 82 | * Miscellaneous code cleanup (#1840 @msalsbery) 83 | * You can now specify tileSize for the Zoomify Tile Source (#1868 @abrlam) 84 | * Better use of IIIF "max" and "full" URL parameters (#1871 @MImranAsghar) 85 | * You can now specify the file format of the tiles in the Zoomify tile source (#1889 @abrlam) 86 | * Improved browser sniffing - detect EDGE and CHROMEEDGE browsers (#1872 @msalsbery) 87 | * Improved DOM event model feature detection (#1872 @msalsbery) 88 | * Added support for options parameter on addEvent()/removeEvent (to support passive option) (#1872 @msalsbery) 89 | * Added OpenSeadragon.eventIsCanceled() function for defaultPrevented detection on DOM events (#1872 @msalsbery) 90 | * MouseTracker: better PointerEvent model detection - removed use of deprecated window.navigator.pointerEnabled (#1872 @msalsbery) 91 | * MouseTracker: added overHandler/outHandler options for handling corresponding pointerover/pointerout events (#1872 @msalsbery) 92 | * MouseTracker: changed enterHandler/leaveHandler to use DOM pointerenter/pointerleave events instead of simulating using pointerover/pointerout (#1872 @msalsbery) 93 | * All internal uses of MouseTracker use pointerenter/pointerleave events instead of pointerover/pointerout events for more consistent pointer tracking (#1872 @msalsbery) 94 | * Fixed bug in Button class where two MouseTracker event handlers used an invalid "this" causing issues in some browsers (#1872 @msalsbery) 95 | * Added pointerType property to Viewer container-enter, container-exit, canvas-drag, canvas-drag-end, canvas-pinch events (#1872 @msalsbery) 96 | * MouseTracker: Fire dragEndHandler event even if release point same as initial contact point (#1872 @msalsbery) 97 | * MouseTracker: Pointer capture implemented with capture APIs where available. Only fallback to emulated capture on extremely old browsers (#1872 @msalsbery) 98 | * MouseTracker: Added preProcessEventHandler option to allow MouseTracker instances to control bubbling and default behavior of events on their associated element (#1872 @msalsbery) 99 | * MouseTracker: Improved handling of canceled events (#1872 @msalsbery) 100 | * MouseTracker: Improved releasing of tracked pointers on destroy()/stopTracking() (#1872 @msalsbery) 101 | * Updated Viewer, Button, Drawer, Navigator, ReferenceStrip DOM for proper DOM event handling (#1872 @msalsbery) 102 | * Added OpenSeadragon.setElementPointerEventsNone() for setting pointer-events:'none' on DOM elements (#1872 @msalsbery) 103 | * MouseTracker: added contextMenuHandler option for handling contextmenu events (#1872 @msalsbery) 104 | * Viewer: added a canvas-contextmenu event (#1872 @msalsbery) 105 | * Fixed simulated drag events in navigator tests (#1949 @msalsbery) 106 | * Added preventDefault option to MouseTracker.contextMenuHandler and Viewer 'canvas-contextmenu' event args (#1951 @msalsbery) 107 | * MouseTracker: Added preProcessEventHandler for keydown, keyup, keypress, focus, blur Events (#1951 @msalsbery) 108 | * Fixed preventDefaultAction functionality in viewer events (#1953 @msalsbery) 109 | * Added setImageFormatsSupported function (#1954 @pandaxtc) 110 | * Added dragToPan to the GestureSettings class, implemented in Viewer (#1956 @msalsbery) 111 | * Added preventDefault option to MouseTracker handlers: scrollHandler, keyDownHandler, keyUpHandler, keyHandler (#1957 @msalsbery) 112 | * Fixed test "Events: Viewer: preventDefaultAction in dblClickHandler". Fixes #1372 (#1960 @msalsbery) 113 | * ReferenceStrip: Fixed issue where its element was being removed from its parent element twice on destroy, causing an exception (#1958 @msalsbery) 114 | * ReferenceStrip: Made its element focusable for keyboard navigation (#1958 @msalsbery) 115 | * You can now flip individual images (not just the whole viewport) (#1903 @ali1234) 116 | * Accessibility: we now take the browser's zoom into account when choosing what detail level to draw (#1937 @ronnymikalsen) 117 | * Fixed a bug causing overlays to disappear in Sequence Mode (#1865 @gunmiosb) 118 | * Fixed a bug where the ajaxHeaders provided per-image were not being used for image requests (#1968 @maxshuty) 119 | * MouseTracker: Added workaround for WebKit Pointer Event Implicit Capture Bug (#1972 @msalsbery) 120 | * Removed test for move-leave (fly-over, no enter event)...not a valid, handleable event state, no longer supported (#1972 @msalsbery) 121 | * Added OpenSeadragon.setElementPointerEvents() for setting pointer-events to other values besides 'none' on DOM elements (#1972 @msalsbery) 122 | * Now ensuring the page body is display:block when in fullscreen (#1995 @thewilkybarkid) 123 | * Added a static method in OpenSeadragon to get an existing viewer (#2000 @HerCerM) 124 | * Now ensuring that the new item is already in the navigator when the "add-item" event fires (#2005 @RammasEchor) 125 | * Added keys to change image in sequence mode (j: previous, k: next) (#2007 @RammasEchor) 126 | * Fixed a bug where the navigator wouldn't pick up opacity/composite changes made while it is loading (#2018 @crydell) 127 | * Explicitly set passive:false for wheel event handlers to suppress console warnings. Fixes #1669 (#2043 @msalsbery) 128 | * Viewer's canvas-click events now include an originalTarget property so you can know which element received the click (#2037 @iangilman) 129 | * Added method for getting the size of an image in window coordinates (#2049 @superbland) 130 | * Added a setMaxLevel function to TileSource so you can change its maxLevel if needed (#2059, #2066 @kim-sanghoon) 131 | 132 | 2.4.2: 133 | 134 | * Add support for IIIF Image API 3.0 beta (#1764) 135 | * You can now crop an image with arbitrary polygons (#1772) 136 | * Improved support for using the Reference Strip in an OpenSeadragon Viewer inside a Web Component (#1676) 137 | * Added setWidth and setHeight methods to Navigator (#1686) 138 | * Improvements to docs (#1696, #1698, #1716, #1719) 139 | * Now passing Viewer AJAX configs down to ReferenceStrip thumbnails (#1701) 140 | * The ReferenceStrip now honors the useCanvas option from the Viewer (#1742) 141 | * Fixed: Navigator was still resizing after you explicitly set its width and height with navigatorWidth and navigatorHeight (#1686) 142 | * Fixed issues with touches on iOS 13 and iPad (#1754, #1756) 143 | * No longer throwing an exception on pages that have malformed URL parameters (#1758) 144 | * Fixed an issue with flipping the viewport on high pixel density screens (#1779) 145 | * Removed use of deprecated imageSmoothingEnabled prefixes (#1740) 146 | 147 | 2.4.1: 148 | 149 | * You can now turn off the default canvas image smoothing, if you want sharp pixels when zoomed in past 100% (#1507, #1593, #1595, #1647, #1648) 150 | * Fixed problem with navigator highlight rectangle when returning from full screen with a custom navigator location (#1515) 151 | * Added option to set rotation increment for nav buttons and keyboard (#1524) 152 | * Fixed issue with flipping and opacity with multi-image (#1549) 153 | * Removed vestigial button group label element that was causing issues for accessibility tools (#1560) 154 | * Fixed a bug causing Viewer.areControlsEnabled to throw an exception (#1562) 155 | * Added tileFormat option to IIIFTileSource so you can specify the tile format (#1625) 156 | * Now using canonical URIs more consistently in IIIF to make caching and processing time easier on the server side (#1625) 157 | * Added support for IIIF's new preferredFormats property (#1656) 158 | 159 | 2.4.0: 160 | 161 | * BREAKING CHANGE: Viewer's canvas-double-click event is now fired before it initiates the zoom (#1288) 162 | * You can now flip the viewport to get a mirror image of the original (#1441) 163 | * You can now prevent canvas-double-click events from zooming on a per-event basis (#1288) 164 | * Fixed: Opacity 0 images were causing unnecessary redraws (#1319) 165 | * The "page" event is now fired after the page index has been updated (#1330) 166 | * Added option pixelsPerArrowPress that sets the speed of arrow keys (#1364) 167 | * Improved IIIF options.maxLevel calculation (#1401) 168 | * Added canvas-key events, along with the ability to cancel key actions (#1414) 169 | * Added optional zoom in the middle of the image instead of pointer position (#1423) 170 | * Now supporting square edge tiles that are padded rather than cropped (#1426) 171 | * Fixed an issue causing the simple image tileSource to sometimes show duplicate copies (#1370) 172 | * Fixed an issue causing seams to appear in semi-transparent PNG tiled images (#1470) 173 | * Added visual customization options for the navigator (#1480) 174 | * You can now prevent canvas-drag events on the navigator (#1484) 175 | * You can now prevent canvas-click events on the navigator (#1416) 176 | * The navigator can now be restricted to just horizontal or just vertical panning (#1416) 177 | * Fixed DziTileSource so it doesn't load levels above maxLevel or below minLevel, if set (#1492) 178 | 179 | 2.3.1: 180 | 181 | * Debug mode now uses different colors for different tiled images (customizable via debugGridColor) (#1271) 182 | * Fixed a problem with preventDefaultAction for the canvas-drag event (#1278) 183 | * Fixed an issue causing double images with certain aspect ratios (#1280) 184 | * Fixed: placeholderFillStyle had no effect (#1286) 185 | * Fixed seams that appear in wrap mode on Safari and Firefox (#1305) 186 | 187 | 2.3.0: 188 | 189 | * BREAKING CHANGE: Tile.distance has been removed (#1027) 190 | * BREAKING CHANGE: Viewer's canvas-click event is now fired before it initiates the zoom (#1148) 191 | * BREAKING CHANGE: Viewer's canvas-drag event is now fired before it pans (#1149) 192 | * Added Zoomify tile source (#863) 193 | * You can now set the rotation of individual tiled images (#1006) 194 | * Added getFullyLoaded method and "fully-loaded-change" event to TiledImage to know when tiles are fully loaded (#837, #1073) 195 | * You can now preload images without drawing them to the screen (#1071) 196 | * Added support for commonjs (#984) 197 | * Added an option to addTiledImage to change the crossOriginPolicy (#981) 198 | * You can now load tiles via AJAX and custom AJAX request headers (#1055) 199 | * Added ability to provide thumbnail URLs for reference strip (#1241) 200 | * Improved panning constraints for constrainDuringPan (#1133 and #1245) 201 | * You can now prevent canvas-click events from zooming on a per-event basis (#1148) 202 | * You can now prevent canvas-drag events from panning on a per-event basis (#1149) 203 | * The navigationControlAnchor option now works for custom toolbar as well (#1004) 204 | * LegacyTileSource now allows any image URLs regardless of type (#1056) 205 | * Enabled configuration of ImageLoader timeout (#1192) 206 | * Viewer.open() now supports an initialPage argument for sequenceMode (#1196) 207 | * New events for opacity and compositeOperation changes (#1203) 208 | * Added support for setting debug mode after the Viewer object has been constructed (#1224) 209 | * Added functions for dynamically adding and removing the reference strip in sequence mode (#1213) 210 | * Better calculation for TileCache release cutoff (#1214) 211 | * The navigator now picks up opacity and compositeOperation changes (#1203) 212 | * Improved calculation for determining which level to load first (#1198) 213 | * Added fix for supporting weird filenames that look like JSONs (#1189) 214 | * Improved DziTileSource guessing of tilesUrl (#1074) 215 | * The Viewer's tileSources option is now smarter about detecting JSON vs XML vs URL (#999) 216 | * Better compression for our UI images (#1134) 217 | * Optimization: Use the squared distance when comparing tiles (#1027) 218 | * Now clamping pixel ratio density to a minimum of 1, fixing display issues on low density devices (#1200) 219 | * More forgiving check for DZI schema (#1249) 220 | * ImageTileSource now works in IE8 (#1041) 221 | * Fixed CORS bug in IE 10 (#967) 222 | * Fixed issue with tiles not appearing with wrapHorizontal/wrapVertical if you pan too far away from the origin (#987, #1066) 223 | * Fixed: Initial tile load wasn't happening in parallel (#1014) 224 | * Fixed problem with "sparse image" DZI files (#995) 225 | * Fix IndexSizeError on IE and Edge that occurred under certain circumstances (e.g. multi-image with transparency) (#1035) 226 | * Fixed error in IE8 when zooming in (due to edge smoothing) (#1064) 227 | * Fixed issue with OpenSeadragon.version in the minified JavaScript (#1099) 228 | * Fixed smoothTileEdgesMinZoom performance degradation on single-tile images (#1101) 229 | * Fixed issue with tiles not appearing after rotation (#1102) 230 | * Fixed: The navigator wasn't respecting the constrainDuringPan setting (#1104) 231 | * Fixed an issue causing overlays to be mis-positioned in some circumstances (#1119) 232 | * Fixed: ImageTileSource would sometimes produce a double image (#1123) 233 | * Fixed: console.debug caused exceptions on IE10 (#1129) 234 | * Fixed: the reference strip would leak memory when opening new sets of images (#1175) 235 | * Fixed: zoomTo/zoomBy ignore refPoint if immediately is true (#1184) 236 | * Fixed: IIPImageServer didn't work with the latest OSD release (#1199) 237 | * Fixed: setItemIndex method not working with navigator inside "open" event (#1201) 238 | * Fixed: The reference strip didn't show the initial page if it wasn't the first page (#1208) 239 | * Fixed: Sometimes the image would stick to the mouse when right-clicking and left-clicking simultaneously (#1223) 240 | * Fixed issue with transparent images sometimes disappearing on Safari (#1222) 241 | * Fixed: One image failing to load could cause the others to never load (#1229) 242 | * Fixed: Mouse up outside map will cause "canvas-drag" event to stick (#1133) 243 | * Fixed more issues with tracking multiple pointers (#1244) 244 | 245 | 2.2.1: 246 | 247 | * Fixed problems with zoom/pan constraints with certain extreme settings (#965) 248 | * Fixed an issue causing the browser to crash on iOS (#966) 249 | 250 | 2.2.0: 251 | 252 | * BREAKING CHANGE: Viewport.homeBounds, Viewport.contentSize, Viewport.contentAspectX and 253 | Viewport.contentAspectY have been removed. (#846) 254 | * BREAKING CHANGE: The Overlay.getBounds method now takes the viewport as parameter. (#896) 255 | * DEPRECATION: Overlay.scales, Overlay.bounds and Overlay.position have been deprecated. (#896) 256 | * Overlay.width !== null should be used to test whether the overlay scales horizontally 257 | * Overlay.height !== null should be used to test whether the overlay scales vertically 258 | * The Overlay.getBounds method should be used to get the bounds of the overlay in viewport coordinates 259 | * Overlay.location replaces Overlay.position 260 | * DEPRECATION: Viewport.setHomeBounds has been deprecated (#846) 261 | * DEPRECATION: the Viewport constructor is now ignoring the contentSize option (#846) 262 | * Tile edge smoothing at high zoom (#764) 263 | * Fixed issue with reference strip popping up virtual keyboard on mobile devices (#779) 264 | * Now supporting rotation in the Rect class (#782) 265 | * Drag outside of iframe now works better, as long as both pages are on the same domain (#790) 266 | * Coordinate conversion now takes rotation into account (#796) 267 | * Support tile-less IIIF as per LegacyTileSource (#816) 268 | * You can now give an empty string to the tabIndex option (#805) 269 | * Fixed issue with rotation and clicking in the navigator (#807) 270 | * Broadened the check for mime type in LegacyTileSource URLs to allow query strings (#819) 271 | * Added globalCompositeOperation option for tiledImage, to allow for different transfer modes (#814) 272 | * Added Viewer.addSimpleImage method for easily adding non-tiled images (#827) 273 | * DziTileSource now works properly with DZI files that have no extension (#835) 274 | * Fixed content clipping with rotation (#463, #567 and #833) 275 | * Fixed navigator not being rotated when viewport rotation is set in constructor (#840) 276 | * Fixed: Viewer.setMouseNavEnabled wasn't affecting all of the viewer's trackers (#845) 277 | * Fixed: with scrollToZoom disabled, the viewer caused page scrolling to slow down (#858) 278 | * Added Viewer.getOverlayById and Overlay.getBounds functions (#853) 279 | * Tiled images with 0 opacity no longer load their tiles or do drawing calculations (#859) 280 | * Fixed issue with edge smoothing with PNG tiles at high zoom (#860) 281 | * Fixed: Images with transparency were clearing images layered below them (#861) 282 | * Fixed issue causing HTML pages to jump unwantedly to the reference strip upon loading (#872) 283 | * Added addOnceHandler method to EventSource (#887) 284 | * Added TiledImage.fitBounds method (#888) 285 | * Overlays can now be scaled in a single dimension by providing a point location and either width or height (#896) 286 | * Added full rotation support to overlays (#729, #193) 287 | * Viewport.goHome() now takes clipping into account (#910) 288 | * Improved zoom to point (#923) 289 | * Optimized sketch canvas clearing and blending for images with opacity or transfer modes (#927) 290 | * Now taking rotation into account in viewport getBounds and fitBounds methods (#934) 291 | * Added option to disable navigator auto-fade (#935) 292 | * Fixed issue with maintaining viewport position with full screen (#940) 293 | * Fixed an issue with simultaneous touch events (#930) 294 | * Avoid loading clipped out tiles (#939) 295 | * Improved precision for subtle moves with fitBounds (#939) 296 | * Fixed an issue in viewer.addTiledImage with replace:true when viewer has navigator (#948) 297 | 298 | 2.1.0: 299 | 300 | * BREAKING CHANGE: the tile does not hold a reference to its image anymore. Only the tile cache keep a reference to images. 301 | * BREAKING CHANGE: TileSource.tileSize no longer exists; use TileSource.getTileWidth() and TileSource.getTileHeight() instead. 302 | * DEPRECATION: let ImageRecord.getRenderedContext create the rendered context instead of using ImageRecord.setRenderedContext 303 | * DEPRECATION: TileSource.getTileSize() is deprecated. Use TileSource.getTileWidth() and TileSource.getTileHeight() instead. 304 | * Changed resize behaviour to prevent "snapping" to world bounds when constraints allow more space (#711) 305 | * Added support for non-square tiles (#673) 306 | * TileSource.Options objects can now optionally provide tileWidth/tileHeight instead of tileSize for non-square tile support. 307 | * IIIFTileSources will now respect non-square tiles if available. 308 | * Added new tile source for simple images: ImageTileSource (#760) 309 | * Optimized adding large numbers of items to the world with collectionMode (#735) 310 | * Registers as an AMD module where possible (#719) 311 | * Added "tile-loaded" event on the viewer allowing to modify a tile before it is marked ready to be drawn (#659) 312 | * Added "tile-unloaded" event on the viewer allowing to free up memory one has allocated on a tile (#659) 313 | * Added 'tile-load-failed' event (#725) 314 | * Added additional coordinates conversion methods to TiledImage (#662) 315 | * Added `preserveImageSizeOnResize` option (#666) 316 | * Added collectionColumns as a configuration parameter (#680) 317 | * Added option in addTiledImage to replace tiledImage at index (#706) 318 | * Added autoRefigureSizes flag to World for optimizing mass rearrangements (#715) 319 | * You can now change viewport margins after the viewer is created (#721) 320 | * Added a patch to help slow down the scroll devices that fire too fast (#754) 321 | * Fixed flickering tiles with useCanvas=false when no cache is used (#661) 322 | * 'display: none' no longer gets reset on overlays during draw (#668) 323 | * Better error reporting for tile load failures (#679) 324 | * Added XDomainRequest as fallback method for ajax requests if XMLHttpRequest fails (for IE < 10) (#693) 325 | * Now avoiding using eval when JSON.parse is available (#696) 326 | * Rotation now works properly on retina display (#708) 327 | * Fixed issue with tiledImages loading tiles at every level instead of just the best level (#728) 328 | * Fixed placeholderFillStyle flicker (#727) 329 | * Fix for Chrome (v45) issue that key is sometimes undefined outside of the for-in loop (#730) 330 | * World.removeAll now cancels any in-flight image loads; same for Viewer.open and Viewer.close (#734) 331 | * Fixed overlays position (use rounding instead of flooring and ceiling) (#741) 332 | * Fixed issue with including overlays in your tileSources array when creating/opening in the viewer (#745) 333 | * Fixed issue in iOS devices that would cause all touch events to fail after a Multitasking Gesture was triggered (#744) 334 | * Fixed an issue with TiledImage setPosition/setWidth/setHeight not reliably triggering a redraw (#720) 335 | * Fixed zooming in with plus key on a Swedish keyboard (#763) 336 | 337 | 2.0.0: 338 | 339 | * True multi-image mode (#450) 340 | * BREAKING CHANGE: Passing an array for the tileSources option is no longer enough to trigger sequence mode; you have to set the sequenceMode option to true as well 341 | * BREAKING CHANGE: Navigator no longer sends an open event when its viewer opens 342 | * BREAKING CHANGE: Viewer.drawers and Viewer.drawersContainer no longer exist 343 | * BREAKING CHANGE: A Viewer's Drawer and Viewport are now made once per Viewer and reused for every image that Viewer opens (rather than being recreated for every open); this means if you change Viewer options between opens, the behavior is different now. 344 | * DEPRECATION: use Viewer.addTiledImage instead of Viewer.addLayer 345 | * addTiledImage supports positioning config properties 346 | * DEPRECATION: use World.getItemAt instead of Viewer.getLayerAtLevel 347 | * DEPRECATION: use World.getIndexOfItem instead of Viewer.getLevelOfLayer 348 | * DEPRECATION: use World.getItemCount instead of Viewer.getLayersCount 349 | * DEPRECATION: use World.setItemIndex instead of Viewer.setLayerLevel 350 | * DEPRECATION: use World.removeItem instead of Viewer.removeLayer 351 | * DEPRECATION: use World.needsDraw instead of Drawer.needsUpdate 352 | * DEPRECATION: use TileCache.numTilesLoaded instead of Drawer.numTilesLoaded 353 | * DEPRECATION: use World.resetItems instead of Drawer.reset 354 | * DEPRECATION: use Drawer.clear and World.draw instead of Drawer.update 355 | * DEPRECATION: the layersAspectRatioEpsilon option is no longer necessary 356 | * DEPRECATION: Viewer's add-layer event is now World's add-item event 357 | * DEPRECATION: Viewer's layer-level-changed event is now World's item-index-change event 358 | * DEPRECATION: Viewer's remove-layer event is now World's remove-item event 359 | * DEPRECATION: Viewer's add-layer-failed event is now add-item-failed 360 | * DEPRECATION: TileSourceCollection has been retired in favor of World 361 | * DEPRECATION: collectionMode no longer draws outlines or reflections for items 362 | * Drawer has been split into three classes: 363 | * TiledImage, tile management and positioning for a single tiled image 364 | * TileCache, tile caching for all images 365 | * Drawer, tile drawing for all images 366 | * New class: World, keeps track of multiple images in the scene 367 | * Viewer now has world and tileCache properties 368 | * Rect and Point now have clone functions 369 | * New Viewport method for managing homeBounds as well as constraints: setHomeBounds 370 | * Viewport.open supports positioning config properties 371 | * For multi-image open, drawing isn't started until all tileSources have been opened 372 | * You can specify a clip area for each image (only works on browsers that support the HTML5 canvas) (#594) 373 | * Added placeholderFillStyle so image rectangles can be drawn even before their tiles load (#635) 374 | * Ability to set opacity on individual TiledImages (#644) 375 | * Margins option to push the home region in from the edges of the Viewer (#505) 376 | * Rect and Point toString() functions are now consistent: rounding values to nearest hundredth 377 | * Overlays appear in the DOM immediately on open or addOverlay (#507) 378 | * imageLoaderLimit now works (#544) 379 | * Turning off scrollToZoom in gestureSettings now allows scroll events to propagate 380 | * You can now set a minZoomLevel that's greater than the home zoom level 381 | * Added union() to OpenSeadragon.Rect 382 | * Fixed an error in fitBounds if the new and old bounds were extremely close in size 383 | * Added ajaxWithCredentials option (#543) 384 | * Added viewport-change event for after the viewport changes but before it's drawn 385 | * A spring's current value is now updated immediately on reset (#524) 386 | * Fixed an error in fitBounds that occurred sometimes with immediately = true 387 | * Added support for HDPI (retina) displays (#583) 388 | * Corrected IIIF tile source to use canonical syntax (#586) 389 | * Fixed x/y typo that caused horizontal reference strip to be rendered only relative to height (#595) 390 | * Fixed Firefox 35 not able to open local files (#588) 391 | * Fixed an issue with zero size viewers in IE8 (#609) 392 | * Fixed: Cross Origin policy not working (#613) 393 | * Optimized tile loading by clearing the queue on a re-draw when imageLoaderLimit is set (#616) 394 | * Now animating zoom spring exponentially (#631) 395 | * Added http://editorconfig.org/ config file (#637) 396 | * Keyboard pan speed is now the same regardless of zoom level (#645) 397 | 398 | 1.2.1: 399 | 400 | * Added preserveOverlays option (#561) 401 | * Fixed: DZI tilesource was broken on IE8/IE9 (#563) 402 | * Exposed secondary pointer button (middle, right, etc.) events from MouseTracker and through viewer (#479) 403 | * MouseTracker - Improved IE 8 compatibility (#562) 404 | * MouseTracker - Improved IE 9+ compatibility (#564) 405 | * MouseTracker - Simulated touchenter/touchleave events now bubble to parent element MouseTrackers (#566) 406 | * MouseTracker - Improved multitouch support in enter/exit event handlers (#566) 407 | * MouseTracker - orphaned tracked touch pointers removed (fix for #539) 408 | * MouseTracker - removed touchenter/touchleave event support since the events don't exist on any known platform and have been removed from the W3C specification (#566) 409 | * Removed Viewer onContainerPress/onContainerRelease handlers (and the associated 'container-release' event ) that were never fired due to the canvas (child) element capturing the DOM events (#566) 410 | * Added 'canvas-enter', 'canvas-exit', and 'canvas-press' events to Viewer (#566) 411 | * ButtonGroup - removed obsolete MouseTracker event handlers (#566) 412 | * MouseTracker - added keydown and keyup handlers (#568) 413 | * Modifier keys ignored in keyboard navigation handlers (#503) 414 | * Requesting keyboard focus when viewer is clicked (#537) 415 | * Arrow key navigation fixed across platforms (#565) 416 | * Removed textarea element from viewer DOM. Viewer.canvas now handles keyboard navigation (#569) 417 | * Removed 'position' property from MouseTracker keyDownHandler/keyUpHandler/keyHandler functions (#573) 418 | * Fixed pointer event model detection for IE 10 and IE 11 (#571) 419 | * Added setMouseNavEnabled() support to Navigator (#572) 420 | * MouseTracker now defaults to tracking on (#558) 421 | * Removed Viewer focusHandler/onCanvasFocus (#577) 422 | * Added tabIndex option to viewer (#577) 423 | 424 | 1.2.0: 425 | 426 | * New combined IIIF TileSource for 1.0 through 2.0 (#441) 427 | * BREAKING CHANGE: Removed IIIF1_1TileSource (now that IIIFTileSource supports all versions) 428 | * Allowed TileSources to have dynamic tileSize via source.getTileSize(level) (#441) 429 | * DEPRECATION: Use .getTileSize(level) instead of .tileSize 430 | * Fix for IIPServer-style urls when using DZI (#413) 431 | * Fix memory leak while destroying the viewer (#421) 432 | * Added fitBoundsWithConstraints() to the viewport (#423) 433 | * Fixed MouseTracker cross-browser issues with tracking pointers over and out of the tracked element (pull request #448, fix for #152, #404, #420, and #427) 434 | * Fixed incorrect flick direction after image is rotated (#452) 435 | * Debug mode now works with rotate images (#453) 436 | * Now supporting dzi xml with namespaces (#462) 437 | * You can now rotate the navigator along with the main viewer (#455) 438 | * Viewport.setRotation now allows all rotation angles (#466) 439 | * Pinch rotate is now available (defaults to off) (#468) 440 | * Added option for home button to fill viewer (#474) 441 | * Better handling of mid-update image loaded callbacks (#409) 442 | * Tracked pointers are now cleaned up when Viewer.setMouseNavEnabled(false) is called (#518) 443 | * Added explicit pointer capture for touch event model touchstart events (#552) 444 | 445 | 1.1.1: 446 | 447 | * Fixed issue with dragging the navigator highlight on Webkit browsers (#395) 448 | * Improved Viewer Options Support in Gesture Handling (#399) 449 | 450 | 1.1.0: 451 | 452 | * BREAKING CHANGE: the openseadragon-canvas element now has two child divs. This means: (#298) 453 | * The drawer element is no longer accessible via viewer.canvas.firstChild but via viewer.drawersContainer.firstChild or viewer.drawer.canvas. 454 | * The overlays elements are no longer accessible via viewer.canvas.childNodes but via viewer.overlaysContainer.childNodes or viewer.currentOverlays[i].element. 455 | * BREAKING CHANGE: Pseudo full screen mode on IE<11 using activex has been dropped. OpenSeadragon will run in full page if full screen mode is requested. 456 | * BREAKING CHANGE: MouseTracker touch pinch gestures are no longer converted to scroll events. MouseTracker.pinchHandler should be used instead. (#369) 457 | * DEPRECATION: overlay functions have been moved from Drawer to Viewer (#331) 458 | * DEPRECATION: OpenSeadragon.cancelFullScreen has been renamed OpenSeadragon.exitFullScreen (#358) 459 | * DEPRECATION: The 'isTouchEvent' property passed in MouseTracker events is deprecated and has been replaced with 'pointerType', which is a String value "mouse", "touch", "pen", etc. to support multiple simultaneous pointing devices (#369) 460 | * DEPRECATION: The 'buttonDownAny' property passed in MouseTracker enter and exit events (enterHandler/exitHandler) is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369) 461 | * DEPRECATION: The 'buttonDownAny' property passed in Viewer's 'container-enter' and 'container-exit' events is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369) 462 | * Added layers support. Multiple images can now been displayed on top of each other with transparency via the Viewer.addLayer method (#298) 463 | * Improved overlay functions (#331) 464 | * Fixed: Nav button highlight states aren't quite aligned on Firefox (#303) 465 | * Added ControlAnchor options for default controls (#304) 466 | * Enabled basic cross-domain tile loading without tainting canvas (works in Chrome and Firefox) (#308) 467 | * Added crossOriginPolicy drawer configuration to enable or disable CORS image requests (#364) 468 | * Disabled CORS by default (#377) 469 | * Added a ControlAnchor.ABSOLUTE enumeration. Enables absolute positioning of control elements in the viewer (#310) 470 | * Added a 'navigator-scroll' event to Navigator. Fired when mousewheel events occur in the navigator (#310) 471 | * Added a navigatorMaintainSizeRatio option. If set to true, the navigator minimap resizes when the viewer element is resized (#310) 472 | * Added 'ABSOLUTE' as a navigatorPosition option, along with corresponding navigatorTop, navigatorLeft options. Allows the navigator minimap to be placed anywhere in the viewer (#310) 473 | * Enhanced the navigatorTop, navigatorLeft, navigatorHeight, and navigatorWidth options to allow a number for pixel units or a string for other element units (%, em, etc.) (#310) 474 | * Additional enhancements for IIIF support (#315) 475 | * Fixed: Setting degrees in Viewer constructor has no effect (#336) 476 | * Added pre-draw event for tiles to allow applications to alter the image (#348) 477 | * Added optional Rotate Left/Right buttons to standard controls (#341) 478 | * Added optimization for large numbers of overlays: `checkResize = false` option for OpenSeadragon.Overlay (#365) 479 | * Updated full screen API, adding support for Opera and IE11 and allowing keyboard input in Chrome (#358) 480 | * Various fixes to bring OpenSeadragon into W3C compliance (#375) 481 | * Added separate flags for turning off each of the nav buttons (#376) 482 | * Added support for query parameters in DZI tileSource URL (#378) 483 | * Enhanced MouseTracker for multi-touch (#369) 484 | * Added support for tracking multiple touch-points on multiple/simultaneous pointing devices 485 | * Added support for the W3C Pointer Events event model. Enables touch/multi-touch on IE10+ 486 | * Added a dragEndHandler event callback, called when a drag gesture ends 487 | * Added a pinchHandler event callback, called as a pinch gesture (2 touch points) is occurring 488 | * Added real-time velocity (speed and direction) tracking to drag operations. 'speed' and 'direction' values are passed in the dragHandler and dragEndHandler event data 489 | * Enhanced Viewer for multi-touch (#369) 490 | * Added pinch zoom with the new MouseTracker pinchHandler. The 'pan' and 'zoom' Viewer events can be used to detect changes resulting in pinch gestures 491 | * Added a "canvas-pinch" event fired by the pinch event handler 492 | * Added flick gesture with the new MouseTracker dragEndHandler 493 | * Added a "canvas-drag-end" event fired by the drag-end event handler 494 | * Added a GestureSettings class for per-device gesture options. Currently has settings to enable/disable zoom-on-scroll, zoom-on-pinch, zoom-on-click, and flick gesture settings. 495 | * Added GestureSettings objects for mouse, touch, and pen devices to the Viewer options giving users the ability to customize gesture handling in the viewer 496 | * Added velocity (speed and direction) properties to the "canvas-drag" event 497 | * Added double-click gesture detection to MouseTracker with corresponding dblClickHandler event callback (#392) 498 | * Added zoom on double-click feature to Viewer, with corresponding dblClickToZoom option added to the GestureSettings class (#392) 499 | * Made it possible to run OpenSeadragon from local filesystem on some browsers (#379) 500 | 501 | 1.0.0: 502 | 503 | NOTE: This version has a number of breaking changes to the API, mostly in event handling. See below. 504 | 505 | * BREAKING CHANGE: All EventSource and MouseTracker event handler method signatures changed to 'handlerMethod(event)' where event == { eventSource, userData, ... } (#251) (Also fixes #23, #224, #239) 506 | * The new eventSource property in the event object replaces the old eventSource parameter that was passed to handler methods. 507 | * Where the event object duplicated the eventSource value, those properties have been removed. This affects the following events: 508 | * All Button events - 'button' property removed 509 | * All Viewer (Viewer, Drawer, Viewport) events - 'viewer' property removed 510 | * BREAKING CHANGE: Renamed EventHandler to EventSource (#225) 511 | * BREAKING CHANGE: Event names changed for consistency: changed to lower case, compound names hyphenated, and "on" prefixes removed (#226): 512 | * Viewer "animationstart" changed to "animation-start" 513 | * Viewer "animationfinish" changed to "animation-finish" 514 | * Button "onPress" changed to "press" 515 | * Button "onRelease" changed to "release" 516 | * Button "onClick" changed to "click" 517 | * Button "onEnter" changed to "enter" 518 | * Button "onExit" changed to "exit" 519 | * Button "onFocus" changed to "focus" 520 | * Button "onBlur" changed to "blur" 521 | * BREAKING CHANGE: Numerous improvements to fullPage/fullScreen (#256): 522 | * Retains zoom/pan position better when switching into and out of fullPage. 523 | * Retains scroll position when switching back out. 524 | * More resilient to styling variations on the page. 525 | * setFullPage no longer automatically engages fullScreen; there's now a separate setFullScreen. 526 | * 'fullpage' event is now 'full-page'. 527 | * The `fullpage` property of the 'full-page' event is now `fullPage`. 528 | * There is now a 'full-screen' event with a `fullScreen` property (true if it has gone to full screen). 529 | * There are now 'pre-full-page' and 'pre-full-screen' events that include a `preventDefaultAction` property you can set in your handler to cancel. They also have `fullPage` and `fullScreen` properties respectively, to indicate if they are going into or out of the mode. 530 | * BREAKING CHANGE: Removed the 'onPageChange' callback from the viewer options. Viewer.goToPage() now raises the 'page' event only (#285) 531 | * Major documentation improvements (#281) 532 | * MouseTracker now passes the original event objects to its handler methods (#23) 533 | * MouseTracker now supports an optional 'moveHandler' method for tracking mousemove events (#215) 534 | * Added stopHandler to MouseTracker. (#262) 535 | * Fixed: Element-relative mouse coordinates now correct if the element and/or page is scrolled (using new OpenSeadragon.getElementOffset() method) (#131) 536 | * Fixed: Pinch zoom event issue, regressive issue from previous event system changes (#244) 537 | * Added IIIF Image API 1.1 Tile Source (#230) 538 | * IIIF 1.0 now uses pixel based syntax (#249) 539 | * Fixed: Touch event issue where no canvas-click events were being raised (#240) 540 | * Check that zoom reference point is valid before using it in zoomTo and zoomBy (#247) 541 | * Added a number of easier coordinate conversion methods to viewport (#243) 542 | * Added the ability to create a viewer and start at a specified page (#252) 543 | * Fixed image resolve issue with collection mode (#255) 544 | * DOM events are now passed through as 'event.originalEvent' in viewer and button events where appropriate. (#257) Affects the following events: 545 | * Viewer: 'canvas-release', 'canvas-click', 'canvas-drag', 'canvas-scroll', 'container-enter', 'container-exit', 'container-release' 546 | * Button: 'enter', 'exit', 'press', 'release', 'focus', 'blur', 'click' 547 | * Fixed: IE 10 not reading DZI file correctly in certain circumstances (#218) 548 | * Added support for the 'wheel' DOM mousewheel event (#261) 549 | * Fix for non-canvas tile rendering at large size (#264) 550 | * Drawer now uses an HTML5 canvas element whenever it's available. Can be overridden with the Viewer.useCanvas option (#191) 551 | * Added a boolean preventDefaultAction property (default false) to the event object passed to MouseTracker handler methods. (#270) Implemented in the following MouseTracker subscribers: 552 | * Viewer.keyboardCommandArea.innerTracker.focusHandler: preventDefaultAction == true prevents scrolling viewer into view 553 | * Viewer.keyboardCommandArea.innerTracker.keyHandler: preventDefaultAction == true prevents viewer keyboard navigation 554 | * Viewer.innerTracker.clickHandler: preventDefaultAction == true prevents viewer zoom on click 555 | * Viewer.innerTracker.dragHandler: preventDefaultAction == true prevents viewer panning with mouse/touch 556 | * Viewer.innerTracker.scrollHandler: preventDefaultAction == true prevents viewer zooming on mousewheel/pinch 557 | * Fixed: IE8 error with custom buttons - "Object doesn't support this action" (#279) 558 | * Support IIIF servers that don't report tile dimensions (#286) 559 | * Added an autoResize option. Default is true. When set to false, the viewer takes no action when its container element is resized. (#291) 560 | * Added a static 'version' property to OpenSeadragon. Useful for plugins that require specific OpenSeadragon versions. (#292) 561 | 562 | 0.9.131: 563 | 564 | * Fixed: canvas-click event shouldn't fire as you drag (#198) 565 | * Fixed: LegacyTileSource doesn't fail gracefully when no supported file formats are found (#202) 566 | * Added an optional userData argument to EventHandler.addHandler() which is passed unchanged to the handler method (#203) 567 | * Fixed AJAX error reporting on IE8 (#208) 568 | * Added viewportToImageRectangle method, and updated imageToViewportRectangle, imageToViewportCoordinates, and viewportToImageCoordinates to be more flexible with params (#212) 569 | * Fixed: Viewer is not responsive (css) after returning from full screen (#222) 570 | 571 | 0.9.130: 572 | 573 | * Added partial support for rotation (just 90 degree increments for now). (#185) 574 | * Hiding and restoring broke the viewer; fixed (#177) 575 | * You can now provide an onDraw function for overlays to do custom overlay manipulation (#160) 576 | * Added a destroy function on the viewer to clean up and remove elements (#179) 577 | * Fixed: navigatorPosition option corrected. (#163) 578 | * OpenSeadragon.now() returned undefined the first time; fixed 579 | * onTouchEnd did not call the correct mouse up handler; fixed (#159) 580 | * Touch events no longer capture mouse (was causing issues on devices that support both) (#168) 581 | * Clicking on a button control no longer refreshes page (#184) 582 | * Drawer now works when the page is rtl (#187) 583 | * Fixed a situation that could throw errors in touch handling (#188) 584 | 585 | 0.9.129: 586 | 587 | * Fixed: navigator image not updating when base zoom image is changed (#147) 588 | * Fixed tile rendering issue at lower zoom levels with the IIIF TileSource (#55) 589 | * On IE, ajax errors would cause an exception to be thrown; fixed (#144) 590 | * Faster and more consistent millisecond getter (#138) 591 | * Fixed an error when using navPrevNextWrap on single images (#135) 592 | * Various fixes to our timer handling (#133) 593 | * Now generating source map for openseadragon.min.js (#51) 594 | * Fix for calculating overlay width / height (#142) 595 | * JSHint tidying (#136) 596 | * Improved Ajax method (#149) 597 | * Overhauled AJAX error reporting (#151) 598 | 599 | 0.9.128: 600 | 601 | * The navigator is now off by default (#102) 602 | * Reverted minPixelRatio to 0.5 for better quality (#116) 603 | * Sometimes tiles wouldn't resolve if you used the blendTime option; fixed. (#95) 604 | * You can now choose to have previous and next buttons wrap using the config.navPrevNextWrap. (#114) 605 | * You can now specify an ID for a div to hold the navigator (#46) 606 | * You can now click in the navigator to go to a new location (#46) 607 | * Keyboard handling is now done in the viewer rather than navigator (#46) 608 | * Additional navigator fixes (#46) 609 | * Drawer events now fire properly (#94) 610 | * Fixed an error in EventHandler.removeHandler() (#48) 611 | * Better requestAnimationFrame detection on older Firefox (#103) 612 | * More efficient navigator loading (#115) 613 | * Simplified element opacity setting implementation (#123) 614 | 615 | 0.9.127: 616 | 617 | * Fixed a problem with getString when the string property is a sub-property. (#64) 618 | * Fixed: Tooltips for Navigation Controls not displaying (#63) 619 | * Cleaned up some diagnostic code that was broken. 620 | * Added fullpage class to viewer element when in fullpage mode (#61) 621 | * Reverted to original New BSD license; cleaned up license declarations (#89) 622 | 623 | 0.9.126: 624 | 625 | * DZI JSONp was broken; fixed. 626 | 627 | 0.9.125: 628 | 629 | * Fully deprecated OpenSeadragon.createFromDZI, safely deprecated Viewer.openTileSource and 630 | Viewer.openDZI to use Viewer.open internally. (#53 & #54). 631 | * Full page bug fix for when viewer is child of document body (#43). 632 | * Overlays for DZI bug fix (#45). 633 | * DziTileSource: avoid changing relative paths (#56). 634 | * Fix typo in preserveViewport handling (#77). 635 | * Fix updateMulti timer leak after multiple Viewer.open() calls (#76). 636 | * Minor documentation fixes. 637 | 638 | 0.9.124: 639 | 640 | * Performance enhancements. 641 | 642 | 643 | 0.9.123: 644 | 645 | * Real fullscreen support. 646 | 647 | 648 | 0.9.122: 649 | 650 | * Performance enhancements. 651 | 652 | 653 | 0.9.121: 654 | 655 | * Touch pan now works on Android. 656 | * Pinch zoom is better on all devices. 657 | --------------------------------------------------------------------------------