{"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-core/widgets/article-tools/js/article-tools.js","webpack:///./node_modules/ui-core/widgets/publication-content/js/crossref.js","webpack:///./node_modules/ui-core/components/figure-viewer/js/figure-viewer-script.js","webpack:///./node_modules/ui-theme/js/widgets/_publication-content.js","webpack:///./node_modules/@atypon/ui-bundle-generator/.generated/groups/_article-page.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","articleTools","control","copy","str","additionalLink","el","createElement","location","protocol","host","body","appendChild","selector","querySelector","navigator","userAgent","match","setSelectionRange","select","execCommand","removeChild","copiedEvent","Event","isDefaultPrevented","permission","querySelectorAll","forEach","url","getAttribute","addEventListener","open","likeLink","initCrossref","touchArea","SETTINGS","touchStarted","tapEvent","element","callback","ctrlKey","shiftKey","metaKey","screenX","screenY","newTouchArea","buildQueryString","query","encodeURIComponent","isIos","MSStream","doiMeta","getDoiMeta","metaTags","Object","hasOwnProperty","tag","scheme","queryData","domain","hostname","uri_scheme","cm_version","widget","display","innerHTML","overlay","popup","popupOffset","popupInner","content","closeButton","classList","initialised","link","scrollY","readyState","$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","$sections","setSectionHeight","$footer","footerTop","marginTop","parseInt","headerHeight","main","$figureViewer","$loader","err"],"mappings":"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","file":"js/vendors~article-page-5431e1edeadc9666cc53.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","import {focusCycle} from '../../../utility/js/utils';\n\n(function () {\n const $section = $('.figure-viewer');\n const $window = $(window);\n const $html = $('html');\n const $document = $(document);\n const $body = $('body');\n let $isHighRes = false;\n let isExpanded = false;\n const figureViewer = {\n options: {\n /*\n * false|classCombination|className|dataRel\n * */\n filter: false,\n filterClass: 'article__tabFigure',\n },\n $topRegHeight: $('.figure-viewer__reg__top').innerHeight(),\n vPort: 'screen-md',\n $figures: null,\n $figuresToShow: null,\n $figureWidth: null,\n $currentIndex: null,\n $focusedElementBeforeOpened: null,\n $section: $section,\n $holder: $section.find('.figure-viewer__hold__fig'),\n $holderElement: $section.find('.figure-viewer__hold__fig').find('figure'),\n $captionHolder: $section.find('.figure-viewer__hold__figcap'),\n $lister: $section.find('.figure-viewer__hold__list'),\n $figureRegionContainer: $section.find('.figure-viewer__reg__center'),\n $captionRegion: $section.find('.figure-viewer__cent__right'),\n $contentRegion: $section.find('.figure-viewer__cent__left'),\n $figureNav: $section.find('.figure-viewer__ctrl__next, .figure-viewer__ctrl__prev'),\n $zoominbtn: $section.find('.zoom-in'),\n $zoomoutbtn: $section.find('.zoom-out'),\n $zoomrange: $section.find('.zoom-range'),\n $zoomreset: $section.find('.reset'),\n $image: $section.find('figure'),\n $browsebtn: $('.figure-viewer__ctrl__browse'),\n $returnbtn: $('.figure-viewer__ctrl__return'),\n isMobile: false,\n islocked: false,\n offsetY: window.pageYOffset,\n $hideList: $('.zoomSlider, .figure-viewer__label__zoom'),\n $browseContainer: $('.figure-viewer__hold__list'),\n $captionTitle: $('.figure-viewer__title__text'),\n onHighRes: function () {\n import('./high-res-images').then(() => {\n figureViewer.onHighResCallback();\n });\n },\n expand: function () {\n // preserve backward compatibility with previous buggy version - it can be removed if filterContexts would become default behavior\n if (figureViewer.options.filter) {\n figureViewer.$figures = $document.find(\n ':not(.figure-viewer__hold__list) > figure:not(.holder), :not(.figure-viewer__hold__list) > .figure:not(.holder)'\n );\n } else {\n figureViewer.$figures = $document.find('figure:not(.holder), .figure:not(.holder)');\n }\n\n figureViewer.$figures.each(function (index) {\n let $this = $(this);\n $this.data('index', index);\n if (figureViewer.options.filter) {\n $this.addClass('figure'); // add class to be sure, that correct grid styling will be there\n if (figureViewer.options.filter === 'dataRel') {\n // move data-rel to container from child\n let dataRelElement = $this.find('[data-rel]');\n if (dataRelElement.length > 0 && dataRelElement.data().rel) {\n $this.attr('data-rel', dataRelElement.data().rel);\n }\n }\n }\n });\n\n figureViewer.$figuresToShow = figureViewer.$figures;\n },\n /*\n * Filter grid view and navigation based on item opened and option provided by figureViewer.options.filter\n * */\n filter: function ($this) {\n if (figureViewer.options.filter === 'classCombination') {\n let className = $this.attr('class');\n figureViewer.$figuresToShow = figureViewer.$figures.filter('[class=\"' + className + '\"]');\n } else if (figureViewer.options.filter === 'className') {\n figureViewer.$figuresToShow = figureViewer.$figures.filter('.' + figureViewer.options.filterClass);\n } else if (figureViewer.options.filter === 'dataRel') {\n let dataRel = $this.data('rel');\n if (dataRel) {\n figureViewer.$figuresToShow = figureViewer.$figures.filter('[data-rel=\"' + dataRel + '\"]');\n } else {\n figureViewer.$figuresToShow = figureViewer.$figures;\n }\n } else {\n figureViewer.$figuresToShow = figureViewer.$figures;\n }\n\n figureViewer.$currentIndex = figureViewer.$figuresToShow.index($this);\n },\n control: function () {\n $(document).on(figureViewer.vPort + '-on', function () {\n // Waiting for custom event that will be triggered by controller.js to activate responsive effects\n figureViewer.isMobile = true;\n });\n\n $(document).on(figureViewer.vPort + '-off', function () {\n // Waiting for custom event that will be triggered by controller.js to deactivate responsive effects\n figureViewer.isMobile = false;\n });\n\n figureViewer.clickHandler();\n\n let $figureViewer = $body.find('.figure-viewer'),\n $controllerElement = $figureViewer.find('a, button');\n\n $controllerElement.each(function () {\n let $this = $(this);\n $this.on({\n click: function (event) {\n event.preventDefault();\n event.stopPropagation();\n if ($this.hasClass('figure-viewer__ctrl__close')) {\n // close button\n figureViewer.on.hide();\n } else if ($this.hasClass('figure-viewer__ctrl__next')) {\n // Next button\n figureViewer.next();\n } else if ($this.hasClass('figure-viewer__ctrl__prev')) {\n // Prev Button\n figureViewer.prev();\n } else if ($this.hasClass('figure-viewer__ctrl__caption')) {\n // open / close caption Button\n figureViewer.captionToggle($this);\n } else if ($this.hasClass('figure-viewer__ctrl__browse')) {\n // browse all figures\n isExpanded = false;\n figureViewer.browse($(this));\n } else if ($this.hasClass('figure-viewer__ctrl__return')) {\n // browse all figures\n figureViewer.return($(this));\n }\n },\n });\n });\n\n // preserve backward compatibility with previous buggy version - it can be removed if filterContexts would become default behavior\n if (figureViewer.options.filter) {\n $('.figure a:not(.open-figure-link)')\n .not(':has(img)')\n .click(function (e) {\n let $img = $(this).find('img'),\n shouldDefault = $(this).hasClass('linkBehavior');\n if (!shouldDefault || $img.length !== 0) {\n e.preventDefault();\n $img.trigger('click');\n }\n });\n\n $('.figure a:not(.open-figure-link) img').click(function (e) {\n e.stopPropagation();\n });\n } else {\n $(\".figure a:not('.ppt-figure-link')\")\n .not(':has(img)')\n .click(function (e) {\n let $img = $(this).find('img'),\n shouldDefault = $(this).hasClass('linkBehavior');\n if (!shouldDefault || $img.length !== 0) {\n //e.preventDefault();\n $img.trigger('click');\n }\n });\n }\n\n $('body').keydown(function (event) {\n // is figureviewer open? no? than we don't do anything\n if ($body.attr('data-active') !== 'figureViewer') {\n return;\n }\n\n if (event.keyCode === 37) {\n // left\n figureViewer.prev();\n } else if (event.keyCode === 39) {\n // right\n figureViewer.next();\n }\n });\n\n figureViewer.supplementary.control();\n\n figureViewer.hideOnClickOutside();\n\n figureViewer.resize();\n $(window).on('resized', function () {\n figureViewer.resize();\n });\n\n if (figureViewer.$figures.length === 1) {\n figureViewer.$figureNav.hide();\n }\n\n focusCycle(figureViewer.$section[0]);\n },\n hideOnClickOutside: function () {\n figureViewer.$image.on('click', function (e) {\n let isOutsideClick =\n !$(e.target).closest('.figure__image').length &&\n !$('.figure__image').is(e.target) &&\n !$('.shortcutsViewHelpTxt').is(e.target) &&\n !$(e.target).closest('.shortcutsViewHelpTxt').length &&\n !$('.figure__highResImgReplacer').is(e.target) &&\n !$(e.target).closest('.figure__highResImgReplacer').length;\n if (isOutsideClick) {\n figureViewer.on.hide();\n }\n });\n },\n clickHandler: function () {\n $(document).on('click', '.figure__image, .open-figure-link', function (event) {\n event.preventDefault();\n const $self = $(this);\n if (\n $self.parent().hasClass('figure-viewer__thumbnail-item') ||\n $self.is('.figure__audio') ||\n $self.is('.figure__video')\n ) {\n return;\n }\n let $this = $self.closest('figure, .figure, .imageTable');\n if (!$this.hasClass('ui-disabled') && !$this.closest('.figure-viewer__hold__fig').length) {\n // check if explicitly disabled or the figure is already in the viewer so the event is useless at this state. It also gets in the way of drag and drop functionality in the figure viewer.\n figureViewer.on.show($this, $this.data('index'));\n }\n\n //fixing LIT-388506\n\n !$isHighRes && $('.shortcutsViewHelpTxt').length >= 0\n ? $(document).find('.figure-viewer__cent__left .shortcutsViewHelpTxt').remove()\n : UX.highResImg.shortcutsView($this);\n });\n },\n captionToggle: function ($elem) {\n figureViewer.toggle($elem.closest('.figure-viewer__cent__right'));\n figureViewer.toggle($('.figure-viewer__cent__left'));\n $elem.toggleClass('js-open');\n if (figureViewer.$holder.find('.figure__highResImgReplacer').length === 1 && $elem.hasClass('js-open')) {\n figureViewer.$holder.find('.figure__highResImgReplacer').css({width: '97%'});\n } else {\n figureViewer.$holder.find('.figure__highResImgReplacer').css({width: '100%'});\n }\n\n const captionBtn = document.querySelector('.figure-viewer__ctrl__caption');\n const holdCaption = document.querySelector('.figure-viewer__hold__figcap');\n const captionTitle = document.querySelector('.figure-viewer__title__text');\n\n isExpanded = !isExpanded;\n captionBtn.setAttribute('aria-expanded', isExpanded);\n holdCaption.classList.toggle('hidden', !isExpanded);\n captionTitle.classList.toggle('hidden', !isExpanded);\n UX.utils.focusCycleInitiator($section[0]);\n figureViewer.updateAriaLabelForCaptionHolder();\n },\n next: function () {\n // fixing LIT-390230 and LIT-390335\n // preserve backward compatibility with previous buggy version - it can be removed if filterContexts would become default behavior\n if (!figureViewer.options.filter) {\n figureViewer.$figuresToShow = figureViewer.$figures;\n }\n if (figureViewer.$currentIndex < figureViewer.$figuresToShow.length - 1) {\n if (!figureViewer.$figuresToShow.eq(figureViewer.$currentIndex + 1).closest('.figure-viewer').length) {\n figureViewer.$currentIndex++;\n let $next = figureViewer.$figuresToShow.eq(figureViewer.$currentIndex);\n figureViewer.replace($next);\n // fixing LIT-390336\n if ($isHighRes === false && $('.shortcutsViewHelpTxt').length > 0) {\n $(document).find('.figure-viewer__cent__left .shortcutsViewHelpTxt').remove();\n }\n $isHighRes && UX.highResImg.shortcutsView($next);\n figureViewer.zoom.reset();\n }\n } else {\n figureViewer.$currentIndex = 0;\n let $next = figureViewer.$figuresToShow.eq(figureViewer.$currentIndex);\n figureViewer.replace($next);\n\n // fixing LIT-390336\n if ($isHighRes === false && $('.shortcutsViewHelpTxt').length > 0) {\n $(document).find('.figure-viewer__cent__left .shortcutsViewHelpTxt').remove();\n }\n $isHighRes && UX.highResImg.shortcutsView($next);\n figureViewer.zoom.reset();\n }\n figureViewer.updateAriaLabelForCaptionHolder();\n },\n prev: function () {\n // fixing LIT-390230 and LIT-390335\n\n // preserve backward compatibility with previous buggy version - it can be removed if filterContexts would become default behavior\n if (!figureViewer.options.filter) {\n figureViewer.$figuresToShow = figureViewer.$figures;\n }\n\n if (figureViewer.$currentIndex >= 1) {\n if (!figureViewer.$figuresToShow.eq(figureViewer.$currentIndex - 1).closest('.figure-viewer').length) {\n figureViewer.$currentIndex--;\n let $prev = figureViewer.$figuresToShow.eq(figureViewer.$currentIndex);\n figureViewer.replace($prev);\n\n // fixing LIT-390336\n if ($isHighRes === false && $('.shortcutsViewHelpTxt').length > 0) {\n $(document).find('.figure-viewer__cent__left .shortcutsViewHelpTxt').remove();\n }\n $isHighRes && UX.highResImg.shortcutsView($prev);\n figureViewer.zoom.reset();\n }\n } else {\n figureViewer.$currentIndex = figureViewer.$figuresToShow.length - 1;\n let $prev = figureViewer.$figuresToShow.eq(figureViewer.$currentIndex);\n figureViewer.replace($prev);\n\n // fixing LIT-390336\n if ($isHighRes === false && $('.shortcutsViewHelpTxt').length > 0) {\n $(document).find('.figure-viewer__cent__left .shortcutsViewHelpTxt').remove();\n }\n $isHighRes && UX.highResImg.shortcutsView($prev);\n figureViewer.zoom.reset();\n }\n figureViewer.updateAriaLabelForCaptionHolder();\n },\n replace: function (element) {\n let $figure;\n figureViewer.pauseOriginalStream(element);\n $isHighRes = element.find('.figure__image').length && element.find('.figure__highResImgReplacer').length;\n $isHighRes\n ? ($figure = element.find('.figure__highResImgReplacer').clone())\n : ($figure = element.find('.figure__image').clone());\n\n $figure.each(function () {\n let $this = $(this);\n if ($this.attr('data-lg-src')) {\n $this.attr('src', $this.attr('data-lg-src'));\n } else if ($this.attr('data-src')) {\n $this.attr('src', $this.attr('data-src'));\n } else {\n let figureLink = element.children('a');\n figureLink.attr('href', figureLink.find('.figure__image').attr('src'));\n }\n });\n // handle multiple images in one figure\n if ($figure.length > 1) {\n // return one to image viewer and create navigation\n $figure = figureViewer.supplementary.show(element, $figure);\n } else {\n figureViewer.supplementary.hide();\n }\n\n figureViewer.streamReset(figureViewer.$holder, element);\n if ($isHighRes) {\n UX.highResImg.show(figureViewer.$holder, element);\n figureViewer.$figureWidth = figureViewer.$holder.find('.figure__highResImgReplacer').width();\n }\n\n figureViewer.$holder.find('.figure__highResImgReplacer').remove();\n figureViewer.$holder.find('.figure__image').remove();\n figureViewer.$holder.find('figure').append($figure.get(0).outerHTML);\n figureViewer.$captionHolder.empty();\n figureViewer.showCaptionTitle(element);\n const $caption = figureViewer.additionalBehaviorOnShow(element);\n figureViewer.showCaption($caption);\n figureViewer.removeFigureTitle();\n figureViewer.$figureWidth = figureViewer.$holder.find('.figure__image').width();\n figureViewer.zoom.check();\n figureViewer.headerOptions(element);\n figureViewer.additionalReplace();\n },\n additionalReplace: function () {},\n supplementary: {\n nav: null,\n /**\n *\n * @param element\n * @param $figure\n * @public\n * @returns {jQuery} current image\n */\n show: function (element, $figure) {\n // get current index\n let index = this.check(element),\n $thumbnails = $figure.clone(),\n self = this;\n\n // create supplementary navigation\n if (!this.nav) {\n this.nav = $('');\n this.nav.appendTo(figureViewer.$section);\n }\n // create navigation items\n this.nav.empty();\n $thumbnails.each(function (index) {\n let $thumb = $(\n '
  • '\n );\n $thumb.find('a').append(this);\n $thumb.find('a').on('click', function (event) {\n event.preventDefault();\n self.toIndex(element, index);\n });\n // add to nav\n self.nav.append($thumb);\n });\n // set initial active class\n this.nav.find('li').eq(index).addClass('active');\n\n // return current into view\n return $figure.eq(index);\n },\n /**\n *\n * @public\n */\n hide: function () {\n if (this.nav) {\n this.nav.empty();\n }\n },\n save: function (element, index) {\n element.data('figure-viewer-display', index);\n },\n check: function (element) {\n return element.data('figure-viewer-display') || 0;\n },\n toIndex: function (element, index) {\n let $images = element.find('.figure__image');\n if ($images.length === 1) {\n // don't do anything for one image\n return;\n }\n // loop on edges\n if (index >= $images.length) {\n index = 0;\n }\n if (index < 0) {\n index = $images.length - 1;\n }\n // append index image\n figureViewer.$holder.find('.figure__image').remove();\n figureViewer.$holder.find('.figure__highResImgReplacer').remove();\n\n const $image = $images.eq(index).clone();\n // get the correct size of the image if it's available\n if ($image.data('lg-src')) {\n $image.attr('src', $image.data('lg-src'));\n }\n figureViewer.$holderElement.append($image);\n // toggle active class\n this.nav.find('li').removeClass('active');\n this.nav.find('li').eq(index).addClass('active');\n // save state\n this.save(element, index);\n },\n next: function (element) {\n let index = this.check(element) + 1;\n this.toIndex(element, index);\n },\n prev: function (element) {\n let index = this.check(element) - 1;\n this.toIndex(element, index);\n },\n /**\n *\n * @public\n */\n control: function () {\n $('body').on('keydown keyup', function (event) {\n // is figureviewer open? no? than we don't do anything\n if ($body.attr('data-active') !== 'figureViewer') {\n return;\n }\n\n // fixing LIT-390230 and LIT-390335\n // preserve backward compatibility with previous buggy version - it can be removed if filterContexts would become default behavior\n if (!figureViewer.options.filter) {\n figureViewer.$figuresToShow = figureViewer.$figures;\n }\n\n // is there any figure to show?\n if (figureViewer.$figuresToShow && figureViewer.$figuresToShow.length < 1) {\n return;\n }\n\n let element = figureViewer.$figuresToShow.eq(figureViewer.$currentIndex);\n\n if (event.keyCode === 38) {\n // up\n figureViewer.supplementary.prev(element);\n } else if (event.keyCode === 40) {\n // down\n figureViewer.supplementary.next(element);\n }\n });\n },\n },\n browse: function (element) {\n figureViewer.$holder.addClass('is-hidden');\n figureViewer.$figureNav.addClass('is-hidden');\n figureViewer.$browsebtn.addClass('is-hidden');\n figureViewer.$returnbtn.removeClass('is-hidden');\n figureViewer.$captionRegion.removeClass('js-open');\n figureViewer.$contentRegion.removeClass('js-open');\n figureViewer.$figureRegionContainer.addClass('scrollable');\n figureViewer.$captionRegion.addClass('is-hidden');\n figureViewer.$hideList.each(function () {\n $(this).addClass('is-hidden');\n });\n figureViewer.$lister.removeClass('is-hidden');\n figureViewer.supplementary.hide();\n\n figureViewer.$browseContainer.empty();\n // preserve backward compatibility with previous buggy version - it can be removed if filter would become default behavior\n if (figureViewer.options.filter) {\n figureViewer.$figuresToShow.each(function () {\n let $fig = $(this).clone(true),\n $figureExtra = $fig.find('.figure-extra');\n\n if ($figureExtra.length) {\n $figureExtra.remove();\n }\n figureViewer.$browseContainer.append($fig);\n });\n } else {\n figureViewer.$figures.each(function () {\n if ($(this).hasClass('article__inlineFigure')) {\n let $fig = $(this).clone(true);\n const $figImage = $fig.children('img');\n $figImage.attr('src', $figImage.data('src'));\n\n let $figureLinks = $fig.find('.figure-links');\n\n if ($figureLinks.length) {\n $figureLinks.remove();\n }\n figureViewer.$browseContainer.append($fig);\n }\n });\n }\n figureViewer.additionalBrowse();\n },\n additionalBrowse: function () {},\n return: function () {\n figureViewer.$holder.removeClass('is-hidden');\n figureViewer.$figureNav.removeClass('is-hidden');\n figureViewer.$browsebtn.removeClass('is-hidden');\n figureViewer.$returnbtn.addClass('is-hidden');\n //figureViewer.$contentRegion.addClass('js-open');\n figureViewer.$captionRegion.removeClass('is-hidden');\n figureViewer.$hideList.each(function () {\n $(this).removeClass('is-hidden');\n });\n figureViewer.$lister.addClass('is-hidden');\n const $figureViewText = $('.figure-viewer__title__text');\n $figureViewText.removeClass('figure-viewer__title__text__allfigures');\n $figureViewText.parent('.figure-viewer__ctrl').removeClass('allfigures__is__displayed');\n $('.figure-viewer__ctrl__caption').parent('.figure-viewer__ctrl').show();\n figureViewer.$browseContainer.empty();\n figureViewer.additionalReturn();\n },\n additionalReturn: function () {},\n height: function (element) {\n let $windowsHeight = $(window).innerHeight();\n figureViewer.$topRegHeight = $('.figure-viewer__reg__top').innerHeight();\n let $height =\n $windowsHeight - figureViewer.$topRegHeight - $('.figure-viewer__caption__label').innerHeight();\n $('.figure-viewer__cent__left').find('figure').height($height);\n },\n toggle: function (element) {\n element.toggleClass('js-open');\n figureViewer.figcaptionSize(); //LIT-161818\n },\n displayViewer: function () {\n $('.figure-viewer').show();\n },\n additionalShow: function () {},\n on: {\n show: function ($this, index) {\n figureViewer.isMobile && $html.addClass('lock-screen');\n figureViewer.headerOptions($this);\n\n figureViewer.offsetY = $body.data('yoffset') || window.pageYOffset;\n $body.data('yoffset', figureViewer.offsetY);\n if (typeof UX.controller !== 'undefined') {\n if ($body.attr('data-active') !== 'slide') {\n // keep drop block open in publication content widget\n UX.controller.check();\n }\n }\n $body.attr('data-active', 'figureViewer');\n figureViewer.islocked = true;\n figureViewer.$currentIndex = index;\n figureViewer.replace($this);\n figureViewer.$focusedElementBeforeOpened = document.activeElement;\n figureViewer.displayViewer();\n $body.css('overflow', 'hidden'); // LIT-152707\n figureViewer.height();\n figureViewer.zoom.check();\n figureViewer.resize();\n figureViewer.$holder.removeClass('is-hidden');\n if (figureViewer.$figuresToShow.length > 1) {\n figureViewer.$browsebtn.removeClass('is-hidden');\n }\n figureViewer.$returnbtn.addClass('is-hidden');\n figureViewer.$figureNav.removeClass('is-hidden');\n figureViewer.$hideList.each(function () {\n $(this).removeClass('is-hidden');\n });\n figureViewer.$lister.addClass('is-hidden');\n figureViewer.$figureRegionContainer.removeClass('scrollable');\n $('.figure-viewer__ctrl__close').focus();\n if (figureViewer.options.filter) {\n figureViewer.filter($this);\n } else {\n figureViewer.setFiguersToShow($this);\n }\n figureViewer.additionalShow();\n figureViewer.streamReset(figureViewer.$holder, $this.closest('figure'));\n $isHighRes && UX.highResImg.show(figureViewer.$holder, $this.closest('figure'));\n figureViewer.on.additionalOnShow();\n },\n hide: function () {\n figureViewer.isMobile && $html.hasClass('lock-screen') && $html.removeClass('lock-screen');\n if (figureViewer.islocked) {\n $body.removeAttr('data-active');\n } else {\n $body.removeClass('lock-screen').removeAttr('data-active');\n }\n figureViewer.zoom.reset();\n $('.figure-viewer').hide();\n figureViewer.pauseClonedStream(figureViewer.$holder);\n figureViewer.$focusedElementBeforeOpened.focus();\n $body.css('overflow', ''); // LIT-152707\n $(window).scrollTop(figureViewer.offsetY);\n $body.removeData('yoffset');\n figureViewer.on.additionalOnHide();\n },\n additionalOnShow: function () {},\n additionalOnHide: function () {},\n },\n setFiguersToShow($this) {\n if ($this.hasClass('article__tabFigure')) {\n figureViewer.$figuresToShow = figureViewer.$figures.filter('.article__tabFigure');\n } else if ($this.hasClass('article__inlineFigure')) {\n figureViewer.$figuresToShow = figureViewer.$figures.filter('.article__inlineFigure');\n } else {\n figureViewer.$figuresToShow = figureViewer.$figures;\n }\n },\n additionalBehaviorOnShow: function ($el) {\n return $el.find('figcaption, .figcaption').clone();\n },\n zoom: {\n /*init: function (element) {\n let figureViewer.$section = $('.figure-viewer');\n },*/\n reset: function () {\n const $elem = $('.figure-viewer').find('figure');\n $elem.panzoom('reset');\n },\n check: function () {\n figureViewer.zoom.panzoom.init();\n if ($window.width() < 992) {\n figureViewer.zoom.swap();\n }\n },\n panzoom: {\n // zoom in functionality\n init: function () {\n if (typeof $.fn.panzoom != 'undefined') {\n figureViewer.$image.panzoom({\n $zoomIn: figureViewer.$zoominbtn,\n $zoomOut: figureViewer.$zoomoutbtn,\n $zoomRange: figureViewer.$zoomrange,\n $reset: figureViewer.$zoomreset,\n panOnlyWhenZoomed: true,\n minScale: 1,\n });\n\n figureViewer.$image.on('panzoomchange', function (e) {\n if (figureViewer.$zoomrange.val() === '1') {\n figureViewer.$image.css('transform', 'matrix(1, 0, 0, 1, 0, 0)');\n $(this).removeClass('zoomed');\n } else {\n $(this).addClass('zoomed');\n }\n });\n }\n },\n },\n swap: function () {\n // swap functionality for mobile devices\n figureViewer.$section.find('img').swipe({\n //Generic swipe handler for all directions\n swipe: function (event, direction, distance, duration, fingerCount, fingerData) {\n if (direction === 'left' && !figureViewer.$section.find('figure').hasClass('zoomed')) {\n figureViewer.next();\n } else if (direction === 'right' && !figureViewer.$section.find('figure').hasClass('zoomed')) {\n figureViewer.prev();\n }\n },\n });\n },\n },\n slide: function () {\n let $target = $body.find('div.ux3-in-slide');\n $body.removeAttr('data-ux3-show');\n setTimeout(function () {\n $target.append($slide.children('div')); /*eslint-disable-line*/\n $target.removeClass('ux3-in-slide');\n }, 250);\n },\n resize: function () {\n let wHeight = $window.innerHeight();\n const topHeight = figureViewer.$topRegHeight || 56;\n if (figureViewer.isMobile) {\n figureViewer.$figureRegionContainer.css('height', wHeight - topHeight);\n } else {\n figureViewer.$figureRegionContainer.css('height', `calc(100vh - ${topHeight}px)`);\n }\n },\n figcaptionSize: function () {\n let $figcaption = $('.figure-viewer__hold__figcap').find('figcaption'),\n figure_area_height = figureViewer.$figureRegionContainer.height(),\n figure_title_height = $('.figure-viewer__title').height() + 30,\n padding = 30;\n\n $figcaption.css('max-height', figure_area_height - 2 * padding - figure_title_height);\n },\n doubleTap: function () {\n // disable double tap zooming functionality on mobile devices\n (function ($) {\n $.fn.nodoubletapzoom = function () {\n $(this).bind('touchstart', function preventZoom(e) {\n let t2 = e.timeStamp,\n t1 = $(this).data('lastTouch') || t2,\n dt = t2 - t1,\n fingers = e.originalEvent.touches.length;\n $(this).data('lastTouch', t2);\n if (!dt || dt > 500 || fingers > 1) {\n return; // not double-tap\n }\n e.preventDefault(); // double tap - prevent the zoom\n // also synthesize click events we just swallowed up\n $(e.target).trigger('click');\n });\n };\n })(jQuery);\n },\n init: function () {\n figureViewer.expand();\n figureViewer.control();\n figureViewer.doubleTap();\n $('body').nodoubletapzoom();\n $('.figure__highResImgReplacer').length && figureViewer.onHighRes();\n },\n showCaption: function ($caption) {\n if ($caption.length) {\n figureViewer.$captionHolder.append($caption);\n figureViewer.$captionHolder.find('figcaption').removeClass('hidden');\n figureViewer.$captionRegion.removeClass('is-hidden');\n // here we check if the caption region has the js-open or not to toggle the $contentRegion again\n // this behavior only happen when you toggle the caption holder then you click on a figure that does not\n // have a caption then again move to a figure with caption\n if (figureViewer.$captionRegion.hasClass('js-open')) {\n figureViewer.$contentRegion.addClass('js-open');\n }\n } else if (!figureViewer.$captionHolder.hasClass('is-hidden')) {\n figureViewer.$captionRegion.addClass('is-hidden');\n figureViewer.$contentRegion.removeClass('js-open');\n }\n },\n showCaptionTitle: function ($element) {\n const $caption = $element.find('.figure__title, .captionLabel').clone();\n $('.figure-viewer__title__text').text($caption.text());\n },\n headerOptions: function ($this) {\n let $figureExtra = $this.find('.figure-extra'),\n figureExtraContent = $figureExtra.clone();\n\n $body.find('.figureExtra').length ? $body.find('.figureExtra').remove() : '';\n\n if (\n $this.find('.figure__image').is('.figure__audio') ||\n $this.find('.figure__image').is('.figure__video')\n ) {\n $body\n .find('.figure-viewer__top__left')\n .addClass('hidden')\n .after('
    ');\n $body.find('.figureExtra').append(figureExtraContent);\n figureExtraContent.appendTo($body.find('.figureExtra'));\n $body.find('.figureExtra').find('.open-figure-link').remove();\n } else if ($body.find('.figure-viewer__top__left').hasClass('hidden')) {\n $body.find('.figure-viewer__top__left').removeClass('hidden');\n }\n },\n streamReset: function ($holder, $originalFigure) {\n setTimeout(function () {\n if ($holder.find('stream').length) {\n $holder.find('stream').html('');\n $.getScript(UX.loader.cloudFlareScript);\n $holder.find('stream').get(0).currentTime = $originalFigure.find('stream').get(0).currentTime;\n } else if ($holder.find('audio').length) {\n $holder.find('audio').get(0).currentTime = $originalFigure.find('audio').get(0).currentTime;\n }\n }, 500);\n },\n pauseOriginalStream: function ($element) {\n if ($element.find('stream, audio').length) {\n $element.find('stream, audio').get(0).pause();\n }\n },\n pauseClonedStream: function ($holder) {\n if ($holder.find('stream, audio').length) {\n $holder.find('stream, audio').get(0).pause();\n }\n },\n removeFigureTitle: function () {\n figureViewer.$captionHolder.find('.figure__title').remove();\n },\n onHighResCallback: function () {},\n updateAriaLabelForCaptionHolder: function () {\n figureViewer.$captionHolder.attr('aria-label', `Caption for ${figureViewer.$captionTitle.text()}`);\n },\n };\n\n UX.figureViewer = figureViewer; // add to global namespace\n})();\n","import 'ui-core/widgets/publication-content/js/publication-content';\nimport 'ui-core/widgets/article-tools/js/article-tools';\nimport 'ui-core/widgets/publication-content/js/crossref';\n\nconst loader = UX.loader;\nloader.additionalController = function () {\n if ($('.altmetric-embed').length) {\n // LIT-263055\n $('.altmetric-embed').on('altmetric:hide', function () {\n $('.no-content').show();\n });\n }\n\n const $sections = $('#sectionMenu'),\n $window = $(window);\n if ($sections.length) {\n $window.on('scroll', function () {\n loader.setSectionHeight($sections, $window);\n });\n }\n};\n\nloader.setSectionHeight = function ($sections, $window) {\n //LIT-318905\n const $footer = $('.footer');\n const footerTop = $footer.offset().top;\n const marginTop = parseInt($footer.css('margin-top'));\n const scrollTop = $window.scrollTop() + $window.height();\n const headerHeight = $('.header').height();\n\n if (scrollTop >= footerTop) {\n $sections.css('max-height', `calc(100vh - ${headerHeight + scrollTop - footerTop + marginTop}px)`);\n } else {\n $sections.css('max-height', '');\n }\n};\n\nloader.truncation.linesToShow = 2;\nloader.truncation.MobileLinesToShow = 2;\nloader.truncation.showMoreText = $('article').data('more-authors-text');\nloader.truncation.showLessText = $('article').data('less-authors-text');\nloader.truncation.seeMoreIconMobile = 'icon-section_arrow_d';\n","\n import '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250107-f18a1bc8/ui-products/aasm/node_modules/ui-core/plugins/panzoom/jquery.panzoom';\n \nimport '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250107-f18a1bc8/ui-products/aasm/node_modules/ui-theme/js/components/_figure-viewer';\n \nimport '/mnt/ssd/na101/home/literatum/sourcegit/ui-products-branches/maint-250107-f18a1bc8/ui-products/aasm/node_modules/ui-theme/js/widgets/_publication-content';\n \nconst main = (UX) => {\n const $figureViewer = Array.prototype.slice.call(document.querySelectorAll('figure')),\n $loader = Array.prototype.slice.call(document.querySelectorAll('article'))\n\ntry {\n if ($figureViewer.length ) {\n UX.figureViewer.init($figureViewer);\n }\n } catch (err) {\n console.error(err);\n }\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":""}