sea-base.js
/**
* Sea.js 2.2.3 | /LICENSE.md
*/
(function(global, undefined) {
// Avoid conflicting when `sea.js` is loaded multiple times
if (global.seajs) {
return
}
var seajs = global.seajs = {
// The current version of Sea.js being used
version: "2.2.3"
}
var data = seajs.data = {}
/**
* util-lang.js - The minimal language enhancement
*/
function isType(type) {
return function(obj) {
return {}.toString.call(obj) == "[object " + type + "]"
}
}
var isObject = isType("Object")
var isString = isType("String")
var isArray = Array.isArray || isType("Array")
var isFunction = isType("Function")
var isUndefined = isType("Undefined")
var _cid = 0
function cid() {
return _cid++
}
/**
* util-events.js - The minimal events support
*/
var events = data.events = {}
// Bind event
seajs.on = function(name, callback) {
var list = events[name] || (events[name] = [])
list.push(callback)
return seajs
}
// Remove event. If `callback` is undefined, remove all callbacks for the
// event. If `event` and `callback` are both undefined, remove all callbacks
// for all events
seajs.off = function(name, callback) {
// Remove *all* events
if (!(name || callback)) {
events = data.events = {}
return seajs
}
var list = events[name]
if (list) {
if (callback) {
for (var i = list.length - 1; i >= 0; i--) {
if (list[i] === callback) {
list.splice(i, 1)
}
}
}
else {
delete events[name]
}
}
return seajs
}
// Emit event, firing all bound callbacks. Callbacks receive the same
// arguments as `emit` does, apart from the event name
var emit = seajs.emit = function(name, data) {
var list = events[name], fn
if (list) {
// Copy callback lists to prevent modification
list = list.slice()
// Execute event callbacks
while ((fn = list.shift())) {
fn(data)
}
}
return seajs
}
/**
* util-path.js - The utilities for operating path such as id, uri
*/
var DIRNAME_RE = /[^?#]*\//
var DOT_RE = /\/\.\//g
var DOUBLE_DOT_RE = /\/[^/]+\/\.\.\//
var DOUBLE_SLASH_RE = /([^:/])\/\//g
// Extract the directory portion of a path
// dirname("a/b/c.js?t=123#xx/zz") ==> "a/b/"
// ref: http://jsperf.com/regex-vs-split/2
function dirname(path) {
return path.match(DIRNAME_RE)[0]
}
// Canonicalize a path
// realpath("http:///a//./b/../c") ==> "http:///a/c"
function realpath(path) {
// /a/b/./c/./d ==> /a/b/c/d
path = path.replace(DOT_RE, "/")
// a/b/c/../../d ==> a/b/../d ==> a/d
while (path.match(DOUBLE_DOT_RE)) {
path = path.replace(DOUBLE_DOT_RE, "/")
}
// a//b/c ==> a/b/c
path = path.replace(DOUBLE_SLASH_RE, "$1/")
return path
}
// Normalize an id
// normalize("path/to/a") ==> "path/to/a.js"
// NOTICE: substring is faster than negative slice and RegExp
function normalize(path) {
var last = path.length - 1
var lastC = path.charAt(last)
// If the uri ends with `#`, just return it without '#'
if (lastC === "#") {
return path.substring(0, last)
}
return (path.substring(last - 2) === ".js" ||
path.indexOf("?") > 0 ||
path.substring(last - 3) === ".css" ||
lastC === "/") ? path : path + ".js"
}
var PATHS_RE = /^([^/:]+)(\/.+)$/
var VARS_RE = /{([^{]+)}/g
function parseAlias(id) {
var alias = data.alias
return alias && isString(alias[id]) ? alias[id] : id
}
function parsePaths(id) {
var paths = data.paths
var m
if (paths && (m = id.match(PATHS_RE)) && isString(paths[m[1]])) {
id = paths[m[1]] + m[2]
}
return id
}
function parseVars(id) {
var vars = data.vars
if (vars && id.indexOf("{") > -1) {
id = id.replace(VARS_RE, function(m, key) {
return isString(vars[key]) ? vars[key] : m
})
}
return id
}
function parseMap(uri) {
var map = data.map
var ret = uri
if (map) {
for (var i = 0, len = map.length; i < len; i++) {
var rule = map[i]
ret = isFunction(rule) ?
(rule(uri) || uri) :
uri.replace(rule[0], rule[1])
// Only apply the first matched rule
if (ret !== uri) break
}
}
return ret
}
var ABSOLUTE_RE = /^\/\/.|:\//
var ROOT_DIR_RE = /^.*?\/\/.*?\//
function addBase(id, refUri) {
var ret
var first = id.charAt(0)
// Absolute
if (ABSOLUTE_RE.test(id)) {
ret = id
}
// Relative
else if (first === ".") {
ret = realpath((refUri ? dirname(refUri) : data.cwd) + id)
}
// Root
else if (first === "/") {
var m = data.cwd.match(ROOT_DIR_RE)
ret = m ? m[0] + id.substring(1) : id
}
// Top-level
else {
ret = data.base + id
}
// Add default protocol when uri begins with "//"
if (ret.indexOf("//") === 0) {
ret = location.protocol + ret
}
return ret
}
function id2Uri(id, refUri) {
if (!id) return ""
id = parseAlias(id)
id = parsePaths(id)
id = parseVars(id)
id = normalize(id)
var uri = addBase(id, refUri)
uri = parseMap(uri)
return uri
}
var doc = document
var cwd = dirname(doc.URL)
var scripts = doc.scripts
// Recommend to add `seajsnode` id for the `sea.js` script element
var loaderScript = doc.getElementById("seajsnode") ||
scripts[scripts.length - 1]
// When `sea.js` is inline, set loaderDir to current working directory
var loaderDir = dirname(getScriptAbsoluteSrc(loaderScript) || cwd)
function getScriptAbsoluteSrc(node) {
return node.hasAttribute ? // non-IE6/7
node.src :
// see http://msdn.microsoft.com/en-us/library/ms536429(VS.85).aspx
node.getAttribute("src", 4)
}
// For Developers
seajs.resolve = id2Uri
/**
* util-request.js - The utilities for requesting script and style files
* ref: tests/research/load-js-css/test.html
*/
var head = doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement
var baseElement = head.getElementsByTagName("base")[0]
var IS_CSS_RE = /\.css(?:\?|$)/i
var currentlyAddingScript
var interactiveScript
// `onload` event is not supported in WebKit < 535.23 and Firefox < 9.0
// ref:
// - https://bugs.webkit.org/show_activity.cgi?id=38995
// - https://bugzilla.mozilla.org/show_bug.cgi?id=185236
// - https://developer.mozilla.org/en/HTML/Element/link#Stylesheet_load_events
var isOldWebKit = +navigator.userAgent
.replace(/.*(?:AppleWebKit|AndroidWebKit)\/(\d+).*/, "$1") < 536
function request(url, callback, charset, crossorigin) {
var isCSS = IS_CSS_RE.test(url)
var node = doc.createElement(isCSS ? "link" : "script")
if (charset) {
node.charset = charset
}
// crossorigin default value is `false`.
if (!isUndefined(crossorigin)) {
node.setAttribute("crossorigin", crossorigin)
}
addOnload(node, callback, isCSS, url)
if (isCSS) {
node.rel = "stylesheet"
node.href = url
}
else {
node.async = true
node.src = url
}
// For some cache cases in IE 6-8, the script executes IMMEDIATELY after
// the end of the insert execution, so use `currentlyAddingScript` to
// hold current node, for deriving url in `define` call
currentlyAddingScript = node
// ref: #185 & http://dev.jquery.com/ticket/2709
baseElement ?
head.insertBefore(node, baseElement) :
head.appendChild(node)
currentlyAddingScript = null
}
function addOnload(node, callback, isCSS, url) {
var supportOnload = "onload" in node
// for Old WebKit and Old Firefox
if (isCSS && (isOldWebKit || !supportOnload)) {
setTimeout(function() {
pollCss(node, callback)
}, 1) // Begin after node insertion
return
}
if (supportOnload) {
node.onload = onload
node.onerror = function() {
emit("error", { uri: url, node: node })
onload()
}
}
else {
node.onreadystatechange = function() {
if (/loaded|complete/.test(node.readyState)) {
onload()
}
}
}
function onload() {
// Ensure only run once and handle memory leak in IE
node.onload = node.onerror = node.onreadystatechange = null
// Remove the script to reduce memory leak
if (!isCSS && !data.debug) {
head.removeChild(node)
}
// Dereference the node
node = null
callback()
}
}
function pollCss(node, callback) {
var sheet = node.sheet
var isLoaded
// for WebKit < 536
if (isOldWebKit) {
if (sheet) {
isLoaded = true
}
}
// for Firefox < 9.0
else if (sheet) {
try {
if (sheet.cssRules) {
isLoaded = true
}
} catch (ex) {
// The value of `` is changed from "NS_ERROR_DOM_SECURITY_ERR"
// to "SecurityError" since Firefox 13.0. But Firefox is less than 9.0
// in here, So it is ok to just rely on "NS_ERROR_DOM_SECURITY_ERR"
if ( === "NS_ERROR_DOM_SECURITY_ERR") {
isLoaded = true
}
}
}
setTimeout(function() {
if (isLoaded) {
// Place callback here to give time for style rendering
callback()
}
else {
pollCss(node, callback)
}
}, 20)
}
function getCurrentScript() {
if (currentlyAddingScript) {
return currentlyAddingScript
}
// For IE6-9 browsers, the script onload event may not fire right
// after the script is evaluated. Kris Zyp found that it
// could query the script nodes and the one that is in "interactive"
// mode indicates the current script
// ref: http:///JHfFW
if (interactiveScript && interactiveScript.readyState === "interactive") {
return interactiveScript
}
var scripts = head.getElementsByTagName("script")
for (var i = scripts.length - 1; i >= 0; i--) {
var script = scripts[i]
if (script.readyState === "interactive") {
interactiveScript = script
return interactiveScript
}
}
}
// For Developers
seajs.request = request
/**
* util-deps.js - The parser for dependencies
* ref: tests/research/parse-dependencies/test.html
*/
var REQUIRE_RE = /"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|\/\*[\S\s]*?\*\/|\/(?:\\\/|[^\/\r\n])+\/(?=[^\/])|\/\/.*|\.\s*require|(?:^|[^$])\brequire\s*\(\s*(["'])(.+?)\1\s*\)/g
var SLASH_RE = /\\\\/g
function parseDependencies(code) {
var ret = []
code.replace(SLASH_RE, "")
.replace(REQUIRE_RE, function(m, m1, m2) {
if (m2) {
ret.push(m2)
}
})
return ret
}
/**
* module.js - The core of module loader
*/
var cachedMods = seajs.cache = {}
var anonymousMeta
var fetchingList = {}
var fetchedList = {}
var callbackList = {}
var STATUS = Module.STATUS = {
// 1 - The `module.uri` is being fetched
FETCHING: 1,
// 2 - The meta data has been saved to cachedMods
SAVED: 2,
// 3 - The `module.dependencies` are being loaded
LOADING: 3,
// 4 - The module are ready to execute
LOADED: 4,
// 5 - The module is being executed
EXECUTING: 5,
// 6 - The `module.exports` is available
EXECUTED: 6
}
function Module(uri, deps) {
this.uri = uri
this.dependencies = deps || []
this.exports = null
this.status = 0
// Who depends on me
this._waitings = {}
// The number of unloaded dependencies
this._remain = 0
}
// Resolve module.dependencies
Module.prototype.resolve = function() {
var mod = this
var ids = mod.dependencies
var uris = []
for (var i = 0, len = ids.length; i < len; i++) {
uris[i] = Module.resolve(ids[i], mod.uri)
}
return uris
}
// Load module.dependencies and fire onload when all done
Module.prototype.load = function() {
var mod = this
// If the module is being loaded, just wait it onload call
if (mod.status >= STATUS.LOADING) {
return
}
mod.status = STATUS.LOADING
// Emit `load` event for plugins such as combo plugin
var uris = mod.resolve()
emit("load", uris)
var len = mod._remain = uris.length
var m
// Initialize modules and register waitings
for (var i = 0; i < len; i++) {
m = Module.get(uris[i])
if (m.status < STATUS.LOADED) {
// Maybe duplicate: When module has dupliate dependency, it should be it's count, not 1
m._waitings[mod.uri] = (m._waitings[mod.uri] || 0) + 1
}
else {
mod._remain--
}
}
if (mod._remain === 0) {
mod.onload()
return
}
// Begin parallel loading
var requestCache = {}
for (i = 0; i < len; i++) {
m = cachedMods[uris[i]]
if (m.status < STATUS.FETCHING) {
m.fetch(requestCache)
}
else if (m.status === STATUS.SAVED) {
m.load()
}
}
// Send all requests at last to avoid cache bug in IE6-9. Issues#808
for (var requestUri in requestCache) {
if (requestCache.hasOwnProperty(requestUri)) {
requestCache[requestUri]()
}
}
}
// Call this method when module is loaded
Module.prototype.onload = function() {
var mod = this
mod.status = STATUS.LOADED
if (mod.callback) {
mod.callback()
}
// Notify waiting modules to fire onload
var waitings = mod._waitings
var uri, m
for (uri in waitings) {
if (waitings.hasOwnProperty(uri)) {
m = cachedMods[uri]
m._remain -= waitings[uri]
if (m._remain === 0) {
m.onload()
}
}
}
// Reduce memory taken
delete mod._waitings
delete mod._remain
}
// Fetch a module
Module.prototype.fetch = function(requestCache) {
var mod = this
var uri = mod.uri
mod.status = STATUS.FETCHING
// Emit `fetch` event for plugins such as combo plugin
var emitData = { uri: uri }
emit("fetch", emitData)
var requestUri = emitData.requestUri || uri
// Empty uri or a non-CMD module
if (!requestUri || fetchedList[requestUri]) {
mod.load()
return
}
if (fetchingList[requestUri]) {
callbackList[requestUri].push(mod)
return
}
fetchingList[requestUri] = true
callbackList[requestUri] = [mod]
// Emit `request` event for plugins such as text plugin
emit("request", emitData = {
uri: uri,
requestUri: requestUri,
onRequest: onRequest,
charset: isFunction(data.charset) ? data.charset(requestUri): data.charset,
crossorigin: isFunction(data.crossorigin) ? data.crossorigin(requestUri) : data.crossorigin
})
if (!emitData.requested) {
requestCache ?
requestCache[emitData.requestUri] = sendRequest :
sendRequest()
}
function sendRequest() {
seajs.request(emitData.requestUri, emitData.onRequest, emitData.charset, emitData.crossorigin)
}
function onRequest() {
delete fetchingList[requestUri]
fetchedList[requestUri] = true
// Save meta data of anonymous module
if (anonymousMeta) {
Module.save(uri, anonymousMeta)
anonymousMeta = null
}
// Call callbacks
var m, mods = callbackList[requestUri]
delete callbackList[requestUri]
while ((m = mods.shift())) m.load()
}
}
// Execute a module
Module.prototype.exec = function () {
var mod = this
// When module is executed, DO NOT execute it again. When module
// is being executed, just return `module.exports` too, for avoiding
// circularly calling
if (mod.status >= STATUS.EXECUTING) {
return mod.exports
}
mod.status = STATUS.EXECUTING
// Create require
var uri = mod.uri
function require(id) {
return Module.get(require.resolve(id)).exec()
}
require.resolve = function(id) {
return Module.resolve(id, uri)
}
require.async = function(ids, callback) {
Module.use(ids, callback, uri + "_async_" + cid())
return require
}
// Exec factory
var factory = mod.factory
var exports = isFunction(factory) ?
factory(require, mod.exports = {}, mod) :
factory
if (exports === undefined) {
exports = mod.exports
}
// Reduce memory leak
delete mod.factory
mod.exports = exports
mod.status = STATUS.EXECUTED
// Emit `exec` event
emit("exec", mod)
return exports
}
// Resolve id to uri
Module.resolve = function(id, refUri) {
// Emit `resolve` event for plugins such as text plugin
var emitData = { id: id, refUri: refUri }
emit("resolve", emitData)
return emitData.uri || seajs.resolve(, refUri)
}
// Define a module
Module.define = function (id, deps, factory) {
var argsLen = arguments.length
// define(factory)
if (argsLen === 1) {
factory = id
id = undefined
}
else if (argsLen === 2) {
factory = deps
// define(deps, factory)
if (isArray(id)) {
deps = id
id = undefined
}
// define(id, factory)
else {
deps = undefined
}
}
// Parse dependencies according to the module factory code
if (!isArray(deps) && isFunction(factory)) {
deps = parseDependencies(factory.toString())
}
var meta = {
id: id,
uri: Module.resolve(id),
deps: deps,
factory: factory
}
// Try to derive uri in IE6-9 for anonymous modules
if (!meta.uri && doc.attachEvent) {
var script = getCurrentScript()
if (script) {
meta.uri = script.src
}
// NOTE: If the id-deriving methods above is failed, then falls back
// to use onload event to get the uri
}
// Emit `define` event, used in nocache plugin, seajs node version etc
emit("define", meta)
meta.uri ? Module.save(meta.uri, meta) :
// Save information for "saving" work in the script onload event
anonymousMeta = meta
}
// Save meta data to cachedMods
Module.save = function(uri, meta) {
var mod = Module.get(uri)
// Do NOT override already saved modules
if (mod.status < STATUS.SAVED) {
mod.id = meta.id || uri
mod.dependencies = meta.deps || []
mod.factory = meta.factory
mod.status = STATUS.SAVED
}
}
// Get an existed module or create a new one
Module.get = function(uri, deps) {
return cachedMods[uri] || (cachedMods[uri] = new Module(uri, deps))
}
// Use function is equal to load a anonymous module
Module.use = function (ids, callback, uri) {
var mod = Module.get(uri, isArray(ids) ? ids : [ids])
mod.callback = function() {
var exports = []
var uris = mod.resolve()
for (var i = 0, len = uris.length; i < len; i++) {
exports[i] = cachedMods[uris[i]].exec()
}
if (callback) {
callback.apply(global, exports)
}
delete mod.callback
}
mod.load()
}
// Load preload modules before all other modules
Module.preload = function(callback) {
var preloadMods = data.preload
var len = preloadMods.length
if (len) {
Module.use(preloadMods, function() {
// Remove the loaded preload modules
preloadMods.splice(0, len)
// Allow preload modules to add new preload modules
Module.preload(callback)
}, data.cwd + "_preload_" + cid())
}
else {
callback()
}
}
// Public API
seajs.use = function(ids, callback) {
Module.preload(function() {
Module.use(ids, callback, data.cwd + "_use_" + cid())
})
return seajs
}
Module.define.cmd = {}
global.define = Module.define
// For Developers
seajs.Module = Module
data.fetchedList = fetchedList
data.cid = cid
seajs.require = function(id) {
var mod = Module.get(Module.resolve(id))
if (mod.status < STATUS.EXECUTING) {
mod.onload()
mod.exec()
}
return mod.exports
}
/**
* config.js - The configuration for the loader
*/
var BASE_RE = /^(.+?\/)(\?\?)?(seajs\/)+/
// The root path to use for id2uri parsing
// If loaderUri is `http:///libs/seajs/[??][seajs/1.2.3/]sea.js`, the
// baseUri should be `http:///libs/`
data.base = (loaderDir.match(BASE_RE) || ["", loaderDir])[1]
// The loader directory
data.dir = loaderDir
// The current working directory
data.cwd = cwd
// The charset for requesting files
data.charset = "utf-8"
// The CORS options, Do't set CORS on default.
//data.crossorigin = undefined
// Modules that are needed to load before all other modules
data.preload = (function() {
var plugins = []
// Convert `seajs-xxx` to `seajs-xxx=1`
// NOTE: use `seajs-xxx=1` flag in uri or cookie to preload `seajs-xxx`
var str = location.search.replace(/(seajs-\w+)(&|$)/g, "$1=1$2")
// Add cookie string
str += " " + doc.cookie
// Exclude seajs-xxx=0
str.replace(/(seajs-\w+)=1/g, function(m, name) {
plugins.push(name)
})
return plugins
})()
var cbl;
var cbData;
var cb = function(){
if(ii < bc.length){
ajs(bc[ii]);
}else{
cbl(cbData);
}
};
var cb1 = function(){
bc = ls;
ajs(bc[ii]);
}
var ii = 0;
var bc;
// data.alias - An object containing shorthands of module id
// data.paths - An object containing path shorthands in module id
// data.vars - The {xxx} variables in module id
// data.map - An array containing rules to map module uri
// data.debug - Debug mode. The default value is false
function ajs(path){
if(!path || path.length === 0){
throw new Error('argument "path" is required !');
};
ii++;
var hd = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
cb();
};
};
} else { // others
script.onload = function () {
cb();
};
};
script.src = path;
script.type = 'text/javascript';
hd.appendChild(script);
};
function ajs1(path){
if(!path || path.length === 0){
throw new Error('argument "path" is required !');
}
var hd = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
if (script.readyState) {
script.onreadystatechange = function () {
if (script.readyState == "loaded" || script.readyState == "complete") {
script.onreadystatechange = null;
cb1();
};
};
} else { // others
script.onload = function () {
cb1();
};
};
script.src = path;
script.type = 'text/javascript';
hd.appendChild(script);
};
function cbl(configData){
for (var key in configData) {
var curr = configData[key]
var prev = data[key]
// Merge object config such as alias, vars
if (prev && isObject(prev)) {
for (var k in curr) {
prev[k] = curr[k]
}
}
else {
// Concat array config such as map, preload
if (isArray(prev)) {
curr = prev.concat(curr)
}
// Make sure that `data.base` is an absolute path
else if (key === "base") {
// Make sure end with "/"
if (curr.slice(-1) !== "/") {
curr += "/"
}
curr = addBase(curr)
}
// Set config
data[key] = curr
}
}
emit("config", configData);
if(configData.loadConfirm){
configData.loadConfirm();
}
}
seajs.config = function(configData) {
cbData = configData;
if(configData.alius){
var mp = configData.alius.path;
mp = mp + mp +".json";
ajs1(mp);
}else if(configData.alies){
bc = configData.alies;
ajs(bc[ii]);
}else{
cbl(configData);
}
return seajs
}
})(this);
vue-router-base.js
/*!
* vue-router v0.7.1
* (c) 2015 Evan You
* Released under the MIT License.
*/
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else if(typeof exports === 'object')
exports["VueRouter"] = factory();
else
root["VueRouter"] = factory();
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _classCallCheck = __webpack_require__(1)['default'];
var _interopRequireDefault = __webpack_require__(2)['default'];
exports.__esModule = true;
var _util = __webpack_require__(3);
var _util2 = _interopRequireDefault(_util);
var _mixin = __webpack_require__(7);
var _mixin2 = _interopRequireDefault(_mixin);
var _routeRecognizer = __webpack_require__(4);
var _routeRecognizer2 = _interopRequireDefault(_routeRecognizer);
var _route = __webpack_require__(8);
var _route2 = _interopRequireDefault(_route);
var _transition = __webpack_require__(18);
var _transition2 = _interopRequireDefault(_transition);
var _directivesView = __webpack_require__(25);
var _directivesView2 = _interopRequireDefault(_directivesView);
var _directivesLink = __webpack_require__(26);
var _directivesLink2 = _interopRequireDefault(_directivesLink);
var _historyAbstract = __webpack_require__(27);
var _historyAbstract2 = _interopRequireDefault(_historyAbstract);
var _historyHash = __webpack_require__(28);
var _historyHash2 = _interopRequireDefault(_historyHash);
var _historyHtml5 = __webpack_require__(29);
var _historyHtml52 = _interopRequireDefault(_historyHtml5);
var historyBackends = {
abstract: _historyAbstract2['default'],
hash: _historyHash2['default'],
html5: _historyHtml52['default']
};
// late bind during install
var Vue = undefined;
/**
* Router constructor
*
* @param {Object} [options]
*/
var Router = (function () {
function Router() {
var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var _ref$hashbang = _ref.hashbang;
var hashbang = _ref$hashbang === undefined ? true : _ref$hashbang;
var _ref$abstract = _ref.abstract;
var abstract = _ref$abstract === undefined ? false : _ref$abstract;
var _ref$history = _ref.history;
var history = _ref$history === undefined ? false : _ref$history;
var _ref$saveScrollPosition = _ref.saveScrollPosition;
var saveScrollPosition = _ref$saveScrollPosition === undefined ? false : _ref$saveScrollPosition;
var _ref$transitionOnLoad = _ref.transitionOnLoad;
var transitionOnLoad = _ref$transitionOnLoad === undefined ? false : _ref$transitionOnLoad;
var _ref$suppressTransitionError = _ref.suppressTransitionError;
var suppressTransitionError = _ref$suppressTransitionError === undefined ? false : _ref$suppressTransitionError;
var _ref$root = _ref.root;
var root = _ref$root === undefined ? null : _ref$root;
var _ref$linkActiveClass = _ref.linkActiveClass;
var linkActiveClass = _ref$linkActiveClass === undefined ? 'v-link-active' : _ref$linkActiveClass;
_classCallCheck(this, Router);
/* istanbul ignore if */
if (!Router.installed) {
throw new Error('Please install the Router with Vue.use() before ' + 'creating an instance.');
}
// Vue instances
this.app = null;
this._views = [];
this._children = [];
// route recognizer
this._recognizer = new _routeRecognizer2['default']();
this._guardRecognizer = new _routeRecognizer2['default']();
// state
this._started = false;
this._startCb = null;
this._currentRoute = {};
this._currentTransition = null;
this._previousTransition = null;
this._notFoundHandler = null;
this._beforeEachHooks = [];
this._afterEachHooks = [];
this.require = null;
this.noteRoute = new Array;
// feature detection
this._hasPushState = typeof window !== 'undefined' && window.history && window.history.pushState;
// trigger transition on initial render?
this._rendered = false;
this._transitionOnLoad = transitionOnLoad;
// history mode
this._abstract = abstract;
this._hashbang = hashbang;
this._history = this._hasPushState && history;
// other options
this._saveScrollPosition = saveScrollPosition;
this._linkActiveClass = linkActiveClass;
this._suppress = suppressTransitionError;
// create history object
var inBrowser = Vue.util.inBrowser;
this.mode = !inBrowser || this._abstract ? 'abstract' : this._history ? 'html5' : 'hash';
var History = historyBackends[this.mode];
var self = this;
this.history = new History({
root: root,
hashbang: this._hashbang,
onChange: function onChange(path, state, anchor) {
self._match(path, state, anchor);
}
});
}
/**
* Allow directly passing components to a route
* definition.
*
* @param {String} path
* @param {Object} handler
*/
// API ===================================================
/**
* Register a map of top-level paths.
*
* @param {Object} map
*/
Router.prototype.map = function map(_map) {
for (var route in _map) {
this.on(route, _map[route]);
}
};
/**
* Register a single root-level path
*
* @param {String} rootPath
* @param {Object} handler
* - {String} component
* - {Object} [subRoutes]
* - {Boolean} [forceRefresh]
* - {Function} [before]
* - {Function} [after]
*/
Router.prototype.on = function on(rootPath, handler) {
if (rootPath === '*') {
this._notFound(handler);
} else {
this._addRoute(rootPath, handler, []);
}
};
/**
* Set redirects.
*
* @param {Object} map
*/
Router.prototype.redirect = function redirect(map) {
for (var path in map) {
this._addRedirect(path, map[path]);
}
};
/**
* Set aliases.
*
* @param {Object} map
*/
Router.prototype.alias = function alias(map) {
for (var path in map) {
this._addAlias(path, map[path]);
}
};
/**
* Set global before hook.
*
* @param {Function} fn
*/
Router.prototype.beforeEach = function beforeEach(fn) {
this._beforeEachHooks.push(fn);
};
/**
* Set global after hook.
*
* @param {Function} fn
*/
Router.prototype.afterEach = function afterEach(fn) {
this._afterEachHooks.push(fn);
};
/**
* Navigate to a given path.
* The path can be an object describing a named path in
* the format of { name: '...', params: {}, query: {}}
* The path is assumed to be already decoded, and will
* be resolved against root (if provided)
*
* @param {String|Object} path
* @param {Boolean} [replace]
*/
Router.prototype.go = function go(path) {
var replace = false;
var append = false;
if (Vue.util.isObject(path)) {
replace = path.replace;
append = path.append;
}
path = this._stringifyPath(path);
if (path) {
this.history.go(path, replace, append);
}
};
/**
* Short hand for replacing current path
*
* @param {String} path
*/
Router.prototype.replace = function replace(path) {
this.go({ path: path, replace: true });
};
/**
* Start the router.
*
* @param {VueConstructor} App
* @param {String|Element} container
* @param {Function} [cb]
*/
Router.prototype.start = function start(App, container, cb) {
/* istanbul ignore if */
if (this._started) {
_util.warn('already started.');
return;
}
this._started = true;
this._startCb = cb;
if (!this.app) {
/* istanbul ignore if */
if (!App || !container) {
throw new Error('Must start vue-router with a component and a ' + 'root container.');
}
this._appContainer = container;
this._appConstructor = typeof App === 'function' ? App : Vue.extend(App);
}
this.history.start();
};
/**
* Stop listening to route changes.
*/
Router.prototype.stop = function stop() {
this.history.stop();
this._started = false;
};
// Internal methods ======================================
/**
* Add a route containing a list of segments to the internal
* route recognizer. Will be called recursively to add all
* possible sub-routes.
*
* @param {String} path
* @param {Object} handler
* @param {Array} segments
*/
Router.prototype._addRoute = function _addRoute(path, handler, segments) {
guardComponent(path, handler);
handler.path = path;
handler.fullPath = (segments.reduce(function (path, segment) {
return path + segment.path;
}, '') + path).replace('//', '/');
segments.push({
path: path,
handler: handler
});
this._recognizer.add(segments, {
as:
});
// add sub routes
if (handler.subRoutes) {
for (var subPath in handler.subRoutes) {
// recursively walk all sub routes
this._addRoute(subPath, handler.subRoutes[subPath],
// pass a copy in recursion to avoid mutating
// across branches
segments.slice());
}
}
};
/**
* Set the notFound route handler.
*
* @param {Object} handler
*/
Router.prototype._notFound = function _notFound(handler) {
guardComponent('*', handler);
this._notFoundHandler = [{ handler: handler }];
};
/**
* Add a redirect record.
*
* @param {String} path
* @param {String} redirectPath
*/
Router.prototype._addRedirect = function _addRedirect(path, redirectPath) {
this._addGuard(path, redirectPath, this.replace);
};
/**
* Add an alias record.
*
* @param {String} path
* @param {String} aliasPath
*/
Router.prototype._addAlias = function _addAlias(path, aliasPath) {
this._addGuard(path, aliasPath, this._match);
};
/**
* Add a path guard.
*
* @param {String} path
* @param {String} mappedPath
* @param {Function} handler
*/
Router.prototype._addGuard = function _addGuard(path, mappedPath, _handler) {
var _this = this;
this._guardRecognizer.add([{
path: path,
handler: function handler(match, query) {
var realPath = _util.mapParams(mappedPath, match.params, query);
_handler.call(_this, realPath);
}
}]);
};
/**
* Check if a path matches any redirect records.
*
* @param {String} path
* @return {Boolean} - if true, will skip normal match.
*/
Router.prototype._checkGuard = function _checkGuard(path) {
var matched = this._guardRecognizer.recognize(path);
if (matched) {
matched[0].handler(matched[0], matched.queryParams);
return true;
}
};
function setRouter(path, b){
if(path == "/"){
return null;
}
var s = path.split('/');
var a = "/modules";
var h = "";
var f = "/modules";
var p = new Array();
for(var j=0;j<s.length;j++){
if(s[j] == ""){
continue;
}
if(j == s.length-1){
a += "/"+s[j]+".js";
path = "/"+s[j];
}else if(j == s.length - 2){
a += "/"+s[j]+"js";
h += "/"+s[j];
f += "/"+s[j]+".js";
p.push({
path: h,
handler: {
component: function (resolve) {
b.require.async([f],resolve);
}
}
});
}
else{
a += "/"+s[j]+"js";
h += "/"+s[j];
f += "/"+s[j]+"js";
}
}
b._addRoute(path,{
component: function (resolve) {
b.require.async([a],resolve);
}
},p);
return true;
}
/**
* Match a URL path and set the route context on vm,
* triggering view updates.
*
* @param {String} path
* @param {Object} [state]
* @param {String} [anchor]
*/
Router.prototype._match = function _match(path, state, anchor) {
var _this2 = this;
if (this._checkGuard(path)) {
return;
}
var prevRoute = this._currentRoute;
var prevTransition = this._currentTransition;
// do nothing if going to the same route.
// the route only changes when a transition successfully
// reaches activation; we don't need to do anything
// if an ongoing transition is aborted during validation
// phase.
if (prevTransition && path === prevRoute.path) {
return;
}
// construct new route and transition context
var route = new _route2['default'](path, this);
if(route.matched == null && setRouter(path,this)){
route = new _route2['default'](path, this);
}
var transition = new _transition2['default'](this, route, prevRoute);
this._prevTransition = prevTransition;
this._currentTransition = transition;
if (!this.app) {
// initial render
this.app = new this._appConstructor({
el: this._appContainer,
_meta: {
$route: route
}
});
}
// check global before hook
var beforeHooks = this._beforeEachHooks;
var startTransition = function startTransition() {
transition.start(function () {
_this2._postTransition(route, state, anchor);
});
};
if (beforeHooks.length) {
transition.runQueue(beforeHooks, function (hook, _, next) {
if (transition === _this2._currentTransition) {
transition.callHook(hook, null, next, true);
}
}, startTransition);
} else {
startTransition();
}
if (!this._rendered && this._startCb) {
this._startCb.call(null);
}
// HACK:
// set rendered to true after the transition start, so
// that components that are acitvated synchronously know
// whether it is the initial render.
this._rendered = true;
};
/**
* Set current to the new transition.
* This is called by the transition object when the
* validation of a route has succeeded.
*
* @param {Transition} transition
*/
Router.prototype._onTransitionValidated = function _onTransitionValidated(transition) {
// now that this one is validated, we can abort
// the previous transition.
var prevTransition = this._prevTransition;
if (prevTransition) {
prevTransition.aborted = true;
}
// set current route
var route = this._currentRoute = ;
// update route context for all children
if (this.app.$route !== route) {
this.app.$route = route;
this._children.forEach(function (child) {
child.$route = route;
});
}
// call global after hook
if (this._afterEachHooks.length) {
this._afterEachHooks.forEach(function (hook) {
return hook.call(null, {
to: ,
from: transition.from
});
});
}
this._currentTransition.done = true;
};
/**
* Handle stuff after the transition.
*
* @param {Route} route
* @param {Object} [state]
* @param {String} [anchor]
*/
Router.prototype._postTransition = function _postTransition(route, state, anchor) {
// handle scroll positions
// saved scroll positions take priority
// then we check if the path has an anchor
var pos = state && state.pos;
if (pos && this._saveScrollPosition) {
Vue.nextTick(function () {
window.scrollTo(pos.x, pos.y);
});
} else if (anchor) {
Vue.nextTick(function () {
var el = document.getElementById(anchor.slice(1));
if (el) {
window.scrollTo(window.scrollX, el.offsetTop);
}
});
}
};
/**
* Normalize named route object / string paths into
* a string.
*
* @param {Object|String|Number} path
* @return {String}
*/
Router.prototype._stringifyPath = function _stringifyPath(path) {
if (path && typeof path === 'object') {
if () {
var params = path.params || {};
if (path.query) {
params.queryParams = path.query;
}
return this._recognizer.generate(, params);
} else if (path.path) {
return path.path;
} else {
return '';
}
} else {
return path ? path + '' : '';
}
};
return Router;
})();
function guardComponent(path, handler) {
var comp = handler.component;
if (Vue.util.isPlainObject(comp)) {
comp = handler.component = Vue.extend(comp);
}
/* istanbul ignore if */
if (typeof comp !== 'function') {
handler.component = null;
_util.warn('invalid component for route "' + path + '".');
}
}
/* Installation */
Router.installed = false;
/**
* Installation interface.
* Install the necessary directives.
*/
Router.install = function (externalVue) {
/* istanbul ignore if */
if (Router.installed) {
_util.warn('already installed.');
return;
}
Vue = externalVue;
_mixin2['default'](Vue);
_directivesView2['default'](Vue);
_directivesLink2['default'](Vue);
_util2['default'].Vue = Vue;
// 1.0 only: enable route mixins
var strats = Vue.config.optionMergeStrategies;
if (strats) {
// use the same merge strategy as methods (object hash)
strats.route = strats.methods;
}
Router.installed = true;
};
// auto install
/* istanbul ignore if */
if (typeof window !== 'undefined' && window.Vue) {
window.Vue.use(Router);
}
exports['default'] = Router;
module.exports = exports['default'];
/***/ },
/* 1 */
/***/ function(module, exports) {
"use strict";
exports["default"] = function (instance, Constructor) {
if (!(instance instanceof Constructor)) {
throw new TypeError("Cannot call a class as a function");
}
};
exports.__esModule = true;
/***/ },
/* 2 */
/***/ function(module, exports) {
"use strict";
exports["default"] = function (obj) {
return obj && obj.__esModule ? obj : {
"default": obj
};
};
exports.__esModule = true;
/***/ },
/* 3 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _interopRequireDefault = __webpack_require__(2)['default'];
exports.__esModule = true;
exports.warn = warn;
exports.resolvePath = resolvePath;
exports.isPromise = isPromise;
exports.getRouteConfig = getRouteConfig;
exports.resolveAsyncComponent = resolveAsyncComponent;
exports.mapParams = mapParams;
var _routeRecognizer = __webpack_require__(4);
var _routeRecognizer2 = _interopRequireDefault(_routeRecognizer);
var genQuery = _routeRecognizer2['default'].prototype.generateQueryString;
// export default for holding the Vue reference
var _exports = {};
exports['default'] = _exports;
/**
* Warn stuff.
*
* @param {String} msg
*/
function warn(msg) {
/* istanbul ignore next */
if (window.console) {
console.warn('[vue-router] ' + msg);
/* istanbul ignore if */
if (!_exports.Vue || _exports.Vue.config.debug) {
console.warn(new Error('warning stack trace:').stack);
}
}
}
/**
* Resolve a relative path.
*
* @param {String} base
* @param {String} relative
* @param {Boolean} append
* @return {String}
*/
function resolvePath(base, relative, append) {
var query = base.match(/(\?.*)$/);
if (query) {
query = query[1];
base = base.slice(0, -query.length);
}
// a query!
if (relative.charAt(0) === '?') {
return base + relative;
}
var stack = base.split('/');
// remove trailing segment if:
// - not appending
// - appending to trailing slash (last segment is empty)
if (!append || !stack[stack.length - 1]) {
stack.pop();
}
// resolve relative path
var segments = relative.replace(/^\//, '').split('/');
for (var i = 0; i < segments.length; i++) {
var segment = segments[i];
if (segment === '.') {
continue;
} else if (segment === '..') {
stack.pop();
} else {
stack.push(segment);
}
}
// ensure leading slash
if (stack[0] !== '') {
stack.unshift('');
}
return stack.join('/');
}
/**
* Forgiving check for a promise
*
* @param {Object} p
* @return {Boolean}
*/
function isPromise(p) {
return p && typeof p.then === 'function';
}
/**
* Retrive a route config field from a component instance
* OR a component contructor.
*
* @param {Function|Vue} component
* @param {String} name
* @return {*}
*/
function getRouteConfig(component, name) {
var options = component && (component.$options || component.options);
return options && options.route && options.route[name];
}
/**
* Resolve an async component factory. Have to do a dirty
* mock here because of Vue core's internal API depends on
* an ID check.
*
* @param {Object} handler
* @param {Function} cb
*/
var resolver = undefined;
function resolveAsyncComponent(handler, cb) {
if (!resolver) {
resolver = {
resolve: _exports.Vue.prototype._resolveComponent,
$options: {
components: {
_: handler.component
}
}
};
} else {
resolver.$options.components._ = handler.component;
}
resolver.resolve('_', function (Component) {
handler.component = Component;
cb(Component);
});
}
/**
* Map the dynamic segments in a path to params.
*
* @param {String} path
* @param {Object} params
* @param {Object} query
*/
function mapParams(path, params, query) {
if (params === undefined) params = {};
path = path.replace(/:([^\/]+)/g, function (_, key) {
var val = params[key];
if (!val) {
warn('param "' + key + '" not found when generating ' + 'path for "' + path + '" with params ' + JSON.stringify(params));
}
return val || '';
});
if (query) {
path += genQuery(query);
}
return path;
}
/***/ },
/* 4 */
/***/ function(module, exports, __webpack_require__) {
var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {(function() {
"use strict";
function $$route$recognizer$dsl$$Target(path, matcher, delegate) {
this.path = path;
this.matcher = matcher;
this.delegate = delegate;
}
$$route$recognizer$dsl$$Target.prototype = {
to: function(target, callback) {
var delegate = this.delegate;
if (delegate && delegate.willAddRoute) {
target = delegate.willAddRoute(this.matcher.target, target);
}
this.matcher.add(this.path, target);
if (callback) {
if (callback.length === 0) { throw new Error("You must have an argument in the function passed to `to`"); }
this.matcher.addChild(this.path, target, callback, this.delegate);
}
return this;
}
};
function $$route$recognizer$dsl$$Matcher(target) {
this.routes = {};
this.children = {};
this.target = target;
}
$$route$recognizer$dsl$$Matcher.prototype = {
add: function(path, handler) {
this.routes[path] = handler;
},
addChild: function(path, target, callback, delegate) {
var matcher = new $$route$recognizer$dsl$$Matcher(target);
this.children[path] = matcher;
var match = $$route$recognizer$dsl$$generateMatch(path, matcher, delegate);
if (delegate && delegate.contextEntered) {
delegate.contextEntered(target, match);
}
callback(match);
}
};
function $$route$recognizer$dsl$$generateMatch(startingPath, matcher, delegate) {
return function(path, nestedCallback) {
var fullPath = startingPath + path;
if (nestedCallback) {
nestedCallback($$route$recognizer$dsl$$generateMatch(fullPath, matcher, delegate));
} else {
return new $$route$recognizer$dsl$$Target(startingPath + path, matcher, delegate);
}
};
}
function $$route$recognizer$dsl$$addRoute(routeArray, path, handler) {
var len = 0;
for (var i=0, l=routeArray.length; i<l; i++) {
len += routeArray[i].path.length;
}
path = path.substr(len);
var route = { path: path, handler: handler };
routeArray.push(route);
}
function $$route$recognizer$dsl$$eachRoute(baseRoute, matcher, callback, binding) {
var routes = matcher.routes;
for (var path in routes) {
if (routes.hasOwnProperty(path)) {
var routeArray = baseRoute.slice();
$$route$recognizer$dsl$$addRoute(routeArray, path, routes[path]);
if (matcher.children[path]) {
$$route$recognizer$dsl$$eachRoute(routeArray, matcher.children[path], callback, binding);
} else {
callback.call(binding, routeArray);
}
}
}
}
var $$route$recognizer$dsl$$default = function(callback, addRouteCallback) {
var matcher = new $$route$recognizer$dsl$$Matcher();
callback($$route$recognizer$dsl$$generateMatch("", matcher, this.delegate));
$$route$recognizer$dsl$$eachRoute([], matcher, function(route) {
if (addRouteCallback) { addRouteCallback(this, route); }
else { this.add(route); }
}, this);
};
var $$route$recognizer$$specials = [
'/', '.', '*', '+', '?', '|',
'(', ')', '[', ']', '{', '}', '\\'
];
var $$route$recognizer$$escapeRegex = new RegExp('(\\' + $$route$recognizer$$specials.join('|\\') + ')', 'g');
function $$route$recognizer$$isArray(test) {
return Object.prototype.toString.call(test) === "[object Array]";
}
// A Segment represents a segment in the original route description.
// Each Segment type provides an `eachChar` and `regex` method.
//
// The `eachChar` method invokes the callback with one or more character
// specifications. A character specification consumes one or more input
// characters.
//
// The `regex` method returns a regex fragment for the segment. If the
// segment is a dynamic of star segment, the regex fragment also includes
// a capture.
//
// A character specification contains:
//
// * `validChars`: a String with a list of all valid characters, or
// * `invalidChars`: a String with a list of all invalid characters
// * `repeat`: true if the character specification can repeat
function $$route$recognizer$$StaticSegment(string) { this.string = string; }
$$route$recognizer$$StaticSegment.prototype = {
eachChar: function(callback) {
var string = this.string, ch;
for (var i=0, l=string.length; i<l; i++) {
ch = string.charAt(i);
callback({ validChars: ch });
}
},
regex: function() {
return this.string.replace($$route$recognizer$$escapeRegex, '\\$1');
},
generate: function() {
return this.string;
}
};
function $$route$recognizer$$DynamicSegment(name) { = name; }
$$route$recognizer$$DynamicSegment.prototype = {
eachChar: function(callback) {
callback({ invalidChars: "/", repeat: true });
},
regex: function() {
return "([^/]+)";
},
generate: function(params) {
return params[];
}
};
function $$route$recognizer$$StarSegment(name) { = name; }
$$route$recognizer$$StarSegment.prototype = {
eachChar: function(callback) {
callback({ invalidChars: "", repeat: true });
},
regex: function() {
return "(.+)";
},
generate: function(params) {
return params[];
}
};
function $$route$recognizer$$EpsilonSegment() {}
$$route$recognizer$$EpsilonSegment.prototype = {
eachChar: function() {},
regex: function() { return ""; },
generate: function() { return ""; }
};
function $$route$recognizer$$parse(route, names, specificity) {
// normalize route as not starting with a "/". Recognition will
// also normalize.
if (route.charAt(0) === "/") { route = route.substr(1); }
var segments = route.split("/"), results = [];
// A routes has specificity determined by the order that its different segments
// appear in. This system mirrors how the magnitude of numbers written as strings
// works.
// Consider a number written as: "abc". An example would be "200". Any other number written
// "xyz" will be smaller than "abc" so long as `a > z`. For instance, "199" is smaller
// then "200", even though "y" and "z" (which are both 9) are larger than "0" (the value
// of (`b` and `c`). This is because the leading symbol, "2", is larger than the other
// leading symbol, "1".
// The rule is that symbols to the left carry more weight than symbols to the right
// when a number is written out as a string. In the above strings, the leading digit
// represents how many 100's are in the number, and it carries more weight than the middle
// number which represents how many 10's are in the number.
// This system of number magnitude works well for route specificity, too. A route written as
// `a/b/c` will be more specific than `x/y/z` as long as `a` is more specific than
// `x`, irrespective of the other parts.
// Because of this similarity, we assign each type of segment a number value written as a
// string. We can find the specificity of compound routes by concatenating these strings
// together, from left to right. After we have looped through all of the segments,
// we convert the string to a number.
specificity.val = '';
for (var i=0, l=segments.length; i<l; i++) {
var segment = segments[i], match;
if (match = segment.match(/^:([^\/]+)$/)) {
results.push(new $$route$recognizer$$DynamicSegment(match[1]));
names.push(match[1]);
specificity.val += '3';
} else if (match = segment.match(/^\*([^\/]+)$/)) {
results.push(new $$route$recognizer$$StarSegment(match[1]));
specificity.val += '2';
names.push(match[1]);
} else if(segment === "") {
results.push(new $$route$recognizer$$EpsilonSegment());
specificity.val += '1';
} else {
results.push(new $$route$recognizer$$StaticSegment(segment));
specificity.val += '4';
}
}
specificity.val = +specificity.val;
return results;
}
// A State has a character specification and (`charSpec`) and a list of possible
// subsequent states (`nextStates`).
//
// If a State is an accepting state, it will also have several additional
// properties:
//
// * `regex`: A regular expression that is used to extract parameters from paths
// that reached this accepting state.
// * `handlers`: Information on how to convert the list of captures into calls
// to registered handlers with the specified parameters
// * `types`: How many static, dynamic or star segments in this route. Used to
// decide which route to use if multiple registered routes match a path.
//
// Currently, State is implemented naively by looping over `nextStates` and
// comparing a character specification against a character. A more efficient
// implementation would use a hash of keys pointing at one or more next states.
function $$route$recognizer$$State(charSpec) {
this.charSpec = charSpec;
this.nextStates = [];
}
$$route$recognizer$$State.prototype = {
get: function(charSpec) {
var nextStates = this.nextStates;
for (var i=0, l=nextStates.length; i<l; i++) {
var child = nextStates[i];
var isEqual = child.charSpec.validChars === charSpec.validChars;
isEqual = isEqual && child.charSpec.invalidChars === charSpec.invalidChars;
if (isEqual) { return child; }
}
},
put: function(charSpec) {
var state;
// If the character specification already exists in a child of the current
// state, just return that state.
if (state = this.get(charSpec)) { return state; }
// Make a new state for the character spec
state = new $$route$recognizer$$State(charSpec);
// Insert the new state as a child of the current state
this.nextStates.push(state);
// If this character specification repeats, insert the new state as a child
// of itself. Note that this will not trigger an infinite loop because each
// transition during recognition consumes a character.
if (charSpec.repeat) {
state.nextStates.push(state);
}
// Return the new state
return state;
},
// Find a list of child states matching the next character
match: function(ch) {
// DEBUG "Processing `" + ch + "`:"
var nextStates = this.nextStates,
child, charSpec, chars;
// DEBUG " " + debugState(this)
var returned = [];
for (var i=0, l=nextStates.length; i<l; i++) {
child = nextStates[i];
charSpec = child.charSpec;
if (typeof (chars = charSpec.validChars) !== 'undefined') {
if (chars.indexOf(ch) !== -1) { returned.push(child); }
} else if (typeof (chars = charSpec.invalidChars) !== 'undefined') {
if (chars.indexOf(ch) === -1) { returned.push(child); }
}
}
return returned;
}
/** IF DEBUG
, debug: function() {
var charSpec = this.charSpec,
debug = "[",
chars = charSpec.validChars || charSpec.invalidChars;
if (charSpec.invalidChars) { debug += "^"; }
debug += chars;
debug += "]";
if (charSpec.repeat) { debug += "+"; }
return debug;
}
END IF **/
};
/** IF DEBUG
function debug(log) {
console.log(log);
}
function debugState(state) {
return state.nextStates.map(function(n) {
if (n.nextStates.length === 0) { return "( " + n.debug() + " [accepting] )"; }
return "( " + n.debug() + " <then> " + n.nextStates.map(function(s) { return s.debug() }).join(" or ") + " )";
}).join(", ")
}
END IF **/
// Sort the routes by specificity
function $$route$recognizer$$sortSolutions(states) {
return states.sort(function(a, b) {
return b.specificity.val - a.specificity.val;
});
}
function $$route$recognizer$$recognizeChar(states, ch) {
var nextStates = [];
for (var i=0, l=states.length; i<l; i++) {
var state = states[i];
nextStates = nextStates.concat(state.match(ch));
}
return nextStates;
}
var $$route$recognizer$$oCreate = Object.create || function(proto) {
function F() {}
F.prototype = proto;
return new F();
};
function $$route$recognizer$$RecognizeResults(queryParams) {
this.queryParams = queryParams || {};
}
$$route$recognizer$$RecognizeResults.prototype = $$route$recognizer$$oCreate({
splice: Array.prototype.splice,
slice: Array.prototype.slice,
push: Array.prototype.push,
length: 0,
queryParams: null
});
function $$route$recognizer$$findHandler(state, path, queryParams) {
var handlers = state.handlers, regex = state.regex;
var captures = path.match(regex), currentCapture = 1;
var result = new $$route$recognizer$$RecognizeResults(queryParams);
for (var i=0, l=handlers.length; i<l; i++) {
var handler = handlers[i], names = s, params = {};
for (var j=0, m=names.length; j<m; j++) {
params[names[j]] = captures[currentCapture++];
}
result.push({ handler: handler.handler, params: params, isDynamic: !!names.length });
}
return result;
}
function $$route$recognizer$$addSegment(currentState, segment) {
segment.eachChar(function(ch) {
var state;
currentState = currentState.put(ch);
});
return currentState;
}
function $$route$recognizer$$decodeQueryParamPart(part) {
// http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.1
part = part.replace(/\+/gm, '%20');
return decodeURIComponent(part);
}
// The main interface
var $$route$recognizer$$RouteRecognizer = function() {
this.rootState = new $$route$recognizer$$State();
s = {};
};
$$route$recognizer$$RouteRecognizer.prototype = {
add: function(routes, options) {
var currentState = this.rootState, regex = "^",
specificity = {},
handlers = [], allSegments = [], name;
var isEmpty = true;
for (var i=0, l=routes.length; i<l; i++) {
var route = routes[i], names = [];
var segments = $$route$recognizer$$parse(route.path, names, specificity);
allSegments = allSegments.concat(segments);
for (var j=0, m=segments.length; j<m; j++) {
var segment = segments[j];
if (segment instanceof $$route$recognizer$$EpsilonSegment) { continue; }
isEmpty = false;
// Add a "/" for the new segment
currentState = currentState.put({ validChars: "/" });
regex += "/";
// Add a representation of the segment to the NFA and regex
currentState = $$route$recognizer$$addSegment(currentState, segment);
regex += segment.regex();
}
var handler = { handler: route.handler, names: names };
handlers.push(handler);
}
if (isEmpty) {
currentState = currentState.put({ validChars: "/" });
regex += "/";
}
currentState.handlers = handlers;
currentState.regex = new RegExp(regex + "$");
currentState.specificity = specificity;
if (name = options && ) {
s[name] = {
segments: allSegments,
handlers: handlers
};
}
},
handlersFor: function(name) {
var route = s[name], result = [];
if (!route) { throw new Error("There is no route named " + name); }
for (var i=0, l=route.handlers.length; i<l; i++) {
result.push(route.handlers[i]);
}
return result;
},
hasRoute: function(name) {
return !!s[name];
},
generate: function(name, params) {
var route = s[name], output = "";
if (!route) { throw new Error("There is no route named " + name); }
var segments = route.segments;
for (var i=0, l=segments.length; i<l; i++) {
var segment = segments[i];
if (segment instanceof $$route$recognizer$$EpsilonSegment) { continue; }
output += "/";
output += segment.generate(params);
}
if (output.charAt(0) !== '/') { output = '/' + output; }
if (params && params.queryParams) {
output += this.generateQueryString(params.queryParams, route.handlers);
}
return output;
},
generateQueryString: function(params, handlers) {
var pairs = [];
var keys = [];
for(var key in params) {
if (params.hasOwnProperty(key)) {
keys.push(key);
}
}
keys.sort();
for (var i = 0, len = keys.length; i < len; i++) {
key = keys[i];
var value = params[key];
if (value == null) {
continue;
}
var pair = encodeURIComponent(key);
if ($$route$recognizer$$isArray(value)) {
for (var j = 0, l = value.length; j < l; j++) {
var arrayPair = key + '[]' + '=' + encodeURIComponent(value[j]);
pairs.push(arrayPair);
}
} else {
pair += "=" + encodeURIComponent(value);
pairs.push(pair);
}
}
if (pairs.length === 0) { return ''; }
return "?" + pairs.join("&");
},
parseQueryString: function(queryString) {
var pairs = queryString.split("&"), queryParams = {};
for(var i=0; i < pairs.length; i++) {
var pair = pairs[i].split('='),
key = $$route$recognizer$$decodeQueryParamPart(pair[0]),
keyLength = key.length,
isArray = false,
value;
if (pair.length === 1) {
value = 'true';
} else {
//Handle arrays
if (keyLength > 2 && key.slice(keyLength -2) === '[]') {
isArray = true;
key = key.slice(0, keyLength - 2);
if(!queryParams[key]) {
queryParams[key] = [];
}
}
value = pair[1] ? $$route$recognizer$$decodeQueryParamPart(pair[1]) : '';
}
if (isArray) {
queryParams[key].push(value);
} else {
queryParams[key] = value;
}
}
return queryParams;
},
recognize: function(path) {
var states = [ this.rootState ],
pathLen, i, l, queryStart, queryParams = {},
isSlashDropped = false;
queryStart = path.indexOf('?');
if (queryStart !== -1) {
var queryString = path.substr(queryStart + 1, path.length);
path = path.substr(0, queryStart);
queryParams = this.parseQueryString(queryString);
}
path = decodeURI(path);
// DEBUG GROUP path
if (path.charAt(0) !== "/") { path = "/" + path; }
pathLen = path.length;
if (pathLen > 1 && path.charAt(pathLen - 1) === "/") {
path = path.substr(0, pathLen - 1);
isSlashDropped = true;
}
for (i=0, l=path.length; i<l; i++) {
states = $$route$recognizer$$recognizeChar(states, path.charAt(i));
if (!states.length) { break; }
}
// END DEBUG GROUP
var solutions = [];
for (i=0, l=states.length; i<l; i++) {
if (states[i].handlers) { solutions.push(states[i]); }
}
states = $$route$recognizer$$sortSolutions(solutions);
var state = solutions[0];
if (state && state.handlers) {
// if a trailing slash was dropped and a star segment is the last segment
// specified, put the trailing slash back
if (isSlashDropped && state.regex.source.slice(-5) === "(.+)$") {
path = path + "/";
}
return $$route$recognizer$$findHandler(state, path, queryParams);
}
}
};
$$route$recognizer$$RouteRecognizer.prototype.map = $$route$recognizer$dsl$$default;
$$route$recognizer$$RouteRecognizer.VERSION = '0.1.9';
var $$route$recognizer$$default = $$route$recognizer$$RouteRecognizer;
/* global define:true module:true window: true */
if ("function" === 'function' && __webpack_require__(6)['amd']) {
!(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return $$route$recognizer$$default; }.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
} else if (typeof module !== 'undefined' && module['exports']) {
module['exports'] = $$route$recognizer$$default;
} else if (typeof this !== 'undefined') {
this['RouteRecognizer'] = $$route$recognizer$$default;
}
}).call(this);
//# sourceMappingURL=route-recognizer.js.map
/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(5)(module)))
/***/ },
/* 5 */
/***/ function(module, exports) {
module.exports = function(module) {
if(!module.webpackPolyfill) {
module.deprecate = function() {};
module.paths = [];
// module.parent = undefined by default
module.children = [];
module.webpackPolyfill = 1;
}
return module;
}
/***/ },
/* 6 */
/***/ function(module, exports) {
module.exports = function() { throw new Error("define cannot be used indirect"); };
/***/ },
/* 7 */
/***/ function(module, exports) {
'use strict';
exports.__esModule = true;
exports['default'] = function (Vue) {
var _ = Vue.util;
var mixin = {
init: function init() {
var route = this.$root.$route;
if (route) {
route.router._children.push(this);
if (!this.$route) {
_.defineReactive(this, '$route', route);
}
}
},
beforeDestroy: function beforeDestroy() {
var route = this.$root.$route;
if (route) {
route.router._children.$remove(this);
}
}
};
// pre 1.0.0-rc compat
if (!Vue.config.optionMergeStrategies || !Vue.config.optionMergeStrategies.init) {
(function () {
delete mixin.init;
var init = Vue.prototype._init;
Vue.prototype._init = function (options) {
var root = options._parent || options.parent || this;
var route = root.$route;
if (route) {
route.router._children.push(this);
if (!this.$route) {
if (this._defineMeta) {
this._defineMeta('$route', route);
} else {
_.defineReactive(this, '$route', route);
}
}
}
init.call(this, options);
};
})();
}
if (Vue.mixin) {
Vue.mixin(mixin);
} else {
// 0.12 compat
Vue.options = _.mergeOptions(Vue.options, mixin);
}
};
module.exports = exports['default'];
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
var _classCallCheck = __webpack_require__(1)["default"];
var _Object$freeze = __webpack_require__(9)["default"];
exports.__esModule = true;
var internalKeysRE = /^(component|subRoutes)$/;
/**
* Route Context Object
*
* @param {String} path
* @param {Router} router
*/
var Route = function Route(path, router) {
var _this = this;
_classCallCheck(this, Route);
var matched = router._recognizer.recognize(path);
if (matched) {
// copy all custom fields from route configs
[].forEach.call(matched, function (match) {
for (var key in match.handler) {
if (!internalKeysRE.test(key)) {
_this[key] = match.handler[key];
}
}
});
// set query and params
this.query = matched.queryParams;
this.params = [].reduce.call(matched, function (prev, cur) {
if (cur.params) {
for (var key in cur.params) {
prev[key] = cur.params[key];
}
}
return prev;
}, {});
}
// expose path and router
this.path = path;
this.router = router;
// for internal use
this.matched = matched || router._notFoundHandler;
// Important: freeze self to prevent observation
_Object$freeze(this);
};
exports["default"] = Route;
module.exports = exports["default"];
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(10), __esModule: true };
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
__webpack_require__(11);
module.exports = __webpack_require__(16).Object.freeze;
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
// 19.1.2.5 Object.freeze(O)
var isObject = __webpack_require__(12);
__webpack_require__(13)('freeze', function($freeze){
return function freeze(it){
return $freeze && isObject(it) ? $freeze(it) : it;
};
});
/***/ },
/* 12 */
/***/ function(module, exports) {
// http://jsperf.com/core-js-isobject
module.exports = function(it){
return it !== null && (typeof it == 'object' || typeof it == 'function');
};
/***/ },
/* 13 */
/***/ function(module, exports, __webpack_require__) {
// most Object methods by ES6 should accept primitives
module.exports = function(KEY, exec){
var $def = __webpack_require__(14)
, fn = (__webpack_require__(16).Object || {})[KEY] || Object[KEY]
, exp = {};
exp[KEY] = exec(fn);
$def($def.S + $def.F * __webpack_require__(17)(function(){ fn(1); }), 'Object', exp);
};
/***/ },
/* 14 */
/***/ function(module, exports, __webpack_require__) {
var global = __webpack_require__(15)
, core = __webpack_require__(16)
, PROTOTYPE = 'prototype';
var ctx = function(fn, that){
return function(){
return fn.apply(that, arguments);
};
};
var $def = function(type, name, source){
var key, own, out, exp
, isGlobal = type & $def.G
, isProto = type & $def.P
, target = isGlobal ? global : type & $def.S
? global[name] : (global[name] || {})[PROTOTYPE]
, exports = isGlobal ? core : core[name] || (core[name] = {});
if(isGlobal)source = name;
for(key in source){
// contains in native
own = !(type & $def.F) && target && key in target;
if(own && key in exports)continue;
// export native or passed
out = own ? target[key] : source[key];
// prevent global pollution for namespaces
if(isGlobal && typeof target[key] != 'function')exp = source[key];
// bind timers to global for call from export context
else if(type & $def.B && own)exp = ctx(out, global);
// wrap global constructors for prevent change them in library
else if(type & $def.W && target[key] == out)!function(C){
exp = function(param){
return this instanceof C ? new C(param) : C(param);
};
exp[PROTOTYPE] = C[PROTOTYPE];
}(out);
else exp = isProto && typeof out == 'function' ? ctx(Function.call, out) : out;
// export
exports[key] = exp;
if(isProto)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out;
}
};
// type bitmap
$def.F = 1; // forced
$def.G = 2; // global
$def.S = 4; // static
$def.P = 8; // proto
$def.B = 16; // bind
$def.W = 32; // wrap
module.exports = $def;
/***/ },
/* 15 */
/***/ function(module, exports) {
// https:///zloirock/core-js/issues/86#issuecomment-115759028
var UNDEFINED = 'undefined';
var global = module.exports = typeof window != UNDEFINED && window.Math == Math
? window : typeof self != UNDEFINED && self.Math == Math ? self : Function('return this')();
if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef
/***/ },
/* 16 */
/***/ function(module, exports) {
var core = module.exports = {};
if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef
/***/ },
/* 17 */
/***/ function(module, exports) {
module.exports = function(exec){
try {
return !!exec();
} catch(e){
return true;
}
};
/***/ },
/* 18 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _classCallCheck = __webpack_require__(1)['default'];
exports.__esModule = true;
var _util = __webpack_require__(3);
var _pipeline = __webpack_require__(19);
/**
* A RouteTransition object manages the pipeline of a
* router-view switching process. This is also the object
* passed into user route hooks.
*
* @param {Router} router
* @param {Route} to
* @param {Route} from
*/
var RouteTransition = (function () {
function RouteTransition(router, to, from) {
_classCallCheck(this, RouteTransition);
this.router = router;
this.to = to;
this.from = from;
this.next = null;
this.aborted = false;
this.done = false;
// start by determine the queues
// the deactivate queue is an array of router-view
// directive instances that need to be deactivated,
// deepest first.
this.deactivateQueue = router._views;
// check the default handler of the deepest match
var matched = to.matched ? Array.prototype.slice.call(to.matched) : [];
// the activate queue is an array of route handlers
// that need to be activated
this.activateQueue = matched.map(function (match) {
return match.handler;
});
}
/**
* Abort current transition and return to previous location.
*/
RouteTransition.prototype.abort = function abort() {
if (!this.aborted) {
this.aborted = true;
// if the root path throws an error during validation
// on initial load, it gets caught in an infinite loop.
var abortingOnLoad = !this.from.path && this.to.path === '/';
if (!abortingOnLoad) {
this.router.replace(this.from.path || '/');
}
}
};
/**
* Abort current transition and redirect to a new location.
*
* @param {String} path
*/
RouteTransition.prototype.redirect = function redirect(path) {
if (!this.aborted) {
this.aborted = true;
if (typeof path === 'string') {
path = _util.mapParams(path, this.to.params, this.to.query);
} else {
path.params = this.to.params;
path.query = this.to.query;
}
this.router.replace(path);
}
};
/**
* A router view transition's pipeline can be described as
* follows, assuming we are transitioning from an existing
* <router-view> chain [Component A, Component B] to a new
* chain [Component A, Component C]:
*
* A A
* | => |
* B C
*
* 1. Reusablity phase:
* -> canReuse(A, A)
* -> canReuse(B, C)
* -> determine new queues:
* - deactivation: [B]
* - activation: [C]
*
* 2. Validation phase:
* -> canDeactivate(B)
* -> canActivate(C)
*
* 3. Activation phase:
* -> deactivate(B)
* -> activate(C)
*
* Each of these steps can be asynchronous, and any
* step can potentially abort the transition.
*
* @param {Function} cb
*/
RouteTransition.prototype.start = function start(cb) {
var transition = this;
var daq = this.deactivateQueue;
var aq = this.activateQueue;
var rdaq = daq.slice().reverse();
var reuseQueue = undefined;
// 1. Reusability phase
var i = undefined;
for (i = 0; i < rdaq.length; i++) {
if (!_pipeline.canReuse(rdaq[i], aq[i], transition)) {
break;
}
}
if (i > 0) {
reuseQueue = rdaq.slice(0, i);
daq = rdaq.slice(i).reverse();
aq = aq.slice(i);
}
// 2. Validation phase
transition.runQueue(daq, _pipeline.canDeactivate, function () {
transition.runQueue(aq, _pipeline.canActivate, function () {
transition.runQueue(daq, _pipeline.deactivate, function () {
// 3. Activation phase
// Update router current route
transition.router._onTransitionValidated(transition);
// trigger reuse for all reused views
reuseQueue && reuseQueue.forEach(function (view) {
_pipeline.reuse(view, transition);
});
// the root of the chain that needs to be replaced
// is the top-most non-reusable view.
if (daq.length) {
var view = daq[daq.length - 1];
var depth = reuseQueue ? reuseQueue.length : 0;
_pipeline.activate(view, transition, depth, cb);
} else {
cb();
}
});
});
});
};
/**
* Asynchronously and sequentially apply a function to a
* queue.
*
* @param {Array} queue
* @param {Function} fn
* @param {Function} cb
*/
RouteTransition.prototype.runQueue = function runQueue(queue, fn, cb) {
var transition = this;
step(0);
function step(index) {
if (index >= queue.length) {
cb();
} else {
fn(queue[index], transition, function () {
step(index + 1);
});
}
}
};
/**
* Call a user provided route transition hook and handle
* the response (e.g. if the user returns a promise).
*
* @param {Function} hook
* @param {*} [context]
* @param {Function} [cb]
* @param {Object} [options]
* - {Boolean} expectBoolean
* - {Boolean} expectData
* - {Function} cleanup
*/
RouteTransition.prototype.callHook = function callHook(hook, context, cb) {
var _ref = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
var _ref$expectBoolean = _ref.expectBoolean;
var expectBoolean = _ref$expectBoolean === undefined ? false : _ref$expectBoolean;
var _ref$expectData = _ref.expectData;
var expectData = _ref$expectData === undefined ? false : _ref$expectData;
var cleanup = _ref.cleanup;
var transition = this;
var nextCalled = false;
// abort the transition
var abort = function abort(back) {
cleanup && cleanup();
transition.abort(back);
};
// handle errors
var onError = function onError(err) {
// cleanup indicates an after-activation hook,
// so instead of aborting we just let the transition
// finish.
cleanup ? next() : abort();
if (err && !transition.router._suppress) {
_util.warn('Uncaught error during transition: ');
throw err instanceof Error ? err : new Error(err);
}
};
// advance the transition to the next step
var next = function next(data) {
if (nextCalled) {
_util.warn('transition.next() should be called only once.');
return;
}
nextCalled = true;
if (!cb || transition.aborted) {
return;
}
cb(data, onError);
};
// expose a clone of the transition object, so that each
// hook gets a clean copy and prevent the user from
// messing with the internals.
var exposed = {
to: ,
from: transition.from,
abort: abort,
next: next,
redirect: function redirect() {
transition.redirect.apply(transition, arguments);
}
};
// actually call the hook
var res = undefined;
try {
res = hook.call(context, exposed);
} catch (err) {
return onError(err);
}
// handle boolean/promise return values
var resIsPromise = _util.isPromise(res);
if (expectBoolean) {
if (typeof res === 'boolean') {
res ? next() : abort();
} else if (resIsPromise) {
res.then(function (ok) {
ok ? next() : abort();
}, onError);
}
} else if (resIsPromise) {
res.then(next, onError);
} else if (expectData && isPlainOjbect(res)) {
next(res);
}
};
return RouteTransition;
})();
exports['default'] = RouteTransition;
function isPlainOjbect(val) {
return Object.prototype.toString.call(val) === '[object Object]';
}
module.exports = exports['default'];
/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _Object$keys = __webpack_require__(20)['default'];
exports.__esModule = true;
exports.canReuse = canReuse;
exports.canDeactivate = canDeactivate;
exports.canActivate = canActivate;
exports.deactivate = deactivate;
exports.activate = activate;
exports.reuse = reuse;
var _util = __webpack_require__(3);
/**
* Determine the reusability of an existing router view.
*
* @param {Directive} view
* @param {Object} handler
* @param {Transition} transition
*/
function canReuse(view, handler, transition) {
var component = view.childVM;
if (!component || !handler) {
return false;
}
// important: check view.Component here because it may
// have been changed in activate hook
if (view.Component !== handler.component) {
return false;
}
var canReuseFn = _util.getRouteConfig(component, 'canReuse');
return typeof canReuseFn === 'boolean' ? canReuseFn : canReuseFn ? canReuseFn.call(component, {
to: ,
from: transition.from
}) : true; // defaults to true
}
/**
* Check if a component can deactivate.
*
* @param {Directive} view
* @param {Transition} transition
* @param {Function} next
*/
function canDeactivate(view, transition, next) {
var fromComponent = view.childVM;
var hook = _util.getRouteConfig(fromComponent, 'canDeactivate');
if (!hook) {
next();
} else {
transition.callHook(hook, fromComponent, next, {
expectBoolean: true
});
}
}
/**
* Check if a component can activate.
*
* @param {Object} handler
* @param {Transition} transition
* @param {Function} next
*/
function canActivate(handler, transition, next) {
_util.resolveAsyncComponent(handler, function (Component) {
// have to check due to async-ness
if (transition.aborted) {
return;
}
// determine if this component can be activated
var hook = _util.getRouteConfig(Component, 'canActivate');
if (!hook) {
next();
} else {
transition.callHook(hook, null, next, {
expectBoolean: true
});
}
});
}
/**
* Call deactivate hooks for existing router-views.
*
* @param {Directive} view
* @param {Transition} transition
* @param {Function} next
*/
function deactivate(view, transition, next) {
var component = view.childVM;
var hook = _util.getRouteConfig(component, 'deactivate');
if (!hook) {
next();
} else {
transition.callHook(hook, component, next);
}
}
/**
* Activate / switch component for a router-view.
*
* @param {Directive} view
* @param {Transition} transition
* @param {Number} depth
* @param {Function} [cb]
*/
function activate(view, transition, depth, cb) {
var handler = transition.activateQueue[depth];
if (!handler) {
// fix 1.0.0-alpha.3 compat
if (view._bound) {
view.setComponent(null);
}
cb && cb();
return;
}
var Component = view.Component = handler.component;
var activateHook = _util.getRouteConfig(Component, 'activate');
var dataHook = _util.getRouteConfig(Component, 'data');
var waitForData = _util.getRouteConfig(Component, 'waitForData');
view.depth = depth;
view.activated = false;
// unbuild current component. this step also destroys
// and removes all nested child views.
view.unbuild(true);
// build the new component. this will also create the
// direct child view of the current one. it will register
// itself as view.childView.
var component = view.build({
_meta: {
$loadingRouteData: !!(dataHook && !waitForData)
}
});
// cleanup the component in case the transition is aborted
// before the component is ever inserted.
var cleanup = function cleanup() {
component.$destroy();
};
// actually insert the component and trigger transition
var insert = function insert() {
var router = transition.router;
if (router._rendered || router._transitionOnLoad) {
view.transition(component);
} else {
// no transition on first render, manual transition
if (view.setCurrent) {
// 0.12 compat
view.setCurrent(component);
} else {
// 1.0
view.childVM = component;
}
component.$before(view.anchor, null, false);
}
cb && cb();
};
// called after activation hook is resolved
var afterActivate = function afterActivate() {
view.activated = true;
// activate the child view
if (view.childView) {
activate(view.childView, transition, depth + 1);
}
if (dataHook && waitForData) {
// wait until data loaded to insert
loadData(component, transition, dataHook, insert, cleanup);
} else {
// load data and insert at the same time
if (dataHook) {
loadData(component, transition, dataHook);
}
insert();
}
};
if (activateHook) {
transition.callHook(activateHook, component, afterActivate, {
cleanup: cleanup
});
} else {
afterActivate();
}
}
/**
* Reuse a view, just reload data if necessary.
*
* @param {Directive} view
* @param {Transition} transition
*/
function reuse(view, transition) {
var component = view.childVM;
var dataHook = _util.getRouteConfig(component, 'data');
if (dataHook) {
loadData(component, transition, dataHook);
}
}
/**
* Asynchronously load and apply data to component.
*
* @param {Vue} component
* @param {Transition} transition
* @param {Function} hook
* @param {Function} cb
* @param {Function} cleanup
*/
function loadData(component, transition, hook, cb, cleanup) {
component.$loadingRouteData = true;
transition.callHook(hook, component, function (data, onError) {
var promises = [];
_Object$keys(data).forEach(function (key) {
var val = data[key];
if (_util.isPromise(val)) {
promises.push(val.then(function (resolvedVal) {
component.$set(key, resolvedVal);
}));
} else {
component.$set(key, val);
}
});
if (!promises.length) {
component.$loadingRouteData = false;
} else {
promises[0].constructor.all(promises).then(function (_) {
component.$loadingRouteData = false;
}, onError);
}
cb && cb(data);
}, {
cleanup: cleanup,
expectData: true
});
}
/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {
module.exports = { "default": __webpack_require__(21), __esModule: true };
/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {
__webpack_require__(22);
module.exports = __webpack_require__(16).Object.keys;
/***/ },
/* 22 */
/***/ function(module, exports, __webpack_require__) {
// 19.1.2.14 Object.keys(O)
var toObject = __webpack_require__(23);
__webpack_require__(13)('keys', function($keys){
return function keys(it){
return $keys(toObject(it));
};
});
/***/ },
/* 23 */
/***/ function(module, exports, __webpack_require__) {
// 7.1.13 ToObject(argument)
var defined = __webpack_require__(24);
module.exports = function(it){
return Object(defined(it));
};
/***/ },
/* 24 */
/***/ function(module, exports) {
// 7.2.1 RequireObjectCoercible(argument)
module.exports = function(it){
if(it == undefined)throw TypeError("Can't call method on " + it);
return it;
};
/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
var _util = __webpack_require__(3);
var _pipeline = __webpack_require__(19);
exports['default'] = function (Vue) {
var _ = Vue.util;
var componentDef =
// 0.12
Vue.directive('_component') ||
// 1.0
Vue.internalDirectives.component;
// <router-view> extends the internal component directive
var viewDef = _.extend({}, componentDef);
// with some overrides
_.extend(viewDef, {
_isRouterView: true,
bind: function bind() {
var route = this.vm.$route;
/* istanbul ignore if */
if (!route) {
_util.warn('<router-view> can only be used inside a ' + 'router-enabled app.');
return;
}
// force dynamic directive so v-component doesn't
// attempt to build right now
this._isDynamicLiteral = true;
// finally, init by delegating to v-component
componentDef.bind.call(this);
// does not support keep-alive.
/* istanbul ignore if */
if (this.keepAlive) {
this.keepAlive = false;
_util.warn('<router-view> does not support keep-alive.');
}
// all we need to do here is registering this view
// in the router. actual component switching will be
// managed by the pipeline.
var router = this.router = route.router;
router._views.unshift(this);
// note the views are in reverse order.
var parentView = router._views[1];
if (parentView) {
// register self as a child of the parent view,
// instead of activating now. This is so that the
// child's activate hook is called after the
// parent's has resolved.
parentView.childView = this;
}
// handle late-rendered view
// two possibilities:
// 1. root view rendered after transition has been
// validated;
// 2. child view rendered after parent view has been
// activated.
var transition = route.router._currentTransition;
if (!parentView && transition.done || parentView && parentView.activated) {
var depth = parentView ? parentView.depth + 1 : 0;
_pipeline.activate(this, transition, depth);
}
},
unbind: function unbind() {
this.router._views.$remove(this);
componentDef.unbind.call(this);
}
});
Vue.elementDirective('router-view', viewDef);
};
module.exports = exports['default'];
/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
exports.__esModule = true;
var _util = __webpack_require__(3);
var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
// install v-link, which provides navigation support for
// HTML5 history mode
exports['default'] = function (Vue) {
var _ = Vue.util;
Vue.directive('link', {
bind: function bind() {
var _this = this;
var vm = this.vm;
/* istanbul ignore if */
if (!vm.$route) {
_util.warn('v-link can only be used inside a ' + 'router-enabled app.');
return;
}
var router = vm.$route.router;
this.handler = function (e) {
// don't redirect with control keys
if (e.metaKey || e.ctrlKey || e.shiftKey) return;
// don't redirect when preventDefault called
if (e.defaultPrevented) return;
// don't redirect on right click
if (e.button !== 0) return;
var target = _this.target;
if (_this.el.tagName === 'A' || e.target === _this.el) {
// v-link on <a v-link="'path'">
e.preventDefault();
if (target != null) {
router.go(target);
}
} else {
// v-link delegate on <div v-link>
var el = e.target;
while (el && el.tagName !== 'A' && el !== _this.el) {
el = el.parentNode;
}
if (!el || el.tagName !== 'A' || !el.href) return;
if (sameOrigin(el)) {
e.preventDefault();
router.go({
path: el.pathname,
replace: target && target.replace,
append: target && target.append
});
}
}
};
this.el.addEventListener('click', this.handler);
// manage active link class
this.unwatch = vm.$watch('$route.path', _.bind(this.updateClasses, this));
},
update: function update(path) {
var router = this.vm.$route.router;
var append = undefined;
this.target = path;
if (_.isObject(path)) {
append = path.append;
this.exact = path.exact;
this.prevActiveClass = this.activeClass;
this.activeClass = path.activeClass;
}
path = this.path = router._stringifyPath(path);
this.activeRE = path && !this.exact ? new RegExp('^' + path.replace(/\/$/, '').replace(regexEscapeRE, '\\$&') + '(\\/|$)') : null;
this.updateClasses(this.vm.$route.path);
var isAbsolute = path.charAt(0) === '/';
// do not format non-hash relative paths
var href = path && (router.mode === 'hash' || isAbsolute) ? router.history.formatPath(path, append) : path;
if (this.el.tagName === 'A') {
if (href) {
this.el.href = href;
} else {
this.el.removeAttribute('href');
}
}
},
updateClasses: function updateClasses(path) {
var el = this.el;
var dest = this.path;
var router = this.vm.$route.router;
var activeClass = this.activeClass || router._linkActiveClass;
// clear old class
if (this.prevActiveClass !== activeClass) {
_.removeClass(el, this.prevActiveClass);
}
// add new class
if (this.exact) {
if (path === dest) {
_.addClass(el, activeClass);
} else {
_.removeClass(el, activeClass);
}
} else {
if (this.activeRE && this.activeRE.test(path)) {
_.addClass(el, activeClass);
} else {
_.removeClass(el, activeClass);
}
}
},
unbind: function unbind() {
this.el.removeEventListener('click', this.handler);
this.unwatch && this.unwatch();
}
});
function sameOrigin(link) {
return link.protocol === location.protocol && link.hostname === location.hostname && link.port === location.port;
}
};
module.exports = exports['default'];
/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _classCallCheck = __webpack_require__(1)['default'];
exports.__esModule = true;
var _util = __webpack_require__(3);
var AbstractHistory = (function () {
function AbstractHistory(_ref) {
var onChange = _ref.onChange;
_classCallCheck(this, AbstractHistory);
this.onChange = onChange;
this.currentPath = '/';
}
AbstractHistory.prototype.start = function start() {
this.onChange('/');
};
AbstractHistory.prototype.stop = function stop() {
// noop
};
AbstractHistory.prototype.go = function go(path, replace, append) {
path = this.currentPath = this.formatPath(path, append);
this.onChange(path);
};
AbstractHistory.prototype.formatPath = function formatPath(path, append) {
return path.charAt(0) === '/' ? path : _util.resolvePath(this.currentPath, path, append);
};
return AbstractHistory;
})();
exports['default'] = AbstractHistory;
module.exports = exports['default'];
/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _classCallCheck = __webpack_require__(1)['default'];
exports.__esModule = true;
var _util = __webpack_require__(3);
var HashHistory = (function () {
function HashHistory(_ref) {
var hashbang = _ref.hashbang;
var onChange = _ref.onChange;
_classCallCheck(this, HashHistory);
this.hashbang = hashbang;
this.onChange = onChange;
}
HashHistory.prototype.start = function start() {
var self = this;
this.listener = function () {
var path = location.hash;
var raw = path.replace(/^#!?/, '');
// always
if (raw.charAt(0) !== '/') {
raw = '/' + raw;
}
var formattedPath = self.formatPath(raw);
if (formattedPath !== path) {
location.replace(formattedPath);
return;
}
var pathToMatch = decodeURI(path.replace(/^#!?/, '') + location.search);
self.onChange(pathToMatch);
};
window.addEventListener('hashchange', this.listener);
this.listener();
};
HashHistory.prototype.stop = function stop() {
window.removeEventListener('hashchange', this.listener);
};
HashHistory.prototype.go = function go(path, replace, append) {
path = this.formatPath(path, append);
if (replace) {
location.replace(path);
} else {
location.hash = path;
}
};
HashHistory.prototype.formatPath = function formatPath(path, append) {
var isAbsoloute = path.charAt(0) === '/';
var prefix = '#' + (this.hashbang ? '!' : '');
return isAbsoloute ? prefix + path : prefix + _util.resolvePath(location.hash.replace(/^#!?/, ''), path, append);
};
return HashHistory;
})();
exports['default'] = HashHistory;
module.exports = exports['default'];
/***/ },
/* 29 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
var _classCallCheck = __webpack_require__(1)['default'];
exports.__esModule = true;
var _util = __webpack_require__(3);
var hashRE = /#.*$/;
var HTML5History = (function () {
function HTML5History(_ref) {
var root = _ref.root;
var onChange = _ref.onChange;
_classCallCheck(this, HTML5History);
if (root) {
// make sure there's the starting slash
if (root.charAt(0) !== '/') {
root = '/' + root;
}
// remove trailing slash
this.root = root.replace(/\/$/, '');
this.rootRE = new RegExp('^\\' + this.root);
} else {
this.root = null;
}
this.onChange = onChange;
// check base tag
var baseEl = document.querySelector('base');
this.base = baseEl && baseEl.getAttribute('href');
}
HTML5History.prototype.start = function start() {
var _this = this;
this.listener = function (e) {
var url = decodeURI(location.pathname + location.search);
if (_this.root) {
url = url.replace(_this.rootRE, '');
}
_this.onChange(url, e && e.state, location.hash);
};
window.addEventListener('popstate', this.listener);
this.listener();
};
HTML5History.prototype.stop = function stop() {
window.removeEventListener('popstate', this.listener);
};
HTML5History.prototype.go = function go(path, replace, append) {
var url = this.formatPath(path, append);
if (replace) {
history.replaceState({}, '', url);
} else {
// record scroll position by replacing current state
history.replaceState({
pos: {
x: window.pageXOffset,
y: window.pageYOffset
}
}, '');
// then push new state
history.pushState({}, '', url);
}
var hashMatch = path.match(hashRE);
var hash = hashMatch && hashMatch[0];
path = url
// strip hash so it doesn't mess up params
.replace(hashRE, '')
// remove root before matching
.replace(this.rootRE, '');
this.onChange(path, null, hash);
};
HTML5History.prototype.formatPath = function formatPath(path, append) {
return path.charAt(0) === '/'
// absolute path
? this.root ? this.root + '/' + path.replace(/^\//, '') : path : _util.resolvePath(this.base || location.pathname, path, append);
};
return HTML5History;
})();
exports['default'] = HTML5History;
module.exports = exports['default'];
/***/ }
/******/ ])
});
;
















