{"version":3,"sources":["scrollTo.js"],"names":["factory","define","amd","module","exports","require","jQuery","$","isWin","elem","nodeName","inArray","toLowerCase","both","val","isFunction","isPlainObject","top","left","$scrollTo","scrollTo","target","duration","settings","window","defaults","axis","limit","fn","onAfter","extend","queue","length","offset","over","this","each","animate","callback","opts","complete","call","targ","$elem","attr","toff","win","contentWindow","test","is","style","split","i","Pos","pos","key","prev","max","margin","parseInt","css","slice","parseFloat","Math","min","onAfterFirst","Dim","scroll","size","doc","ownerDocument","document","html","documentElement","body","Tween","propHooks","scrollLeft","scrollTop","get","t","prop","set","curr","options","interrupt","_last","stop","next","round","now"],"mappings":"CASC,SAAUA,GACV,YACsB,mBAAXC,SAAyBA,OAAOC,IAE1CD,QAAQ,UAAWD,GACS,mBAAXG,SAA0BA,OAAOC,QAElDD,OAAOC,QAAUJ,EAAQK,QAAQ,WAGjCL,EAAQM,SAEP,SAASC,GACX,YAYA,SAASC,GAAMC,GACd,OAAQA,EAAKC,UACZH,EAAEI,QAAQF,EAAKC,SAASE,eAAgB,SAAS,YAAY,OAAO,cAiJtE,QAASC,GAAKC,GACb,MAAOP,GAAEQ,WAAWD,IAAQP,EAAES,cAAcF,GAAOA,GAAQG,IAAIH,EAAKI,KAAKJ,GA9J1E,GAAIK,GAAYZ,EAAEa,SAAW,SAASC,EAAQC,EAAUC,GACvD,MAAOhB,GAAEiB,QAAQJ,SAASC,EAAQC,EAAUC,GAuL7C,OApLAJ,GAAUM,UACTC,KAAK,KACLJ,SAAU,EACVK,OAAM,GAQPpB,EAAEqB,GAAGR,SAAW,SAASC,EAAQC,EAAUC,GAClB,gBAAbD,KACVC,EAAWD,EACXA,EAAW,GAEY,kBAAbC,KACVA,GAAaM,QAAQN,IAEP,QAAXF,IACHA,EAAS,KAGVE,EAAWhB,EAAEuB,UAAWX,EAAUM,SAAUF,GAE5CD,EAAWA,GAAYC,EAASD,QAEhC,IAAIS,GAAQR,EAASQ,OAASR,EAASG,KAAKM,OAAS,CAQrD,OAPID,KAEHT,GAAY,GAEbC,EAASU,OAASpB,EAAKU,EAASU,QAChCV,EAASW,KAAOrB,EAAKU,EAASW,MAEvBC,KAAKC,KAAK,WAsFhB,QAASC,GAAQC,GAChB,GAAIC,GAAOhC,EAAEuB,UAAWP,GAGvBQ,OAAO,EACPT,SAAUA,EACVkB,SAAUF,GAAY,WACrBA,EAASG,KAAKhC,EAAMiC,EAAMnB,KAG5BoB,GAAMN,QAAQO,EAAML,GA9FrB,GAAe,OAAXlB,EAAJ,CAEA,GAKCwB,GALGC,EAAMtC,EAAM2B,MACf1B,EAAOqC,EAAMX,KAAKY,eAAiBvB,OAASW,KAC5CQ,EAAQpC,EAAEE,GACViC,EAAOrB,EACPuB,IAGD,cAAeF,IAEd,IAAK,SACL,IAAK,SACJ,GAAI,gCAAgCM,KAAKN,GAAO,CAC/CA,EAAO7B,EAAK6B,EAEZ,OAGDA,EAAOI,EAAMvC,EAAEmC,GAAQnC,EAAEmC,EAAMjC,EAEhC,KAAK,SACJ,GAAoB,IAAhBiC,EAAKV,OAAc,QAEnBU,EAAKO,IAAMP,EAAKQ,SAEnBL,GAAQH,EAAOnC,EAAEmC,IAAOT,UAI3B,GAAIA,GAAS1B,EAAEQ,WAAWQ,EAASU,SAAWV,EAASU,OAAOxB,EAAMiC,IAASnB,EAASU,MAEtF1B,GAAE6B,KAAKb,EAASG,KAAKyB,MAAM,IAAK,SAASC,EAAG1B,GAC3C,GAAI2B,GAAe,MAAT3B,EAAe,OAAS,MACjC4B,EAAMD,EAAIzC,cACV2C,EAAM,SAAWF,EACjBG,EAAOb,EAAMY,KACbE,EAAMtC,EAAUsC,IAAIhD,EAAMiB,EAE3B,IAAImB,EACHD,EAAKW,GAAOV,EAAKS,IAAQR,EAAM,EAAIU,EAAOb,EAAMV,SAASqB,IAGrD/B,EAASmC,SACZd,EAAKW,IAAQI,SAASjB,EAAKkB,IAAI,SAASP,GAAM,KAAO,EACrDT,EAAKW,IAAQI,SAASjB,EAAKkB,IAAI,SAASP,EAAI,SAAU,KAAO,GAG9DT,EAAKW,IAAQtB,EAAOqB,IAAQ,EAExB/B,EAASW,KAAKoB,KAEjBV,EAAKW,IAAQb,EAAc,MAAThB,EAAa,QAAQ,YAAcH,EAASW,KAAKoB,QAE9D,CACN,GAAIxC,GAAM4B,EAAKY,EAEfV,GAAKW,GAAOzC,EAAI+C,OAA2B,MAAlB/C,EAAI+C,UAC5BC,WAAWhD,GAAO,IAAM2C,EACtB3C,EAIAS,EAASI,OAAS,QAAQqB,KAAKJ,EAAKW,MAEvCX,EAAKW,GAAOX,EAAKW,IAAQ,EAAI,EAAIQ,KAAKC,IAAIpB,EAAKW,GAAME,KAIjDL,GAAK7B,EAASG,KAAKM,OAAS,IAC5BwB,IAASZ,EAAKW,GAEjBX,KACUb,IAEVM,EAAQd,EAAS0C,cAEjBrB,SAKHP,EAAQd,EAASM,aAmBnBV,EAAUsC,IAAM,SAAShD,EAAMiB,GAC9B,GAAIwC,GAAe,MAATxC,EAAe,QAAU,SAClCyC,EAAS,SAASD,CAEnB,KAAK1D,EAAMC,GACV,MAAOA,GAAK0D,GAAU5D,EAAEE,GAAMyD,EAAItD,gBAEnC,IAAIwD,GAAO,SAAWF,EACrBG,EAAM5D,EAAK6D,eAAiB7D,EAAK8D,SACjCC,EAAOH,EAAII,gBACXC,EAAOL,EAAIK,IAEZ,OAAOX,MAAKN,IAAIe,EAAKL,GAASO,EAAKP,IAAWJ,KAAKC,IAAIQ,EAAKJ,GAAOM,EAAKN,KAQzE7D,EAAEoE,MAAMC,UAAUC,WAClBtE,EAAEoE,MAAMC,UAAUE,WACjBC,IAAK,SAASC,GACb,MAAOzE,GAAEyE,EAAEvE,MAAMuE,EAAEC,SAEpBC,IAAK,SAASF,GACb,GAAIG,GAAOhD,KAAK4C,IAAIC,EAEpB,IAAIA,EAAEI,QAAQC,WAAaL,EAAEM,OAASN,EAAEM,QAAUH,EACjD,MAAO5E,GAAEyE,EAAEvE,MAAM8E,MAElB,IAAIC,GAAOzB,KAAK0B,MAAMT,EAAEU,IAGpBP,KAASK,IACZjF,EAAEyE,EAAEvE,MAAMuE,EAAEC,MAAMO,GAClBR,EAAEM,MAAQnD,KAAK4C,IAAIC,MAMf7D","file":"../scrollTo.js","sourcesContent":["/*!\n * jQuery.scrollTo\n * Copyright (c) 2007-2015 Ariel Flesler - aflesler ○ gmail • com | http://flesler.blogspot.com\n * Licensed under MIT\n * http://flesler.blogspot.com/2007/10/jqueryscrollto.html\n * @projectDescription Lightweight, cross-browser and highly customizable animated scrolling with jQuery\n * @author Ariel Flesler\n * @version 2.1.2\n */\n;(function(factory) {\n\t'use strict';\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof module !== 'undefined' && module.exports) {\n\t\t// CommonJS\n\t\tmodule.exports = factory(require('jquery'));\n\t} else {\n\t\t// Global\n\t\tfactory(jQuery);\n\t}\n})(function($) {\n\t'use strict';\n\n\tvar $scrollTo = $.scrollTo = function(target, duration, settings) {\n\t\treturn $(window).scrollTo(target, duration, settings);\n\t};\n\n\t$scrollTo.defaults = {\n\t\taxis:'xy',\n\t\tduration: 0,\n\t\tlimit:true\n\t};\n\n\tfunction isWin(elem) {\n\t\treturn !elem.nodeName ||\n\t\t\t$.inArray(elem.nodeName.toLowerCase(), ['iframe','#document','html','body']) !== -1;\n\t}\t\t\n\n\t$.fn.scrollTo = function(target, duration, settings) {\n\t\tif (typeof duration === 'object') {\n\t\t\tsettings = duration;\n\t\t\tduration = 0;\n\t\t}\n\t\tif (typeof settings === 'function') {\n\t\t\tsettings = { onAfter:settings };\n\t\t}\n\t\tif (target === 'max') {\n\t\t\ttarget = 9e9;\n\t\t}\n\n\t\tsettings = $.extend({}, $scrollTo.defaults, settings);\n\t\t// Speed is still recognized for backwards compatibility\n\t\tduration = duration || settings.duration;\n\t\t// Make sure the settings are given right\n\t\tvar queue = settings.queue && settings.axis.length > 1;\n\t\tif (queue) {\n\t\t\t// Let's keep the overall duration\n\t\t\tduration /= 2;\n\t\t}\n\t\tsettings.offset = both(settings.offset);\n\t\tsettings.over = both(settings.over);\n\n\t\treturn this.each(function() {\n\t\t\t// Null target yields nothing, just like jQuery does\n\t\t\tif (target === null) return;\n\n\t\t\tvar win = isWin(this),\n\t\t\t\telem = win ? this.contentWindow || window : this,\n\t\t\t\t$elem = $(elem),\n\t\t\t\ttarg = target, \n\t\t\t\tattr = {},\n\t\t\t\ttoff;\n\n\t\t\tswitch (typeof targ) {\n\t\t\t\t// A number will pass the regex\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'string':\n\t\t\t\t\tif (/^([+-]=?)?\\d+(\\.\\d+)?(px|%)?$/.test(targ)) {\n\t\t\t\t\t\ttarg = both(targ);\n\t\t\t\t\t\t// We are done\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\t// Relative/Absolute selector\n\t\t\t\t\ttarg = win ? $(targ) : $(targ, elem);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'object':\n\t\t\t\t\tif (targ.length === 0) return;\n\t\t\t\t\t// DOMElement / jQuery\n\t\t\t\t\tif (targ.is || targ.style) {\n\t\t\t\t\t\t// Get the real position of the target\n\t\t\t\t\t\ttoff = (targ = $(targ)).offset();\n\t\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar offset = $.isFunction(settings.offset) && settings.offset(elem, targ) || settings.offset;\n\n\t\t\t$.each(settings.axis.split(''), function(i, axis) {\n\t\t\t\tvar Pos\t= axis === 'x' ? 'Left' : 'Top',\n\t\t\t\t\tpos = Pos.toLowerCase(),\n\t\t\t\t\tkey = 'scroll' + Pos,\n\t\t\t\t\tprev = $elem[key](),\n\t\t\t\t\tmax = $scrollTo.max(elem, axis);\n\n\t\t\t\tif (toff) {// jQuery / DOMElement\n\t\t\t\t\tattr[key] = toff[pos] + (win ? 0 : prev - $elem.offset()[pos]);\n\n\t\t\t\t\t// If it's a dom element, reduce the margin\n\t\t\t\t\tif (settings.margin) {\n\t\t\t\t\t\tattr[key] -= parseInt(targ.css('margin'+Pos), 10) || 0;\n\t\t\t\t\t\tattr[key] -= parseInt(targ.css('border'+Pos+'Width'), 10) || 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tattr[key] += offset[pos] || 0;\n\n\t\t\t\t\tif (settings.over[pos]) {\n\t\t\t\t\t\t// Scroll to a fraction of its width/height\n\t\t\t\t\t\tattr[key] += targ[axis === 'x'?'width':'height']() * settings.over[pos];\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar val = targ[pos];\n\t\t\t\t\t// Handle percentage values\n\t\t\t\t\tattr[key] = val.slice && val.slice(-1) === '%' ?\n\t\t\t\t\t\tparseFloat(val) / 100 * max\n\t\t\t\t\t\t: val;\n\t\t\t\t}\n\n\t\t\t\t// Number or 'number'\n\t\t\t\tif (settings.limit && /^\\d+$/.test(attr[key])) {\n\t\t\t\t\t// Check the limits\n\t\t\t\t\tattr[key] = attr[key] <= 0 ? 0 : Math.min(attr[key], max);\n\t\t\t\t}\n\n\t\t\t\t// Don't waste time animating, if there's no need.\n\t\t\t\tif (!i && settings.axis.length > 1) {\n\t\t\t\t\tif (prev === attr[key]) {\n\t\t\t\t\t\t// No animation needed\n\t\t\t\t\t\tattr = {};\n\t\t\t\t\t} else if (queue) {\n\t\t\t\t\t\t// Intermediate animation\n\t\t\t\t\t\tanimate(settings.onAfterFirst);\n\t\t\t\t\t\t// Don't animate this axis again in the next iteration.\n\t\t\t\t\t\tattr = {};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tanimate(settings.onAfter);\n\n\t\t\tfunction animate(callback) {\n\t\t\t\tvar opts = $.extend({}, settings, {\n\t\t\t\t\t// The queue setting conflicts with animate()\n\t\t\t\t\t// Force it to always be true\n\t\t\t\t\tqueue: true,\n\t\t\t\t\tduration: duration,\n\t\t\t\t\tcomplete: callback && function() {\n\t\t\t\t\t\tcallback.call(elem, targ, settings);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\t$elem.animate(attr, opts);\n\t\t\t}\n\t\t});\n\t};\n\n\t// Max scrolling position, works on quirks mode\n\t// It only fails (not too badly) on IE, quirks mode.\n\t$scrollTo.max = function(elem, axis) {\n\t\tvar Dim = axis === 'x' ? 'Width' : 'Height',\n\t\t\tscroll = 'scroll'+Dim;\n\n\t\tif (!isWin(elem))\n\t\t\treturn elem[scroll] - $(elem)[Dim.toLowerCase()]();\n\n\t\tvar size = 'client' + Dim,\n\t\t\tdoc = elem.ownerDocument || elem.document,\n\t\t\thtml = doc.documentElement,\n\t\t\tbody = doc.body;\n\n\t\treturn Math.max(html[scroll], body[scroll]) - Math.min(html[size], body[size]);\n\t};\n\n\tfunction both(val) {\n\t\treturn $.isFunction(val) || $.isPlainObject(val) ? val : { top:val, left:val };\n\t}\n\n\t// Add special hooks so that window scroll properties can be animated\n\t$.Tween.propHooks.scrollLeft = \n\t$.Tween.propHooks.scrollTop = {\n\t\tget: function(t) {\n\t\t\treturn $(t.elem)[t.prop]();\n\t\t},\n\t\tset: function(t) {\n\t\t\tvar curr = this.get(t);\n\t\t\t// If interrupt is true and user scrolled, stop animating\n\t\t\tif (t.options.interrupt && t._last && t._last !== curr) {\n\t\t\t\treturn $(t.elem).stop();\n\t\t\t}\n\t\t\tvar next = Math.round(t.now);\n\t\t\t// Don't waste CPU\n\t\t\t// Browsers don't render floating point scroll\n\t\t\tif (curr !== next) {\n\t\t\t\t$(t.elem)[t.prop](next);\n\t\t\t\tt._last = this.get(t);\n\t\t\t}\n\t\t}\n\t};\n\n\t// AMD requirement\n\treturn $scrollTo;\n});\n"]}