UNPKG

can

Version:

MIT-licensed, client-side, JavaScript framework that makes building rich web applications easy.

1,336 lines (1,332 loc) 863 kB
/*[global-shim-start]*/ (function(exports, global, doEval){ // jshint ignore:line var origDefine = global.define; var get = function(name){ var parts = name.split("."), cur = global, i; for(i = 0 ; i < parts.length; i++){ if(!cur) { break; } cur = cur[parts[i]]; } return cur; }; var set = function(name, val){ var parts = name.split("."), cur = global, i, part, next; for(i = 0; i < parts.length - 1; i++) { part = parts[i]; next = cur[part]; if(!next) { next = cur[part] = {}; } cur = next; } part = parts[parts.length - 1]; cur[part] = val; }; var useDefault = function(mod){ if(!mod || !mod.__esModule) return false; var esProps = { __esModule: true, "default": true }; for(var p in mod) { if(!esProps[p]) return false; } return true; }; var modules = (global.define && global.define.modules) || (global._define && global._define.modules) || {}; var ourDefine = global.define = function(moduleName, deps, callback){ var module; if(typeof deps === "function") { callback = deps; deps = []; } var args = [], i; for(i =0; i < deps.length; i++) { args.push( exports[deps[i]] ? get(exports[deps[i]]) : ( modules[deps[i]] || get(deps[i]) ) ); } // CJS has no dependencies but 3 callback arguments if(!deps.length && callback.length) { module = { exports: {} }; var require = function(name) { return exports[name] ? get(exports[name]) : modules[name]; }; args.push(require, module.exports, module); } // Babel uses the exports and module object. else if(!args[0] && deps[0] === "exports") { module = { exports: {} }; args[0] = module.exports; if(deps[1] === "module") { args[1] = module; } } else if(!args[0] && deps[0] === "module") { args[0] = { id: moduleName }; } global.define = origDefine; var result = callback ? callback.apply(null, args) : undefined; global.define = ourDefine; // Favor CJS module.exports over the return value result = module && module.exports ? module.exports : result; modules[moduleName] = result; // Set global exports var globalExport = exports[moduleName]; if(globalExport && !get(globalExport)) { if(useDefault(result)) { result = result["default"]; } set(globalExport, result); } }; global.define.orig = origDefine; global.define.modules = modules; global.define.amd = true; ourDefine("@loader", [], function(){ // shim for @@global-helpers var noop = function(){}; return { get: function(){ return { prepareGlobal: noop, retrieveGlobal: noop }; }, global: global, __exec: function(__load){ doEval(__load.source, global); } }; }); } )({"jquery":"jQuery","can-util/namespace":"can","kefir":"Kefir","validate.js":"validate"},window,function(__$source__, __$global__) { // jshint ignore:line eval("(function() { " + __$source__ + " \n }).call(__$global__);"); } ) /*can-namespace@1.0.0#can-namespace*/ define('can-namespace', function (require, exports, module) { module.exports = {}; }); /*can-util@3.2.2#namespace*/ define('can-util/namespace', function (require, exports, module) { module.exports = require('can-namespace'); }); /*can-util@3.2.2#js/assign/assign*/ define('can-util/js/assign/assign', function (require, exports, module) { module.exports = function (d, s) { for (var prop in s) { d[prop] = s[prop]; } return d; }; }); /*can-util@3.2.2#js/is-array/is-array*/ define('can-util/js/is-array/is-array', function (require, exports, module) { module.exports = function (arr) { return Array.isArray(arr); }; }); /*can-util@3.2.2#js/is-function/is-function*/ define('can-util/js/is-function/is-function', function (require, exports, module) { var isFunction = function () { if (typeof document !== 'undefined' && typeof document.getElementsByTagName('body') === 'function') { return function (value) { return Object.prototype.toString.call(value) === '[object Function]'; }; } return function (value) { return typeof value === 'function'; }; }(); module.exports = isFunction; }); /*can-util@3.2.2#js/is-plain-object/is-plain-object*/ define('can-util/js/is-plain-object/is-plain-object', function (require, exports, module) { var core_hasOwn = Object.prototype.hasOwnProperty; function isWindow(obj) { return obj !== null && obj == obj.window; } function isPlainObject(obj) { if (!obj || typeof obj !== 'object' || obj.nodeType || isWindow(obj)) { return false; } try { if (obj.constructor && !core_hasOwn.call(obj, 'constructor') && !core_hasOwn.call(obj.constructor.prototype, 'isPrototypeOf')) { return false; } } catch (e) { return false; } var key; for (key in obj) { } return key === undefined || core_hasOwn.call(obj, key); } module.exports = isPlainObject; }); /*can-util@3.2.2#js/deep-assign/deep-assign*/ define('can-util/js/deep-assign/deep-assign', function (require, exports, module) { var isArray = require('can-util/js/is-array/is-array'); var isFunction = require('can-util/js/is-function/is-function'); var isPlainObject = require('can-util/js/is-plain-object/is-plain-object'); function deepAssign() { var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i = 1, length = arguments.length; if (typeof target !== 'object' && !isFunction(target)) { target = {}; } if (length === i) { target = this; --i; } for (; i < length; i++) { if ((options = arguments[i]) != null) { for (name in options) { src = target[name]; copy = options[name]; if (target === copy) { continue; } if (copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) { if (copyIsArray) { copyIsArray = false; clone = src && isArray(src) ? src : []; } else { clone = src && isPlainObject(src) ? src : {}; } target[name] = deepAssign(clone, copy); } else if (copy !== undefined) { target[name] = copy; } } } } return target; } module.exports = deepAssign; }); /*can-util@3.2.2#js/log/log*/ define('can-util/js/log/log', function (require, exports, module) { exports.warnTimeout = 5000; exports.logLevel = 0; exports.warn = function (out) { var ll = this.logLevel; if (ll < 2) { Array.prototype.unshift.call(arguments, 'WARN:'); if (typeof console !== 'undefined' && console.warn) { this._logger('warn', Array.prototype.slice.call(arguments)); } else if (typeof console !== 'undefined' && console.log) { this._logger('log', Array.prototype.slice.call(arguments)); } else if (window && window.opera && window.opera.postError) { window.opera.postError('CanJS WARNING: ' + out); } } }; exports.log = function (out) { var ll = this.logLevel; if (ll < 1) { if (typeof console !== 'undefined' && console.log) { Array.prototype.unshift.call(arguments, 'INFO:'); this._logger('log', Array.prototype.slice.call(arguments)); } else if (window && window.opera && window.opera.postError) { window.opera.postError('CanJS INFO: ' + out); } } }; exports.error = function (out) { var ll = this.logLevel; if (ll < 1) { if (typeof console !== 'undefined' && console.error) { Array.prototype.unshift.call(arguments, 'ERROR:'); this._logger('error', Array.prototype.slice.call(arguments)); } else if (window && window.opera && window.opera.postError) { window.opera.postError('ERROR: ' + out); } } }; exports._logger = function (type, arr) { try { console[type].apply(console, arr); } catch (e) { console[type](arr); } }; }); /*can-util@3.2.2#js/dev/dev*/ define('can-util/js/dev/dev', function (require, exports, module) { var canLog = require('can-util/js/log/log'); module.exports = { warnTimeout: 5000, logLevel: 0, warn: function () { canLog.warn.apply(this, arguments); }, log: function () { canLog.log.apply(this, arguments); }, _logger: canLog._logger }; }); /*can-util@3.2.2#js/is-array-like/is-array-like*/ define('can-util/js/is-array-like/is-array-like', function (require, exports, module) { function isArrayLike(obj) { var type = typeof obj; if (type === 'string') { return true; } var length = obj && type !== 'boolean' && typeof obj !== 'number' && 'length' in obj && obj.length; return typeof arr !== 'function' && (length === 0 || typeof length === 'number' && length > 0 && length - 1 in obj); } module.exports = isArrayLike; }); /*can-types@1.0.2#can-types*/ define('can-types', function (require, exports, module) { var namespace = require('can-namespace'); var types = { isMapLike: function () { return false; }, isListLike: function () { return false; }, isPromise: function (obj) { return obj instanceof Promise || Object.prototype.toString.call(obj) === '[object Promise]'; }, isConstructor: function (func) { if (typeof func !== 'function') { return false; } for (var prop in func.prototype) { return true; } return false; }, isCallableForValue: function (obj) { return typeof obj === 'function' && !types.isConstructor(obj); }, isCompute: function (obj) { return obj && obj.isComputed; }, iterator: typeof Symbol === 'function' && Symbol.iterator || '@@iterator', DefaultMap: null, DefaultList: null, queueTask: function (task) { var args = task[2] || []; task[0].apply(task[1], args); }, wrapElement: function (element) { return element; }, unwrapElement: function (element) { return element; } }; if (namespace.types) { throw new Error('You can\'t have two versions of can-types, check your dependencies'); } else { module.exports = namespace.types = types; } }); /*can-util@3.2.2#js/is-iterable/is-iterable*/ define('can-util/js/is-iterable/is-iterable', function (require, exports, module) { var types = require('can-types'); module.exports = function (obj) { return obj && !!obj[types.iterator]; }; }); /*can-util@3.2.2#js/each/each*/ define('can-util/js/each/each', function (require, exports, module) { var isArrayLike = require('can-util/js/is-array-like/is-array-like'); var has = Object.prototype.hasOwnProperty; var isIterable = require('can-util/js/is-iterable/is-iterable'); var types = require('can-types'); function each(elements, callback, context) { var i = 0, key, len, item; if (elements) { if (isArrayLike(elements)) { for (len = elements.length; i < len; i++) { item = elements[i]; if (callback.call(context || item, item, i, elements) === false) { break; } } } else if (isIterable(elements)) { var iter = elements[types.iterator](); var res, value; while (!(res = iter.next()).done) { value = res.value; callback.call(context || elements, Array.isArray(value) ? value[1] : value, value[0]); } } else if (typeof elements === 'object') { for (key in elements) { if (has.call(elements, key) && callback.call(context || elements[key], elements[key], key, elements) === false) { break; } } } } return elements; } module.exports = each; }); /*can-util@3.2.2#js/make-array/make-array*/ define('can-util/js/make-array/make-array', function (require, exports, module) { var each = require('can-util/js/each/each'); function makeArray(arr) { var ret = []; each(arr, function (a, i) { ret[i] = a; }); return ret; } module.exports = makeArray; }); /*can-util@3.2.2#js/is-container/is-container*/ define('can-util/js/is-container/is-container', function (require, exports, module) { module.exports = function (current) { return /^f|^o/.test(typeof current); }; }); /*can-util@3.2.2#js/get/get*/ define('can-util/js/get/get', function (require, exports, module) { var isContainer = require('can-util/js/is-container/is-container'); function get(obj, name) { var parts = typeof name !== 'undefined' ? (name + '').replace(/\[/g, '.').replace(/]/g, '').split('.') : [], length = parts.length, current, i, container; if (!length) { return obj; } current = obj; for (i = 0; i < length && isContainer(current); i++) { container = current; current = container[parts[i]]; } return current; } module.exports = get; }); /*can-util@3.2.2#js/string/string*/ define('can-util/js/string/string', function (require, exports, module) { var get = require('can-util/js/get/get'); var isContainer = require('can-util/js/is-container/is-container'); var canDev = require('can-util/js/dev/dev'); var isArray = require('can-util/js/is-array/is-array'); var strUndHash = /_|-/, strColons = /\=\=/, strWords = /([A-Z]+)([A-Z][a-z])/g, strLowUp = /([a-z\d])([A-Z])/g, strDash = /([a-z\d])([A-Z])/g, strReplacer = /\{([^\}]+)\}/g, strQuote = /"/g, strSingleQuote = /'/g, strHyphenMatch = /-+(.)?/g, strCamelMatch = /[a-z][A-Z]/g, convertBadValues = function (content) { var isInvalid = content === null || content === undefined || isNaN(content) && '' + content === 'NaN'; return '' + (isInvalid ? '' : content); }, deleteAtPath = function (data, path) { var parts = path ? path.replace(/\[/g, '.').replace(/]/g, '').split('.') : []; var current = data; for (var i = 0; i < parts.length - 1; i++) { if (current) { current = current[parts[i]]; } } if (current) { delete current[parts[parts.length - 1]]; } }; var string = { esc: function (content) { return convertBadValues(content).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(strQuote, '&#34;').replace(strSingleQuote, '&#39;'); }, getObject: function (name, roots) { canDev.warn('string.getObject is deprecated, please use can-util/js/get/get instead.'); roots = isArray(roots) ? roots : [roots || window]; var result, l = roots.length; for (var i = 0; i < l; i++) { result = get(roots[i], name); if (result) { return result; } } }, capitalize: function (s, cache) { return s.charAt(0).toUpperCase() + s.slice(1); }, camelize: function (str) { return convertBadValues(str).replace(strHyphenMatch, function (match, chr) { return chr ? chr.toUpperCase() : ''; }); }, hyphenate: function (str) { return convertBadValues(str).replace(strCamelMatch, function (str, offset) { return str.charAt(0) + '-' + str.charAt(1).toLowerCase(); }); }, underscore: function (s) { return s.replace(strColons, '/').replace(strWords, '$1_$2').replace(strLowUp, '$1_$2').replace(strDash, '_').toLowerCase(); }, sub: function (str, data, remove) { var obs = []; str = str || ''; obs.push(str.replace(strReplacer, function (whole, inside) { var ob = get(data, inside); if (remove === true) { deleteAtPath(data, inside); } if (ob === undefined || ob === null) { obs = null; return ''; } if (isContainer(ob) && obs) { obs.push(ob); return ''; } return '' + ob; })); return obs === null ? obs : obs.length <= 1 ? obs[0] : obs; }, replacer: strReplacer, undHash: strUndHash }; module.exports = string; }); /*can-construct@3.0.6#can-construct*/ define('can-construct', function (require, exports, module) { 'use strict'; var assign = require('can-util/js/assign/assign'); var deepAssign = require('can-util/js/deep-assign/deep-assign'); var dev = require('can-util/js/dev/dev'); var makeArray = require('can-util/js/make-array/make-array'); var types = require('can-types'); var namespace = require('can-namespace'); var CanString = require('can-util/js/string/string'); var reservedWords = { 'abstract': true, 'boolean': true, 'break': true, 'byte': true, 'case': true, 'catch': true, 'char': true, 'class': true, 'const': true, 'continue': true, 'debugger': true, 'default': true, 'delete': true, 'do': true, 'double': true, 'else': true, 'enum': true, 'export': true, 'extends': true, 'false': true, 'final': true, 'finally': true, 'float': true, 'for': true, 'function': true, 'goto': true, 'if': true, 'implements': true, 'import': true, 'in': true, 'instanceof': true, 'int': true, 'interface': true, 'let': true, 'long': true, 'native': true, 'new': true, 'null': true, 'package': true, 'private': true, 'protected': true, 'public': true, 'return': true, 'short': true, 'static': true, 'super': true, 'switch': true, 'synchronized': true, 'this': true, 'throw': true, 'throws': true, 'transient': true, 'true': true, 'try': true, 'typeof': true, 'var': true, 'void': true, 'volatile': true, 'while': true, 'with': true }; var constructorNameRegex = /[^A-Z0-9_]/gi; var initializing = 0; var namedCtor = function (cache) { return function (name, fn) { return (name in cache ? cache[name] : cache[name] = new Function('__', 'function ' + name + '(){return __.apply(this,arguments)};return ' + name))(fn); }; }({}); var Construct = function () { if (arguments.length) { return Construct.extend.apply(Construct, arguments); } }; var canGetDescriptor; try { Object.getOwnPropertyDescriptor({}); canGetDescriptor = true; } catch (e) { canGetDescriptor = false; } var getDescriptor = function (newProps, name) { var descriptor = Object.getOwnPropertyDescriptor(newProps, name); if (descriptor && (descriptor.get || descriptor.set)) { return descriptor; } return null; }, inheritGetterSetter = function (newProps, oldProps, addTo) { addTo = addTo || newProps; var descriptor; for (var name in newProps) { if (descriptor = getDescriptor(newProps, name)) { this._defineProperty(addTo, oldProps, name, descriptor); } else { Construct._overwrite(addTo, oldProps, name, newProps[name]); } } }, simpleInherit = function (newProps, oldProps, addTo) { addTo = addTo || newProps; for (var name in newProps) { Construct._overwrite(addTo, oldProps, name, newProps[name]); } }; assign(Construct, { constructorExtends: true, newInstance: function () { var inst = this.instance(), args; if (inst.setup) { Object.defineProperty(inst, '__inSetup', { configurable: true, enumerable: false, value: true, writable: true }); args = inst.setup.apply(inst, arguments); inst.__inSetup = false; } if (inst.init) { inst.init.apply(inst, args || arguments); } return inst; }, _inherit: canGetDescriptor ? inheritGetterSetter : simpleInherit, _defineProperty: function (what, oldProps, propName, descriptor) { Object.defineProperty(what, propName, descriptor); }, _overwrite: function (what, oldProps, propName, val) { Object.defineProperty(what, propName, { value: val, configurable: true, enumerable: true, writable: true }); }, setup: function (base) { this.defaults = deepAssign(true, {}, base.defaults, this.defaults); }, instance: function () { initializing = 1; var inst = new this(); initializing = 0; return inst; }, extend: function (name, staticProperties, instanceProperties) { var shortName = name, klass = staticProperties, proto = instanceProperties; if (typeof shortName !== 'string') { proto = klass; klass = shortName; shortName = null; } if (!proto) { proto = klass; klass = null; } proto = proto || {}; var _super_class = this, _super = this.prototype, Constructor, prototype; prototype = this.instance(); Construct._inherit(proto, _super, prototype); if (shortName) { } else if (klass && klass.shortName) { shortName = klass.shortName; } else if (this.shortName) { shortName = this.shortName; } var constructorName = shortName ? shortName.replace(constructorNameRegex, '_') : 'Constructor'; if (reservedWords[constructorName]) { constructorName = CanString.capitalize(constructorName); } function init() { if (!initializing) { if (!this || this.constructor !== Constructor && arguments.length && Constructor.constructorExtends) { dev.warn('can/construct/construct.js: extending a Construct without calling extend'); } return (!this || this.constructor !== Constructor) && arguments.length && Constructor.constructorExtends ? Constructor.extend.apply(Constructor, arguments) : Constructor.newInstance.apply(Constructor, arguments); } } Constructor = typeof namedCtor === 'function' ? namedCtor(constructorName, init) : function () { return init.apply(this, arguments); }; for (var propName in _super_class) { if (_super_class.hasOwnProperty(propName)) { Constructor[propName] = _super_class[propName]; } } Construct._inherit(klass, _super_class, Constructor); assign(Constructor, { constructor: Constructor, prototype: prototype }); if (shortName !== undefined) { Constructor.shortName = shortName; } Constructor.prototype.constructor = Constructor; var t = [_super_class].concat(makeArray(arguments)), args = Constructor.setup.apply(Constructor, t); if (Constructor.init) { Constructor.init.apply(Constructor, args || t); } return Constructor; } }); Construct.prototype.setup = function () { }; Construct.prototype.init = function () { }; var oldIsConstructor = types.isConstructor; types.isConstructor = function (obj) { return obj.prototype instanceof Construct || oldIsConstructor.call(null, obj); }; module.exports = namespace.Construct = Construct; }); /*can-util@3.2.2#js/is-empty-object/is-empty-object*/ define('can-util/js/is-empty-object/is-empty-object', function (require, exports, module) { module.exports = function (obj) { for (var prop in obj) { return false; } return true; }; }); /*can-util@3.2.2#dom/data/data*/ define('can-util/dom/data/data', function (require, exports, module) { var isEmptyObject = require('can-util/js/is-empty-object/is-empty-object'); var data = {}; var expando = 'can' + new Date(); var uuid = 0; var setData = function (name, value) { var id = this[expando] || (this[expando] = ++uuid), store = data[id] || (data[id] = {}); if (name !== undefined) { store[name] = value; } return store; }; module.exports = { getCid: function () { return this[expando]; }, cid: function () { return this[expando] || (this[expando] = ++uuid); }, expando: expando, clean: function (prop) { var id = this[expando]; if (data[id] && data[id][prop]) { delete data[id][prop]; } if (isEmptyObject(data[id])) { delete data[id]; } }, get: function (key) { var id = this[expando], store = id && data[id]; return key === undefined ? store || setData(this) : store && store[key]; }, set: setData }; }); /*can-util@3.2.2#dom/class-name/class-name*/ define('can-util/dom/class-name/class-name', function (require, exports, module) { var has = function (className) { if (this.classList) { return this.classList.contains(className); } else { return !!this.className.match(new RegExp('(\\s|^)' + className + '(\\s|$)')); } }; module.exports = { has: has, add: function (className) { if (this.classList) { this.classList.add(className); } else if (!has.call(this, className)) { this.className += ' ' + className; } }, remove: function (className) { if (this.classList) { this.classList.remove(className); } else if (has.call(this, className)) { var reg = new RegExp('(\\s|^)' + className + '(\\s|$)'); this.className = this.className.replace(reg, ' '); } } }; }); /*can-util@3.2.2#js/global/global*/ define('can-util/js/global/global', function (require, exports, module) { (function (global) { var GLOBAL; module.exports = function (setGlobal) { if (setGlobal !== undefined) { GLOBAL = setGlobal; } if (GLOBAL) { return GLOBAL; } else { return GLOBAL = typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope ? self : typeof process === 'object' && {}.toString.call(process) === '[object process]' ? global : window; } }; }(function () { return this; }())); }); /*can-util@3.2.2#dom/document/document*/ define('can-util/dom/document/document', function (require, exports, module) { (function (global) { var global = require('can-util/js/global/global'); var setDocument; module.exports = function (setDoc) { if (setDoc) { setDocument = setDoc; } return setDocument || global().document; }; }(function () { return this; }())); }); /*can-util@3.2.2#dom/events/events*/ define('can-util/dom/events/events', function (require, exports, module) { var assign = require('can-util/js/assign/assign'); var _document = require('can-util/dom/document/document'); module.exports = { addEventListener: function () { this.addEventListener.apply(this, arguments); }, removeEventListener: function () { this.removeEventListener.apply(this, arguments); }, canAddEventListener: function () { return this.nodeName && (this.nodeType === 1 || this.nodeType === 9) || this === window; }, dispatch: function (event, args, bubbles) { var doc = _document(); var ev = doc.createEvent('HTMLEvents'); var isString = typeof event === 'string'; ev.initEvent(isString ? event : event.type, bubbles === undefined ? true : bubbles, false); if (!isString) { assign(ev, event); } ev.args = args; return this.dispatchEvent(ev); } }; }); /*can-cid@1.0.1#can-cid*/ define('can-cid', function (require, exports, module) { var namespace = require('can-namespace'); var _cid = 0; var cid = function (object, name) { if (!object._cid) { _cid++; object._cid = (name || '') + _cid; } return object._cid; }; if (namespace.cid) { throw new Error('You can\'t have two versions of can-cid, check your dependencies'); } else { module.exports = namespace.cid = cid; } }); /*can-util@3.2.2#dom/dispatch/dispatch*/ define('can-util/dom/dispatch/dispatch', function (require, exports, module) { var domEvents = require('can-util/dom/events/events'); module.exports = function () { return domEvents.dispatch.apply(this, arguments); }; }); /*can-util@3.2.2#dom/matches/matches*/ define('can-util/dom/matches/matches', function (require, exports, module) { var matchesMethod = function (element) { return element.matches || element.webkitMatchesSelector || element.webkitMatchesSelector || element.mozMatchesSelector || element.msMatchesSelector || element.oMatchesSelector; }; module.exports = function () { var method = matchesMethod(this); return method ? method.apply(this, arguments) : false; }; }); /*can-util@3.2.2#dom/events/delegate/delegate*/ define('can-util/dom/events/delegate/delegate', function (require, exports, module) { var domEvents = require('can-util/dom/events/events'); var domData = require('can-util/dom/data/data'); var domMatches = require('can-util/dom/matches/matches'); var each = require('can-util/js/each/each'); var isEmptyObject = require('can-util/js/is-empty-object/is-empty-object'); var dataName = 'delegateEvents'; var useCapture = function (eventType) { return eventType === 'focus' || eventType === 'blur'; }; var handleEvent = function (ev) { var events = domData.get.call(this, dataName); var eventTypeEvents = events[ev.type]; var matches = []; if (eventTypeEvents) { var selectorDelegates = []; each(eventTypeEvents, function (delegates) { selectorDelegates.push(delegates); }); var cur = ev.target; do { selectorDelegates.forEach(function (delegates) { if (domMatches.call(cur, delegates[0].selector)) { matches.push({ target: cur, delegates: delegates }); } }); cur = cur.parentNode; } while (cur && cur !== ev.currentTarget); } var oldStopProp = ev.stopPropagation; ev.stopPropagation = function () { oldStopProp.apply(this, arguments); this.cancelBubble = true; }; for (var i = 0; i < matches.length; i++) { var match = matches[i]; var delegates = match.delegates; for (var d = 0, dLen = delegates.length; d < dLen; d++) { if (delegates[d].handler.call(match.target, ev) === false) { return false; } if (ev.cancelBubble) { return; } } } }; domEvents.addDelegateListener = function (eventType, selector, handler) { var events = domData.get.call(this, dataName), eventTypeEvents; if (!events) { domData.set.call(this, dataName, events = {}); } if (!(eventTypeEvents = events[eventType])) { eventTypeEvents = events[eventType] = {}; domEvents.addEventListener.call(this, eventType, handleEvent, useCapture(eventType)); } if (!eventTypeEvents[selector]) { eventTypeEvents[selector] = []; } eventTypeEvents[selector].push({ handler: handler, selector: selector }); }; domEvents.removeDelegateListener = function (eventType, selector, handler) { var events = domData.get.call(this, dataName); if (events[eventType] && events[eventType][selector]) { var eventTypeEvents = events[eventType], delegates = eventTypeEvents[selector], i = 0; while (i < delegates.length) { if (delegates[i].handler === handler) { delegates.splice(i, 1); } else { i++; } } if (delegates.length === 0) { delete eventTypeEvents[selector]; if (isEmptyObject(eventTypeEvents)) { domEvents.removeEventListener.call(this, eventType, handleEvent, useCapture(eventType)); delete events[eventType]; if (isEmptyObject(events)) { domData.clean.call(this, dataName); } } } } }; }); /*can-event@3.0.2#can-event*/ define('can-event', function (require, exports, module) { var domEvents = require('can-util/dom/events/events'); var CID = require('can-cid'); var isEmptyObject = require('can-util/js/is-empty-object/is-empty-object'); var domDispatch = require('can-util/dom/dispatch/dispatch'); var namespace = require('can-namespace'); require('can-util/dom/events/delegate/delegate'); function makeHandlerArgs(event, args) { if (typeof event === 'string') { event = { type: event }; } var handlerArgs = [event]; if (args) { handlerArgs.push.apply(handlerArgs, args); } return handlerArgs; } function getHandlers(eventName) { var events = this.__bindEvents; if (!events) { return; } var handlers = events[eventName]; if (!handlers) { return; } else { return handlers; } } var canEvent = { addEventListener: function (event, handler) { var allEvents = this.__bindEvents || (this.__bindEvents = {}), eventList = allEvents[event] || (allEvents[event] = []); eventList.push(handler); return this; }, removeEventListener: function (event, fn) { if (!this.__bindEvents) { return this; } var handlers = this.__bindEvents[event] || [], i = 0, handler, isFunction = typeof fn === 'function'; while (i < handlers.length) { handler = handlers[i]; if (isFunction && handler === fn || !isFunction && (handler.cid === fn || !fn)) { handlers.splice(i, 1); } else { i++; } } return this; }, dispatchSync: function (event, args) { var handlerArgs = makeHandlerArgs(event, args); var handlers = getHandlers.call(this, handlerArgs[0].type); if (!handlers) { return; } handlers = handlers.slice(0); for (var i = 0, len = handlers.length; i < len; i++) { handlers[i].apply(this, handlerArgs); } return handlerArgs[0]; }, on: function (eventName, selector, handler) { var method = typeof selector === 'string' ? 'addDelegateListener' : 'addEventListener'; var listenWithDOM = domEvents.canAddEventListener.call(this); var eventBinder = listenWithDOM ? domEvents[method] : this[method] || canEvent[method]; return eventBinder.apply(this, arguments); }, off: function (eventName, selector, handler) { var method = typeof selector === 'string' ? 'removeDelegateListener' : 'removeEventListener'; var listenWithDOM = domEvents.canAddEventListener.call(this); var eventBinder = listenWithDOM ? domEvents[method] : this[method] || canEvent[method]; return eventBinder.apply(this, arguments); }, trigger: function () { var listenWithDOM = domEvents.canAddEventListener.call(this); var dispatch = listenWithDOM ? domDispatch : canEvent.dispatch; return dispatch.apply(this, arguments); }, one: function (event, handler) { var one = function () { canEvent.off.call(this, event, one); return handler.apply(this, arguments); }; canEvent.on.call(this, event, one); return this; }, listenTo: function (other, event, handler) { var idedEvents = this.__listenToEvents; if (!idedEvents) { idedEvents = this.__listenToEvents = {}; } var otherId = CID(other); var othersEvents = idedEvents[otherId]; if (!othersEvents) { othersEvents = idedEvents[otherId] = { obj: other, events: {} }; } var eventsEvents = othersEvents.events[event]; if (!eventsEvents) { eventsEvents = othersEvents.events[event] = []; } eventsEvents.push(handler); canEvent.on.call(other, event, handler); }, stopListening: function (other, event, handler) { var idedEvents = this.__listenToEvents, iterIdedEvents = idedEvents, i = 0; if (!idedEvents) { return this; } if (other) { var othercid = CID(other); (iterIdedEvents = {})[othercid] = idedEvents[othercid]; if (!idedEvents[othercid]) { return this; } } for (var cid in iterIdedEvents) { var othersEvents = iterIdedEvents[cid], eventsEvents; other = idedEvents[cid].obj; if (!event) { eventsEvents = othersEvents.events; } else { (eventsEvents = {})[event] = othersEvents.events[event]; } for (var eventName in eventsEvents) { var handlers = eventsEvents[eventName] || []; i = 0; while (i < handlers.length) { if (handler && handler === handlers[i] || !handler) { canEvent.off.call(other, eventName, handlers[i]); handlers.splice(i, 1); } else { i++; } } if (!handlers.length) { delete othersEvents.events[eventName]; } } if (isEmptyObject(othersEvents.events)) { delete idedEvents[cid]; } } return this; } }; canEvent.addEvent = canEvent.bind = function () { return canEvent.addEventListener.apply(this, arguments); }; canEvent.unbind = canEvent.removeEvent = function () { return canEvent.removeEventListener.apply(this, arguments); }; canEvent.delegate = canEvent.on; canEvent.undelegate = canEvent.off; canEvent.dispatch = canEvent.dispatchSync; Object.defineProperty(canEvent, 'makeHandlerArgs', { enumerable: false, value: makeHandlerArgs }); Object.defineProperty(canEvent, 'handlers', { enumerable: false, value: getHandlers }); Object.defineProperty(canEvent, 'flush', { enumerable: false, writable: true, value: function () { } }); module.exports = namespace.event = canEvent; }); /*can-util@3.2.2#js/last/last*/ define('can-util/js/last/last', function (require, exports, module) { module.exports = function (arr) { return arr && arr[arr.length - 1]; }; }); /*can-event@3.0.2#batch/batch*/ define('can-event/batch/batch', function (require, exports, module) { 'use strict'; var canEvent = require('can-event'); var last = require('can-util/js/last/last'); var namespace = require('can-namespace'); var canTypes = require('can-types'); var canDev = require('can-util/js/dev/dev'); var group = console.group && console.group.bind(console) || console.log; var groupEnd = console.groupEnd && console.groupEnd.bind(console) || function () { }; var batchNum = 1, collectionQueue = null, queues = [], dispatchingQueues = false, makeHandlerArgs = canEvent.makeHandlerArgs, getHandlers = canEvent.handlers; function addToCollectionQueue(item, event, args, handlers) { var handlerArgs = makeHandlerArgs(event, args); var tasks = []; for (var i = 0, len = handlers.length; i < len; i++) { tasks[i] = [ handlers[i], item, handlerArgs ]; } [].push.apply(collectionQueue.tasks, tasks); } var canBatch = { transactions: 0, start: function (batchStopHandler) { canBatch.transactions++; if (canBatch.transactions === 1) { var queue = { number: batchNum++, index: 0, tasks: [], batchEnded: false, callbacksIndex: 0, callbacks: [], complete: false }; if (batchStopHandler) { queue.callbacks.push(batchStopHandler); } collectionQueue = queue; } }, collecting: function () { return collectionQueue; }, dispatching: function () { return queues[0]; }, stop: function (force, callStart) { if (force) { canBatch.transactions = 0; } else { canBatch.transactions--; } if (canBatch.transactions === 0) { queues.push(collectionQueue); collectionQueue = null; if (!dispatchingQueues) { canEvent.flush(); } } }, flush: function () { var debug = canDev.logLevel >= 1; dispatchingQueues = true; while (queues.length) { var queue = queues[0]; var tasks = queue.tasks, callbacks = queue.callbacks; canBatch.batchNum = queue.number; var len = tasks.length, index; if (debug && queue.index === 0 && queue.index < len) { group('batch running ' + queue.number); } while (queue.index < len) { index = queue.index++; if (debug) { var context = tasks[index][1]; var args = tasks[index][2]; if (args && args[0]) { console.log('dispatching', args[0].type, 'on', context); } } tasks[index][0].apply(tasks[index][1], tasks[index][2]); } if (!queue.batchEnded) { if (debug) { console.log('tasks ended'); } queue.batchEnded = true; canEvent.dispatchSync.call(canBatch, 'batchEnd', [queue.number]); } if (debug && queue.callbacksIndex < callbacks.length) { console.log('calling callbacks'); } while (queue.callbacksIndex < callbacks.length) { callbacks[queue.callbacksIndex++](); } if (!queue.complete) { queue.complete = true; canBatch.batchNum = undefined; queues.shift(); if (debug) { groupEnd(); } } } dispatchingQueues = false; }, dispatch: function (event, args) { var item = this, handlers; if (!item.__inSetup) { event = typeof event === 'string' ? { type: event } : event; if (event.batchNum) { canEvent.dispatchSync.call(item, event, args); } else if (collectionQueue) { handlers = getHandlers.call(this, event.type); if (handlers) { event.batchNum = collectionQueue.number; addToCollectionQueue(item, event, args, handlers); } } else if (queues.length) { handlers = getHandlers.call(this, event.type); if (handlers) { canBatch.start(); event.batchNum = collectionQueue.number; addToCollectionQueue(item, event, args, handlers); last(queues).callbacks.push(canBatch.stop); } } else { handlers = getHandlers.call(this, event.type); if (handlers) { canBatch.start(); event.batchNum = collectionQueue.number; addToCollectionQueue(item, event, args, handlers); canBatch.stop(); } } } }, queue: function (task, inCurrentBatch) { if (collectionQueue) { collectionQueue.tasks.push(task); } else if (queues.length) { if (inCurrentBatch && queues[0].index < queues.tasks.length) { queues[0].tasks.push(task); } else { canBatch.start(); collectionQueue.tasks.push(task); last(queues).callbacks.push(canBatch.stop); } } else { canBatch.start(); collectionQueue.tasks.push(task); canBatch.stop(); } }, queues: function () { return queues; }, afterPreviousEvents: function (handler) { this.queue([handler]); }, after: function (handler) { var queue = collectionQueue || queues[0]; if (queue) { queue.callbacks.push(handler); } else { handler({}); } } }; canEvent.flush = canBatch.flush; canEvent.dispatch = canBatch.dispatch; canBatch.trigger = function () { console.warn('use canEvent.dispatch instead'); return canEvent.dispatch.apply(this, arguments); }; canTypes.queueTask = canBatch.queue; module.exports = namespace.batch = canBatch; }); /*can-observation@3.0.6#can-observation*/ define('can-observation', function (require, exports, module) { require('can-event'); var canEvent = require('can-event'); var canBatch = require('can-event/batch/batch'); var assign = require('can-util/js/assign/assign'); var namespa