{"version":3,"sources":["webpack:///./src/app/modules/notification/components/notification-navbar.component.vue","webpack:///src/app/modules/notification/components/notification-navbar.component.vue","webpack:///./src/app/modules/notification/components/notification-navbar.component.vue?d4fd","webpack:///./src/app/modules/notification/components/notification-navbar.component.vue?7106","webpack:///./node_modules/howler/dist/howler.js","webpack:///./node_modules/favico.js-slevomat/favico.js","webpack:///./src/app/modules/notification/components/notification-navbar.component.vue?f394"],"names":["render","_vm","this","_c","_self","attrs","directives","name","rawName","value","openMenuNotification","expression","staticClass","class","$screen","portrait","style","staticStyle","_l","notification_stream","item","index","key","on","$event","useClick","hasOwnProperty","_v","_s","_f","datetime","_e","time","topic","title","domProps","message","length","$icons","chat","notificationsRead","check_verify","staticRenderFns","favicon","Favico","bgColor","textColor","ClickOutside","components","ExpandableTextLine","props","type","Boolean","default","data","notification","read","hover_notification","date_notification","computed","mapState","state","accountTypes","play_sound","config","methods","mapActions","getNotificationTransient","postTransientDismiss","playSound","audio","Audio","play","then","badge","watch","handler","newmessage","oldmessage","mounted","document","addEventListener","audioContext","AudioContext","resume","component","HowlerGlobal","init","prototype","self","Howler","_counter","_html5AudioPool","html5PoolSize","_codecs","_howls","_muted","_volume","_canPlayEvent","_navigator","window","navigator","masterGain","noAudio","usingWebAudio","autoSuspend","ctx","autoUnlock","_setup","volume","vol","parseFloat","setupAudioContext","gain","setValueAtTime","currentTime","i","_webAudio","ids","_getSoundIds","j","sound","_soundById","_node","mute","muted","stop","unload","close","codecs","ext","replace","_autoSuspend","test","oncanplaythrough","e","_setupCodecs","audioTest","err","canPlayType","mpegTest","ua","userAgent","checkOpera","match","isOldOpera","parseInt","split","checkSafari","indexOf","safariVersion","isOldSafari","mp3","mpeg","opus","ogg","oga","wav","aac","caf","m4a","m4b","mp4","weba","webm","dolby","flac","_unlockAudio","_audioUnlocked","_mobileUnloaded","sampleRate","_scratchBuffer","createBuffer","unlock","audioNode","_unlocked","_releaseHtml5Audio","load","_autoResume","source","createBufferSource","buffer","connect","destination","start","noteOn","onended","disconnect","removeEventListener","_emit","_obtainHtml5Audio","pop","testPlay","Promise","catch","console","warn","push","suspend","_sounds","_paused","_suspendTimer","clearTimeout","setTimeout","handleSuspension","_resumeAfterSuspend","Howl","o","src","error","_autoplay","autoplay","_format","format","_html5","html5","_loop","loop","_pool","pool","_preload","preload","_rate","rate","_sprite","sprite","_src","undefined","_xhr","method","xhr","headers","withCredentials","_duration","_state","_endTimers","_queue","_playLock","_onend","onend","fn","_onfade","onfade","_onload","onload","_onloaderror","onloaderror","_onplayerror","onplayerror","_onpause","onpause","_onplay","onplay","_onstop","onstop","_onmute","onmute","_onvolume","onvolume","_onrate","onrate","_onseek","onseek","_onunlock","onunlock","_onresume","event","action","url","str","exec","toLowerCase","location","protocol","slice","Sound","loadBuffer","internal","id","num","_ended","_id","_inactiveSound","soundId","_loadQueue","seek","Math","max","_seek","duration","timeout","abs","setParams","_start","_stop","node","playWebAudio","_refreshBuffer","_playStart","bufferSource","noteGrainOn","Infinity","bind","once","_clearTimer","playHtml5","playbackRate","paused","loadedNoReadyState","ejecta","readyState","isCocoonJS","listener","pause","_rateSeek","_stopFade","noteOff","_cleanBuffer","isNaN","arguments","_clearSound","_interval","args","apply","fade","from","to","len","min","end","linearRampToValueAtTime","_startFadeInterval","isGroup","diff","steps","stepLen","lastTick","Date","now","_fadeTo","setInterval","tick","round","clearInterval","cancelScheduledValues","loopStart","loopEnd","playing","realTime","rateSeek","seekAndEmit","emitSeek","sounds","_errorFn","_loadFn","_endFn","splice","remCache","cache","events","off","isId","keys","Object","Array","isArray","msg","call","task","shift","ended","_drain","reset","limit","cnt","_panner","isIOS","vendor","checkIE","howl","_parent","parent","create","createGain","createGainNode","_errorListener","_loadListener","_endListener","code","ceil","__default","loadSound","atob","dataView","Uint8Array","charCodeAt","decodeAudioData","XMLHttpRequest","open","responseType","forEach","setRequestHeader","status","response","onerror","safeXhrSend","send","arraybuffer","success","webkitAudioContext","iOS","platform","appVersion","version","safari","exports","global","_pos","_orientation","stereo","pan","pos","x","y","z","positionX","setTargetAtTime","positionY","positionZ","setPosition","orientation","xUp","yUp","zUp","or","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","_super","_stereo","_pannerAttr","coneInnerAngle","coneOuterAngle","coneOuterGain","distanceModel","maxDistance","panningModel","refDistance","rolloffFactor","_onstereo","onstereo","_onpos","onpos","_onorientation","onorientation","pannerType","createStereoPanner","setupPanner","orientationX","orientationY","orientationZ","pannerAttr","_coneInnerAngle","_coneOuterAngle","_coneOuterGain","_distanceModel","_maxDistance","_refDistance","_rolloffFactor","_panningModel","pa","panner","createPanner","opt","_opt","_orig","_h","_w","_canvas","_context","_img","_ready","_lastBadge","_running","_readyCb","_browser","_animTimeout","_drawTimeout","_doc","_def","fontFamily","fontStyle","position","animation","elementId","element","dataUrl","win","ff","InstallTrigger","chrome","opera","ie","toString","HTMLElement","supported","merge","hexToRgb","types","isUp","isLeft","a","step","w","h","link","getIcons","createElement","lastIcon","hasAttribute","setAttribute","height","width","getContext","icon","ready","getAttribute","clearRect","drawImage","setIcon","finished","run","options","n","circle","more","beginPath","font","floor","textAlign","moveTo","lineTo","quadraticCurveTo","arc","PI","fillStyle","r","g","b","fill","closePath","stroke","fillText","rectangle","fillRect","number","opts","q","Error","setOpt","hex","shorthandRegex","m","result","def","attrname","mergedOpt","isPageHidden","hidden","msHidden","webkitHidden","mozHidden","elms","getLinks","icons","links","getElementsByTagName","getElementById","appendChild","canvas","toDataURL","setIconSrc","elm","old","newIcon","parentNode","removeChild","none","popFade","slide","cb","revert","animationType","browser"],"mappings":"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","file":"js/chunk-2a5cceaa.5949ea98.js","sourcesContent":["var render = function render(){var _vm=this,_c=_vm._self._c;return _c('transition',{attrs:{\"enter-active-class\":\"transform transition duration-300 ease-custom\",\"enter-class\":\"translate-y-1/2 scale-y-0 opacity-0\",\"enter-to-class\":\"-translate-y-0 scale-y-100 opacity-100\",\"leave-active-class\":\"transform transition duration-300 ease-custom\",\"leave-class\":\"-translate-y-0 scale-y-100 opacity-100\",\"leave-to-class\":\"translate-y-1/2 scale-y-0 opacity-0\"}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.openMenuNotification),expression:\"openMenuNotification\"}],staticClass:\"border-ontick-carbon-500 bg-ontick-steel-500 absolute left-16 z-40 overflow-hidden rounded-md border-b shadow-lg\",class:_vm.$screen.portrait ? 'bottom-full\t' : 'bottom-16',style:(_vm.$screen.portrait ? 'min-width: 350px' : 'min-width: 350px')},[_c('ul',{staticClass:\"relative w-full overflow-y-auto\",staticStyle:{\"max-height\":\"400px\"}},[_vm._l((_vm.notification_stream),function(item,index){return _c('li',{key:index,staticClass:\"w-full px-4 py-3\",class:index % 2 === 0 ? 'bg-ontick-steel-500' : 'bg-ontick-steel-700',on:{\"click\":function($event){_vm.useClick = !_vm.useClick}}},[_c('dd',{staticClass:\"flex items-baseline justify-between\"},[(item.hasOwnProperty('datetime'))?_c('div',{staticClass:\"flex items-baseline text-xs text-gray-400\"},[_vm._v(\" \"+_vm._s(_vm._f(\"moment\")(item.datetime,\"DD/MM/YYYY HH:mm:ss\"))+\" \")]):_vm._e(),(item.hasOwnProperty('time'))?_c('div',{staticClass:\"flex items-baseline text-xs text-gray-400\"},[_vm._v(\" \"+_vm._s(item.time)+\" \")]):_vm._e(),_c('span',{staticClass:\"bg-ontick-blue-800 text-ontick-blue-300 inline-flex items-center rounded bg-opacity-25 px-2 py-0.5 text-xs font-medium uppercase\"},[_vm._v(\" \"+_vm._s(item.topic)+\" \")])]),_c('p',{staticClass:\"trucante py-1 text-left text-sm font-semibold text-gray-300\"},[_vm._v(\" \"+_vm._s(item.title)+\" \")]),_c('p',{staticClass:\"text-left text-xs text-gray-300 md:block\"},[_c('expandable-text-line',{staticClass:\"text\",attrs:{\"use-click\":_vm.useClick}},[_c('span',{domProps:{\"innerHTML\":_vm._s(item.message)}})])],1)])}),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.notification_stream.length == 0),expression:\"notification_stream.length == 0\"}],staticClass:\"py-4 text-center\"},[_c('div',{staticClass:\"flex justify-center\"},[_c('span',{staticClass:\"h-10 w-10 text-gray-300\",domProps:{\"innerHTML\":_vm._s(_vm.$icons.chat)}}),_c('p',{staticClass:\"px-2 py-3 text-center text-xs normal-case text-gray-300\"},[_vm._v(\" Nenhuma notificação \")])])])],2),_c('div',{staticClass:\"relative bottom-0 w-full\"},[_c('button',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.notification_stream.length != 0),expression:\"notification_stream.length != 0\"}],staticClass:\"bg-ontick-blue-900 hover:bg-ontick-blue-800 inline-flex w-full items-center justify-center py-2 text-center text-xs font-bold text-gray-300\",attrs:{\"disabled\":_vm.notification_stream.length == 0},on:{\"click\":function($event){return _vm.notificationsRead()}}},[_c('span',{staticClass:\"pr-1\",domProps:{\"innerHTML\":_vm._s(_vm.$icons.check_verify)}}),_vm._v(\" Marcar todas como lidas \")])])])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n","import mod from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./notification-navbar.component.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../../../../node_modules/thread-loader/dist/cjs.js!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/index.js??vue-loader-options!./notification-navbar.component.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./notification-navbar.component.vue?vue&type=template&id=47fee626\"\nimport script from \"./notification-navbar.component.vue?vue&type=script&lang=js\"\nexport * from \"./notification-navbar.component.vue?vue&type=script&lang=js\"\nimport style0 from \"./notification-navbar.component.vue?vue&type=style&index=0&id=47fee626&prod&lang=scss\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/@vue/cli-service/node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","/*!\n * howler.js v2.2.4\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Create the global controller. All contained methods and properties apply\n * to all sounds that are currently playing or will be in the future.\n */\n var HowlerGlobal = function() {\n this.init();\n };\n HowlerGlobal.prototype = {\n /**\n * Initialize the global Howler object.\n * @return {Howler}\n */\n init: function() {\n var self = this || Howler;\n\n // Create a global ID counter.\n self._counter = 1000;\n\n // Pool of unlocked HTML5 Audio objects.\n self._html5AudioPool = [];\n self.html5PoolSize = 10;\n\n // Internal properties.\n self._codecs = {};\n self._howls = [];\n self._muted = false;\n self._volume = 1;\n self._canPlayEvent = 'canplaythrough';\n self._navigator = (typeof window !== 'undefined' && window.navigator) ? window.navigator : null;\n\n // Public properties.\n self.masterGain = null;\n self.noAudio = false;\n self.usingWebAudio = true;\n self.autoSuspend = true;\n self.ctx = null;\n\n // Set to false to disable the auto audio unlocker.\n self.autoUnlock = true;\n\n // Setup the various state values for global tracking.\n self._setup();\n\n return self;\n },\n\n /**\n * Get/set the global volume for all sounds.\n * @param {Float} vol Volume from 0.0 to 1.0.\n * @return {Howler/Float} Returns self or current volume.\n */\n volume: function(vol) {\n var self = this || Howler;\n vol = parseFloat(vol);\n\n // If we don't have an AudioContext created yet, run the setup.\n if (!self.ctx) {\n setupAudioContext();\n }\n\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n self._volume = vol;\n\n // Don't update any of the nodes if we are muted.\n if (self._muted) {\n return self;\n }\n\n // When using Web Audio, we just need to adjust the master gain.\n if (self.usingWebAudio) {\n self.masterGain.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n }\n\n // Loop through and change volume for all HTML5 audio nodes.\n for (var i=0; i=0; i--) {\n self._howls[i].unload();\n }\n\n // Create a new AudioContext to make sure it is fully reset.\n if (self.usingWebAudio && self.ctx && typeof self.ctx.close !== 'undefined') {\n self.ctx.close();\n self.ctx = null;\n setupAudioContext();\n }\n\n return self;\n },\n\n /**\n * Check for codec support of specific extension.\n * @param {String} ext Audio file extention.\n * @return {Boolean}\n */\n codecs: function(ext) {\n return (this || Howler)._codecs[ext.replace(/^x-/, '')];\n },\n\n /**\n * Setup various state values for global tracking.\n * @return {Howler}\n */\n _setup: function() {\n var self = this || Howler;\n\n // Keeps track of the suspend/resume state of the AudioContext.\n self.state = self.ctx ? self.ctx.state || 'suspended' : 'suspended';\n\n // Automatically begin the 30-second suspend process\n self._autoSuspend();\n\n // Check if audio is available.\n if (!self.usingWebAudio) {\n // No audio is available on this system if noAudio is set to true.\n if (typeof Audio !== 'undefined') {\n try {\n var test = new Audio();\n\n // Check if the canplaythrough event is available.\n if (typeof test.oncanplaythrough === 'undefined') {\n self._canPlayEvent = 'canplay';\n }\n } catch(e) {\n self.noAudio = true;\n }\n } else {\n self.noAudio = true;\n }\n }\n\n // Test to make sure audio isn't disabled in Internet Explorer.\n try {\n var test = new Audio();\n if (test.muted) {\n self.noAudio = true;\n }\n } catch (e) {}\n\n // Check for supported codecs.\n if (!self.noAudio) {\n self._setupCodecs();\n }\n\n return self;\n },\n\n /**\n * Check for browser support for various codecs and cache the results.\n * @return {Howler}\n */\n _setupCodecs: function() {\n var self = this || Howler;\n var audioTest = null;\n\n // Must wrap in a try/catch because IE11 in server mode throws an error.\n try {\n audioTest = (typeof Audio !== 'undefined') ? new Audio() : null;\n } catch (err) {\n return self;\n }\n\n if (!audioTest || typeof audioTest.canPlayType !== 'function') {\n return self;\n }\n\n var mpegTest = audioTest.canPlayType('audio/mpeg;').replace(/^no$/, '');\n\n // Opera version <33 has mixed MP3 support, so we need to check for and block it.\n var ua = self._navigator ? self._navigator.userAgent : '';\n var checkOpera = ua.match(/OPR\\/(\\d+)/g);\n var isOldOpera = (checkOpera && parseInt(checkOpera[0].split('/')[1], 10) < 33);\n var checkSafari = ua.indexOf('Safari') !== -1 && ua.indexOf('Chrome') === -1;\n var safariVersion = ua.match(/Version\\/(.*?) /);\n var isOldSafari = (checkSafari && safariVersion && parseInt(safariVersion[1], 10) < 15);\n\n self._codecs = {\n mp3: !!(!isOldOpera && (mpegTest || audioTest.canPlayType('audio/mp3;').replace(/^no$/, ''))),\n mpeg: !!mpegTest,\n opus: !!audioTest.canPlayType('audio/ogg; codecs=\"opus\"').replace(/^no$/, ''),\n ogg: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n oga: !!audioTest.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/^no$/, ''),\n wav: !!(audioTest.canPlayType('audio/wav; codecs=\"1\"') || audioTest.canPlayType('audio/wav')).replace(/^no$/, ''),\n aac: !!audioTest.canPlayType('audio/aac;').replace(/^no$/, ''),\n caf: !!audioTest.canPlayType('audio/x-caf;').replace(/^no$/, ''),\n m4a: !!(audioTest.canPlayType('audio/x-m4a;') || audioTest.canPlayType('audio/m4a;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n m4b: !!(audioTest.canPlayType('audio/x-m4b;') || audioTest.canPlayType('audio/m4b;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n mp4: !!(audioTest.canPlayType('audio/x-mp4;') || audioTest.canPlayType('audio/mp4;') || audioTest.canPlayType('audio/aac;')).replace(/^no$/, ''),\n weba: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n webm: !!(!isOldSafari && audioTest.canPlayType('audio/webm; codecs=\"vorbis\"').replace(/^no$/, '')),\n dolby: !!audioTest.canPlayType('audio/mp4; codecs=\"ec-3\"').replace(/^no$/, ''),\n flac: !!(audioTest.canPlayType('audio/x-flac;') || audioTest.canPlayType('audio/flac;')).replace(/^no$/, '')\n };\n\n return self;\n },\n\n /**\n * Some browsers/devices will only allow audio to be played after a user interaction.\n * Attempt to automatically unlock audio on the first user interaction.\n * Concept from: http://paulbakaus.com/tutorials/html5/web-audio-on-ios/\n * @return {Howler}\n */\n _unlockAudio: function() {\n var self = this || Howler;\n\n // Only run this if Web Audio is supported and it hasn't already been unlocked.\n if (self._audioUnlocked || !self.ctx) {\n return;\n }\n\n self._audioUnlocked = false;\n self.autoUnlock = false;\n\n // Some mobile devices/platforms have distortion issues when opening/closing tabs and/or web views.\n // Bugs in the browser (especially Mobile Safari) can cause the sampleRate to change from 44100 to 48000.\n // By calling Howler.unload(), we create a new AudioContext with the correct sampleRate.\n if (!self._mobileUnloaded && self.ctx.sampleRate !== 44100) {\n self._mobileUnloaded = true;\n self.unload();\n }\n\n // Scratch buffer for enabling iOS to dispose of web audio buffers correctly, as per:\n // http://stackoverflow.com/questions/24119684\n self._scratchBuffer = self.ctx.createBuffer(1, 1, 22050);\n\n // Call this method on touch start to create and play a buffer,\n // then check if the audio actually played to determine if\n // audio has now been unlocked on iOS, Android, etc.\n var unlock = function(e) {\n // Create a pool of unlocked HTML5 Audio objects that can\n // be used for playing sounds without user interaction. HTML5\n // Audio objects must be individually unlocked, as opposed\n // to the WebAudio API which only needs a single activation.\n // This must occur before WebAudio setup or the source.onended\n // event will not fire.\n while (self._html5AudioPool.length < self.html5PoolSize) {\n try {\n var audioNode = new Audio();\n\n // Mark this Audio object as unlocked to ensure it can get returned\n // to the unlocked pool when released.\n audioNode._unlocked = true;\n\n // Add the audio node to the pool.\n self._releaseHtml5Audio(audioNode);\n } catch (e) {\n self.noAudio = true;\n break;\n }\n }\n\n // Loop through any assigned audio nodes and unlock them.\n for (var i=0; i= 55.\n if (typeof self.ctx.resume === 'function') {\n self.ctx.resume();\n }\n\n // Setup a timeout to check that we are unlocked on the next event loop.\n source.onended = function() {\n source.disconnect(0);\n\n // Update the unlocked state and prevent this check from happening again.\n self._audioUnlocked = true;\n\n // Remove the touch start listener.\n document.removeEventListener('touchstart', unlock, true);\n document.removeEventListener('touchend', unlock, true);\n document.removeEventListener('click', unlock, true);\n document.removeEventListener('keydown', unlock, true);\n\n // Let all sounds know that audio has been unlocked.\n for (var i=0; i 0 ? sound._seek : self._sprite[sprite][0] / 1000);\n var duration = Math.max(0, ((self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000) - seek);\n var timeout = (duration * 1000) / Math.abs(sound._rate);\n var start = self._sprite[sprite][0] / 1000;\n var stop = (self._sprite[sprite][0] + self._sprite[sprite][1]) / 1000;\n sound._sprite = sprite;\n\n // Mark the sound as ended instantly so that this async playback\n // doesn't get grabbed by another call to play while this one waits to start.\n sound._ended = false;\n\n // Update the parameters of the sound.\n var setParams = function() {\n sound._paused = false;\n sound._seek = seek;\n sound._start = start;\n sound._stop = stop;\n sound._loop = !!(sound._loop || self._sprite[sprite][2]);\n };\n\n // End the sound instantly if seek is at the end.\n if (seek >= stop) {\n self._ended(sound);\n return;\n }\n\n // Begin the actual playback.\n var node = sound._node;\n if (self._webAudio) {\n // Fire this when the sound is ready to play to begin Web Audio playback.\n var playWebAudio = function() {\n self._playLock = false;\n setParams();\n self._refreshBuffer(sound);\n\n // Setup the playback params.\n var vol = (sound._muted || self._muted) ? 0 : sound._volume;\n node.gain.setValueAtTime(vol, Howler.ctx.currentTime);\n sound._playStart = Howler.ctx.currentTime;\n\n // Play the sound using the supported method.\n if (typeof node.bufferSource.start === 'undefined') {\n sound._loop ? node.bufferSource.noteGrainOn(0, seek, 86400) : node.bufferSource.noteGrainOn(0, seek, duration);\n } else {\n sound._loop ? node.bufferSource.start(0, seek, 86400) : node.bufferSource.start(0, seek, duration);\n }\n\n // Start a new timer if none is present.\n if (timeout !== Infinity) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n if (!internal) {\n setTimeout(function() {\n self._emit('play', sound._id);\n self._loadQueue();\n }, 0);\n }\n };\n\n if (Howler.state === 'running' && Howler.ctx.state !== 'interrupted') {\n playWebAudio();\n } else {\n self._playLock = true;\n\n // Wait for the audio context to resume before playing.\n self.once('resume', playWebAudio);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n } else {\n // Fire this when the sound is ready to play to begin HTML5 Audio playback.\n var playHtml5 = function() {\n node.currentTime = seek;\n node.muted = sound._muted || self._muted || Howler._muted || node.muted;\n node.volume = sound._volume * Howler.volume();\n node.playbackRate = sound._rate;\n\n // Some browsers will throw an error if this is called without user interaction.\n try {\n var play = node.play();\n\n // Support older browsers that don't support promises, and thus don't have this issue.\n if (play && typeof Promise !== 'undefined' && (play instanceof Promise || typeof play.then === 'function')) {\n // Implements a lock to prevent DOMException: The play() request was interrupted by a call to pause().\n self._playLock = true;\n\n // Set param values immediately.\n setParams();\n\n // Releases the lock and executes queued actions.\n play\n .then(function() {\n self._playLock = false;\n node._unlocked = true;\n if (!internal) {\n self._emit('play', sound._id);\n } else {\n self._loadQueue();\n }\n })\n .catch(function() {\n self._playLock = false;\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n\n // Reset the ended and paused values.\n sound._ended = true;\n sound._paused = true;\n });\n } else if (!internal) {\n self._playLock = false;\n setParams();\n self._emit('play', sound._id);\n }\n\n // Setting rate before playing won't work in IE, so we set it again here.\n node.playbackRate = sound._rate;\n\n // If the node is still paused, then we can assume there was a playback issue.\n if (node.paused) {\n self._emit('playerror', sound._id, 'Playback was unable to start. This is most commonly an issue ' +\n 'on mobile devices and Chrome where playback was not within a user interaction.');\n return;\n }\n\n // Setup the end timer on sprites or listen for the ended event.\n if (sprite !== '__default' || sound._loop) {\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n } else {\n self._endTimers[sound._id] = function() {\n // Fire ended on this audio node.\n self._ended(sound);\n\n // Clear this listener.\n node.removeEventListener('ended', self._endTimers[sound._id], false);\n };\n node.addEventListener('ended', self._endTimers[sound._id], false);\n }\n } catch (err) {\n self._emit('playerror', sound._id, err);\n }\n };\n\n // If this is streaming audio, make sure the src is set and load again.\n if (node.src === 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA') {\n node.src = self._src;\n node.load();\n }\n\n // Play immediately if ready, or wait for the 'canplaythrough'e vent.\n var loadedNoReadyState = (window && window.ejecta) || (!node.readyState && Howler._navigator.isCocoonJS);\n if (node.readyState >= 3 || loadedNoReadyState) {\n playHtml5();\n } else {\n self._playLock = true;\n self._state = 'loading';\n\n var listener = function() {\n self._state = 'loaded';\n \n // Begin playback.\n playHtml5();\n\n // Clear this listener.\n node.removeEventListener(Howler._canPlayEvent, listener, false);\n };\n node.addEventListener(Howler._canPlayEvent, listener, false);\n\n // Cancel the end timer.\n self._clearTimer(sound._id);\n }\n }\n\n return sound._id;\n },\n\n /**\n * Pause playback and save current position.\n * @param {Number} id The sound ID (empty to pause all in group).\n * @return {Howl}\n */\n pause: function(id) {\n var self = this;\n\n // If the sound hasn't loaded or a play() promise is pending, add it to the load queue to pause when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'pause',\n action: function() {\n self.pause(id);\n }\n });\n\n return self;\n }\n\n // If no id is passed, get all ID's to be paused.\n var ids = self._getSoundIds(id);\n\n for (var i=0; i Returns the group's volume value.\n * volume(id) -> Returns the sound id's current volume.\n * volume(vol) -> Sets the volume of all sounds in this Howl group.\n * volume(vol, id) -> Sets the volume of passed sound id.\n * @return {Howl/Number} Returns self or current volume.\n */\n volume: function() {\n var self = this;\n var args = arguments;\n var vol, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the value of the groups' volume.\n return self._volume;\n } else if (args.length === 1 || args.length === 2 && typeof args[1] === 'undefined') {\n // First check if this is an ID, and if not, assume it is a new volume.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n vol = parseFloat(args[0]);\n }\n } else if (args.length >= 2) {\n vol = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the volume or return the current volume.\n var sound;\n if (typeof vol !== 'undefined' && vol >= 0 && vol <= 1) {\n // If the sound hasn't loaded, add it to the load queue to change volume when capable.\n if (self._state !== 'loaded'|| self._playLock) {\n self._queue.push({\n event: 'volume',\n action: function() {\n self.volume.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group volume.\n if (typeof id === 'undefined') {\n self._volume = vol;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i 0) ? len / steps : len);\n var lastTick = Date.now();\n\n // Store the value being faded to.\n sound._fadeTo = to;\n\n // Update the volume value on each interval tick.\n sound._interval = setInterval(function() {\n // Update the volume based on the time since the last tick.\n var tick = (Date.now() - lastTick) / len;\n lastTick = Date.now();\n vol += diff * tick;\n\n // Round to within 2 decimal points.\n vol = Math.round(vol * 100) / 100;\n\n // Make sure the volume is in the right bounds.\n if (diff < 0) {\n vol = Math.max(to, vol);\n } else {\n vol = Math.min(to, vol);\n }\n\n // Change the volume.\n if (self._webAudio) {\n sound._volume = vol;\n } else {\n self.volume(vol, sound._id, true);\n }\n\n // Set the group's volume.\n if (isGroup) {\n self._volume = vol;\n }\n\n // When the fade is complete, stop it and fire event.\n if ((to < from && vol <= to) || (to > from && vol >= to)) {\n clearInterval(sound._interval);\n sound._interval = null;\n sound._fadeTo = null;\n self.volume(to, sound._id);\n self._emit('fade', sound._id);\n }\n }, stepLen);\n },\n\n /**\n * Internal method that stops the currently playing fade when\n * a new fade starts, volume is changed or the sound is stopped.\n * @param {Number} id The sound id.\n * @return {Howl}\n */\n _stopFade: function(id) {\n var self = this;\n var sound = self._soundById(id);\n\n if (sound && sound._interval) {\n if (self._webAudio) {\n sound._node.gain.cancelScheduledValues(Howler.ctx.currentTime);\n }\n\n clearInterval(sound._interval);\n sound._interval = null;\n self.volume(sound._fadeTo, id);\n sound._fadeTo = null;\n self._emit('fade', id);\n }\n\n return self;\n },\n\n /**\n * Get/set the loop parameter on a sound. This method can optionally take 0, 1 or 2 arguments.\n * loop() -> Returns the group's loop value.\n * loop(id) -> Returns the sound id's loop value.\n * loop(loop) -> Sets the loop value for all sounds in this Howl group.\n * loop(loop, id) -> Sets the loop value of passed sound id.\n * @return {Howl/Boolean} Returns self or current loop value.\n */\n loop: function() {\n var self = this;\n var args = arguments;\n var loop, id, sound;\n\n // Determine the values for loop and id.\n if (args.length === 0) {\n // Return the grou's loop value.\n return self._loop;\n } else if (args.length === 1) {\n if (typeof args[0] === 'boolean') {\n loop = args[0];\n self._loop = loop;\n } else {\n // Return this sound's loop value.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._loop : false;\n }\n } else if (args.length === 2) {\n loop = args[0];\n id = parseInt(args[1], 10);\n }\n\n // If no id is passed, get all ID's to be looped.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current playback rate.\n * rate(id) -> Returns the sound id's current playback rate.\n * rate(rate) -> Sets the playback rate of all sounds in this Howl group.\n * rate(rate, id) -> Sets the playback rate of passed sound id.\n * @return {Howl/Number} Returns self or the current playback rate.\n */\n rate: function() {\n var self = this;\n var args = arguments;\n var rate, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current rate of the first node.\n id = self._sounds[0]._id;\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new rate value.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else {\n rate = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n rate = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // Update the playback rate or return the current value.\n var sound;\n if (typeof rate === 'number') {\n // If the sound hasn't loaded, add it to the load queue to change playback rate when capable.\n if (self._state !== 'loaded' || self._playLock) {\n self._queue.push({\n event: 'rate',\n action: function() {\n self.rate.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Set the group rate.\n if (typeof id === 'undefined') {\n self._rate = rate;\n }\n\n // Update one or all volumes.\n id = self._getSoundIds(id);\n for (var i=0; i Returns the first sound node's current seek position.\n * seek(id) -> Returns the sound id's current seek position.\n * seek(seek) -> Sets the seek position of the first sound node.\n * seek(seek, id) -> Sets the seek position of passed sound id.\n * @return {Howl/Number} Returns self or the current seek position.\n */\n seek: function() {\n var self = this;\n var args = arguments;\n var seek, id;\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // We will simply return the current position of the first node.\n if (self._sounds.length) {\n id = self._sounds[0]._id;\n }\n } else if (args.length === 1) {\n // First check if this is an ID, and if not, assume it is a new seek position.\n var ids = self._getSoundIds();\n var index = ids.indexOf(args[0]);\n if (index >= 0) {\n id = parseInt(args[0], 10);\n } else if (self._sounds.length) {\n id = self._sounds[0]._id;\n seek = parseFloat(args[0]);\n }\n } else if (args.length === 2) {\n seek = parseFloat(args[0]);\n id = parseInt(args[1], 10);\n }\n\n // If there is no ID, bail out.\n if (typeof id === 'undefined') {\n return 0;\n }\n\n // If the sound hasn't loaded, add it to the load queue to seek when capable.\n if (typeof seek === 'number' && (self._state !== 'loaded' || self._playLock)) {\n self._queue.push({\n event: 'seek',\n action: function() {\n self.seek.apply(self, args);\n }\n });\n\n return self;\n }\n\n // Get the sound.\n var sound = self._soundById(id);\n\n if (sound) {\n if (typeof seek === 'number' && seek >= 0) {\n // Pause the sound and update position for restarting playback.\n var playing = self.playing(id);\n if (playing) {\n self.pause(id, true);\n }\n\n // Move the position of the track and cancel timer.\n sound._seek = seek;\n sound._ended = false;\n self._clearTimer(id);\n\n // Update the seek position for HTML5 Audio.\n if (!self._webAudio && sound._node && !isNaN(sound._node.duration)) {\n sound._node.currentTime = seek;\n }\n\n // Seek and emit when ready.\n var seekAndEmit = function() {\n // Restart the playback if the sound was playing.\n if (playing) {\n self.play(id, true);\n }\n\n self._emit('seek', id);\n };\n\n // Wait for the play lock to be unset before emitting (HTML5 Audio).\n if (playing && !self._webAudio) {\n var emitSeek = function() {\n if (!self._playLock) {\n seekAndEmit();\n } else {\n setTimeout(emitSeek, 0);\n }\n };\n setTimeout(emitSeek, 0);\n } else {\n seekAndEmit();\n }\n } else {\n if (self._webAudio) {\n var realTime = self.playing(id) ? Howler.ctx.currentTime - sound._playStart : 0;\n var rateSeek = sound._rateSeek ? sound._rateSeek - sound._seek : 0;\n return sound._seek + (rateSeek + realTime * Math.abs(sound._rate));\n } else {\n return sound._node.currentTime;\n }\n }\n }\n\n return self;\n },\n\n /**\n * Check if a specific sound is currently playing or not (if id is provided), or check if at least one of the sounds in the group is playing or not.\n * @param {Number} id The sound id to check. If none is passed, the whole sound group is checked.\n * @return {Boolean} True if playing and false if not.\n */\n playing: function(id) {\n var self = this;\n\n // Check the passed sound ID (if any).\n if (typeof id === 'number') {\n var sound = self._soundById(id);\n return sound ? !sound._paused : false;\n }\n\n // Otherwise, loop through all sounds and check if any are playing.\n for (var i=0; i= 0) {\n Howler._howls.splice(index, 1);\n }\n\n // Delete this sound from the cache (if no other Howl is using it).\n var remCache = true;\n for (i=0; i= 0) {\n remCache = false;\n break;\n }\n }\n\n if (cache && remCache) {\n delete cache[self._src];\n }\n\n // Clear global errors.\n Howler.noAudio = false;\n\n // Clear out `self`.\n self._state = 'unloaded';\n self._sounds = [];\n self = null;\n\n return null;\n },\n\n /**\n * Listen to a custom event.\n * @param {String} event Event name.\n * @param {Function} fn Listener to call.\n * @param {Number} id (optional) Only listen to events for this sound.\n * @param {Number} once (INTERNAL) Marks event to fire only once.\n * @return {Howl}\n */\n on: function(event, fn, id, once) {\n var self = this;\n var events = self['_on' + event];\n\n if (typeof fn === 'function') {\n events.push(once ? {id: id, fn: fn, once: once} : {id: id, fn: fn});\n }\n\n return self;\n },\n\n /**\n * Remove a custom event. Call without parameters to remove all events.\n * @param {String} event Event name.\n * @param {Function} fn Listener to remove. Leave empty to remove all.\n * @param {Number} id (optional) Only remove events for this sound.\n * @return {Howl}\n */\n off: function(event, fn, id) {\n var self = this;\n var events = self['_on' + event];\n var i = 0;\n\n // Allow passing just an event and ID.\n if (typeof fn === 'number') {\n id = fn;\n fn = null;\n }\n\n if (fn || id) {\n // Loop through event store and remove the passed function.\n for (i=0; i=0; i--) {\n // Only fire the listener if the correct ID is used.\n if (!events[i].id || events[i].id === id || event === 'load') {\n setTimeout(function(fn) {\n fn.call(this, id, msg);\n }.bind(self, events[i].fn), 0);\n\n // If this event was setup with `once`, remove it.\n if (events[i].once) {\n self.off(event, events[i].fn, events[i].id);\n }\n }\n }\n\n // Pass the event type into load queue so that it can continue stepping.\n self._loadQueue(event);\n\n return self;\n },\n\n /**\n * Queue of actions initiated before the sound has loaded.\n * These will be called in sequence, with the next only firing\n * after the previous has finished executing (even if async like play).\n * @return {Howl}\n */\n _loadQueue: function(event) {\n var self = this;\n\n if (self._queue.length > 0) {\n var task = self._queue[0];\n\n // Remove this task if a matching event was passed.\n if (task.event === event) {\n self._queue.shift();\n self._loadQueue();\n }\n\n // Run the task if no event type is passed.\n if (!event) {\n task.action();\n }\n }\n\n return self;\n },\n\n /**\n * Fired when playback ends at the end of the duration.\n * @param {Sound} sound The sound object to work with.\n * @return {Howl}\n */\n _ended: function(sound) {\n var self = this;\n var sprite = sound._sprite;\n\n // If we are using IE and there was network latency we may be clipping\n // audio before it completes playing. Lets check the node to make sure it\n // believes it has completed, before ending the playback.\n if (!self._webAudio && sound._node && !sound._node.paused && !sound._node.ended && sound._node.currentTime < sound._stop) {\n setTimeout(self._ended.bind(self, sound), 100);\n return self;\n }\n\n // Should this sound loop?\n var loop = !!(sound._loop || self._sprite[sprite][2]);\n\n // Fire the ended event.\n self._emit('end', sound._id);\n\n // Restart the playback for HTML5 Audio loop.\n if (!self._webAudio && loop) {\n self.stop(sound._id, true).play(sound._id);\n }\n\n // Restart this timer if on a Web Audio loop.\n if (self._webAudio && loop) {\n self._emit('play', sound._id);\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n sound._playStart = Howler.ctx.currentTime;\n\n var timeout = ((sound._stop - sound._start) * 1000) / Math.abs(sound._rate);\n self._endTimers[sound._id] = setTimeout(self._ended.bind(self, sound), timeout);\n }\n\n // Mark the node as paused.\n if (self._webAudio && !loop) {\n sound._paused = true;\n sound._ended = true;\n sound._seek = sound._start || 0;\n sound._rateSeek = 0;\n self._clearTimer(sound._id);\n\n // Clean up the buffer source.\n self._cleanBuffer(sound._node);\n\n // Attempt to auto-suspend AudioContext if no sounds are still playing.\n Howler._autoSuspend();\n }\n\n // When using a sprite, end the track.\n if (!self._webAudio && !loop) {\n self.stop(sound._id, true);\n }\n\n return self;\n },\n\n /**\n * Clear the end timer for a sound playback.\n * @param {Number} id The sound ID.\n * @return {Howl}\n */\n _clearTimer: function(id) {\n var self = this;\n\n if (self._endTimers[id]) {\n // Clear the timeout or remove the ended listener.\n if (typeof self._endTimers[id] !== 'function') {\n clearTimeout(self._endTimers[id]);\n } else {\n var sound = self._soundById(id);\n if (sound && sound._node) {\n sound._node.removeEventListener('ended', self._endTimers[id], false);\n }\n }\n\n delete self._endTimers[id];\n }\n\n return self;\n },\n\n /**\n * Return the sound identified by this ID, or return null.\n * @param {Number} id Sound ID\n * @return {Object} Sound object or null.\n */\n _soundById: function(id) {\n var self = this;\n\n // Loop through all sounds and find the one with this ID.\n for (var i=0; i=0; i--) {\n if (cnt <= limit) {\n return;\n }\n\n if (self._sounds[i]._ended) {\n // Disconnect the audio source when using Web Audio.\n if (self._webAudio && self._sounds[i]._node) {\n self._sounds[i]._node.disconnect(0);\n }\n\n // Remove sounds until we have the pool size.\n self._sounds.splice(i, 1);\n cnt--;\n }\n }\n },\n\n /**\n * Get all ID's from the sounds pool.\n * @param {Number} id Only return one ID if one is passed.\n * @return {Array} Array of IDs.\n */\n _getSoundIds: function(id) {\n var self = this;\n\n if (typeof id === 'undefined') {\n var ids = [];\n for (var i=0; i= 0;\n\n if (!node.bufferSource) {\n return self;\n }\n\n if (Howler._scratchBuffer && node.bufferSource) {\n node.bufferSource.onended = null;\n node.bufferSource.disconnect(0);\n if (isIOS) {\n try { node.bufferSource.buffer = Howler._scratchBuffer; } catch(e) {}\n }\n }\n node.bufferSource = null;\n\n return self;\n },\n\n /**\n * Set the source to a 0-second silence to stop any downloading (except in IE).\n * @param {Object} node Audio node to clear.\n */\n _clearSound: function(node) {\n var checkIE = /MSIE |Trident\\//.test(Howler._navigator && Howler._navigator.userAgent);\n if (!checkIE) {\n node.src = 'data:audio/wav;base64,UklGRigAAABXQVZFZm10IBIAAAABAAEARKwAAIhYAQACABAAAABkYXRhAgAAAAEA';\n }\n }\n };\n\n /** Single Sound Methods **/\n /***************************************************************************/\n\n /**\n * Setup the sound object, which each node attached to a Howl group is contained in.\n * @param {Object} howl The Howl parent group.\n */\n var Sound = function(howl) {\n this._parent = howl;\n this.init();\n };\n Sound.prototype = {\n /**\n * Initialize a new Sound object.\n * @return {Sound}\n */\n init: function() {\n var self = this;\n var parent = self._parent;\n\n // Setup the default parameters.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a unique ID for this sound.\n self._id = ++Howler._counter;\n\n // Add itself to the parent's pool.\n parent._sounds.push(self);\n\n // Create the new node.\n self.create();\n\n return self;\n },\n\n /**\n * Create and setup a new sound object, whether HTML5 Audio or Web Audio.\n * @return {Sound}\n */\n create: function() {\n var self = this;\n var parent = self._parent;\n var volume = (Howler._muted || self._muted || self._parent._muted) ? 0 : self._volume;\n\n if (parent._webAudio) {\n // Create the gain node for controlling volume (the source will connect to this).\n self._node = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n self._node.gain.setValueAtTime(volume, Howler.ctx.currentTime);\n self._node.paused = true;\n self._node.connect(Howler.masterGain);\n } else if (!Howler.noAudio) {\n // Get an unlocked Audio object from the pool.\n self._node = Howler._obtainHtml5Audio();\n\n // Listen for errors (http://dev.w3.org/html5/spec-author-view/spec.html#mediaerror).\n self._errorFn = self._errorListener.bind(self);\n self._node.addEventListener('error', self._errorFn, false);\n\n // Listen for 'canplaythrough' event to let us know the sound is ready.\n self._loadFn = self._loadListener.bind(self);\n self._node.addEventListener(Howler._canPlayEvent, self._loadFn, false);\n\n // Listen for the 'ended' event on the sound to account for edge-case where\n // a finite sound has a duration of Infinity.\n self._endFn = self._endListener.bind(self);\n self._node.addEventListener('ended', self._endFn, false);\n\n // Setup the new audio node.\n self._node.src = parent._src;\n self._node.preload = parent._preload === true ? 'auto' : parent._preload;\n self._node.volume = volume * Howler.volume();\n\n // Begin loading the source.\n self._node.load();\n }\n\n return self;\n },\n\n /**\n * Reset the parameters of this sound to the original state (for recycle).\n * @return {Sound}\n */\n reset: function() {\n var self = this;\n var parent = self._parent;\n\n // Reset all of the parameters of this sound.\n self._muted = parent._muted;\n self._loop = parent._loop;\n self._volume = parent._volume;\n self._rate = parent._rate;\n self._seek = 0;\n self._rateSeek = 0;\n self._paused = true;\n self._ended = true;\n self._sprite = '__default';\n\n // Generate a new ID so that it isn't confused with the previous sound.\n self._id = ++Howler._counter;\n\n return self;\n },\n\n /**\n * HTML5 Audio error listener callback.\n */\n _errorListener: function() {\n var self = this;\n\n // Fire an error event and pass back the code.\n self._parent._emit('loaderror', self._id, self._node.error ? self._node.error.code : 0);\n\n // Clear the event listener.\n self._node.removeEventListener('error', self._errorFn, false);\n },\n\n /**\n * HTML5 Audio canplaythrough listener callback.\n */\n _loadListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Setup a sprite if none is defined.\n if (Object.keys(parent._sprite).length === 0) {\n parent._sprite = {__default: [0, parent._duration * 1000]};\n }\n\n if (parent._state !== 'loaded') {\n parent._state = 'loaded';\n parent._emit('load');\n parent._loadQueue();\n }\n\n // Clear the event listener.\n self._node.removeEventListener(Howler._canPlayEvent, self._loadFn, false);\n },\n\n /**\n * HTML5 Audio ended listener callback.\n */\n _endListener: function() {\n var self = this;\n var parent = self._parent;\n\n // Only handle the `ended`` event if the duration is Infinity.\n if (parent._duration === Infinity) {\n // Update the parent duration to match the real audio duration.\n // Round up the duration to account for the lower precision in HTML5 Audio.\n parent._duration = Math.ceil(self._node.duration * 10) / 10;\n\n // Update the sprite that corresponds to the real duration.\n if (parent._sprite.__default[1] === Infinity) {\n parent._sprite.__default[1] = parent._duration * 1000;\n }\n\n // Run the regular ended method.\n parent._ended(self);\n }\n\n // Clear the event listener since the duration is now correct.\n self._node.removeEventListener('ended', self._endFn, false);\n }\n };\n\n /** Helper Methods **/\n /***************************************************************************/\n\n var cache = {};\n\n /**\n * Buffer a sound from URL, Data URI or cache and decode to audio source (Web Audio API).\n * @param {Howl} self\n */\n var loadBuffer = function(self) {\n var url = self._src;\n\n // Check if the buffer has already been cached and use it instead.\n if (cache[url]) {\n // Set the duration from the cache.\n self._duration = cache[url].duration;\n\n // Load the sound into this Howl.\n loadSound(self);\n\n return;\n }\n\n if (/^data:[^;]+;base64,/.test(url)) {\n // Decode the base64 data URI without XHR, since some browsers don't support it.\n var data = atob(url.split(',')[1]);\n var dataView = new Uint8Array(data.length);\n for (var i=0; i 0) {\n cache[self._src] = buffer;\n loadSound(self, buffer);\n } else {\n error();\n }\n };\n\n // Decode the buffer into an audio source.\n if (typeof Promise !== 'undefined' && Howler.ctx.decodeAudioData.length === 1) {\n Howler.ctx.decodeAudioData(arraybuffer).then(success).catch(error);\n } else {\n Howler.ctx.decodeAudioData(arraybuffer, success, error);\n }\n }\n\n /**\n * Sound is now loaded, so finish setting everything up and fire the loaded event.\n * @param {Howl} self\n * @param {Object} buffer The decoded buffer sound source.\n */\n var loadSound = function(self, buffer) {\n // Set the duration.\n if (buffer && !self._duration) {\n self._duration = buffer.duration;\n }\n\n // Setup a sprite if none is defined.\n if (Object.keys(self._sprite).length === 0) {\n self._sprite = {__default: [0, self._duration * 1000]};\n }\n\n // Fire the loaded event.\n if (self._state !== 'loaded') {\n self._state = 'loaded';\n self._emit('load');\n self._loadQueue();\n }\n };\n\n /**\n * Setup the audio context when available, or switch to HTML5 Audio mode.\n */\n var setupAudioContext = function() {\n // If we have already detected that Web Audio isn't supported, don't run this step again.\n if (!Howler.usingWebAudio) {\n return;\n }\n\n // Check if we are using Web Audio and setup the AudioContext if we are.\n try {\n if (typeof AudioContext !== 'undefined') {\n Howler.ctx = new AudioContext();\n } else if (typeof webkitAudioContext !== 'undefined') {\n Howler.ctx = new webkitAudioContext();\n } else {\n Howler.usingWebAudio = false;\n }\n } catch(e) {\n Howler.usingWebAudio = false;\n }\n\n // If the audio context creation still failed, set using web audio to false.\n if (!Howler.ctx) {\n Howler.usingWebAudio = false;\n }\n\n // Check if a webview is being used on iOS8 or earlier (rather than the browser).\n // If it is, disable Web Audio as it causes crashing.\n var iOS = (/iP(hone|od|ad)/.test(Howler._navigator && Howler._navigator.platform));\n var appVersion = Howler._navigator && Howler._navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n var version = appVersion ? parseInt(appVersion[1], 10) : null;\n if (iOS && version && version < 9) {\n var safari = /safari/.test(Howler._navigator && Howler._navigator.userAgent.toLowerCase());\n if (Howler._navigator && !safari) {\n Howler.usingWebAudio = false;\n }\n }\n\n // Create and expose the master GainNode when using Web Audio (useful for plugins or advanced usage).\n if (Howler.usingWebAudio) {\n Howler.masterGain = (typeof Howler.ctx.createGain === 'undefined') ? Howler.ctx.createGainNode() : Howler.ctx.createGain();\n Howler.masterGain.gain.setValueAtTime(Howler._muted ? 0 : Howler._volume, Howler.ctx.currentTime);\n Howler.masterGain.connect(Howler.ctx.destination);\n }\n\n // Re-run the setup on Howler.\n Howler._setup();\n };\n\n // Add support for AMD (Asynchronous Module Definition) libraries such as require.js.\n if (typeof define === 'function' && define.amd) {\n define([], function() {\n return {\n Howler: Howler,\n Howl: Howl\n };\n });\n }\n\n // Add support for CommonJS libraries such as browserify.\n if (typeof exports !== 'undefined') {\n exports.Howler = Howler;\n exports.Howl = Howl;\n }\n\n // Add to global in Node.js (for testing, etc).\n if (typeof global !== 'undefined') {\n global.HowlerGlobal = HowlerGlobal;\n global.Howler = Howler;\n global.Howl = Howl;\n global.Sound = Sound;\n } else if (typeof window !== 'undefined') { // Define globally in case AMD is not available or unused.\n window.HowlerGlobal = HowlerGlobal;\n window.Howler = Howler;\n window.Howl = Howl;\n window.Sound = Sound;\n }\n})();\n\n\n/*!\n * Spatial Plugin - Adds support for stereo and 3D audio where Web Audio is supported.\n * \n * howler.js v2.2.4\n * howlerjs.com\n *\n * (c) 2013-2020, James Simpson of GoldFire Studios\n * goldfirestudios.com\n *\n * MIT License\n */\n\n(function() {\n\n 'use strict';\n\n // Setup default properties.\n HowlerGlobal.prototype._pos = [0, 0, 0];\n HowlerGlobal.prototype._orientation = [0, 0, -1, 0, 1, 0];\n\n /** Global Methods **/\n /***************************************************************************/\n\n /**\n * Helper method to update the stereo panning position of all current Howls.\n * Future Howls will not use this value unless explicitly set.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @return {Howler/Number} Self or current stereo panning value.\n */\n HowlerGlobal.prototype.stereo = function(pan) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Loop through all Howls and update their stereo panning.\n for (var i=self._howls.length-1; i>=0; i--) {\n self._howls[i].stereo(pan);\n }\n\n return self;\n };\n\n /**\n * Get/set the position of the listener in 3D cartesian space. Sounds using\n * 3D position will be relative to the listener's position.\n * @param {Number} x The x-position of the listener.\n * @param {Number} y The y-position of the listener.\n * @param {Number} z The z-position of the listener.\n * @return {Howler/Array} Self or current listener position.\n */\n HowlerGlobal.prototype.pos = function(x, y, z) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n y = (typeof y !== 'number') ? self._pos[1] : y;\n z = (typeof z !== 'number') ? self._pos[2] : z;\n\n if (typeof x === 'number') {\n self._pos = [x, y, z];\n\n if (typeof self.ctx.listener.positionX !== 'undefined') {\n self.ctx.listener.positionX.setTargetAtTime(self._pos[0], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionY.setTargetAtTime(self._pos[1], Howler.ctx.currentTime, 0.1);\n self.ctx.listener.positionZ.setTargetAtTime(self._pos[2], Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setPosition(self._pos[0], self._pos[1], self._pos[2]);\n }\n } else {\n return self._pos;\n }\n\n return self;\n };\n\n /**\n * Get/set the direction the listener is pointing in the 3D cartesian space.\n * A front and up vector must be provided. The front is the direction the\n * face of the listener is pointing, and up is the direction the top of the\n * listener is pointing. Thus, these values are expected to be at right angles\n * from each other.\n * @param {Number} x The x-orientation of the listener.\n * @param {Number} y The y-orientation of the listener.\n * @param {Number} z The z-orientation of the listener.\n * @param {Number} xUp The x-orientation of the top of the listener.\n * @param {Number} yUp The y-orientation of the top of the listener.\n * @param {Number} zUp The z-orientation of the top of the listener.\n * @return {Howler/Array} Returns self or the current orientation vectors.\n */\n HowlerGlobal.prototype.orientation = function(x, y, z, xUp, yUp, zUp) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self.ctx || !self.ctx.listener) {\n return self;\n }\n\n // Set the defaults for optional 'y' & 'z'.\n var or = self._orientation;\n y = (typeof y !== 'number') ? or[1] : y;\n z = (typeof z !== 'number') ? or[2] : z;\n xUp = (typeof xUp !== 'number') ? or[3] : xUp;\n yUp = (typeof yUp !== 'number') ? or[4] : yUp;\n zUp = (typeof zUp !== 'number') ? or[5] : zUp;\n\n if (typeof x === 'number') {\n self._orientation = [x, y, z, xUp, yUp, zUp];\n\n if (typeof self.ctx.listener.forwardX !== 'undefined') {\n self.ctx.listener.forwardX.setTargetAtTime(x, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardY.setTargetAtTime(y, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.forwardZ.setTargetAtTime(z, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upX.setTargetAtTime(xUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upY.setTargetAtTime(yUp, Howler.ctx.currentTime, 0.1);\n self.ctx.listener.upZ.setTargetAtTime(zUp, Howler.ctx.currentTime, 0.1);\n } else {\n self.ctx.listener.setOrientation(x, y, z, xUp, yUp, zUp);\n }\n } else {\n return or;\n }\n\n return self;\n };\n\n /** Group Methods **/\n /***************************************************************************/\n\n /**\n * Add new properties to the core init.\n * @param {Function} _super Core init method.\n * @return {Howl}\n */\n Howl.prototype.init = (function(_super) {\n return function(o) {\n var self = this;\n\n // Setup user-defined default properties.\n self._orientation = o.orientation || [1, 0, 0];\n self._stereo = o.stereo || null;\n self._pos = o.pos || null;\n self._pannerAttr = {\n coneInnerAngle: typeof o.coneInnerAngle !== 'undefined' ? o.coneInnerAngle : 360,\n coneOuterAngle: typeof o.coneOuterAngle !== 'undefined' ? o.coneOuterAngle : 360,\n coneOuterGain: typeof o.coneOuterGain !== 'undefined' ? o.coneOuterGain : 0,\n distanceModel: typeof o.distanceModel !== 'undefined' ? o.distanceModel : 'inverse',\n maxDistance: typeof o.maxDistance !== 'undefined' ? o.maxDistance : 10000,\n panningModel: typeof o.panningModel !== 'undefined' ? o.panningModel : 'HRTF',\n refDistance: typeof o.refDistance !== 'undefined' ? o.refDistance : 1,\n rolloffFactor: typeof o.rolloffFactor !== 'undefined' ? o.rolloffFactor : 1\n };\n\n // Setup event listeners.\n self._onstereo = o.onstereo ? [{fn: o.onstereo}] : [];\n self._onpos = o.onpos ? [{fn: o.onpos}] : [];\n self._onorientation = o.onorientation ? [{fn: o.onorientation}] : [];\n\n // Complete initilization with howler.js core's init function.\n return _super.call(this, o);\n };\n })(Howl.prototype.init);\n\n /**\n * Get/set the stereo panning of the audio source for this sound or all in the group.\n * @param {Number} pan A value of -1.0 is all the way left and 1.0 is all the way right.\n * @param {Number} id (optional) The sound ID. If none is passed, all in group will be updated.\n * @return {Howl/Number} Returns self or the current stereo panning value.\n */\n Howl.prototype.stereo = function(pan, id) {\n var self = this;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // If the sound hasn't loaded, add it to the load queue to change stereo pan when capable.\n if (self._state !== 'loaded') {\n self._queue.push({\n event: 'stereo',\n action: function() {\n self.stereo(pan, id);\n }\n });\n\n return self;\n }\n\n // Check for PannerStereoNode support and fallback to PannerNode if it doesn't exist.\n var pannerType = (typeof Howler.ctx.createStereoPanner === 'undefined') ? 'spatial' : 'stereo';\n\n // Setup the group's stereo panning if no ID is passed.\n if (typeof id === 'undefined') {\n // Return the group's stereo panning if no parameters are passed.\n if (typeof pan === 'number') {\n self._stereo = pan;\n self._pos = [pan, 0, 0];\n } else {\n return self._stereo;\n }\n }\n\n // Change the streo panning of one or all sounds in group.\n var ids = self._getSoundIds(id);\n for (var i=0; i Returns the group's values.\n * pannerAttr(id) -> Returns the sound id's values.\n * pannerAttr(o) -> Set's the values of all sounds in this Howl group.\n * pannerAttr(o, id) -> Set's the values of passed sound id.\n *\n * Attributes:\n * coneInnerAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * inside of which there will be no volume reduction.\n * coneOuterAngle - (360 by default) A parameter for directional audio sources, this is an angle, in degrees,\n * outside of which the volume will be reduced to a constant value of `coneOuterGain`.\n * coneOuterGain - (0 by default) A parameter for directional audio sources, this is the gain outside of the\n * `coneOuterAngle`. It is a linear value in the range `[0, 1]`.\n * distanceModel - ('inverse' by default) Determines algorithm used to reduce volume as audio moves away from\n * listener. Can be `linear`, `inverse` or `exponential.\n * maxDistance - (10000 by default) The maximum distance between source and listener, after which the volume\n * will not be reduced any further.\n * refDistance - (1 by default) A reference distance for reducing volume as source moves further from the listener.\n * This is simply a variable of the distance model and has a different effect depending on which model\n * is used and the scale of your coordinates. Generally, volume will be equal to 1 at this distance.\n * rolloffFactor - (1 by default) How quickly the volume reduces as source moves from listener. This is simply a\n * variable of the distance model and can be in the range of `[0, 1]` with `linear` and `[0, ∞]`\n * with `inverse` and `exponential`.\n * panningModel - ('HRTF' by default) Determines which spatialization algorithm is used to position audio.\n * Can be `HRTF` or `equalpower`.\n *\n * @return {Howl/Object} Returns self or current panner attributes.\n */\n Howl.prototype.pannerAttr = function() {\n var self = this;\n var args = arguments;\n var o, id, sound;\n\n // Stop right here if not using Web Audio.\n if (!self._webAudio) {\n return self;\n }\n\n // Determine the values based on arguments.\n if (args.length === 0) {\n // Return the group's panner attribute values.\n return self._pannerAttr;\n } else if (args.length === 1) {\n if (typeof args[0] === 'object') {\n o = args[0];\n\n // Set the grou's panner attribute values.\n if (typeof id === 'undefined') {\n if (!o.pannerAttr) {\n o.pannerAttr = {\n coneInnerAngle: o.coneInnerAngle,\n coneOuterAngle: o.coneOuterAngle,\n coneOuterGain: o.coneOuterGain,\n distanceModel: o.distanceModel,\n maxDistance: o.maxDistance,\n refDistance: o.refDistance,\n rolloffFactor: o.rolloffFactor,\n panningModel: o.panningModel\n };\n }\n\n self._pannerAttr = {\n coneInnerAngle: typeof o.pannerAttr.coneInnerAngle !== 'undefined' ? o.pannerAttr.coneInnerAngle : self._coneInnerAngle,\n coneOuterAngle: typeof o.pannerAttr.coneOuterAngle !== 'undefined' ? o.pannerAttr.coneOuterAngle : self._coneOuterAngle,\n coneOuterGain: typeof o.pannerAttr.coneOuterGain !== 'undefined' ? o.pannerAttr.coneOuterGain : self._coneOuterGain,\n distanceModel: typeof o.pannerAttr.distanceModel !== 'undefined' ? o.pannerAttr.distanceModel : self._distanceModel,\n maxDistance: typeof o.pannerAttr.maxDistance !== 'undefined' ? o.pannerAttr.maxDistance : self._maxDistance,\n refDistance: typeof o.pannerAttr.refDistance !== 'undefined' ? o.pannerAttr.refDistance : self._refDistance,\n rolloffFactor: typeof o.pannerAttr.rolloffFactor !== 'undefined' ? o.pannerAttr.rolloffFactor : self._rolloffFactor,\n panningModel: typeof o.pannerAttr.panningModel !== 'undefined' ? o.pannerAttr.panningModel : self._panningModel\n };\n }\n } else {\n // Return this sound's panner attribute values.\n sound = self._soundById(parseInt(args[0], 10));\n return sound ? sound._pannerAttr : self._pannerAttr;\n }\n } else if (args.length === 2) {\n o = args[0];\n id = parseInt(args[1], 10);\n }\n\n // Update the values of the specified sounds.\n var ids = self._getSoundIds(id);\n for (var i=0; i= 0;\n\t\t_browser.ie = /*@cc_on!@*/false;\n\t\t_browser.safari = Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0;\n\t\t_browser.supported = (_browser.chrome || _browser.ff || _browser.opera);\n\n\t\tvar _queue = [];\n\t\t_readyCb = function () {\n\t\t};\n\t\t_ready = _stop = false;\n\t\t/**\n\t\t * Initialize favico\n\t\t */\n\t\tvar init = function () {\n\t\t\t//merge initial options\n\t\t\t_opt = merge(_def, opt);\n\t\t\t_opt.bgColor = hexToRgb(_opt.bgColor);\n\t\t\t_opt.textColor = hexToRgb(_opt.textColor);\n\t\t\t_opt.position = _opt.position.toLowerCase();\n\t\t\t_opt.animation = (animation.types['' + _opt.animation]) ? _opt.animation : _def.animation;\n\n\t\t\t_doc = _opt.win.document;\n\n\t\t\tvar isUp = _opt.position.indexOf('up') > -1;\n\t\t\tvar isLeft = _opt.position.indexOf('left') > -1;\n\n\t\t\t//transform the animations\n\t\t\tif (isUp || isLeft) {\n\t\t\t\tfor (var a in animation.types) {\n\t\t\t\t\tfor (var i = 0; i < animation.types[a].length; i++) {\n\t\t\t\t\t\tvar step = animation.types[a][i];\n\n\t\t\t\t\t\tif (isUp) {\n\t\t\t\t\t\t\tif (step.y < 0.6) {\n\t\t\t\t\t\t\t\tstep.y = step.y - 0.4;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstep.y = step.y - 2 * step.y + (1 - step.w);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (isLeft) {\n\t\t\t\t\t\t\tif (step.x < 0.6) {\n\t\t\t\t\t\t\t\tstep.x = step.x - 0.4;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tstep.x = step.x - 2 * step.x + (1 - step.h);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tanimation.types[a][i] = step;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t_opt.type = (type['' + _opt.type]) ? _opt.type : _def.type;\n\n\t\t\t_orig = link. getIcons();\n\t\t\t//create temp canvas\n\t\t\t_canvas = document.createElement('canvas');\n\t\t\t//create temp image\n\t\t\t_img = document.createElement('img');\n\t\t\tvar lastIcon = _orig[_orig.length - 1];\n\t\t\tif (lastIcon.hasAttribute('href')) {\n\t\t\t\t_img.setAttribute('crossOrigin', 'anonymous');\n\t\t\t\t//get width/height\n\t\t\t\t_img.onload = function () {\n\t\t\t\t\t_h = (_img.height > 0) ? _img.height : 32;\n\t\t\t\t\t_w = (_img.width > 0) ? _img.width : 32;\n\t\t\t\t\t_canvas.height = _h;\n\t\t\t\t\t_canvas.width = _w;\n\t\t\t\t\t_context = _canvas.getContext('2d');\n\t\t\t\t\ticon.ready();\n\t\t\t\t};\n\t\t\t\t_img.setAttribute('src', lastIcon.getAttribute('href'));\n\t\t\t} else {\n\t\t\t\t_h = 32;\n\t\t\t\t_w = 32;\n\t\t\t\t_img.height = _h;\n\t\t\t\t_img.width = _w;\n\t\t\t\t_canvas.height = _h;\n\t\t\t\t_canvas.width = _w;\n\t\t\t\t_context = _canvas.getContext('2d');\n\t\t\t\ticon.ready();\n\t\t\t}\n\n\t\t};\n\t\t/**\n\t\t * Icon namespace\n\t\t */\n\t\tvar icon = {};\n\t\t/**\n\t\t * Icon is ready (reset icon) and start animation (if ther is any)\n\t\t */\n\t\ticon.ready = function () {\n\t\t\t_ready = true;\n\t\t\ticon.reset();\n\t\t\t_readyCb();\n\t\t};\n\t\t/**\n\t\t * Reset icon to default state\n\t\t */\n\t\ticon.reset = function () {\n\t\t\t//reset\n\t\t\tif (!_ready) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\t_queue = [];\n\t\t\t_lastBadge = false;\n\t\t\t_running = false;\n\t\t\t_context.clearRect(0, 0, _w, _h);\n\t\t\t_context.drawImage(_img, 0, 0, _w, _h);\n\t\t\t//_stop=true;\n\t\t\tlink.setIcon(_canvas);\n\t\t\t//webcam('stop');\n\t\t\t//video('stop');\n\t\t\twindow.clearTimeout(_animTimeout);\n\t\t\twindow.clearTimeout(_drawTimeout);\n\t\t};\n\t\t/**\n\t\t * Start animation\n\t\t */\n\t\ticon.start = function () {\n\t\t\tif (!_ready || _running) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar finished = function () {\n\t\t\t\t_lastBadge = _queue[0];\n\t\t\t\t_running = false;\n\t\t\t\tif (_queue.length > 0) {\n\t\t\t\t\t_queue.shift();\n\t\t\t\t\ticon.start();\n\t\t\t\t} else {\n\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (_queue.length > 0) {\n\t\t\t\t_running = true;\n\t\t\t\tvar run = function () {\n\t\t\t\t\t// apply options for this animation\n\t\t\t\t\t['type', 'animation', 'bgColor', 'textColor', 'fontFamily', 'fontStyle'].forEach(function (a) {\n\t\t\t\t\t\tif (a in _queue[0].options) {\n\t\t\t\t\t\t\t_opt[a] = _queue[0].options[a];\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tanimation.run(_queue[0].options, function () {\n\t\t\t\t\t\tfinished();\n\t\t\t\t\t}, false);\n\t\t\t\t};\n\t\t\t\tif (_lastBadge) {\n\t\t\t\t\tanimation.run(_lastBadge.options, function () {\n\t\t\t\t\t\trun();\n\t\t\t\t\t}, true);\n\t\t\t\t} else {\n\t\t\t\t\trun();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Badge types\n\t\t */\n\t\tvar type = {};\n\t\tvar options = function (opt) {\n\t\t\topt.n = ((typeof opt.n) === 'number') ? Math.abs(opt.n | 0) : opt.n;\n\t\t\topt.x = _w * opt.x;\n\t\t\topt.y = _h * opt.y;\n\t\t\topt.w = _w * opt.w;\n\t\t\topt.h = _h * opt.h;\n\t\t\topt.len = (\"\" + opt.n).length;\n\t\t\treturn opt;\n\t\t};\n\t\t/**\n\t\t * Generate circle\n\t\t * @param {Object} opt Badge options\n\t\t */\n\t\ttype.circle = function (opt) {\n\t\t\topt = options(opt);\n\t\t\tvar more = false;\n\t\t\tif (opt.len === 2) {\n\t\t\t\topt.x = opt.x - opt.w * 0.4;\n\t\t\t\topt.w = opt.w * 1.4;\n\t\t\t\tmore = true;\n\t\t\t} else if (opt.len >= 3) {\n\t\t\t\topt.x = opt.x - opt.w * 0.65;\n\t\t\t\topt.w = opt.w * 1.65;\n\t\t\t\tmore = true;\n\t\t\t}\n\t\t\t_context.clearRect(0, 0, _w, _h);\n\t\t\t_context.drawImage(_img, 0, 0, _w, _h);\n\t\t\t_context.beginPath();\n\t\t\t_context.font = _opt.fontStyle + \" \" + Math.floor(opt.h * (opt.n > 99 ? 0.85 : 1)) + \"px \" + _opt.fontFamily;\n\t\t\t_context.textAlign = 'center';\n\t\t\tif (more) {\n\t\t\t\t_context.moveTo(opt.x + opt.w / 2, opt.y);\n\t\t\t\t_context.lineTo(opt.x + opt.w - opt.h / 2, opt.y);\n\t\t\t\t_context.quadraticCurveTo(opt.x + opt.w, opt.y, opt.x + opt.w, opt.y + opt.h / 2);\n\t\t\t\t_context.lineTo(opt.x + opt.w, opt.y + opt.h - opt.h / 2);\n\t\t\t\t_context.quadraticCurveTo(opt.x + opt.w, opt.y + opt.h, opt.x + opt.w - opt.h / 2, opt.y + opt.h);\n\t\t\t\t_context.lineTo(opt.x + opt.h / 2, opt.y + opt.h);\n\t\t\t\t_context.quadraticCurveTo(opt.x, opt.y + opt.h, opt.x, opt.y + opt.h - opt.h / 2);\n\t\t\t\t_context.lineTo(opt.x, opt.y + opt.h / 2);\n\t\t\t\t_context.quadraticCurveTo(opt.x, opt.y, opt.x + opt.h / 2, opt.y);\n\t\t\t} else {\n\t\t\t\t_context.arc(opt.x + opt.w / 2, opt.y + opt.h / 2, opt.h / 2, 0, 2 * Math.PI);\n\t\t\t}\n\t\t\t_context.fillStyle = 'rgba(' + _opt.bgColor.r + ',' + _opt.bgColor.g + ',' + _opt.bgColor.b + ',' + opt.o + ')';\n\t\t\t_context.fill();\n\t\t\t_context.closePath();\n\t\t\t_context.beginPath();\n\t\t\t_context.stroke();\n\t\t\t_context.fillStyle = 'rgba(' + _opt.textColor.r + ',' + _opt.textColor.g + ',' + _opt.textColor.b + ',' + opt.o + ')';\n\t\t\t//_context.fillText((more) ? '9+' : opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));\n\t\t\tif ((typeof opt.n) === 'number' && opt.n > 999) {\n\t\t\t\t_context.fillText(((opt.n > 9999) ? 9 : Math.floor(opt.n / 1000)) + 'k+', Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));\n\t\t\t} else {\n\t\t\t\t_context.fillText(opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));\n\t\t\t}\n\t\t\t_context.closePath();\n\t\t};\n\t\t/**\n\t\t * Generate rectangle\n\t\t * @param {Object} opt Badge options\n\t\t */\n\t\ttype.rectangle = function (opt) {\n\t\t\topt = options(opt);\n\t\t\tvar more = false;\n\t\t\tif (opt.len === 2) {\n\t\t\t\topt.x = opt.x - opt.w * 0.4;\n\t\t\t\topt.w = opt.w * 1.4;\n\t\t\t\tmore = true;\n\t\t\t} else if (opt.len >= 3) {\n\t\t\t\topt.x = opt.x - opt.w * 0.65;\n\t\t\t\topt.w = opt.w * 1.65;\n\t\t\t\tmore = true;\n\t\t\t}\n\t\t\t_context.clearRect(0, 0, _w, _h);\n\t\t\t_context.drawImage(_img, 0, 0, _w, _h);\n\t\t\t_context.beginPath();\n\t\t\t_context.font = _opt.fontStyle + \" \" + Math.floor(opt.h * (opt.n > 99 ? 0.9 : 1)) + \"px \" + _opt.fontFamily;\n\t\t\t_context.textAlign = 'center';\n\t\t\t_context.fillStyle = 'rgba(' + _opt.bgColor.r + ',' + _opt.bgColor.g + ',' + _opt.bgColor.b + ',' + opt.o + ')';\n\t\t\t_context.fillRect(opt.x, opt.y, opt.w, opt.h);\n\t\t\t_context.fillStyle = 'rgba(' + _opt.textColor.r + ',' + _opt.textColor.g + ',' + _opt.textColor.b + ',' + opt.o + ')';\n\t\t\t//_context.fillText((more) ? '9+' : opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));\n\t\t\tif ((typeof opt.n) === 'number' && opt.n > 999) {\n\t\t\t\t_context.fillText(((opt.n > 9999) ? 9 : Math.floor(opt.n / 1000)) + 'k+', Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.2));\n\t\t\t} else {\n\t\t\t\t_context.fillText(opt.n, Math.floor(opt.x + opt.w / 2), Math.floor(opt.y + opt.h - opt.h * 0.15));\n\t\t\t}\n\t\t\t_context.closePath();\n\t\t};\n\n\t\t/**\n\t\t * Set badge\n\t\t */\n\t\tvar badge = function (number, opts) {\n\t\t\topts = ((typeof opts) === 'string' ? {\n\t\t\t\tanimation: opts\n\t\t\t} : opts) || {};\n\t\t\t_readyCb = function () {\n\t\t\t\ttry {\n\t\t\t\t\tif (typeof (number) === 'number' ? (number > 0) : (number !== '')) {\n\t\t\t\t\t\tvar q = {\n\t\t\t\t\t\t\ttype: 'badge',\n\t\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\t\tn: number\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif ('animation' in opts && animation.types['' + opts.animation]) {\n\t\t\t\t\t\t\tq.options.animation = '' + opts.animation;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ('type' in opts && type['' + opts.type]) {\n\t\t\t\t\t\t\tq.options.type = '' + opts.type;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t['bgColor', 'textColor'].forEach(function (o) {\n\t\t\t\t\t\t\tif (o in opts) {\n\t\t\t\t\t\t\t\tq.options[o] = hexToRgb(opts[o]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t['fontStyle', 'fontFamily'].forEach(function (o) {\n\t\t\t\t\t\t\tif (o in opts) {\n\t\t\t\t\t\t\t\tq.options[o] = opts[o];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t_queue.push(q);\n\t\t\t\t\t\tif (_queue.length > 100) {\n\t\t\t\t\t\t\tthrow new Error('Too many badges requests in queue.');\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticon.start();\n\t\t\t\t\t} else {\n\t\t\t\t\t\ticon.reset();\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow new Error('Error setting badge. Message: ' + e.message);\n\t\t\t\t}\n\t\t\t};\n\t\t\tif (_ready) {\n\t\t\t\t_readyCb();\n\t\t\t}\n\t\t};\n\n\t\tvar setOpt = function (key, value) {\n\t\t\tvar opts = key;\n\t\t\tif (!(value == null && Object.prototype.toString.call(key) == '[object Object]')) {\n\t\t\t\topts = {};\n\t\t\t\topts[key] = value;\n\t\t\t}\n\n\t\t\tvar keys = Object.keys(opts);\n\t\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\t\tif (keys[i] == 'bgColor' || keys[i] == 'textColor') {\n\t\t\t\t\t_opt[keys[i]] = hexToRgb(opts[keys[i]]);\n\t\t\t\t} else {\n\t\t\t\t\t_opt[keys[i]] = opts[keys[i]];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_queue.push(_lastBadge);\n\t\t\ticon.start();\n\t\t};\n\n\t\tvar link = {};\n\t\t/**\n\t\t * Get icons from HEAD tag or create a new element\n\t\t */\n\t\tlink.getIcons = function () {\n\t\t\tvar elms = [];\n\t\t\t//get link element\n\t\t\tvar getLinks = function () {\n\t\t\t\tvar icons = [];\n\t\t\t\tvar links = _doc.getElementsByTagName('head')[0].getElementsByTagName('link');\n\t\t\t\tfor (var i = 0; i < links.length; i++) {\n\t\t\t\t\tif ((/(^|\\s)icon(\\s|$)/i).test(links[i].getAttribute('rel'))) {\n\t\t\t\t\t\ticons.push(links[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn icons;\n\t\t\t};\n\t\t\tif (_opt.element) {\n\t\t\t\telms = [_opt.element];\n\t\t\t} else if (_opt.elementId) {\n\t\t\t\t//if img element identified by elementId\n\t\t\t\telms = [_doc.getElementById(_opt.elementId)];\n\t\t\t\telms[0].setAttribute('href', elms[0].getAttribute('src'));\n\t\t\t} else {\n\t\t\t\t//if link element\n\t\t\t\telms = getLinks();\n\t\t\t\tif (elms.length === 0) {\n\t\t\t\t\telms = [_doc.createElement('link')];\n\t\t\t\t\telms[0].setAttribute('rel', 'icon');\n\t\t\t\t\t_doc.getElementsByTagName('head')[0].appendChild(elms[0]);\n\t\t\t\t}\n\t\t\t}\n\t\t\telms.forEach(function(item) {\n\t\t\t\titem.setAttribute('type', 'image/png');\n\t\t\t});\n\t\t\treturn elms;\n\t\t};\n\t\tlink.setIcon = function (canvas) {\n\t\t\tvar url = canvas.toDataURL('image/png');\n\t\t\tlink.setIconSrc(url);\n\t\t};\n\t\tlink.setIconSrc = function (url) {\n\t\t\tif (_opt.dataUrl) {\n\t\t\t\t//if using custom exporter\n\t\t\t\t_opt.dataUrl(url);\n\t\t\t}\n\t\t\tif (_opt.element) {\n\t\t\t\t_opt.element.setAttribute('href', url);\n\t\t\t\t_opt.element.setAttribute('src', url);\n\t\t\t} else if (_opt.elementId) {\n\t\t\t\t//if is attached to element (image)\n\t\t\t\tvar elm = _doc.getElementById(_opt.elementId);\n\t\t\t\telm.setAttribute('href', url);\n\t\t\t\telm.setAttribute('src', url);\n\t\t\t} else {\n\t\t\t\t//if is attached to fav icon\n\t\t\t\tif (_browser.ff || _browser.opera) {\n\t\t\t\t\t//for FF we need to \"recreate\" element, atach to dom and remove old \n\t\t\t\t\t//var originalType = _orig.getAttribute('rel');\n\t\t\t\t\tvar old = _orig[_orig.length - 1];\n\t\t\t\t\tvar newIcon = _doc.createElement('link');\n\t\t\t\t\t_orig = [newIcon];\n\t\t\t\t\t//_orig.setAttribute('rel', originalType);\n\t\t\t\t\tif (_browser.opera) {\n\t\t\t\t\t\tnewIcon.setAttribute('rel', 'icon');\n\t\t\t\t\t}\n\t\t\t\t\tnewIcon.setAttribute('rel', 'icon');\n\t\t\t\t\tnewIcon.setAttribute('type', 'image/png');\n\t\t\t\t\t_doc.getElementsByTagName('head')[0].appendChild(newIcon);\n\t\t\t\t\tnewIcon.setAttribute('href', url);\n\t\t\t\t\tif (old.parentNode) {\n\t\t\t\t\t\told.parentNode.removeChild(old);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t_orig.forEach(function(icon) {\n\t\t\t\t\t\ticon.setAttribute('href', url);\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t//http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb#answer-5624139\n\t\t//HEX to RGB convertor\n\t\tfunction hexToRgb(hex) {\n\t\t\tvar shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;\n\t\t\thex = hex.replace(shorthandRegex, function (m, r, g, b) {\n\t\t\t\treturn r + r + g + g + b + b;\n\t\t\t});\n\t\t\tvar result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n\t\t\treturn result ? {\n\t\t\t\tr: parseInt(result[1], 16),\n\t\t\t\tg: parseInt(result[2], 16),\n\t\t\t\tb: parseInt(result[3], 16)\n\t\t\t} : false;\n\t\t}\n\n\t\t/**\n\t\t * Merge options\n\t\t */\n\t\tfunction merge(def, opt) {\n\t\t\tvar mergedOpt = {};\n\t\t\tvar attrname;\n\t\t\tfor (attrname in def) {\n\t\t\t\tmergedOpt[attrname] = def[attrname];\n\t\t\t}\n\t\t\tfor (attrname in opt) {\n\t\t\t\tmergedOpt[attrname] = opt[attrname];\n\t\t\t}\n\t\t\treturn mergedOpt;\n\t\t}\n\n\t\t/**\n\t\t * Cross-browser page visibility shim\n\t\t * http://stackoverflow.com/questions/12536562/detect-whether-a-window-is-visible\n\t\t */\n\t\tfunction isPageHidden() {\n\t\t\treturn _doc.hidden || _doc.msHidden || _doc.webkitHidden || _doc.mozHidden;\n\t\t}\n\n\t\t/**\n\t\t * @namespace animation\n\t\t */\n\t\tvar animation = {};\n\t\t/**\n\t\t * Animation \"frame\" duration\n\t\t */\n\t\tanimation.duration = 40;\n\t\t/**\n\t\t * Animation types (none,fade,pop,slide)\n\t\t */\n\t\tanimation.types = {};\n\t\tanimation.types.fade = [{\n\t\t\tx: 0.4,\n\t\t\ty: 0.4,\n\t\t\tw: 0.6,\n\t\t\th: 0.6,\n\t\t\to: 0.0\n\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.2\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.3\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.4\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.5\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.6\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.7\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.8\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 0.9\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1.0\n\t\t\t}];\n\t\tanimation.types.none = [{\n\t\t\tx: 0.4,\n\t\t\ty: 0.4,\n\t\t\tw: 0.6,\n\t\t\th: 0.6,\n\t\t\to: 1\n\t\t}];\n\t\tanimation.types.pop = [{\n\t\t\tx: 1,\n\t\t\ty: 1,\n\t\t\tw: 0,\n\t\t\th: 0,\n\t\t\to: 1\n\t\t}, {\n\t\t\t\tx: 0.9,\n\t\t\t\ty: 0.9,\n\t\t\t\tw: 0.1,\n\t\t\t\th: 0.1,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.8,\n\t\t\t\ty: 0.8,\n\t\t\t\tw: 0.2,\n\t\t\t\th: 0.2,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.7,\n\t\t\t\ty: 0.7,\n\t\t\t\tw: 0.3,\n\t\t\t\th: 0.3,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.6,\n\t\t\t\ty: 0.6,\n\t\t\t\tw: 0.4,\n\t\t\t\th: 0.4,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.5,\n\t\t\t\ty: 0.5,\n\t\t\t\tw: 0.5,\n\t\t\t\th: 0.5,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}];\n\t\tanimation.types.popFade = [{\n\t\t\tx: 0.75,\n\t\t\ty: 0.75,\n\t\t\tw: 0,\n\t\t\th: 0,\n\t\t\to: 0\n\t\t}, {\n\t\t\t\tx: 0.65,\n\t\t\t\ty: 0.65,\n\t\t\t\tw: 0.1,\n\t\t\t\th: 0.1,\n\t\t\t\to: 0.2\n\t\t\t}, {\n\t\t\t\tx: 0.6,\n\t\t\t\ty: 0.6,\n\t\t\t\tw: 0.2,\n\t\t\t\th: 0.2,\n\t\t\t\to: 0.4\n\t\t\t}, {\n\t\t\t\tx: 0.55,\n\t\t\t\ty: 0.55,\n\t\t\t\tw: 0.3,\n\t\t\t\th: 0.3,\n\t\t\t\to: 0.6\n\t\t\t}, {\n\t\t\t\tx: 0.50,\n\t\t\t\ty: 0.50,\n\t\t\t\tw: 0.4,\n\t\t\t\th: 0.4,\n\t\t\t\to: 0.8\n\t\t\t}, {\n\t\t\t\tx: 0.45,\n\t\t\t\ty: 0.45,\n\t\t\t\tw: 0.5,\n\t\t\t\th: 0.5,\n\t\t\t\to: 0.9\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}];\n\t\tanimation.types.slide = [{\n\t\t\tx: 0.4,\n\t\t\ty: 1,\n\t\t\tw: 0.6,\n\t\t\th: 0.6,\n\t\t\to: 1\n\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.9,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.9,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.8,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.7,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.6,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.5,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}, {\n\t\t\t\tx: 0.4,\n\t\t\t\ty: 0.4,\n\t\t\t\tw: 0.6,\n\t\t\t\th: 0.6,\n\t\t\t\to: 1\n\t\t\t}];\n\t\t/**\n\t\t * Run animation\n\t\t * @param {Object} opt Animation options\n\t\t * @param {Object} cb Callabak after all steps are done\n\t\t * @param {Object} revert Reverse order? true|false\n\t\t * @param {Object} step Optional step number (frame bumber)\n\t\t */\n\t\tanimation.run = function (opt, cb, revert, step) {\n\t\t\tvar animationType = animation.types[isPageHidden() ? 'none' : _opt.animation];\n\t\t\tif (revert === true) {\n\t\t\t\tstep = (typeof step !== 'undefined') ? step : animationType.length - 1;\n\t\t\t} else {\n\t\t\t\tstep = (typeof step !== 'undefined') ? step : 0;\n\t\t\t}\n\t\t\tcb = (cb) ? cb : function () {\n\t\t\t};\n\t\t\tif ((step < animationType.length) && (step >= 0)) {\n\t\t\t\ttype[_opt.type](merge(opt, animationType[step]));\n\t\t\t\t_animTimeout = setTimeout(function () {\n\t\t\t\t\tif (revert) {\n\t\t\t\t\t\tstep = step - 1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstep = step + 1;\n\t\t\t\t\t}\n\t\t\t\t\tanimation.run(opt, cb, revert, step);\n\t\t\t\t}, animation.duration);\n\n\t\t\t\tlink.setIcon(_canvas);\n\t\t\t} else {\n\t\t\t\tcb();\n\t\t\t\treturn;\n\t\t\t}\n\t\t};\n\t\t//auto init\n\t\tinit();\n\t\treturn {\n\t\t\tbadge: badge,\n\t\t\tsetOpt: setOpt,\n\t\t\treset: icon.reset,\n\t\t\tbrowser: {\n\t\t\t\tsupported: _browser.supported\n\t\t\t}\n\t\t};\n\t});\n\n\t// AMD / RequireJS\n\tif (typeof define !== 'undefined' && define.amd) {\n\t\tdefine([], function () {\n\t\t\treturn Favico;\n\t\t});\n\t}\n\t// CommonJS\n\telse if (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = Favico;\n\t}\n\t// included directly via