UNPKG

@progress/kendo-ui

Version:

This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.

616 lines (479 loc) 17.9 kB
module.exports = /******/ (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__) { module.exports = __webpack_require__(1290); /***/ }), /***/ 3: /***/ (function(module, exports) { module.exports = function() { throw new Error("define cannot be used indirect"); }; /***/ }), /***/ 1006: /***/ (function(module, exports) { module.exports = require("./kendo.core"); /***/ }), /***/ 1290: /***/ (function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;(function(f, define){ !(__WEBPACK_AMD_DEFINE_ARRAY__ = [ __webpack_require__(1006) ], __WEBPACK_AMD_DEFINE_FACTORY__ = (f), __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? (__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); })(function(){ var __meta__ = { // jshint ignore:line id: "router", name: "Router", category: "framework", description: "The Router class is responsible for tracking the application state and navigating between the application states.", depends: [ "core" ], hidden: false }; (function($, undefined) { var kendo = window.kendo, CHANGE = "change", BACK = "back", SAME = "same", support = kendo.support, location = window.location, history = window.history, CHECK_URL_INTERVAL = 50, BROKEN_BACK_NAV = kendo.support.browser.msie, hashStrip = /^#*/, document = window.document; function absoluteURL(path, pathPrefix) { if (!pathPrefix) { return path; } if (path + "/" === pathPrefix) { path = pathPrefix; } var regEx = new RegExp("^" + pathPrefix, "i"); if (!regEx.test(path)) { path = pathPrefix + "/" + path; } return location.protocol + '//' + (location.host + "/" + path).replace(/\/\/+/g, '/'); } function hashDelimiter(bang) { return bang ? "#!" : "#"; } function locationHash(hashDelimiter) { var href = location.href; // ignore normal anchors if in hashbang mode - however, still return "" if no hash present if (hashDelimiter === "#!" && href.indexOf("#") > -1 && href.indexOf("#!") < 0) { return null; } return href.split(hashDelimiter)[1] || ""; } function stripRoot(root, url) { if (url.indexOf(root) === 0) { return (url.substr(root.length)).replace(/\/\//g, '/'); } else { return url; } } var HistoryAdapter = kendo.Class.extend({ back: function() { if (BROKEN_BACK_NAV) { setTimeout(function() { history.back(); }); } else { history.back(); } }, forward: function() { if (BROKEN_BACK_NAV) { setTimeout(function() { history.forward(); }); } else { history.forward(); } }, length: function() { return history.length; }, replaceLocation: function(url) { location.replace(url); } }); var PushStateAdapter = HistoryAdapter.extend({ init: function(root) { this.root = root; }, navigate: function(to) { history.pushState({}, document.title, absoluteURL(to, this.root)); }, replace: function(to) { history.replaceState({}, document.title, absoluteURL(to, this.root)); }, normalize: function(url) { return stripRoot(this.root, url); }, current: function() { var current = location.pathname; if (location.search) { current += location.search; } return stripRoot(this.root, current); }, change: function(callback) { $(window).bind("popstate.kendo", callback); }, stop: function() { $(window).unbind("popstate.kendo"); }, normalizeCurrent: function(options) { var fixedUrl, root = options.root, pathname = location.pathname, hash = locationHash(hashDelimiter(options.hashBang)); if (root === pathname + "/") { fixedUrl = root; } if (root === pathname && hash) { fixedUrl = absoluteURL(hash.replace(hashStrip, ''), root); } if (fixedUrl) { history.pushState({}, document.title, fixedUrl); } } }); function fixHash(url) { return url.replace(/^(#)?/, "#"); } function fixBang(url) { return url.replace(/^(#(!)?)?/, "#!"); } var HashAdapter = HistoryAdapter.extend({ init: function(bang) { this._id = kendo.guid(); this.prefix = hashDelimiter(bang); this.fix = bang ? fixBang : fixHash; }, navigate: function(to) { location.hash = this.fix(to); }, replace: function(to) { this.replaceLocation(this.fix(to)); }, normalize: function(url) { if (url.indexOf(this.prefix) < 0) { return url; } else { return url.split(this.prefix)[1]; } }, change: function(callback) { if (support.hashChange) { $(window).on("hashchange." + this._id, callback); } else { this._interval = setInterval(callback, CHECK_URL_INTERVAL); } }, stop: function() { $(window).off("hashchange." + this._id); clearInterval(this._interval); }, current: function() { return locationHash(this.prefix); }, normalizeCurrent: function(options) { var pathname = location.pathname, root = options.root; if (options.pushState && root !== pathname) { this.replaceLocation(root + this.prefix + stripRoot(root, pathname)); return true; // browser will reload at this point. } return false; } }); var History = kendo.Observable.extend({ start: function(options) { options = options || {}; this.bind([CHANGE, BACK, SAME], options); if (this._started) { return; } this._started = true; options.root = options.root || "/"; var adapter = this.createAdapter(options), current; // adapter may reload the document if (adapter.normalizeCurrent(options)) { return; } current = adapter.current(); $.extend(this, { adapter: adapter, root: options.root, historyLength: adapter.length(), current: current, locations: [current] }); adapter.change($.proxy(this, "_checkUrl")); }, createAdapter:function(options) { return support.pushState && options.pushState ? new PushStateAdapter(options.root) : new HashAdapter(options.hashBang); }, stop: function() { if (!this._started) { return; } this.adapter.stop(); this.unbind(CHANGE); this._started = false; }, change: function(callback) { this.bind(CHANGE, callback); }, replace: function(to, silent) { this._navigate(to, silent, function(adapter) { adapter.replace(to); this.locations[this.locations.length - 1] = this.current; }); }, navigate: function(to, silent) { if (to === "#:back") { this.backCalled = true; this.adapter.back(); return; } this._navigate(to, silent, function(adapter) { adapter.navigate(to); this.locations.push(this.current); }); }, _navigate: function(to, silent, callback) { var adapter = this.adapter; to = adapter.normalize(to); if (this.current === to || this.current === decodeURIComponent(to)) { this.trigger(SAME); return; } if (!silent) { if (this.trigger(CHANGE, { url: to, decode: false })) { return; } } this.current = to; callback.call(this, adapter); this.historyLength = adapter.length(); }, _checkUrl: function() { var adapter = this.adapter, current = adapter.current(), newLength = adapter.length(), navigatingInExisting = this.historyLength === newLength, back = current === this.locations[this.locations.length - 2] && navigatingInExisting, backCalled = this.backCalled, prev = this.current; if (current === null || this.current === current || this.current === decodeURIComponent(current)) { return true; } this.historyLength = newLength; this.backCalled = false; this.current = current; if (back && this.trigger("back", { url: prev, to: current })) { adapter.forward(); this.current = prev; return; } if (this.trigger(CHANGE, { url: current, backButtonPressed: !backCalled })) { if (back) { adapter.forward(); } else { adapter.back(); this.historyLength --; } this.current = prev; return; } if (back) { this.locations.pop(); } else { this.locations.push(current); } } }); kendo.History = History; kendo.History.HistoryAdapter = HistoryAdapter; kendo.History.HashAdapter = HashAdapter; kendo.History.PushStateAdapter = PushStateAdapter; kendo.absoluteURL = absoluteURL; kendo.history = new History(); })(window.kendo.jQuery); (function() { var kendo = window.kendo, history = kendo.history, Observable = kendo.Observable, INIT = "init", ROUTE_MISSING = "routeMissing", CHANGE = "change", BACK = "back", SAME = "same", optionalParam = /\((.*?)\)/g, namedParam = /(\(\?)?:\w+/g, splatParam = /\*\w+/g, escapeRegExp = /[\-{}\[\]+?.,\\\^$|#\s]/g; function namedParamReplace(match, optional) { return optional ? match : '([^\/]+)'; } function routeToRegExp(route, ignoreCase) { return new RegExp('^' + route .replace(escapeRegExp, '\\$&') .replace(optionalParam, '(?:$1)?') .replace(namedParam, namedParamReplace) .replace(splatParam, '(.*?)') + '$', ignoreCase ? "i" : ""); } function stripUrl(url) { return url.replace(/(\?.*)|(#.*)/g, ""); } var Route = kendo.Class.extend({ init: function(route, callback, ignoreCase) { if (!(route instanceof RegExp)) { route = routeToRegExp(route, ignoreCase); } this.route = route; this._callback = callback; }, callback: function(url, back, decode) { var params, idx = 0, length, queryStringParams = kendo.parseQueryStringParams(url); queryStringParams._back = back; url = stripUrl(url); params = this.route.exec(url).slice(1); length = params.length; if (decode) { for (; idx < length; idx ++) { if (typeof params[idx] !== 'undefined') { params[idx] = decodeURIComponent(params[idx]); } } } params.push(queryStringParams); this._callback.apply(null, params); }, worksWith: function(url, back, decode) { if (this.route.test(stripUrl(url))) { this.callback(url, back, decode); return true; } else { return false; } } }); var Router = Observable.extend({ init: function(options) { if (!options) { options = {}; } Observable.fn.init.call(this); this.routes = []; this.pushState = options.pushState; this.hashBang = options.hashBang; this.root = options.root; this.ignoreCase = options.ignoreCase !== false; this.bind([INIT, ROUTE_MISSING, CHANGE, SAME, BACK], options); }, destroy: function() { history.unbind(CHANGE, this._urlChangedProxy); history.unbind(SAME, this._sameProxy); history.unbind(BACK, this._backProxy); this.unbind(); }, start: function() { var that = this, sameProxy = function() { that._same(); }, backProxy = function(e) { that._back(e); }, urlChangedProxy = function(e) { that._urlChanged(e); }; history.start({ same: sameProxy, change: urlChangedProxy, back: backProxy, pushState: that.pushState, hashBang: that.hashBang, root: that.root }); var initEventObject = { url: history.current || "/", preventDefault: $.noop }; if (!that.trigger(INIT, initEventObject)) { that._urlChanged(initEventObject); } this._urlChangedProxy = urlChangedProxy; this._backProxy = backProxy; }, route: function(route, callback) { this.routes.push(new Route(route, callback, this.ignoreCase)); }, navigate: function(url, silent) { kendo.history.navigate(url, silent); }, replace: function(url, silent) { kendo.history.replace(url, silent); }, _back: function(e) { if (this.trigger(BACK, { url: e.url, to: e.to })) { e.preventDefault(); } }, _same: function() { this.trigger(SAME); }, _urlChanged: function(e) { var url = e.url; var decode = !!e.decode; var back = e.backButtonPressed; if (!url) { url = "/"; } if (this.trigger(CHANGE, { url: e.url, params: kendo.parseQueryStringParams(e.url), backButtonPressed: back })) { e.preventDefault(); return; } var idx = 0, routes = this.routes, route, length = routes.length; for (; idx < length; idx ++) { route = routes[idx]; if (route.worksWith(url, back, decode)) { return; } } if (this.trigger(ROUTE_MISSING, { url: url, params: kendo.parseQueryStringParams(url), backButtonPressed: back })) { e.preventDefault(); } } }); kendo.Router = Router; })(); return window.kendo; }, __webpack_require__(3)); /***/ }) /******/ });