自己修改的两个js文件
sea-base.js
/**
* Sea.js 2.2.3 | seajs.org/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://test.com/a//./b/../c") ==> "http://test.com/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 `ex.name` 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 (ex.name === "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://goo.gl/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(emitData.id, 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://test.com/libs/seajs/[??][seajs/1.2.3/]sea.js`, the
// baseUri should be `http://test.com/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: handler.name
});
// 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 = transition.to;
// 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: transition.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 (path.name) {
var params = path.params || {};
if (path.query) {
params.queryParams = path.query;
}
return this._recognizer.generate(path.name, 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) { this.name = name; }
$$route$recognizer$$DynamicSegment.prototype = {
eachChar: function(callback) {
callback({ invalidChars: "/", repeat: true });
}, regex: function() {
return "([^/]+)";
}, generate: function(params) {
return params[this.name];
}
}; function $$route$recognizer$$StarSegment(name) { this.name = name; }
$$route$recognizer$$StarSegment.prototype = {
eachChar: function(callback) {
callback({ invalidChars: "", repeat: true });
}, regex: function() {
return "(.+)";
}, generate: function(params) {
return params[this.name];
}
}; 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 = handler.names, 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();
this.names = {};
}; $$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 && options.as) {
this.names[name] = {
segments: allSegments,
handlers: handlers
};
}
}, handlersFor: function(name) {
var route = this.names[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 !!this.names[name];
}, generate: function(name, params) {
var route = this.names[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://github.com/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: transition.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: transition.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']; /***/ }
/******/ ])
});
;
自己修改的两个js文件的更多相关文章
- 两个js文件之间函数互调问题
按照常理来说,在<body>标签结束之前以下面的方式引入两个js文件 <script src="a.js"></script> <scri ...
- 在写php项目时 修改外部css或js文件没有效果
原因是:浏览器的自动缓存机制导致的. 这是因为浏览器会自动缓存静态文件以加快访问速度,所以这就导致浏览器将不会再接收静态文件了 解决办法是 使用ctrl+F5 —— 传说中的完全刷新,会删掉所有本地临 ...
- js文件缓存之版本管理
以前也做过不少项目,但从来就没有把关注的目光投向过js文件缓存.最近终于在毫无意识的情况下跳进了这个大坑. 近几个月来的工作是一个交易系统持续改进项目,迭代发布周期大约为2~3周.最近一次迭代是V16 ...
- frames的对象兼容性获取以及跨域实现数据交换(js文件的加载判断)
1.document.frames()与document.frames[]的区别 <html> <body> <iframe id="ifr_1" n ...
- 关于js预编译以及js文件执行顺序的几个问题。
关于js的执行原理,除去html页面中直接添加的代码,js代码的放置可以分为两类. //情形a <script type="text/javascript" ...
- 学习笔记:调用js文件冲突问题解决方案
之前自己动手做了一个小网站,在实现过程中遇到了一个关于js文件调用冲突的问题. 具体问题描述如下:在index.html文件中引用了两个js文件,单独添加banner.js或者focus_pic.js ...
- 怎样把网站js文件合并成一个?几种方法可以实现
我们在建网站时经常会用js特效代码以使页面更美观,比如js幻灯片代码.js下拉菜单等,但是网页特效一多,如果js文件没有合并的话会降低网站的性能,这时我们就要考虑合并js文件了,ytkah总结了以下几 ...
- 在VS中让一个JS文件智能提示另一个JS文件中的成员
“在VS中如何让一个JS文件智能提示另一个JS文件中的成员” 有时候会有这种情况:当我的一个Web页面引用了两个JS文件(假如分别叫common.js和JScript1.js),如果JScript1. ...
- Visual Studio中让一个JS文件智能提示另一个JS文件中的成员
当一个Web页面引用了两个JS文件(假如分别叫common.js和JScript1.js),如果JScript1.js中需要调用大量的common.js中的方法,这时候在JScript1.js中智能提 ...
随机推荐
- JAVA学习遇到的问题:接口实现
引用知乎看到对接口的总结: 接口就是个招牌比如说你饿了,看到前面有个挂着KFC的店,然后你想到可以进去买汉堡了.KFC就是接口,我们看到了这个接口,就知道这个店会卖汉堡(实现接口).那么为什么我们要去 ...
- 【LeetCode OJ】Recover Binary Search Tree
Problem Link: https://oj.leetcode.com/problems/recover-binary-search-tree/ We know that the inorder ...
- magento的url中 去掉多余的目录层级
有时我们需要仅仅显示一层目录的URL路径.而不要出现多个路径的现实,我们可以用以下方法修改: Edit /app/code/core/Mage/Catalog/Model/Url.php 找到632 ...
- php语言的几种循环语句的使用格式,及其区别
while 只要指定的条件成立,则循环执行代码块 do...while 首先执行一次代码块,然后在指定的条件成立时重复这个循环 for 循环执行代码块指定的次数 foreach 根据数组中每个元素来循 ...
- 使用for循环遍历数组
package review20140419;/* * 遍历数组 */public abstract class Test1 { //程序入口 public static void mai ...
- C++学习笔记34:泛型编程拓展3
输入流迭代器 #include <iostream> #include <iterator> #include <algorithm> #include <v ...
- the django travel(two)
一:django路由系统: 注意:我们在urls.py中 定义url的时候,可以加$和不加$,区别的是:加$正则匹配的时候,比如:'/index/$'只能匹配'/index/'这样的url 不能匹配' ...
- 原生js tab 栏切换
<div id="box"> <div> <button>按钮1</button> <button>按钮2</bu ...
- 字符串与json对象之间转换
var data='{"1":"","2":"two"}' 原生 eval eval('('++')') JSON.p ...
- 转载:Qt之界面实现技巧
总结一下,在开发Qt的过程中的一些技巧!可遇而不可求... 一.主界面 1.窗口 最小化 最大化 关闭按钮.显示状态自定义 setWindowFlags(Qt::CustomizeWindowHint ...