{"version":3,"sources":["webpack:///./node_modules/ui-core/widgets/article-tools/js/article-tools.js","webpack:///./node_modules/ui-core/widgets/publication-content/js/crossref.js","webpack:///./node_modules/ui-core/plugins/panzoom/jquery.panzoom.js","webpack:///./node_modules/ui-core/widgets/publication-content/js/publication-content.js","webpack:///./node_modules/ui-core/components/figure-viewer/js/figure-viewer-script.js","webpack:///./node_modules/@atypon/ui-bundle-generator/.generated/groups/_article.js"],"names":["articleTools","init","control","copy","str","additionalLink","arguments","length","undefined","el","document","createElement","id","value","location","protocol","host","setAttribute","body","appendChild","selector","querySelector","navigator","userAgent","match","setSelectionRange","select","execCommand","removeChild","copiedEvent","$","Event","trigger","isDefaultPrevented","closest","hide","permission","querySelectorAll","forEach","url","getAttribute","addEventListener","window","open","likeLink","UX","initCrossref","controller","touchArea","SETTINGS","touchStarted","tapEvent","element","callback","event","ctrlKey","shiftKey","metaKey","which","touches","x","screenX","y","screenY","stopPropagation","newTouchArea","Math","pow","preventDefault","buildQueryString","data","query","key","push","encodeURIComponent","join","isIos","test","MSStream","doiMeta","getDoiMeta","metaTags","i","Object","prototype","hasOwnProperty","call","tag","name","toLowerCase","scheme","doi","replace","queryData","domain","hostname","uri_scheme","cm_version","css","widget","style","display","innerHTML","overlay","popup","popupOffset","popupInner","content","closeButton","classList","add","map","initialised","slice","link","cursor","top","scrollY","readyState","global","Array","rupper","rsvg","floating","rmatrix","RegExp","createResetOptions","opts","options","range","animate","extend","Matrix","a","b","c","d","e","f","g","h","type","this","elements","Vector","z","Panzoom","elem","nodeType","error","contains","defaults","$elem","$set","$doc","ownerDocument","$parent","parent","isSVG","namespaceURI","nodeName","panning","_buildTransform","_transform","cssProps","transform","_buildTransition","resetDimensions","$empty","self","each","enable","scale","getMatrix","_checkPanWhenZoomed","matrix","isVector","inverse","determinant","eventNamespace","transition","disablePan","disableZoom","disableXAxis","disableYAxis","increment","exponential","panOnlyWhenZoomed","minScale","maxScale","rangeStep","duration","easing","contain","constructor","instance","_initStyle","_bind","disabled","disable","_resetStyle","_unbind","isDisabled","destroy","removeData","container","getBoundingClientRect","dims","absScale","abs","dimensions","width","height","left","border","bottom","right","margin","reset","setMatrix","_origTransform","silent","_trigger","resetZoom","origMatrix","dValue","zoom","resetPan","pan","setTransform","getTransform","transformElem","attr","exec","shift","spaceWLeft","spaceWRight","scaleDiff","conWidth","conHeight","zoomAspectW","zoomAspectH","offsetWidth","spaceHTop","spaceHBottom","max","min","$zoomRange","val","originalMatrix","isPanning","off","_transition","relative","_typeof","startScale","focal","clientX","clientY","clientV","surfaceM","o","parentOffset","offset","offsetM","scrollLeft","scrollTop","surfaceV","scaleBy","noSetRange","option","_setOptions","proxy","toDisable","styles","overflow","position","ns","str_down","str_start","str_click","events","$reset","m","isFunction","originalEvent","_startMove","contextmenu","on","step","prop","$zoomIn","$zoomOut","startTransform","_getDistance","touch1","touch2","sqrt","_getMiddle","triggerHandler","concat","moveEvent","endEvent","startDistance","startMiddle","startPageX","startPageY","touch","original","origPageX","origPageY","panOptions","setStart","getScale","pageX","pageY","move","coords","middle","diff","matrixEquals","first","second","round","fn","panzoom","args","ret","charAt","apply","factory","jQuery","tab","loader","$activator","figure","references","related","details","$tabs","$spinner","figuresTab","tabFigure","referencesTab","tabReferences","relatedTab","tabRelated","detailsTab","accessTab","tabDetails","vPort","isMobile","cloudFlareScript","openSeaDragonCloudFlareScript","get","figures","truncation","load","articleTabs","tableToggle","additionalController","boxedContent","boxedHtml","html","$myModal","append","modal_start","find","modal","rebuild","responsive","extra","accordion","back","articleTabsTrigger","$loaWrapper","removeClass","addClass","next","removeAttr","contents","wrap","hasClass","preventSelectActiveTab","onLoadtab","articleTab","$articleReferences","copyPastReferences","appendTo","show","creativeWorkMeta","clone","ajaxUrl","tabSelector","paneSelector","tabName","selectActiveTab","check","empty","getContent","$tabPane","onLoad","response","status","xhr","console","log","statusText","attach","loaderTarget","indexOf","getContentSuccess","tabTarget","isArticleTabEmpty","$tab","figureViewer","expand","figcaption","figureTitle","figureCaption","accordionClass","accordionContent","accordionTrigger","accordionTriggerIcon","accordionTriggerCaption","before","remove","toTrunk8","toTrunk8Mobile","linesToShow","MobileLinesToShow","showMoreText","showLessText","seeMoreIcon","seeLessIcon","seeMoreIconMobile","truncateTarget","not","truncate","lines","seeMoreLink","seeMoreText","seeLessText","mobileTarget","$triggers","$target","currentTarget","$tableToggle","toggle","$section","$window","$html","$document","$body","$isHighRes","isExpanded","filter","filterClass","$topRegHeight","innerHeight","$figures","$figuresToShow","$figureWidth","$currentIndex","$focusedElementBeforeOpened","$holder","$holderElement","$captionHolder","$lister","$figureRegionContainer","$captionRegion","$contentRegion","$figureNav","$zoominbtn","$zoomoutbtn","$zoomrange","$zoomreset","$image","$browsebtn","$returnbtn","islocked","offsetY","pageYOffset","$hideList","$browseContainer","$captionTitle","onHighRes","then","onHighResCallback","index","$this","dataRelElement","rel","className","dataRel","clickHandler","click","prev","captionToggle","browse","$img","keydown","keyCode","supplementary","hideOnClickOutside","resize","focusCycle","target","is","$self","highResImg","shortcutsView","toggleClass","captionBtn","holdCaption","captionTitle","utils","focusCycleInitiator","updateAriaLabelForCaptionHolder","eq","$next","$prev","$figure","pauseOriginalStream","figureLink","children","streamReset","outerHTML","showCaptionTitle","$caption","additionalBehaviorOnShow","showCaption","removeFigureTitle","headerOptions","additionalReplace","nav","$thumbnails","$thumb","toIndex","save","$images","$fig","$figureExtra","$figImage","$figureLinks","additionalBrowse","return","$figureViewText","additionalReturn","$windowsHeight","$height","figcaptionSize","displayViewer","additionalShow","activeElement","focus","setFiguersToShow","additionalOnShow","pauseClonedStream","additionalOnHide","$el","swap","swipe","direction","distance","fingerCount","fingerData","slide","setTimeout","$slide","wHeight","topHeight","$figcaption","figure_area_height","figure_title_height","doubleTap","nodoubletapzoom","bind","preventZoom","t2","timeStamp","dt","fingers","$element","text","figureExtraContent","after","$originalFigure","getScript","currentTime","pause","main","$figureViewer","$loader","err"],"mappings":"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","file":"js/vendors~article-fa420db41217cfe3ccb8.js","sourcesContent":["(function () {\n var articleTools = {\n init: function () {\n articleTools.control();\n },\n copy: function (str, additionalLink = '') {\n const el = document.createElement('textarea');\n el.id = 'temp_element';\n el.value = document.location.protocol + '//' + document.location.host + additionalLink + str;\n el.setAttribute('readonly', '');\n document.body.appendChild(el);\n\n /*to work on IOS*/\n let selector = document.querySelector('#temp_element');\n if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {\n selector.setSelectionRange(0, 999999);\n } else {\n selector.select();\n }\n\n document.execCommand('copy');\n document.body.removeChild(el);\n\n // to show alert message that the text is copied, implemented on RMIT\n const copiedEvent = $.Event('link:copied');\n $(document).trigger(copiedEvent, [articleTools]);\n if (copiedEvent.isDefaultPrevented()) {\n return;\n }\n },\n control: function () {\n if ($('figure .figure__image').length === 0) {\n $('.download_Figures').closest('.article-tool').hide();\n }\n\n const permission = document.querySelectorAll('.article-tool__permissions');\n if (permission.length > 0) {\n permission.forEach(el => {\n const url = el.getAttribute('href');\n el.addEventListener('click', () => {\n window.open(url, 'popup', 'width=750,height=650');\n });\n });\n }\n const likeLink = document.querySelectorAll('.likeLink');\n if (likeLink.length > 0) {\n likeLink.forEach(el => {\n const url = el.getAttribute('data-url');\n el.addEventListener('click', () => {\n articleTools.copy(url, '/lti');\n });\n });\n }\n },\n };\n\n UX.articleTools = articleTools;\n\n if ($('.article-tools__ctrl').length) {\n UX.articleTools.init();\n }\n})();\n","(function () {\n const initCrossref = {\n init: function () {\n initCrossref.controller();\n },\n controller: function () {\n var SETTINGS = {\n ENDPOINT: 'https://crossmark.crossref.org/dialog',\n SCRIPT_VERSION: 'v2.0',\n // LOGO_URL: 'http://crossmark-cdn.crossref.org/widget/v2.0/logos/crossmark-logo-square.svg',\n STYLESHEET_URL: 'https://crossmark-cdn.crossref.org/widget/v2.0/style.css',\n };\n\n var touchStarted = false;\n var touchArea;\n var tapEvent = function (element, callback) {\n element.addEventListener(\n 'click',\n function (event) {\n if (event.ctrlKey || event.shiftKey || event.metaKey || event.which !== 1) {\n return;\n }\n return callback(event);\n },\n false\n );\n\n element.addEventListener(\n 'touchstart',\n function (event) {\n if (event.touches.length > 1) return (touchStarted = false);\n touchArea = {x: event.touches[0].screenX, y: event.touches[0].screenY};\n touchStarted = element;\n\n event.stopPropagation();\n },\n false\n );\n\n window.addEventListener('touchstart', function (event) {\n touchStarted = false;\n });\n\n element.addEventListener(\n 'touchmove',\n function (event) {\n if (event.touches.length > 1) return (touchStarted = false);\n const newTouchArea = {x: event.touches[0].screenX, y: event.touches[0].screenY};\n if (\n Math.pow(touchArea.x - newTouchArea.x, 2) + Math.pow(touchArea.y - newTouchArea.y, 2) >\n 500\n ) {\n touchStarted = false;\n }\n },\n false\n );\n\n element.addEventListener(\n 'touchend',\n function (event) {\n if (touchStarted) {\n touchStarted = false;\n return callback(event);\n } else {\n event.preventDefault();\n }\n },\n false\n );\n };\n\n const buildQueryString = function (data) {\n const query = [];\n for (let key in data) {\n query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));\n }\n return '?' + query.join('&');\n };\n\n const isIos = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n\n // Scan for case-insensitive.\n const getDoiMeta = function () {\n const metaTags = document.querySelectorAll('meta');\n for (let i in metaTags) {\n if (Object.prototype.hasOwnProperty.call(metaTags, i)) {\n const tag = metaTags[i];\n if ((tag.name || '').toLowerCase() === 'dc.identifier' && tag.scheme === 'doi') {\n return tag;\n }\n }\n }\n };\n\n const doiMeta = getDoiMeta();\n let doi = doiMeta ? doiMeta.getAttribute('content').replace(/^(info:doi\\/|doi:)/, '') : null;\n if (doi == null) doi = $('#crossMark').data('doi');\n\n const queryData = {\n doi: doi,\n domain: window.location.hostname,\n uri_scheme: window.location.protocol,\n cm_version: SETTINGS.SCRIPT_VERSION,\n };\n\n const css = document.createElement('link');\n css.setAttribute('href', SETTINGS.STYLESHEET_URL);\n css.setAttribute('type', 'text/css');\n css.setAttribute('rel', 'stylesheet');\n document.querySelector('head').appendChild(css);\n\n const widget = document.createElement('div');\n widget.setAttribute('id', 'crossmark-widget');\n\n // Initial display none to avoid a flash on load.\n widget.style.display = 'none';\n\n widget.innerHTML =\n '
' +\n '
' +\n '
' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '' +\n '
' +\n '
' +\n '
' +\n '
';\n\n const overlay = widget.querySelector('.crossmark-overlay');\n const popup = widget.querySelector('.crossmark-popup');\n const popupOffset = widget.querySelector('.crossmark-popup__offset');\n const popupInner = widget.querySelector('.crossmark-popup__inner');\n const content = widget.querySelector('.crossmark-popup__content');\n const closeButton = widget.querySelector('.crossmark-popup__btn-close');\n\n if (isIos) popupOffset.classList.add('is-ios');\n // logo.setAttribute('src', SETTINGS.LOGO_URL);\n\n document.body.appendChild(widget);\n\n [overlay, popup, closeButton].map(function (element) {\n tapEvent(element, function (event) {\n widget.style.display = 'none';\n\n event.preventDefault();\n event.stopPropagation();\n });\n });\n\n tapEvent(popupInner, function (event) {\n event.stopPropagation();\n });\n\n let initialised = false;\n\n // delete queryData.domain;\n\n const links = [].slice.call(document.querySelectorAll('[data-target=crossmark]'), 0);\n links.map(function (link) {\n link.style.cursor = 'pointer';\n link.setAttribute('href', SETTINGS.ENDPOINT + buildQueryString(queryData));\n\n tapEvent(link, function (event) {\n if (!initialised) {\n content.setAttribute('src', SETTINGS.ENDPOINT + buildQueryString(queryData));\n initialised = true;\n }\n widget.style.display = 'block';\n if (isIos) popupInner.style.top = window.scrollY + 'px';\n\n event.preventDefault();\n event.stopPropagation();\n });\n });\n },\n };\n UX.initCrossref = initCrossref; // add to global namespace\n})();\n\nif (document.readyState !== 'loading') {\n UX.initCrossref.init();\n} else {\n document.addEventListener('DOMContentLoaded', function () {\n UX.initCrossref.init();\n });\n}\n","/**\n * @license jquery.panzoom.js v3.2.2\n * Updated: Sat Aug 27 2016\n * Add pan and zoom functionality to any element\n * Copyright (c) timmy willison\n * Released under the MIT license\n * https://github.com/timmywil/jquery.panzoom/blob/master/MIT-License.txt\n */\n/*eslint-disable*/\n(function (global, factory) {\n // AMD\n // if (typeof define === 'function' && define.amd) {\n // define([ 'jquery' ], function(jQuery) {\n // return factory(global, jQuery);\n // });\n // // CommonJS/Browserify\n // } else if (typeof exports === 'object') {\n // factory(global, require('jquery'));\n // // Global\n // } else {\n // factory(global, global.jQuery);\n // }\n factory(global, global.jQuery);\n})(typeof window !== 'undefined' ? window : this, function (window, $) {\n 'use strict';\n\n var document = window.document;\n var datakey = '__pz__';\n var slice = Array.prototype.slice;\n var rIE11 = /trident\\/7./i;\n var supportsInputEvent = (function () {\n return true;\n })();\n\n // Regex\n var rupper = /([A-Z])/g;\n var rsvg = /^http:[\\w\\.\\/]+svg$/;\n\n var floating = '(\\\\-?\\\\d[\\\\d\\\\.e-]*)';\n var commaSpace = '\\\\,?\\\\s*';\n var rmatrix = new RegExp(\n '^matrix\\\\(' +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n commaSpace +\n floating +\n '\\\\)$'\n );\n\n /**\n * Utility for determining transform matrix equality\n * Checks backwards to test translation first\n * @param {Array} first\n * @param {Array} second\n */\n function matrixEquals(first, second) {\n var i = first.length;\n while (--i) {\n if (Math.round(+first[i]) !== Math.round(+second[i])) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Creates the options object for reset functions\n * @param {Boolean|Object} opts See reset methods\n * @returns {Object} Returns the newly-created options object\n */\n function createResetOptions(opts) {\n var options = {range: true, animate: true};\n if (typeof opts === 'boolean') {\n options.animate = opts;\n } else {\n $.extend(options, opts);\n }\n return options;\n }\n\n /**\n * Represent a transformation matrix with a 3x3 matrix for calculations\n * Matrix functions adapted from Louis Remi's jQuery.transform (https://github.com/louisremi/jquery.transform.js)\n * @param {Array|Number} a An array of six values representing a 2d transformation matrix\n */\n function Matrix(a, b, c, d, e, f, g, h, i) {\n if ($.type(a) === 'array') {\n this.elements = [+a[0], +a[2], +a[4], +a[1], +a[3], +a[5], 0, 0, 1];\n } else {\n this.elements = [a, b, c, d, e, f, g || 0, h || 0, i || 1];\n }\n }\n\n Matrix.prototype = {\n /**\n * Multiply a 3x3 matrix by a similar matrix or a vector\n * @param {Matrix|Vector} matrix\n * @return {Matrix|Vector} Returns a vector if multiplying by a vector\n */\n x: function (matrix) {\n var isVector = matrix instanceof Vector;\n\n var a = this.elements,\n b = matrix.elements;\n\n if (isVector && b.length === 3) {\n // b is actually a vector\n return new Vector(\n a[0] * b[0] + a[1] * b[1] + a[2] * b[2],\n a[3] * b[0] + a[4] * b[1] + a[5] * b[2],\n a[6] * b[0] + a[7] * b[1] + a[8] * b[2]\n );\n } else if (b.length === a.length) {\n // b is a 3x3 matrix\n return new Matrix(\n a[0] * b[0] + a[1] * b[3] + a[2] * b[6],\n a[0] * b[1] + a[1] * b[4] + a[2] * b[7],\n a[0] * b[2] + a[1] * b[5] + a[2] * b[8],\n\n a[3] * b[0] + a[4] * b[3] + a[5] * b[6],\n a[3] * b[1] + a[4] * b[4] + a[5] * b[7],\n a[3] * b[2] + a[4] * b[5] + a[5] * b[8],\n\n a[6] * b[0] + a[7] * b[3] + a[8] * b[6],\n a[6] * b[1] + a[7] * b[4] + a[8] * b[7],\n a[6] * b[2] + a[7] * b[5] + a[8] * b[8]\n );\n }\n return false; // fail\n },\n /**\n * Generates an inverse of the current matrix\n * @returns {Matrix}\n */\n inverse: function () {\n var d = 1 / this.determinant(),\n a = this.elements;\n return new Matrix(\n d * (a[8] * a[4] - a[7] * a[5]),\n d * -(a[8] * a[1] - a[7] * a[2]),\n d * (a[5] * a[1] - a[4] * a[2]),\n\n d * -(a[8] * a[3] - a[6] * a[5]),\n d * (a[8] * a[0] - a[6] * a[2]),\n d * -(a[5] * a[0] - a[3] * a[2]),\n\n d * (a[7] * a[3] - a[6] * a[4]),\n d * -(a[7] * a[0] - a[6] * a[1]),\n d * (a[4] * a[0] - a[3] * a[1])\n );\n },\n /**\n * Calculates the determinant of the current matrix\n * @returns {Number}\n */\n determinant: function () {\n var a = this.elements;\n return (\n a[0] * (a[8] * a[4] - a[7] * a[5]) -\n a[3] * (a[8] * a[1] - a[7] * a[2]) +\n a[6] * (a[5] * a[1] - a[4] * a[2])\n );\n },\n };\n\n /**\n * Create a vector containing three values\n */\n function Vector(x, y, z) {\n this.elements = [x, y, z];\n }\n\n /**\n * Get the element at zero-indexed index i\n * @param {Number} i\n */\n Vector.prototype.e = Matrix.prototype.e = function (i) {\n return this.elements[i];\n };\n\n /**\n * Create a Panzoom object for a given element\n * @constructor\n * @param {Element} elem - Element to use pan and zoom\n * @param {Object} [options] - An object literal containing options to override default options\n * (See Panzoom.defaults for ones not listed below)\n * @param {jQuery} [options.$zoomIn] - zoom in buttons/links collection (you can also bind these yourself\n * e.g. $button.on('click', function(e) { e.preventDefault(); $elem.panzoom('zoomIn'); });)\n * @param {jQuery} [options.$zoomOut] - zoom out buttons/links collection on which to bind zoomOut\n * @param {jQuery} [options.$zoomRange] - zoom in/out with this range control\n * @param {jQuery} [options.$reset] - Reset buttons/links collection on which to bind the reset method\n * @param {Function} [options.on[Start|Change|Zoom|Pan|End|Reset] - Optional callbacks for panzoom events\n */\n function Panzoom(elem, options) {\n // Allow instantiation without `new` keyword\n if (!(this instanceof Panzoom)) {\n return new Panzoom(elem, options);\n }\n\n // Sanity checks\n if (elem.nodeType !== 1) {\n $.error('Panzoom called on non-Element node');\n }\n if (!$.contains(document, elem)) {\n $.error('Panzoom element must be attached to the document');\n }\n\n // Don't remake\n var d = $.data(elem, datakey);\n if (d) {\n return d;\n }\n\n // Extend default with given object literal\n // Each instance gets its own options\n this.options = options = $.extend({}, Panzoom.defaults, options);\n this.elem = elem;\n var $elem = (this.$elem = $(elem));\n this.$set = options.$set && options.$set.length ? options.$set : $elem;\n this.$doc = $(elem.ownerDocument || document);\n this.$parent = $elem.parent();\n this.parent = this.$parent[0];\n\n // This is SVG if the namespace is SVG\n // However, while elements are SVG, we want to treat those like other elements\n this.isSVG = rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\n\n this.panning = false;\n\n // Save the original transform value\n // Save the prefixed transform style key\n // Set the starting transform\n this._buildTransform();\n\n // Build the appropriately-prefixed transform style property name\n // De-camelcase\n this._transform = $.cssProps.transform\n ? $.cssProps.transform.replace(rupper, '-$1').toLowerCase()\n : 'transform';\n\n // Build the transition value\n this._buildTransition();\n\n // Build containment dimensions\n this.resetDimensions();\n\n // Add zoom and reset buttons to `this`\n var $empty = $();\n var self = this;\n $.each(['$zoomIn', '$zoomOut', '$zoomRange', '$reset'], function (i, name) {\n self[name] = options[name] || $empty;\n });\n\n this.enable();\n\n this.scale = this.getMatrix()[0];\n this._checkPanWhenZoomed();\n\n // Save the instance\n $.data(elem, datakey, this);\n }\n\n // Attach regex for possible use (immutable)\n Panzoom.rmatrix = rmatrix;\n\n Panzoom.defaults = {\n // Should always be non-empty\n // Used to bind jQuery events without collisions\n // A guid is not added here as different instantiations/versions of panzoom\n // on the same element is not supported, so don't do it.\n eventNamespace: '.panzoom',\n\n // Whether or not to transition the scale\n transition: true,\n\n // Default cursor style for the element\n cursor: 'move',\n\n // There may be some use cases for zooming without panning or vice versa\n disablePan: false,\n disableZoom: false,\n\n // Pan only on the X or Y axes\n disableXAxis: false,\n disableYAxis: false,\n\n // Set whether you'd like to pan on left (1), middle (2), or right click (3)\n which: 1,\n\n // The increment at which to zoom\n // adds/subtracts to the scale each time zoomIn/Out is called\n increment: 0.3,\n\n // Turns on exponential zooming\n // If false, zooming will be incremented linearly\n exponential: true,\n\n // Pan only when the scale is greater than minScale\n panOnlyWhenZoomed: false,\n\n // min and max zoom scales\n minScale: 0.3,\n maxScale: 6,\n\n // The default step for the range input\n // Precendence: default < HTML attribute < option setting\n rangeStep: 0.05,\n\n // Animation duration (ms)\n duration: 200,\n // CSS easing used for scale transition\n easing: 'ease-in-out',\n\n // Indicate that the element should be contained within it's parent when panning\n // Note: this does not affect zooming outside of the parent\n // Set this value to 'invert' to only allow panning outside of the parent element (basically the opposite of the normal use of contain)\n // 'invert' is useful for a large panzoom element where you don't want to show anything behind it\n contain: false,\n };\n\n Panzoom.prototype = {\n constructor: Panzoom,\n\n /**\n * @returns {Panzoom} Returns the instance\n */\n instance: function () {\n return this;\n },\n\n /**\n * Enable or re-enable the panzoom instance\n */\n enable: function () {\n // Unbind first\n this._initStyle();\n this._bind();\n this.disabled = false;\n },\n\n /**\n * Disable panzoom\n */\n disable: function () {\n this.disabled = true;\n this._resetStyle();\n this._unbind();\n },\n\n /**\n * @returns {Boolean} Returns whether the current panzoom instance is disabled\n */\n isDisabled: function () {\n return this.disabled;\n },\n\n /**\n * Destroy the panzoom instance\n */\n destroy: function () {\n this.disable();\n $.removeData(this.elem, datakey);\n },\n\n /**\n * Builds the restricing dimensions from the containment element\n * Also used with focal points\n * Call this method whenever the dimensions of the element or parent are changed\n */\n resetDimensions: function () {\n // Reset container properties\n this.container = this.parent.getBoundingClientRect();\n\n // Set element properties\n var elem = this.elem;\n // getBoundingClientRect() works with SVG, offsetWidth does not\n var dims = elem.getBoundingClientRect();\n var absScale = Math.abs(this.scale);\n this.dimensions = {\n width: dims.width,\n height: dims.height,\n left: $.css(elem, 'left', true) || 0,\n top: $.css(elem, 'top', true) || 0,\n // Borders and margins are scaled\n border: {\n top: $.css(elem, 'borderTopWidth', true) * absScale || 0,\n bottom: $.css(elem, 'borderBottomWidth', true) * absScale || 0,\n left: $.css(elem, 'borderLeftWidth', true) * absScale || 0,\n right: $.css(elem, 'borderRightWidth', true) * absScale || 0,\n },\n margin: {\n top: $.css(elem, 'marginTop', true) * absScale || 0,\n left: $.css(elem, 'marginLeft', true) * absScale || 0,\n },\n };\n },\n\n /**\n * Return the element to it's original transform matrix\n * @param {Boolean} [options] If a boolean is passed, animate the reset (default: true). If an options object is passed, simply pass that along to setMatrix.\n * @param {Boolean} [options.silent] Silence the reset event\n */\n reset: function (options) {\n options = createResetOptions(options);\n // Reset the transform to its original value\n var matrix = this.setMatrix(this._origTransform, options);\n if (!options.silent) {\n this._trigger('reset', matrix);\n }\n },\n\n /**\n * Only resets zoom level\n * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to zoom()\n */\n resetZoom: function (options) {\n options = createResetOptions(options);\n var origMatrix = this.getMatrix(this._origTransform);\n options.dValue = origMatrix[3];\n this.zoom(origMatrix[0], options);\n },\n\n /**\n * Only reset panning\n * @param {Boolean|Object} [options] Whether to animate the reset (default: true) or an object of options to pass to pan()\n */\n resetPan: function (options) {\n var origMatrix = this.getMatrix(this._origTransform);\n this.pan(origMatrix[4], origMatrix[5], createResetOptions(options));\n },\n\n /**\n * Sets a transform on the $set\n * For SVG, the style attribute takes precedence\n * and allows us to animate\n * @param {String} transform\n */\n setTransform: function (transform) {\n var $set = this.$set;\n var i = $set.length;\n while (i--) {\n $.style($set[i], 'transform', transform);\n\n // Support IE9-11, Edge 13-14+\n // Set attribute alongside style attribute\n // since IE and Edge do not respect style settings on SVG\n // See https://css-tricks.com/transforms-on-svg-elements/\n if (this.isSVG) {\n $set[i].setAttribute('transform', transform);\n }\n }\n },\n\n /**\n * Retrieving the transform is different for SVG\n * (unless a style transform is already present)\n * Uses the $set collection for retrieving the transform\n * @param {String} [transform] Pass in an transform value (like 'scale(1.1)')\n * to have it formatted into matrix format for use by Panzoom\n * @returns {String} Returns the current transform value of the element\n */\n getTransform: function (transform) {\n var $set = this.$set;\n var transformElem = $set[0];\n if (transform) {\n this.setTransform(transform);\n } else {\n // IE and Edge still set the transform style properly\n // They just don't render it on SVG\n // So we get a correct value here\n transform = $.style(transformElem, 'transform');\n\n if (this.isSVG && (!transform || transform === 'none')) {\n transform = $.attr(transformElem, 'transform') || 'none';\n }\n }\n\n // Convert any transforms set by the user to matrix format\n // by setting to computed\n if (transform !== 'none' && !rmatrix.test(transform)) {\n // Get computed and set for next time\n this.setTransform((transform = $.css(transformElem, 'transform')));\n }\n\n return transform || 'none';\n },\n\n /**\n * Retrieve the current transform matrix for $elem (or turn a transform into it's array values)\n * @param {String} [transform] matrix-formatted transform value\n * @returns {Array} Returns the current transform matrix split up into it's parts, or a default matrix\n */\n getMatrix: function (transform) {\n var matrix = rmatrix.exec(transform || this.getTransform());\n if (matrix) {\n matrix.shift();\n }\n return matrix || [1, 0, 0, 1, 0, 0];\n },\n\n /**\n * Given a matrix object, quickly set the current matrix of the element\n * @param {Array|String} matrix\n * @param {Object} [options]\n * @param {Boolean|String} [options.animate] Whether to animate the transform change, or 'skip' indicating that it is unnecessary to set\n * @param {Boolean} [options.contain] Override the global contain option\n * @param {Boolean} [options.range] If true, $zoomRange's value will be updated.\n * @param {Boolean} [options.silent] If true, the change event will not be triggered\n * @returns {Array} Returns the newly-set matrix\n */\n setMatrix: function (matrix, options) {\n if (this.disabled) {\n return;\n }\n if (!options) {\n options = {};\n }\n // Convert to array\n if (typeof matrix === 'string') {\n matrix = this.getMatrix(matrix);\n }\n var scale = +matrix[0];\n var contain = typeof options.contain !== 'undefined' ? options.contain : this.options.contain;\n\n // Apply containment\n if (contain) {\n var dims = options.dims;\n if (!dims) {\n this.resetDimensions();\n dims = this.dimensions;\n }\n var spaceWLeft, spaceWRight, scaleDiff;\n var container = this.container;\n var width = dims.width;\n var height = dims.height;\n var conWidth = container.width;\n var conHeight = container.height;\n var zoomAspectW = conWidth / width;\n var zoomAspectH = conHeight / height;\n\n // If the element is not naturally centered,\n // assume full space right\n if (this.$parent.css('textAlign') !== 'center' || $.css(this.elem, 'display') !== 'inline') {\n // offsetWidth gets us the width without the transform\n scaleDiff = (width - this.elem.offsetWidth) / 2;\n spaceWLeft = scaleDiff - dims.border.left;\n spaceWRight = width - conWidth - scaleDiff + dims.border.right;\n } else {\n spaceWLeft = spaceWRight = (width - conWidth) / 2;\n }\n var spaceHTop = (height - conHeight) / 2 + dims.border.top;\n var spaceHBottom = (height - conHeight) / 2 - dims.border.top - dims.border.bottom;\n\n if (contain === 'invert' || (contain === 'automatic' && zoomAspectW < 1.01)) {\n matrix[4] = Math.max(Math.min(matrix[4], spaceWLeft - dims.border.left), -spaceWRight);\n } else {\n matrix[4] = Math.min(Math.max(matrix[4], spaceWLeft), -spaceWRight);\n }\n\n if (contain === 'invert' || (contain === 'automatic' && zoomAspectH < 1.01)) {\n matrix[5] = Math.max(Math.min(matrix[5], spaceHTop - dims.border.top), -spaceHBottom);\n } else {\n matrix[5] = Math.min(Math.max(matrix[5], spaceHTop), -spaceHBottom);\n }\n }\n\n // Animate\n if (options.animate !== 'skip') {\n // Set transition\n this.transition(!options.animate);\n }\n\n // Update range element\n if (options.range) {\n this.$zoomRange.val(scale);\n }\n\n // Set the matrix on this.$set\n if (this.options.disableXAxis || this.options.disableYAxis) {\n var originalMatrix = this.getMatrix();\n if (this.options.disableXAxis) {\n matrix[4] = originalMatrix[4];\n }\n if (this.options.disableYAxis) {\n matrix[5] = originalMatrix[5];\n }\n }\n this.setTransform('matrix(' + matrix.join(',') + ')');\n\n this.scale = scale;\n\n // Disable/enable panning if zooming is at minimum and panOnlyWhenZoomed is true\n this._checkPanWhenZoomed(scale);\n\n if (!options.silent) {\n this._trigger('change', matrix);\n }\n\n return matrix;\n },\n\n /**\n * @returns {Boolean} Returns whether the panzoom element is currently being dragged\n */\n isPanning: function () {\n return this.panning;\n },\n\n /**\n * Apply the current transition to the element, if allowed\n * @param {Boolean} [off] Indicates that the transition should be turned off\n */\n transition: function (off) {\n if (!this._transition) {\n return;\n }\n var transition = off || !this.options.transition ? 'none' : this._transition;\n var $set = this.$set;\n var i = $set.length;\n while (i--) {\n // Avoid reflows when zooming\n if ($.style($set[i], 'transition') !== transition) {\n $.style($set[i], 'transition', transition);\n }\n }\n },\n\n /**\n * Pan the element to the specified translation X and Y\n * Note: this is not the same as setting jQuery#offset() or jQuery#position()\n * @param {Number} x\n * @param {Number} y\n * @param {Object} [options] These options are passed along to setMatrix\n * @param {Array} [options.matrix] The matrix being manipulated (if already known so it doesn't have to be retrieved again)\n * @param {Boolean} [options.silent] Silence the pan event. Note that this will also silence the setMatrix change event.\n * @param {Boolean} [options.relative] Make the x and y values relative to the existing matrix\n */\n pan: function (x, y, options) {\n if (this.options.disablePan) {\n return;\n }\n if (!options) {\n options = {};\n }\n var matrix = options.matrix;\n if (!matrix) {\n matrix = this.getMatrix();\n }\n // Cast existing matrix values to numbers\n if (options.relative) {\n x += +matrix[4];\n y += +matrix[5];\n }\n matrix[4] = x;\n matrix[5] = y;\n this.setMatrix(matrix, options);\n if (!options.silent) {\n this._trigger('pan', matrix[4], matrix[5]);\n }\n },\n\n /**\n * Zoom in/out the element using the scale properties of a transform matrix\n * @param {Number|Boolean} [scale] The scale to which to zoom or a boolean indicating to transition a zoom out\n * @param {Object} [opts] All global options can be overwritten by this options object. For example, override the default increment.\n * @param {Boolean} [opts.noSetRange] Specify that the method should not set the $zoomRange value (as is the case when $zoomRange is calling zoom on change)\n * @param {jQuery.Event|Object} [opts.focal] A focal point on the panzoom element on which to zoom.\n * If an object, set the clientX and clientY properties to the position relative to the parent\n * @param {Boolean} [opts.animate] Whether to animate the zoom (defaults to true if scale is not a number, false otherwise)\n * @param {Boolean} [opts.silent] Silence the zoom event\n * @param {Array} [opts.matrix] Optionally pass the current matrix so it doesn't need to be retrieved\n * @param {Number} [opts.dValue] Think of a transform matrix as four values a, b, c, d\n * where a/d are the horizontal/vertical scale values and b/c are the skew values\n * (5 and 6 of matrix array are the tx/ty transform values).\n * Normally, the scale is set to both the a and d values of the matrix.\n * This option allows you to specify a different d value for the zoom.\n * For instance, to flip vertically, you could set -1 as the dValue.\n */\n zoom: function (scale, opts) {\n // Shuffle arguments\n if (typeof scale === 'object') {\n opts = scale;\n scale = null;\n } else if (!opts) {\n opts = {};\n }\n var options = $.extend({}, this.options, opts);\n // Check if disabled\n if (options.disableZoom) {\n return;\n }\n var animate = false;\n var matrix = options.matrix || this.getMatrix();\n var startScale = +matrix[0];\n\n // Calculate zoom based on increment\n if (typeof scale !== 'number') {\n // Just use a number a little greater than 1\n // Below 1 can use normal increments\n if (options.exponential && startScale - options.increment >= 1) {\n scale = Math[scale ? 'sqrt' : 'pow'](startScale, 2);\n } else {\n scale = startScale + options.increment * (scale ? -1 : 1);\n }\n animate = true;\n }\n\n // Constrain scale\n if (scale > options.maxScale) {\n scale = options.maxScale;\n } else if (scale < options.minScale) {\n scale = options.minScale;\n }\n\n // Calculate focal point based on scale\n var focal = options.focal;\n if (focal && !options.disablePan) {\n // Adapted from code by Florian Günther\n // https://github.com/florianguenther/zui53\n this.resetDimensions();\n var dims = (options.dims = this.dimensions);\n var clientX = focal.clientX;\n var clientY = focal.clientY;\n\n // Adjust the focal point for transform-origin 50% 50%\n // SVG elements have a transform origin of 0 0\n if (!this.isSVG) {\n clientX -= dims.width / startScale / 2;\n clientY -= dims.height / startScale / 2;\n }\n\n var clientV = new Vector(clientX, clientY, 1);\n var surfaceM = new Matrix(matrix);\n // Supply an offset manually if necessary\n var o = this.parentOffset || this.$parent.offset();\n var offsetM = new Matrix(1, 0, o.left - this.$doc.scrollLeft(), 0, 1, o.top - this.$doc.scrollTop());\n var surfaceV = surfaceM.inverse().x(offsetM.inverse().x(clientV));\n var scaleBy = scale / matrix[0];\n surfaceM = surfaceM.x(new Matrix([scaleBy, 0, 0, scaleBy, 0, 0]));\n clientV = offsetM.x(surfaceM.x(surfaceV));\n matrix[4] = +matrix[4] + (clientX - clientV.e(0));\n matrix[5] = +matrix[5] + (clientY - clientV.e(1));\n }\n\n // Set the scale\n matrix[0] = scale;\n matrix[3] = typeof options.dValue === 'number' ? options.dValue : scale;\n\n // Calling zoom may still pan the element\n this.setMatrix(matrix, {\n animate: typeof options.animate !== 'undefined' ? options.animate : animate,\n // Set the zoomRange value\n range: !options.noSetRange,\n });\n\n // Trigger zoom event\n if (!options.silent) {\n this._trigger('zoom', matrix[0], options);\n }\n },\n\n /**\n * Get/set option on an existing instance\n * @returns {Array|undefined} If getting, returns an array of all values\n * on each instance for a given key. If setting, continue chaining by returning undefined.\n */\n option: function (key, value) {\n var options;\n if (!key) {\n // Avoids returning direct reference\n return $.extend({}, this.options);\n }\n\n if (typeof key === 'string') {\n if (arguments.length === 1) {\n return this.options[key] !== undefined ? this.options[key] : null;\n }\n options = {};\n options[key] = value;\n } else {\n options = key;\n }\n\n this._setOptions(options);\n },\n\n /**\n * Internally sets options\n * @param {Object} options - An object literal of options to set\n * @private\n */\n _setOptions: function (options) {\n $.each(\n options,\n $.proxy(function (key, value) {\n switch (key) {\n case 'disablePan':\n this._resetStyle();\n /* falls through */\n case '$zoomIn':\n case '$zoomOut':\n case '$zoomRange':\n case '$reset':\n case 'disableZoom':\n case 'onStart':\n case 'onChange':\n case 'onZoom':\n case 'onPan':\n case 'onEnd':\n case 'onReset':\n case 'eventNamespace':\n this._unbind();\n }\n this.options[key] = value;\n switch (key) {\n case 'disablePan':\n this._initStyle();\n /* falls through */\n case '$zoomIn':\n case '$zoomOut':\n case '$zoomRange':\n case '$reset':\n // Set these on the instance\n this[key] = value;\n /* falls through */\n case 'disableZoom':\n case 'onStart':\n case 'onChange':\n case 'onZoom':\n case 'onPan':\n case 'onEnd':\n case 'onReset':\n case 'eventNamespace':\n this._bind();\n break;\n case 'cursor':\n $.style(this.elem, 'cursor', value);\n break;\n case 'minScale':\n this.$zoomRange.attr('min', value);\n break;\n case 'maxScale':\n this.$zoomRange.attr('max', value);\n break;\n case 'rangeStep':\n this.$zoomRange.attr('step', value);\n break;\n case 'startTransform':\n this._buildTransform();\n break;\n case 'duration':\n case 'easing':\n this._buildTransition();\n /* falls through */\n case 'transition':\n this.transition();\n break;\n case 'panOnlyWhenZoomed':\n this._checkPanWhenZoomed();\n break;\n case '$set':\n if (value instanceof $ && value.length) {\n this.$set = value;\n // Reset styles\n this._initStyle();\n this._buildTransform();\n }\n }\n }, this)\n );\n },\n\n /**\n * Disable/enable panning depending on whether the current scale\n * matches the minimum\n * @param {Number} [scale]\n * @private\n */\n _checkPanWhenZoomed: function (scale) {\n var options = this.options;\n if (options.panOnlyWhenZoomed) {\n if (!scale) {\n scale = this.getMatrix()[0];\n }\n var toDisable = scale <= options.minScale;\n if (options.disablePan !== toDisable) {\n this.option('disablePan', toDisable);\n }\n }\n },\n\n /**\n * Initialize base styles for the element and its parent\n * @private\n */\n _initStyle: function () {\n var styles = {\n // Set the same default whether SVG or HTML\n // transform-origin cannot be changed to 50% 50% in IE9-11 or Edge 13-14+\n 'transform-origin': this.isSVG ? '0 0' : '50% 50%',\n };\n // Set elem styles\n if (!this.options.disablePan) {\n styles.cursor = this.options.cursor;\n }\n this.$set.css(styles);\n\n // Set parent to relative if set to static\n var $parent = this.$parent;\n // No need to add styles to the body\n if ($parent.length && !$.nodeName(this.parent, 'body')) {\n styles = {\n overflow: 'hidden',\n };\n if ($parent.css('position') === 'static') {\n styles.position = 'relative';\n }\n $parent.css(styles);\n }\n },\n\n /**\n * Undo any styles attached in this plugin\n * @private\n */\n _resetStyle: function () {\n this.$elem.css({\n cursor: '',\n transition: '',\n });\n this.$parent.css({\n overflow: '',\n position: '',\n });\n },\n\n /**\n * Binds all necessary events\n * @private\n */\n _bind: function () {\n var self = this;\n var options = this.options;\n var ns = options.eventNamespace;\n var str_down = 'mousedown' + ns + ' pointerdown' + ns + ' MSPointerDown' + ns;\n var str_start = 'touchstart' + ns + ' ' + str_down;\n var str_click = 'touchend' + ns + ' click' + ns + ' pointerup' + ns + ' MSPointerUp' + ns;\n var events = {};\n var $reset = this.$reset;\n var $zoomRange = this.$zoomRange;\n\n // Bind panzoom events from options\n $.each(['Start', 'Change', 'Zoom', 'Pan', 'End', 'Reset'], function () {\n var m = options['on' + this];\n if ($.isFunction(m)) {\n events['panzoom' + this.toLowerCase() + ns] = m;\n }\n });\n\n // Bind $elem drag and click/touchdown events\n // Bind touchstart if either panning or zooming is enabled\n if (!options.disablePan || !options.disableZoom) {\n events[str_start] = function (e) {\n var touches;\n if (\n e.type === 'touchstart'\n ? // Touch\n (touches = e.touches || e.originalEvent.touches) &&\n ((touches.length === 1 && !options.disablePan) || touches.length === 2)\n : // Mouse/Pointer: Ignore unexpected click types\n // Support: IE10 only\n // IE10 does not support e.button for MSPointerDown, but does have e.which\n !options.disablePan && (e.which || e.originalEvent.which) === options.which\n ) {\n e.preventDefault();\n e.stopPropagation();\n self._startMove(e, touches);\n }\n };\n // Prevent the contextmenu event\n // if we're binding to right-click\n if (options.which === 3) {\n events.contextmenu = false;\n }\n }\n this.$elem.on(events);\n\n // Bind reset\n if ($reset.length) {\n $reset.on(str_click, function (e) {\n e.preventDefault();\n self.reset();\n });\n }\n\n // Set default attributes for the range input\n if ($zoomRange.length) {\n $zoomRange\n .attr({\n // Only set the range step if explicit or\n // set the default if there is no attribute present\n step:\n (options.rangeStep === Panzoom.defaults.rangeStep && $zoomRange.attr('step')) ||\n options.rangeStep,\n min: options.minScale,\n max: options.maxScale,\n })\n .prop({\n value: this.getMatrix()[0],\n });\n }\n\n // No bindings if zooming is disabled\n if (options.disableZoom) {\n return;\n }\n\n var $zoomIn = this.$zoomIn;\n var $zoomOut = this.$zoomOut;\n\n // Bind zoom in/out\n // Don't bind one without the other\n if ($zoomIn.length && $zoomOut.length) {\n // preventDefault cancels future mouse events on touch events\n $zoomIn.on(str_click, function (e) {\n e.preventDefault();\n self.zoom();\n });\n $zoomOut.on(str_click, function (e) {\n e.preventDefault();\n self.zoom(true);\n });\n }\n\n if ($zoomRange.length) {\n events = {};\n // Cannot prevent default action here\n events[str_down] = function () {\n self.transition(true);\n };\n // Zoom on input events if available and change events\n // See https://github.com/timmywil/jquery.panzoom/issues/90\n events[(supportsInputEvent ? 'input' : 'change') + ns] = function () {\n self.zoom(+this.value, {noSetRange: true});\n };\n $zoomRange.on(events);\n }\n },\n\n /**\n * Unbind all events\n * @private\n */\n _unbind: function () {\n this.$elem.add(this.$zoomIn).add(this.$zoomOut).add(this.$reset).off(this.options.eventNamespace);\n },\n\n /**\n * Builds the original transform value\n * @private\n */\n _buildTransform: function () {\n // Save the original transform\n // Retrieving this also adds the correct prefixed style name\n // to jQuery's internal $.cssProps\n return (this._origTransform = this.getTransform(this.options.startTransform));\n },\n\n /**\n * Set transition property for later use when zooming\n * @private\n */\n _buildTransition: function () {\n if (this._transform) {\n var options = this.options;\n this._transition = this._transform + ' ' + options.duration + 'ms ' + options.easing;\n }\n },\n\n /**\n * Calculates the distance between two touch points\n * Remember pythagorean?\n * @param {Array} touches\n * @returns {Number} Returns the distance\n * @private\n */\n _getDistance: function (touches) {\n var touch1 = touches[0];\n var touch2 = touches[1];\n return Math.sqrt(\n Math.pow(Math.abs(touch2.clientX - touch1.clientX), 2) +\n Math.pow(Math.abs(touch2.clientY - touch1.clientY), 2)\n );\n },\n\n /**\n * Constructs an approximated point in the middle of two touch points\n * @returns {Object} Returns an object containing pageX and pageY\n * @private\n */\n _getMiddle: function (touches) {\n var touch1 = touches[0];\n var touch2 = touches[1];\n return {\n clientX: (touch2.clientX - touch1.clientX) / 2 + touch1.clientX,\n clientY: (touch2.clientY - touch1.clientY) / 2 + touch1.clientY,\n };\n },\n\n /**\n * Trigger a panzoom event on our element\n * The event is passed the Panzoom instance\n * @param {String|jQuery.Event} event\n * @param {Mixed} arg1[, arg2, arg3, ...] Arguments to append to the trigger\n * @private\n */\n _trigger: function (event) {\n if (typeof event === 'string') {\n event = 'panzoom' + event;\n }\n this.$elem.triggerHandler(event, [this].concat(slice.call(arguments, 1)));\n },\n\n /**\n * Starts the pan\n * This is bound to mouse/touchmove on the element\n * @param {jQuery.Event} event An event with pageX, pageY, and possibly the touches list\n * @param {TouchList} [touches] The touches list if present\n * @private\n */\n _startMove: function (event, touches) {\n if (this.panning) {\n return;\n }\n var moveEvent, endEvent, startDistance, startScale, startMiddle, startPageX, startPageY, touch;\n var self = this;\n var options = this.options;\n var ns = options.eventNamespace;\n var matrix = this.getMatrix();\n var original = matrix.slice(0);\n var origPageX = +original[4];\n var origPageY = +original[5];\n var panOptions = {matrix: matrix, animate: 'skip'};\n var type = event.type;\n\n // Use proper events\n if (type === 'pointerdown') {\n moveEvent = 'pointermove';\n endEvent = 'pointerup';\n } else if (type === 'touchstart') {\n moveEvent = 'touchmove';\n endEvent = 'touchend';\n } else if (type === 'MSPointerDown') {\n moveEvent = 'MSPointerMove';\n endEvent = 'MSPointerUp';\n } else {\n moveEvent = 'mousemove';\n endEvent = 'mouseup';\n }\n\n // Add namespace\n moveEvent += ns;\n endEvent += ns;\n\n // Remove any transitions happening\n this.transition(true);\n\n // Indicate that we are currently panning\n this.panning = true;\n\n // Trigger start event\n this._trigger('start', event, touches);\n\n var setStart = function (event, touches) {\n if (touches) {\n if (touches.length === 2) {\n if (startDistance != null) {\n return;\n }\n startDistance = self._getDistance(touches);\n startScale = self.getScale(matrix);\n startMiddle = self._getMiddle(touches);\n return;\n }\n if (startPageX != null) {\n return;\n }\n if ((touch = touches[0])) {\n startPageX = touch.pageX;\n startPageY = touch.pageY;\n }\n }\n if (startPageX != null) {\n return;\n }\n startPageX = event.pageX;\n startPageY = event.pageY;\n };\n\n setStart(event, touches);\n\n var move = function (e) {\n var coords;\n e.preventDefault();\n touches = e.touches || e.originalEvent.touches;\n setStart(e, touches);\n\n if (touches) {\n if (touches.length === 2) {\n // Calculate move on middle point\n var middle = self._getMiddle(touches);\n var diff = self._getDistance(touches) - startDistance;\n\n // Set zoom\n self.zoom(diff * (options.increment / 100) + startScale, {\n focal: middle,\n matrix: matrix,\n animate: 'skip',\n });\n\n // Set pan\n self.pan(\n +matrix[4] + middle.clientX - startMiddle.clientX,\n +matrix[5] + middle.clientY - startMiddle.clientY,\n panOptions\n );\n startMiddle = middle;\n return;\n }\n coords = touches[0] || {pageX: 0, pageY: 0};\n }\n\n if (!coords) {\n coords = e;\n }\n\n self.pan(origPageX + coords.pageX - startPageX, origPageY + coords.pageY - startPageY, panOptions);\n };\n\n // Bind the handlers\n $(document)\n .off(ns)\n .on(moveEvent, move)\n .on(endEvent, function (e) {\n e.preventDefault();\n // Unbind all document events\n $(this).off(ns);\n self.panning = false;\n // Trigger our end event\n // Simply set the type to \"panzoomend\" to pass through all end properties\n // jQuery's `not` is used here to compare Array equality\n e.type = 'panzoomend';\n self._trigger(e, matrix, !matrixEquals(matrix, original));\n });\n },\n };\n\n // Add Panzoom as a static property\n $.Panzoom = Panzoom;\n\n /**\n * Extend jQuery\n * @param {Object|String} options - The name of a method to call on the prototype\n * or an object literal of options\n * @returns {jQuery|Mixed} jQuery instance for regular chaining or the return value(s) of a panzoom method call\n */\n $.fn.panzoom = function (options) {\n var instance, args, m, ret;\n\n // Call methods widget-style\n if (typeof options === 'string') {\n ret = [];\n args = slice.call(arguments, 1);\n this.each(function () {\n instance = $.data(this, datakey);\n\n if (!instance) {\n ret.push(undefined);\n\n // Ignore methods beginning with `_`\n } else if (\n options.charAt(0) !== '_' &&\n typeof (m = instance[options]) === 'function' &&\n // If nothing is returned, do not add to return values\n (m = m.apply(instance, args)) !== undefined\n ) {\n ret.push(m);\n }\n });\n\n // Return an array of values for the jQuery instances\n // Or the value itself if there is only one\n // Or keep chaining\n return ret.length ? (ret.length === 1 ? ret[0] : ret) : this;\n }\n\n return this.each(function () {\n new Panzoom(this, options);\n });\n };\n\n return Panzoom;\n});\n","(function () {\n const tab = UX.tab;\n const loader = {\n $activator: '',\n doi: '',\n figure: '',\n tab: '',\n references: '',\n related: '',\n details: '',\n $tabs: null,\n $spinner: null,\n figuresTab: '.figures-tab',\n tabFigure: '#pane-pcw-Figures , #pane-pcw-figures',\n referencesTab: '.references-tab',\n tabReferences: '#pane-pcw-References, #pane-pcw-references',\n relatedTab: '.related-tab',\n tabRelated: '#pane-pcw-Related, #pane-pcw-related',\n detailsTab: '.details-tab',\n accessTab: '.access-tab',\n tabDetails: '#pane-pcw-Details, #pane-pcw-details',\n vPort: 'screen-xs',\n isMobile: false,\n cloudFlareScript: '',\n openSeaDragonCloudFlareScript: '',\n init: function () {\n // show spinner\n loader.$tabs = $('.article__tab');\n loader.$spinner = $('.tab__spinner');\n loader.cloudFlareScript = $('.cloudFlareScript').length && $('.cloudFlareScript').val();\n loader.openSeaDragonCloudFlareScript =\n $('.openSeaDragonCloudFlareScript').length && $('.openSeaDragonCloudFlareScript').val();\n loader.get.figures();\n loader.get.references();\n loader.get.related();\n loader.get.details();\n loader.truncation.init();\n if ($('article')) {\n loader.load.articleTabs();\n }\n loader.tableToggle();\n loader.controller();\n loader.additionalController();\n },\n controller: function () {\n $('body').on('click', '.figures-tab', function (e) {\n loader.load.figures(true);\n });\n $('body').on('click', '.boxed-text', function (e) {\n e.preventDefault();\n const $el = $(this),\n boxedContent = $el.attr('href'),\n boxedHtml = $(boxedContent).html(),\n $myModal = $('#myModal');\n\n if (!boxedContent || !boxedHtml) return;\n\n if ($myModal.length === 0) {\n const modal_start =\n '
',\n modal_header =\n '
',\n modal_body = '
',\n modal_end = '
',\n modal = modal_start + modal_header + modal_body + modal_end;\n $('body').append(modal);\n }\n\n $myModal.find('.modal__body').html(boxedHtml);\n $myModal.modal('show');\n });\n\n $(document).on(loader.vPort + '-on', function () {\n // Waiting for custom event that will be triggered by controller.js to activate responsive effects\n loader.isMobile = true;\n loader.rebuild.responsive();\n loader.rebuild.extra();\n loader.figures.accordion();\n });\n\n $(document).on(loader.vPort + '-off', function () {\n // Waiting for custom event that will be triggered by controller.js to deactivate responsive effects\n loader.isMobile = false;\n loader.rebuild.original();\n loader.figures.back();\n });\n\n loader.articleTabsTrigger();\n },\n additionalController: function () {},\n articleTabsTrigger: function () {\n if ($('.access-tab').length) {\n $('.access-tab').trigger('click');\n }\n },\n rebuild: {\n original: function () {\n // return loi to be as default\n var $loaWrapper = $('.loa-wrapper');\n $loaWrapper\n .find('.accordion-tabbed__tab')\n .removeClass('accordion-tabbed__tab')\n .addClass('accordion-tabbed__tab-mobile');\n $loaWrapper.find('.delimiter').removeClass('hidden');\n const $author = $loaWrapper.find('.accordion-tabbed__control');\n $author.each(function () {\n var id = $(this).attr('data-id');\n $(this).attr('data-db-target-for', id);\n $(this).next().attr('data-db-target-of', id).removeAttr('style');\n });\n },\n responsive: function () {\n // rebuild loi to be in selected responsive mode\n var $loaWrapper = $('.loa-wrapper');\n $loaWrapper\n .find('.accordion-tabbed__tab-mobile')\n .removeClass('accordion-tabbed__tab-mobile')\n .addClass('accordion-tabbed__tab ')\n .find('.accordion-tabbed__control')\n .removeAttr('data-db-target-for');\n $loaWrapper\n .find('.loa-accordion')\n .contents()\n .map(function () {\n if (this.nodeType === 3) {\n //Node.TEXT_NODE\n $(this).wrap('');\n }\n if ($(this).hasClass('delimiter')) {\n $(this).addClass('hidden');\n }\n });\n $loaWrapper.find('.accordion-tabbed__content').removeAttr('data-db-target-of').hide();\n },\n extra: function () {},\n },\n get: {\n figures: function () {\n // get current doi\n loader.figure = $('article').attr('data-figures');\n },\n references: function () {\n // get current doi\n loader.references = $('article').attr('data-references');\n },\n related: function () {\n // get current doi\n loader.related = $('article').attr('data-related');\n },\n details: function () {\n // get current doi\n loader.details = $('article').attr('data-details');\n },\n },\n\n load: {\n articleTabs: function () {\n if ($(loader.figuresTab).parent('li.active').length) {\n loader.load.figures(false, true);\n }\n loader.load.references();\n loader.load.related();\n loader.load.details();\n },\n figures: function (preventSelectActiveTab = false, onLoadtab = false) {\n // set figures pane as a target and set the requested html file\n loader.load.articleTab(\n loader.figure,\n loader.figuresTab,\n loader.tabFigure,\n 'figure',\n preventSelectActiveTab,\n onLoadtab\n );\n },\n references: function () {\n // set references pane as a target and set the requested html file\n let $articleReferences = $('.article__body .article__references');\n // if the references exist on the body then copy it to ref tab else get it from server\n if ($articleReferences.length) {\n if ($('.article__body.show-references').length) {\n //copy past references\n loader.load.copyPastReferences($articleReferences);\n } else {\n //cut past references\n $articleReferences.appendTo(loader.tabReferences);\n $articleReferences.show();\n }\n $(loader.tabReferences).removeClass('empty');\n loader.$spinner.hide(); // hide spinner pane\n } else {\n loader.load.articleTab(loader.references, loader.referencesTab, loader.tabReferences, 'references');\n }\n },\n related: function () {\n // set related pane as a target and set the requested html file\n loader.load.articleTab(loader.related, loader.relatedTab, loader.tabRelated, 'related');\n loader.truncation.creativeWorkMeta();\n },\n details: function () {\n // set details pane as a target and set the requested html file\n loader.load.articleTab(loader.details, loader.detailsTab, loader.tabDetails, 'details');\n },\n copyPastReferences: function ($articleReferences) {\n let articlesRefCopy = $articleReferences.clone();\n articlesRefCopy.appendTo(loader.tabReferences);\n $articleReferences.find('[id]').each(function () {\n //to remove duplicate Ids\n this.id = this.id + '_copied';\n });\n },\n articleTab(ajaxUrl, tabSelector, paneSelector, tabName, preventSelectActiveTab = false, onLoadtab = true) {\n if (ajaxUrl === undefined) {\n // check if tab' service url has been defined\n UX.loader.selectActiveTab(tabSelector, paneSelector, preventSelectActiveTab);\n return false;\n }\n if (tab.check.empty($(tabSelector))) {\n // check if tab panes is empty\n loader.getContent(ajaxUrl, tabSelector, paneSelector, tabName, preventSelectActiveTab, onLoadtab); // get tab content\n } else {\n UX.loader.selectActiveTab(tabSelector, paneSelector, preventSelectActiveTab);\n }\n },\n },\n getContent: function (ajaxUrl, tabSelector, paneSelector, tabName, preventSelectActiveTab = false, onLoadtab) {\n // get content using ajax request\n loader.$spinner.show(); // show spinner pane\n let $tabPane = $(paneSelector);\n\n $tabPane.load(ajaxUrl, {onLoad: onLoadtab}, function (response, status, xhr) {\n if (status === 'error') {\n const msg = 'Sorry but there was an error: ';\n console.log(msg + xhr.status + ' ' + xhr.statusText);\n }\n\n $tabPane.trigger('content-loaded');\n UX.loader.selectActiveTab(tabSelector, paneSelector, preventSelectActiveTab);\n loader.attach();\n\n const loaderTarget = $(this).attr('id'),\n isFigures = loader.tabFigure.indexOf(loaderTarget) !== -1;\n if (isFigures && loader.isMobile) {\n loader.figures.accordion();\n }\n loader.getContentSuccess(tabName);\n });\n },\n getContentSuccess: function (tabName) {},\n selectActiveTab(tab, tabTarget, preventSelectActiveTab) {\n UX.loader.$spinner.hide();\n if (!preventSelectActiveTab && UX.loader.isArticleTabEmpty($(tab)) && $(tabTarget).hasClass('active')) {\n $('.details-tab').trigger('click');\n }\n },\n isArticleTabEmpty($tab) {\n return (\n tab.check.empty($tab) ||\n ($tab.hasClass('figures-tab') && $($tab.data('slide-target')).find('figure').length === 0) ||\n ($tab.hasClass('references-tab') && $($tab.data('slide-target')).find('.NoContentMessage').length)\n );\n },\n attach: function () {\n if (UX.figureViewer !== undefined) UX.figureViewer.expand();\n },\n figures: {\n figcaption: 'figcaption',\n figureTitle: '.figure__title',\n figureCaption: '.figure__caption',\n accordionClass: 'accordion',\n accordionContent: 'accordion__content',\n accordionTrigger: $('