UNPKG

@progress/kendo-ui

Version:

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

469 lines (362 loc) 14.6 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__(1352); /***/ }), /***/ 3: /***/ (function(module, exports) { module.exports = function() { throw new Error("define cannot be used indirect"); }; /***/ }), /***/ 1004: /***/ (function(module, exports) { module.exports = require("./kendo.core"); /***/ }), /***/ 1054: /***/ (function(module, exports) { module.exports = require("./kendo.fx"); /***/ }), /***/ 1058: /***/ (function(module, exports) { module.exports = require("./kendo.binder"); /***/ }), /***/ 1352: /***/ (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__(1004), __webpack_require__(1058), __webpack_require__(1054) ], __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: "view", name: "View", category: "framework", description: "The View class instantiates and handles the events of a certain screen from the application.", depends: [ "core", "binder", "fx" ], hidden: false }; (function($, undefined) { var kendo = window.kendo, Observable = kendo.Observable, SCRIPT = "SCRIPT", INIT = "init", SHOW = "show", HIDE = "hide", TRANSITION_START = "transitionStart", TRANSITION_END = "transitionEnd", ATTACH = "attach", DETACH = "detach", sizzleErrorRegExp = /unrecognized expression/; var View = Observable.extend({ init: function(content, options) { var that = this; options = options || {}; Observable.fn.init.call(that); that.content = content; that.id = kendo.guid(); that.tagName = options.tagName || "div"; that.model = options.model; that._wrap = options.wrap !== false; this._evalTemplate = options.evalTemplate || false; that._fragments = {}; that.bind([ INIT, SHOW, HIDE, TRANSITION_START, TRANSITION_END ], options); }, render: function(container) { var that = this, notInitialized = !that.element; // The order below matters - kendo.bind should happen when the element is in the DOM, and show should be triggered after init. if (notInitialized) { that.element = that._createElement(); } if (container) { $(container).append(that.element); } if (notInitialized) { kendo.bind(that.element, that.model); that.trigger(INIT); } if (container) { that._eachFragment(ATTACH); that.trigger(SHOW); } return that.element; }, clone: function() { return new ViewClone(this); }, triggerBeforeShow: function() { return true; }, triggerBeforeHide: function() { return true; }, showStart: function() { this.element.css("display", ""); }, showEnd: function() { }, hideEnd: function() { this.hide(); }, beforeTransition: function(type){ this.trigger(TRANSITION_START, { type: type }); }, afterTransition: function(type){ this.trigger(TRANSITION_END, { type: type }); }, hide: function() { this._eachFragment(DETACH); this.element.detach(); this.trigger(HIDE); }, destroy: function() { var element = this.element; if (element) { kendo.unbind(element); kendo.destroy(element); element.remove(); } }, fragments: function(fragments) { $.extend(this._fragments, fragments); }, _eachFragment: function(methodName) { for (var placeholder in this._fragments) { this._fragments[placeholder][methodName](this, placeholder); } }, _createElement: function() { var that = this, wrapper = "<" + that.tagName + " />", element, content; try { content = $(document.getElementById(that.content) || that.content); // support passing id without # if (content[0].tagName === SCRIPT) { content = content.html(); } } catch(e) { if (sizzleErrorRegExp.test(e.message)) { content = that.content; } } if (typeof content === "string") { content = content.replace(/^\s+|\s+$/g, ''); if (that._evalTemplate) { content = kendo.template(content)(that.model || {}); } element = $(wrapper).append(content); // drop the wrapper if asked - this seems like the easiest (although not very intuitive) way to avoid messing up templates with questionable content, like this one for instance: // <script id="my-template"> // foo // <span> Span </span> // </script> if (!that._wrap) { element = element.contents(); } } else { element = content; if (that._evalTemplate) { var result = $(kendo.template($("<div />").append(element.clone(true)).html())(that.model || {})); // template uses DOM if ($.contains(document, element[0])) { element.replaceWith(result); } element = result; } if (that._wrap) { element = element.wrapAll(wrapper).parent(); } } return element; } }); var ViewClone = kendo.Class.extend({ init: function(view) { $.extend(this, { element: view.element.clone(true), transition: view.transition, id: view.id }); view.element.parent().append(this.element); }, hideEnd: function() { this.element.remove(); }, beforeTransition: $.noop, afterTransition: $.noop }); var Layout = View.extend({ init: function(content, options) { View.fn.init.call(this, content, options); this.containers = {}; }, container: function(selector) { var container = this.containers[selector]; if (!container) { container = this._createContainer(selector); this.containers[selector] = container; } return container; }, showIn: function(selector, view, transition) { this.container(selector).show(view, transition); }, _createContainer: function(selector) { var root = this.render(), element = root.find(selector), container; if (!element.length && root.is(selector)) { if (root.is(selector)) { element = root; } else { throw new Error("can't find a container with the specified " + selector + " selector"); } } container = new ViewContainer(element); container.bind("accepted", function(e) { e.view.render(element); }); return container; } }); var Fragment = View.extend({ attach: function(view, placeholder) { view.element.find(placeholder).replaceWith(this.render()); }, detach: function() { } }); var transitionRegExp = /^(\w+)(:(\w+))?( (\w+))?$/; function parseTransition(transition) { if (!transition){ return {}; } var matches = transition.match(transitionRegExp) || []; return { type: matches[1], direction: matches[3], reverse: matches[5] === "reverse" }; } var ViewContainer = Observable.extend({ init: function(container) { Observable.fn.init.call(this); this.container = container; this.history = []; this.view = null; this.running = false; }, after: function() { this.running = false; this.trigger("complete", {view: this.view}); this.trigger("after"); }, end: function() { this.view.showEnd(); this.previous.hideEnd(); this.after(); }, show: function(view, transition, locationID) { if (!view.triggerBeforeShow() || (this.view && !this.view.triggerBeforeHide())) { this.trigger("after"); return false; } locationID = locationID || view.id; var that = this, current = (view === that.view) ? view.clone() : that.view, history = that.history, previousEntry = history[history.length - 2] || {}, back = previousEntry.id === locationID, // If explicit transition is set, it will be with highest priority // Next we will try using the history record transition or the view transition configuration theTransition = transition || ( back ? history[history.length - 1].transition : view.transition ), transitionData = parseTransition(theTransition); if (that.running) { that.effect.stop(); } if (theTransition === "none") { theTransition = null; } that.trigger("accepted", { view: view }); that.view = view; that.previous = current; that.running = true; if (!back) { history.push({ id: locationID, transition: theTransition }); } else { history.pop(); } if (!current) { view.showStart(); view.showEnd(); that.after(); return true; } if (!theTransition || !kendo.effects.enabled) { view.showStart(); that.end(); } else { // hide the view element before init/show - prevents blinks on iPad // the replace effect will remove this class view.element.addClass("k-fx-hidden"); view.showStart(); // do not reverse the explicit transition if (back && !transition) { transitionData.reverse = !transitionData.reverse; } that.effect = kendo.fx(view.element).replace(current.element, transitionData.type) .beforeTransition(function() { view.beforeTransition("show"); current.beforeTransition("hide"); }) .afterTransition(function() { view.afterTransition("show"); current.afterTransition("hide"); }) .direction(transitionData.direction) .setReverse(transitionData.reverse); that.effect.run().then(function() { that.end(); }); } return true; } }); kendo.ViewContainer = ViewContainer; kendo.Fragment = Fragment; kendo.Layout = Layout; kendo.View = View; kendo.ViewClone = ViewClone; })(window.kendo.jQuery); return window.kendo; }, __webpack_require__(3)); /***/ }) /******/ });