{"version":3,"file":"../../javascript/nprogress.js","names":["root","factory","define","amd","exports","module","NProgress","this","initial","current","Settings","settings","minimum","easing","positionUsing","speed","trickle","trickleRate","trickleSpeed","showSpinner","barSelector","spinnerSelector","parent","template","clamp","n","min","max","toBarPerc","configure","options","key","value","undefined","hasOwnProperty","status","set","started","isStarted","progress","render","bar","querySelector","ease","offsetWidth","queue","next","getPositioningCSS","css","barCSS","transform","transition","barPositionCSS","opacity","setTimeout","remove","start","work","done","force","inc","Math","random","amount","promise","$promise","state","always","fromStart","isRendered","document","getElementById","addClass","documentElement","createElement","id","innerHTML","spinner","perc","removeElement","body","appendChild","removeClass","bodyStyle","style","vendorPrefix","pending","fn","shift","push","length","cssPrefixes","cssProps","getStyleProp","name","replace","match","letter","toUpperCase","vendorName","i","capName","charAt","slice","getVendorProp","applyCss","element","prop","properties","args","arguments","hasClass","classList","indexOf","oldList","newList","className","substring","parentNode","removeChild"],"sources":["nprogress.js"],"mappings":"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","ignoreList":[],"sourcesContent":["/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.NProgress = factory();\n  }\n\n})(this, function() {\n  var NProgress = {};\n\n  NProgress.version = '0.1.6';\n\n  var Settings = NProgress.settings = {\n    minimum: 0.08,\n    easing: 'ease',\n    positionUsing: '',\n    speed: 200,\n    trickle: true,\n    trickleRate: 0.02,\n    trickleSpeed: 800,\n    showSpinner: true,\n    barSelector: '[role=\"bar\"]',\n    spinnerSelector: '[role=\"spinner\"]',\n    parent: 'body',\n    template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n  };\n\n  /**\n   * Updates configuration.\n   *\n   *     NProgress.configure({\n   *       minimum: 0.1\n   *     });\n   */\n  NProgress.configure = function(options) {\n    var key, value;\n    for (key in options) {\n      value = options[key];\n      if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n    }\n\n    return this;\n  };\n\n  /**\n   * Last number.\n   */\n\n  NProgress.status = null;\n\n  /**\n   * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n   *\n   *     NProgress.set(0.4);\n   *     NProgress.set(1.0);\n   */\n\n  NProgress.set = function(n) {\n    var started = NProgress.isStarted();\n\n    n = clamp(n, Settings.minimum, 1);\n    NProgress.status = (n === 1 ? null : n);\n\n    var progress = NProgress.render(!started),\n        bar      = progress.querySelector(Settings.barSelector),\n        speed    = Settings.speed,\n        ease     = Settings.easing;\n\n    progress.offsetWidth; /* Repaint */\n\n    queue(function(next) {\n      // Set positionUsing if it hasn't already been set\n      if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n      // Add transition\n      css(bar, barPositionCSS(n, speed, ease));\n\n      if (n === 1) {\n        // Fade out\n        css(progress, { \n          transition: 'none', \n          opacity: 1 \n        });\n        progress.offsetWidth; /* Repaint */\n\n        setTimeout(function() {\n          css(progress, { \n            transition: 'all ' + speed + 'ms linear', \n            opacity: 0 \n          });\n          setTimeout(function() {\n            NProgress.remove();\n            next();\n          }, speed);\n        }, speed);\n      } else {\n        setTimeout(next, speed);\n      }\n    });\n\n    return this;\n  };\n\n  NProgress.isStarted = function() {\n    return typeof NProgress.status === 'number';\n  };\n\n  /**\n   * Shows the progress bar.\n   * This is the same as setting the status to 0%, except that it doesn't go backwards.\n   *\n   *     NProgress.start();\n   *\n   */\n  NProgress.start = function() {\n    if (!NProgress.status) NProgress.set(0);\n\n    var work = function() {\n      setTimeout(function() {\n        if (!NProgress.status) return;\n        NProgress.trickle();\n        work();\n      }, Settings.trickleSpeed);\n    };\n\n    if (Settings.trickle) work();\n\n    return this;\n  };\n\n  /**\n   * Hides the progress bar.\n   * This is the *sort of* the same as setting the status to 100%, with the\n   * difference being `done()` makes some placebo effect of some realistic motion.\n   *\n   *     NProgress.done();\n   *\n   * If `true` is passed, it will show the progress bar even if its hidden.\n   *\n   *     NProgress.done(true);\n   */\n\n  NProgress.done = function(force) {\n    if (!force && !NProgress.status) return this;\n\n    return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n  };\n\n  /**\n   * Increments by a random amount.\n   */\n\n  NProgress.inc = function(amount) {\n    var n = NProgress.status;\n\n    if (!n) {\n      return NProgress.start();\n    } else {\n      if (typeof amount !== 'number') {\n        amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n      }\n\n      n = clamp(n + amount, 0, 0.994);\n      return NProgress.set(n);\n    }\n  };\n\n  NProgress.trickle = function() {\n    return NProgress.inc(Math.random() * Settings.trickleRate);\n  };\n\n  /**\n   * Waits for all supplied jQuery promises and\n   * increases the progress as the promises resolve.\n   * \n   * @param $promise jQUery Promise\n   */\n  (function() {\n    var initial = 0, current = 0;\n    \n    NProgress.promise = function($promise) {\n      if (!$promise || $promise.state() == \"resolved\") {\n        return this;\n      }\n      \n      if (current == 0) {\n        NProgress.start();\n      }\n      \n      initial++;\n      current++;\n      \n      $promise.always(function() {\n        current--;\n        if (current == 0) {\n            initial = 0;\n            NProgress.done();\n        } else {\n            NProgress.set((initial - current) / initial);\n        }\n      });\n      \n      return this;\n    };\n    \n  })();\n\n  /**\n   * (Internal) renders the progress bar markup based on the `template`\n   * setting.\n   */\n\n  NProgress.render = function(fromStart) {\n    if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n    addClass(document.documentElement, 'nprogress-busy');\n    \n    var progress = document.createElement('div');\n    progress.id = 'nprogress';\n    progress.innerHTML = Settings.template;\n\n    var bar      = progress.querySelector(Settings.barSelector),\n        perc     = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n        parent   = document.querySelector(Settings.parent),\n        spinner;\n    \n    css(bar, {\n      transition: 'all 0 linear',\n      transform: 'translate3d(' + perc + '%,0,0)'\n    });\n\n    if (!Settings.showSpinner) {\n      spinner = progress.querySelector(Settings.spinnerSelector);\n      spinner && removeElement(spinner);\n    }\n\n    if (parent != document.body) {\n      addClass(parent, 'nprogress-custom-parent');\n    }\n\n    parent.appendChild(progress);\n    return progress;\n  };\n\n  /**\n   * Removes the element. Opposite of render().\n   */\n\n  NProgress.remove = function() {\n    removeClass(document.documentElement, 'nprogress-busy');\n    removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent')\n    var progress = document.getElementById('nprogress');\n    progress && removeElement(progress);\n  };\n\n  /**\n   * Checks if the progress bar is rendered.\n   */\n\n  NProgress.isRendered = function() {\n    return !!document.getElementById('nprogress');\n  };\n\n  /**\n   * Determine which positioning CSS rule to use.\n   */\n\n  NProgress.getPositioningCSS = function() {\n    // Sniff on document.body.style\n    var bodyStyle = document.body.style;\n\n    // Sniff prefixes\n    var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n                       ('MozTransform' in bodyStyle) ? 'Moz' :\n                       ('msTransform' in bodyStyle) ? 'ms' :\n                       ('OTransform' in bodyStyle) ? 'O' : '';\n\n    if (vendorPrefix + 'Perspective' in bodyStyle) {\n      // Modern browsers with 3D support, e.g. Webkit, IE10\n      return 'translate3d';\n    } else if (vendorPrefix + 'Transform' in bodyStyle) {\n      // Browsers without 3D support, e.g. IE9\n      return 'translate';\n    } else {\n      // Browsers without translate() support, e.g. IE7-8\n      return 'margin';\n    }\n  };\n\n  /**\n   * Helpers\n   */\n\n  function clamp(n, min, max) {\n    if (n < min) return min;\n    if (n > max) return max;\n    return n;\n  }\n\n  /**\n   * (Internal) converts a percentage (`0..1`) to a bar translateX\n   * percentage (`-100%..0%`).\n   */\n\n  function toBarPerc(n) {\n    return (-1 + n) * 100;\n  }\n\n\n  /**\n   * (Internal) returns the correct CSS for changing the bar's\n   * position given an n percentage, and speed and ease from Settings\n   */\n\n  function barPositionCSS(n, speed, ease) {\n    var barCSS;\n\n    if (Settings.positionUsing === 'translate3d') {\n      barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n    } else if (Settings.positionUsing === 'translate') {\n      barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n    } else {\n      barCSS = { 'margin-left': toBarPerc(n)+'%' };\n    }\n\n    barCSS.transition = 'all '+speed+'ms '+ease;\n\n    return barCSS;\n  }\n\n  /**\n   * (Internal) Queues a function to be executed.\n   */\n\n  var queue = (function() {\n    var pending = [];\n    \n    function next() {\n      var fn = pending.shift();\n      if (fn) {\n        fn(next);\n      }\n    }\n\n    return function(fn) {\n      pending.push(fn);\n      if (pending.length == 1) next();\n    };\n  })();\n\n  /**\n   * (Internal) Applies css properties to an element, similar to the jQuery \n   * css method.\n   *\n   * While this helper does assist with vendor prefixed property names, it \n   * does not perform any manipulation of values prior to setting styles.\n   */\n\n  var css = (function() {\n    var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n        cssProps    = {};\n\n    function camelCase(string) {\n      return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n        return letter.toUpperCase();\n      });\n    }\n\n    function getVendorProp(name) {\n      var style = document.body.style;\n      if (name in style) return name;\n\n      var i = cssPrefixes.length,\n          capName = name.charAt(0).toUpperCase() + name.slice(1),\n          vendorName;\n      while (i--) {\n        vendorName = cssPrefixes[i] + capName;\n        if (vendorName in style) return vendorName;\n      }\n\n      return name;\n    }\n\n    function getStyleProp(name) {\n      name = camelCase(name);\n      return cssProps[name] || (cssProps[name] = getVendorProp(name));\n    }\n\n    function applyCss(element, prop, value) {\n      prop = getStyleProp(prop);\n      element.style[prop] = value;\n    }\n\n    return function(element, properties) {\n      var args = arguments,\n          prop, \n          value;\n\n      if (args.length == 2) {\n        for (prop in properties) {\n          value = properties[prop];\n          if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n        }\n      } else {\n        applyCss(element, args[1], args[2]);\n      }\n    }\n  })();\n\n  /**\n   * (Internal) Determines if an element or space separated list of class names contains a class name.\n   */\n\n  function hasClass(element, name) {\n    var list = typeof element == 'string' ? element : classList(element);\n    return list.indexOf(' ' + name + ' ') >= 0;\n  }\n\n  /**\n   * (Internal) Adds a class to an element.\n   */\n\n  function addClass(element, name) {\n    var oldList = classList(element),\n        newList = oldList + name;\n\n    if (hasClass(oldList, name)) return; \n\n    // Trim the opening space.\n    element.className = newList.substring(1);\n  }\n\n  /**\n   * (Internal) Removes a class from an element.\n   */\n\n  function removeClass(element, name) {\n    var oldList = classList(element),\n        newList;\n\n    if (!hasClass(element, name)) return;\n\n    // Replace the class name.\n    newList = oldList.replace(' ' + name + ' ', ' ');\n\n    // Trim the opening and closing spaces.\n    element.className = newList.substring(1, newList.length - 1);\n  }\n\n  /**\n   * (Internal) Gets a space separated list of the class names on the element. \n   * The list is wrapped with a single space on each end to facilitate finding \n   * matches within the list.\n   */\n\n  function classList(element) {\n    return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n  }\n\n  /**\n   * (Internal) Removes an element from the DOM.\n   */\n\n  function removeElement(element) {\n    element && element.parentNode && element.parentNode.removeChild(element);\n  }\n\n  return NProgress;\n});\n"]}