{"version":3,"sources":["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-theme/widgets/access-denial/js/access-denial.js","webpack:///./node_modules/ui-core/widgets/publication-content/js/crossref.js","webpack:///./node_modules/ui-core/widgets/article-tools/js/article-tools.js","webpack:///./node_modules/ui-theme/widgets/publication-content/js/publication-content.js","webpack:///./node_modules/@atypon/ui-bundle-generator/.generated/groups/_article.js"],"names":["global","window","$","document","slice","Array","prototype","rupper","rsvg","floating","rmatrix","RegExp","createResetOptions","opts","options","range","animate","extend","Matrix","a","b","c","d","e","f","g","h","i","type","this","elements","Vector","x","y","z","Panzoom","elem","nodeType","error","contains","data","defaults","$elem","$set","length","$doc","ownerDocument","$parent","parent","isSVG","test","namespaceURI","nodeName","toLowerCase","panning","_buildTransform","_transform","cssProps","transform","replace","_buildTransition","resetDimensions","$empty","self","each","name","enable","scale","getMatrix","_checkPanWhenZoomed","matrix","isVector","inverse","determinant","eventNamespace","transition","cursor","disablePan","disableZoom","disableXAxis","disableYAxis","which","increment","exponential","panOnlyWhenZoomed","minScale","maxScale","rangeStep","duration","easing","contain","constructor","instance","_initStyle","_bind","disabled","disable","_resetStyle","_unbind","isDisabled","destroy","removeData","container","getBoundingClientRect","dims","absScale","Math","abs","dimensions","width","height","left","css","top","border","bottom","right","margin","reset","setMatrix","_origTransform","silent","_trigger","resetZoom","origMatrix","dValue","zoom","resetPan","pan","setTransform","style","setAttribute","getTransform","transformElem","attr","exec","shift","spaceWLeft","spaceWRight","scaleDiff","conWidth","conHeight","zoomAspectW","zoomAspectH","offsetWidth","spaceHTop","spaceHBottom","max","min","$zoomRange","val","originalMatrix","join","isPanning","off","_transition","relative","_typeof","startScale","focal","clientX","clientY","clientV","surfaceM","o","parentOffset","offset","offsetM","scrollLeft","scrollTop","surfaceV","scaleBy","noSetRange","option","key","value","arguments","undefined","_setOptions","proxy","toDisable","styles","overflow","position","ns","str_down","str_start","str_click","events","$reset","m","isFunction","touches","originalEvent","preventDefault","stopPropagation","_startMove","contextmenu","on","step","prop","$zoomIn","$zoomOut","add","startTransform","_getDistance","touch1","touch2","sqrt","pow","_getMiddle","event","triggerHandler","concat","call","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","push","factory","jQuery","tab","loader","UX","$activator","doi","figure","references","related","details","$tabs","$spinner","figuresTab","tabFigure","referencesTab","tabReferences","relatedTab","tabRelated","detailsTab","accessTab","tabDetails","vPort","isMobile","cloudFlareScript","openSeaDragonCloudFlareScript","init","get","figures","truncation","load","articleTabs","tableToggle","controller","additionalController","boxedContent","boxedHtml","html","$myModal","append","modal_start","find","modal","rebuild","responsive","extra","accordion","back","articleTabsTrigger","trigger","$loaWrapper","removeClass","addClass","id","next","removeAttr","contents","map","wrap","hasClass","hide","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","closest","toggle","accessDenial","$purchaseArea","scroll","setTimeout","scrollTo","behavior","initCrossref","touchArea","SETTINGS","touchStarted","tapEvent","element","callback","addEventListener","ctrlKey","shiftKey","metaKey","screenX","screenY","newTouchArea","buildQueryString","query","encodeURIComponent","isIos","navigator","userAgent","MSStream","doiMeta","getDoiMeta","metaTags","querySelectorAll","Object","hasOwnProperty","tag","scheme","getAttribute","queryData","domain","location","hostname","uri_scheme","protocol","cm_version","createElement","querySelector","appendChild","widget","display","innerHTML","overlay","popup","popupOffset","popupInner","content","closeButton","classList","body","initialised","link","scrollY","readyState","articleTools","control","copy","str","additionalLink","el","host","selector","match","setSelectionRange","select","execCommand","removeChild","copiedEvent","Event","isDefaultPrevented","permission","forEach","url","open","likeLink","altmetric","holder","bind","script","nonce","getRequestId","src","getElementsByTagName","mathJaxConfig","getElementById","main","$loader","err"],"mappings":"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","file":"js/vendors~article-cb382c4e841815267914.js","sourcesContent":["/**\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: $('' +\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","(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","import 'ui-core/widgets/publication-content/js/publication-content';\n(function () {\n var altmetric = {\n holder: $('#doi_altmetric_drawer_area'),\n init: function () {\n altmetric.get.altmetric();\n altmetric.control();\n },\n control: function () {\n if (\n altmetric.holder.find('.altmetric-embed').length &&\n altmetric.holder.find('.altmetric-embed').html().length\n ) {\n altmetric.holder.show();\n } else {\n altmetric.holder.hide();\n }\n altmetric.holder.bind('DOMSubtreeModified', altmetric.control);\n },\n get: {\n altmetric: function () {\n var script = document.createElement('script');\n const nonce = UX && UX.getRequestId ? UX.getRequestId() : null;\n script.type = 'text/javascript';\n if (script.nonce) script.nonce = nonce;\n script.src = window.location.protocol + '//d1bxh8uas1mnw7.cloudfront.net/assets/embed.js';\n document.getElementsByTagName('head')[0].appendChild(script);\n },\n },\n };\n UX.loader.mathJaxConfig = `MathJax.Hub.Config({\n preferredFont: \"STIX\",\n displayAlign: \"center\",\n \"HTML-CSS\": {scale: 200},\n styles: {\n '.math-formula *': {'font-size': '1rem'},\n '.inline-formula *': {'font-size': '1rem'},\n '.math-formula ': {'text-align': 'right'},\n '.math-formula .equationTd': {\n 'display': 'block',\n 'overflow-x': 'auto',\n 'overflow-y': 'hidden',\n 'text-align': 'center'\n }\n }\n});`;\n UX.altmetric = altmetric;\n\n UX.loader.truncation.linesToShow = 3;\n UX.loader.truncation.showMoreText = $('article').data('view-all-author');\n UX.loader.truncation.showLessText = $('article').data('view-fewer-author');\n UX.loader.truncation.seeMoreIcon = 'icon-plus';\n UX.loader.truncation.seeLessIcon = 'icon-close';\n UX.loader.truncation.seeMoreIconMobile = 'icon-plus';\n\n if (document.getElementById('doi_altmetric_drawer_area')) {\n UX.altmetric.init();\n }\n})();\n","\n import '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250204-c9c27144/ui-products/ehp/node_modules/ui-core/plugins/panzoom/jquery.panzoom';\n \nimport '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250204-c9c27144/ui-products/ehp/node_modules/ui-theme/widgets/publication-content/js/publication-content';\n \nimport '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250204-c9c27144/ui-products/ehp/node_modules/ui-theme/widgets/access-denial/js/access-denial';\n \nimport '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250204-c9c27144/ui-products/ehp/node_modules/ui-core/widgets/publication-content/js/crossref';\n \nimport '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250204-c9c27144/ui-products/ehp/node_modules/ui-core/widgets/article-tools/js/article-tools';\n \nconst main = (UX) => {\n const $loader = Array.prototype.slice.call(document.querySelectorAll('article'))\n\ntry {\n if ($loader.length ) {\n UX.loader.init($loader);\n }\n } catch (err) {\n console.error(err);\n }\n \n}\n\n export default main;\n "],"sourceRoot":""}