UNPKG

sodajs

Version:

Light weight but powerful template engine for JavaScript.

1,531 lines (1,256 loc) 547 kB
(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["soda"] = factory(); else root["soda"] = 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] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = 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; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 33); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! * Chai - flag utility * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com> * MIT Licensed */ /** * ### .flag(object, key, [value]) * * Get or set a flag value on an object. If a * value is provided it will be set, else it will * return the currently set value or `undefined` if * the value is not set. * * utils.flag(this, 'foo', 'bar'); // setter * utils.flag(this, 'foo'); // getter, returns `bar` * * @param {Object} object constructed Assertion * @param {String} key * @param {Mixed} value (optional) * @namespace Utils * @name flag * @api private */ module.exports = function flag(obj, key, value) { var flags = obj.__flags || (obj.__flags = Object.create(null)); if (arguments.length === 3) { flags[key] = value; } else { return flags[key]; } }; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! * chai * Copyright(c) 2011-2014 Jake Luer <jake@alogicalparadox.com> * MIT Licensed */ var used = []; /*! * Chai version */ exports.version = '4.0.2'; /*! * Assertion Error */ exports.AssertionError = __webpack_require__(20); /*! * Utils for plugins (not exported) */ var util = __webpack_require__(35); /** * # .use(function) * * Provides a way to extend the internals of Chai. * * @param {Function} * @returns {this} for chaining * @api public */ exports.use = function (fn) { if (!~used.indexOf(fn)) { fn(exports, util); used.push(fn); } return exports; }; /*! * Utility Functions */ exports.util = util; /*! * Configuration */ var config = __webpack_require__(2); exports.config = config; /*! * Primary `Assertion` prototype */ var assertion = __webpack_require__(53); exports.use(assertion); /*! * Core Assertions */ var core = __webpack_require__(54); exports.use(core); /*! * Expect interface */ var expect = __webpack_require__(55); exports.use(expect); /*! * Should interface */ var should = __webpack_require__(56); exports.use(should); /*! * Assert interface */ var assert = __webpack_require__(57); exports.use(assert); /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; module.exports = { /** * ### config.includeStack * * User configurable property, influences whether stack trace * is included in Assertion error message. Default of false * suppresses stack trace in the error message. * * chai.config.includeStack = true; // enable stack on error * * @param {Boolean} * @api public */ includeStack: false, /** * ### config.showDiff * * User configurable property, influences whether or not * the `showDiff` flag should be included in the thrown * AssertionErrors. `false` will always be `false`; `true` * will be true when the assertion has requested a diff * be shown. * * @param {Boolean} * @api public */ showDiff: true, /** * ### config.truncateThreshold * * User configurable property, sets length threshold for actual and * expected values in assertion errors. If this threshold is exceeded, for * example for large data structures, the value is replaced with something * like `[ Array(3) ]` or `{ Object (prop1, prop2) }`. * * Set it to zero if you want to disable truncating altogether. * * This is especially userful when doing assertions on arrays: having this * set to a reasonable large value makes the failure messages readily * inspectable. * * chai.config.truncateThreshold = 0; // disable truncating * * @param {Number} * @api public */ truncateThreshold: 40, /** * ### config.useProxy * * User configurable property, defines if chai will use a Proxy to throw * an error when a non-existent property is read, which protects users * from typos when using property-based assertions. * * Set it to false if you want to disable this feature. * * chai.config.useProxy = false; // disable use of Proxy * * This feature is automatically disabled regardless of this config value * in environments that don't support proxies. * * @param {Boolean} * @api public */ useProxy: true, /** * ### config.proxyExcludedKeys * * User configurable property, defines which properties should be ignored * instead of throwing an error if they do not exist on the assertion. * This is only applied if the environment Chai is running in supports proxies and * if the `useProxy` configuration setting is enabled. * By default, `then` and `inspect` will not throw an error if they do not exist on the * assertion object because the `.inspect` property is read by `util.inspect` (for example, when * using `console.log` on the assertion object) and `.then` is necessary for promise type-checking. * * // By default these keys will not throw an error if they do not exist on the assertion object * chai.config.proxyExcludedKeys = ['then', 'inspect']; * * @param {Array} * @api public */ proxyExcludedKeys: ['then', 'inspect', 'toJSON'] }; /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /*! * Chai - transferFlags utility * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com> * MIT Licensed */ /** * ### .transferFlags(assertion, object, includeAll = true) * * Transfer all the flags for `assertion` to `object`. If * `includeAll` is set to `false`, then the base Chai * assertion flags (namely `object`, `ssfi`, `lockSsfi`, * and `message`) will not be transferred. * * * var newAssertion = new Assertion(); * utils.transferFlags(assertion, newAssertion); * * var anotherAsseriton = new Assertion(myObj); * utils.transferFlags(assertion, anotherAssertion, false); * * @param {Assertion} assertion the assertion to transfer the flags from * @param {Object} object the object to transfer the flags to; usually a new assertion * @param {Boolean} includeAll * @namespace Utils * @name transferFlags * @api private */ module.exports = function transferFlags(assertion, object, includeAll) { var flags = assertion.__flags || (assertion.__flags = Object.create(null)); if (!object.__flags) { object.__flags = Object.create(null); } includeAll = arguments.length === 3 ? includeAll : true; for (var flag in flags) { if (includeAll || flag !== 'object' && flag !== 'ssfi' && flag !== 'lockSsfi' && flag != 'message') { object.__flags[flag] = flags[flag]; } } }; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var EventTarget = __webpack_require__(15); var Node = function (_EventTarget) { _inherits(Node, _EventTarget); function Node() { _classCallCheck(this, Node); var _this = _possibleConstructorReturn(this, (Node.__proto__ || Object.getPrototypeOf(Node)).call(this)); _this.ELEMENT_NODE = 1; _this.ATTRIBUTE_NODE = 2; _this.TEXT_NODE = 3; _this.CDATA_SECTION_NODE = 4; _this.ENTITY_REFERENCE_NODE = 5; // historical _this.ENTITY_NODE = 6; // historical _this.PROCESSING_INSTRUCTION_NODE = 7; _this.COMMENT_NODE = 8; _this.DOCUMENT_NODE = 9; _this.DOCUMENT_TYPE_NODE = 10; _this.DOCUMENT_FRAGMENT_NODE = 11; _this.NOTATION_NODE = 12; // historical _this.childNodes = []; _this.nodeValue = ''; _this.ownerDocument = null; _this.parentNode = null; _this.textContent = ''; return _this; } _createClass(Node, [{ key: 'appendChild', value: function appendChild(node) { return this.insertBefore(node); } // @todo 这个参数有问题 }, { key: 'cloneNode', value: function cloneNode(deep) { if (this.nodeType === this.TEXT_NODE) { var node = this.ownerDocument.createTextNode(this.nodeValue); return node; } if (this.nodeType === this.COMMENT_NODE) { var node = this.ownerDocument.createComment(this.nodeValue); return node; } var node = this.ownerDocument.createDocumentFragment(); var tagName = this.tagName && this.tagName.toLowerCase(); if (deep) { node.innerHTML = "<" + tagName + " " + this._getAttributeString() + ">" + this.innerHTML + "</" + tagName + ">"; } else { node.innerHTML = "<" + tagName + " " + this._getAttributeString() + "></" + tagName + ">"; } return node.childNodes[0]; } }, { key: 'getRootNode', value: function getRootNode() { var getParentNode = function getParentNode(node) { if (node.parentNode) { return getParentNode(node.parentNode); } else { return node; } }; return getParentNode(this); } }, { key: 'contains', value: function contains(node) { if (node === this) { return true; } var flag = false; for (var i = 0; i < this.childNodes.length; i++) { var child = this.childNodes[i]; if (child.contains(node)) { flag = true; break; } } return flag; } }, { key: 'compareDocumentPosition', value: function compareDocumentPosition(node) { function comparePosition(a, b) { (a != b && a.contains(b) && 16) + (a != b && b.contains(a) && 8) + (a.sourceIndex >= 0 && b.sourceIndex >= 0 ? (a.sourceIndex < b.sourceIndex && 4) + (a.sourceIndex > b.sourceIndex && 2) : 1); } } }, { key: 'hasChildNodes', value: function hasChildNodes() { return this.childNodes.length; } }, { key: 'removeChild', value: function removeChild(node) { for (var i = 0; i < this.childNodes.length; i++) { if (this.childNodes[i] === node) { this.childNodes.splice(i, 1); node.parentNode = null; break; } } } }, { key: 'insertBefore', value: function insertBefore(newNode, oldNode) { for (var i = 0; i < this.childNodes.length; i++) { if (this.childNodes[i] === oldNode) { break; } } var checkInDocument = function checkInDocument(n) { var flag = 0; var checkNode = function checkNode(node) { if (node === window.DOMTREE._tree[0]) { flag = 1; return; } if (node.parentNode) { checkNode(node.parentNode); } }; checkNode(n); return flag; }; // var isInDocument = checkInDocument(this); // 如果是frament 则将子元素添加进去 if ((newNode.tagName || '').toLowerCase() === "fragment") { Array.prototype.splice.apply(this.childNodes, [i, 0].concat(newNode.childNodes)); for (var i = 0; i < newNode.childNodes.length; i++) { newNode.childNodes[i].parentNode = this; // 这里有待完善 /* if(isInDocument){ newNode.childNodes[i].getIdMap(window.DOMTREE._idMap); } */ } // 置空子元素 newNode.childNodes = []; } else { // 从原来的父元素中删除掉 if (newNode.parentNode) { newNode.parentNode.removeChild(newNode); } newNode.parentNode = this; this.childNodes.splice(i, 0, newNode); // 这里有待完善 /* if(isInDocument){ newNode.getIdMap(window.DOMTREE._idMap); } */ } /* if(newNode.tagName === "script"){ if(newNode.src){ var content = window.drequire(newNode.src, function(){ newNode.onload && newNode.onload.call(newNode); // 注意这里 把新加的脚本执行后就删除了 newNode.parentNode.removeChild(newNode); }); for(var i in content){ global[i] = content[i]; } } } */ return newNode; } }, { key: 'parentNodeElement', get: function get() { if (this.parentNode.nodeType === this.ELEMENT_NODE) { return this.parentNode; } else { return null; } } }, { key: 'previousSibling', get: function get() {} }, { key: 'firstChild', get: function get() { return this.childNodes[0]; } }, { key: 'lastChild', get: function get() { return this.childNodes[this.childNodes.length - 1]; } }, { key: 'nextSibling', get: function get() {} }, { key: 'nodeName', get: function get() { return this.tagName; } }]); return Node; }(EventTarget); module.exports = Node; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; // This is (almost) directly from Node.js utils // https://github.com/joyent/node/blob/f8c335d0caf47f16d31413f89aa28eda3878e3aa/lib/util.js var getName = __webpack_require__(23); var getProperties = __webpack_require__(24); var getEnumerableProperties = __webpack_require__(40); var config = __webpack_require__(2); module.exports = inspect; /** * ### .inspect(obj, [showHidden], [depth], [colors]) * * Echoes the value of a value. Tries to print the value out * in the best way possible given the different types. * * @param {Object} obj The object to print out. * @param {Boolean} showHidden Flag that shows hidden (not enumerable) * properties of objects. Default is false. * @param {Number} depth Depth in which to descend in object. Default is 2. * @param {Boolean} colors Flag to turn on ANSI escape codes to color the * output. Default is false (no coloring). * @namespace Utils * @name inspect */ function inspect(obj, showHidden, depth, colors) { var ctx = { showHidden: showHidden, seen: [], stylize: function stylize(str) { return str; } }; return formatValue(ctx, obj, typeof depth === 'undefined' ? 2 : depth); } // Returns true if object is a DOM element. var isDOMElement = function isDOMElement(object) { if ((typeof HTMLElement === 'undefined' ? 'undefined' : _typeof(HTMLElement)) === 'object') { return object instanceof HTMLElement; } else { return object && (typeof object === 'undefined' ? 'undefined' : _typeof(object)) === 'object' && 'nodeType' in object && object.nodeType === 1 && typeof object.nodeName === 'string'; } }; function formatValue(ctx, value, recurseTimes) { // Provide a hook for user-specified inspect functions. // Check that value is an object with an inspect function on it if (value && typeof value.inspect === 'function' && // Filter out the util module, it's inspect function is special value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check. !(value.constructor && value.constructor.prototype === value)) { var ret = value.inspect(recurseTimes, ctx); if (typeof ret !== 'string') { ret = formatValue(ctx, ret, recurseTimes); } return ret; } // Primitive types cannot have properties var primitive = formatPrimitive(ctx, value); if (primitive) { return primitive; } // If this is a DOM element, try to get the outer HTML. if (isDOMElement(value)) { if ('outerHTML' in value) { return value.outerHTML; // This value does not have an outerHTML attribute, // it could still be an XML element } else { // Attempt to serialize it try { if (document.xmlVersion) { var xmlSerializer = new XMLSerializer(); return xmlSerializer.serializeToString(value); } else { // Firefox 11- do not support outerHTML // It does, however, support innerHTML // Use the following to render the element var ns = "http://www.w3.org/1999/xhtml"; var container = document.createElementNS(ns, '_'); container.appendChild(value.cloneNode(false)); html = container.innerHTML.replace('><', '>' + value.innerHTML + '<'); container.innerHTML = ''; return html; } } catch (err) { // This could be a non-native DOM implementation, // continue with the normal flow: // printing the element as if it is an object. } } } // Look up the keys of the object. var visibleKeys = getEnumerableProperties(value); var keys = ctx.showHidden ? getProperties(value) : visibleKeys; var name, nameSuffix; // Some type of object without properties can be shortcutted. // In IE, errors have a single `stack` property, or if they are vanilla `Error`, // a `stack` plus `description` property; ignore those for consistency. if (keys.length === 0 || isError(value) && (keys.length === 1 && keys[0] === 'stack' || keys.length === 2 && keys[0] === 'description' && keys[1] === 'stack')) { if (typeof value === 'function') { name = getName(value); nameSuffix = name ? ': ' + name : ''; return ctx.stylize('[Function' + nameSuffix + ']', 'special'); } if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } if (isDate(value)) { return ctx.stylize(Date.prototype.toUTCString.call(value), 'date'); } if (isError(value)) { return formatError(value); } } var base = '', array = false, typedArray = false, braces = ['{', '}']; if (isTypedArray(value)) { typedArray = true; braces = ['[', ']']; } // Make Array say that they are Array if (isArray(value)) { array = true; braces = ['[', ']']; } // Make functions say that they are functions if (typeof value === 'function') { name = getName(value); nameSuffix = name ? ': ' + name : ''; base = ' [Function' + nameSuffix + ']'; } // Make RegExps say that they are RegExps if (isRegExp(value)) { base = ' ' + RegExp.prototype.toString.call(value); } // Make dates with properties first say the date if (isDate(value)) { base = ' ' + Date.prototype.toUTCString.call(value); } // Make error with message first say the error if (isError(value)) { return formatError(value); } if (keys.length === 0 && (!array || value.length == 0)) { return braces[0] + base + braces[1]; } if (recurseTimes < 0) { if (isRegExp(value)) { return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp'); } else { return ctx.stylize('[Object]', 'special'); } } ctx.seen.push(value); var output; if (array) { output = formatArray(ctx, value, recurseTimes, visibleKeys, keys); } else if (typedArray) { return formatTypedArray(value); } else { output = keys.map(function (key) { return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array); }); } ctx.seen.pop(); return reduceToSingleString(output, base, braces); } function formatPrimitive(ctx, value) { switch (typeof value === 'undefined' ? 'undefined' : _typeof(value)) { case 'undefined': return ctx.stylize('undefined', 'undefined'); case 'string': var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\''; return ctx.stylize(simple, 'string'); case 'number': if (value === 0 && 1 / value === -Infinity) { return ctx.stylize('-0', 'number'); } return ctx.stylize('' + value, 'number'); case 'boolean': return ctx.stylize('' + value, 'boolean'); case 'symbol': return ctx.stylize(value.toString(), 'symbol'); } // For some reason typeof null is "object", so special case here. if (value === null) { return ctx.stylize('null', 'null'); } } function formatError(value) { return '[' + Error.prototype.toString.call(value) + ']'; } function formatArray(ctx, value, recurseTimes, visibleKeys, keys) { var output = []; for (var i = 0, l = value.length; i < l; ++i) { if (Object.prototype.hasOwnProperty.call(value, String(i))) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true)); } else { output.push(''); } } keys.forEach(function (key) { if (!key.match(/^\d+$/)) { output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true)); } }); return output; } function formatTypedArray(value) { var str = '[ '; for (var i = 0; i < value.length; ++i) { if (str.length >= config.truncateThreshold - 7) { str += '...'; break; } str += value[i] + ', '; } str += ' ]'; // Removing trailing `, ` if the array was not truncated if (str.indexOf(', ]') !== -1) { str = str.replace(', ]', ' ]'); } return str; } function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) { var name; var propDescriptor = Object.getOwnPropertyDescriptor(value, key); var str; if (propDescriptor) { if (propDescriptor.get) { if (propDescriptor.set) { str = ctx.stylize('[Getter/Setter]', 'special'); } else { str = ctx.stylize('[Getter]', 'special'); } } else { if (propDescriptor.set) { str = ctx.stylize('[Setter]', 'special'); } } } if (visibleKeys.indexOf(key) < 0) { name = '[' + key + ']'; } if (!str) { if (ctx.seen.indexOf(value[key]) < 0) { if (recurseTimes === null) { str = formatValue(ctx, value[key], null); } else { str = formatValue(ctx, value[key], recurseTimes - 1); } if (str.indexOf('\n') > -1) { if (array) { str = str.split('\n').map(function (line) { return ' ' + line; }).join('\n').substr(2); } else { str = '\n' + str.split('\n').map(function (line) { return ' ' + line; }).join('\n'); } } } else { str = ctx.stylize('[Circular]', 'special'); } } if (typeof name === 'undefined') { if (array && key.match(/^\d+$/)) { return str; } name = JSON.stringify('' + key); if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) { name = name.substr(1, name.length - 2); name = ctx.stylize(name, 'name'); } else { name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'"); name = ctx.stylize(name, 'string'); } } return name + ': ' + str; } function reduceToSingleString(output, base, braces) { var numLinesEst = 0; var length = output.reduce(function (prev, cur) { numLinesEst++; if (cur.indexOf('\n') >= 0) numLinesEst++; return prev + cur.length + 1; }, 0); if (length > 60) { return braces[0] + (base === '' ? '' : base + '\n ') + ' ' + output.join(',\n ') + ' ' + braces[1]; } return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1]; } function isTypedArray(ar) { // Unfortunately there's no way to check if an object is a TypedArray // We have to check if it's one of these types return (typeof ar === 'undefined' ? 'undefined' : _typeof(ar)) === 'object' && /\w+Array]$/.test(objectToString(ar)); } function isArray(ar) { return Array.isArray(ar) || (typeof ar === 'undefined' ? 'undefined' : _typeof(ar)) === 'object' && objectToString(ar) === '[object Array]'; } function isRegExp(re) { return (typeof re === 'undefined' ? 'undefined' : _typeof(re)) === 'object' && objectToString(re) === '[object RegExp]'; } function isDate(d) { return (typeof d === 'undefined' ? 'undefined' : _typeof(d)) === 'object' && objectToString(d) === '[object Date]'; } function isError(e) { return (typeof e === 'undefined' ? 'undefined' : _typeof(e)) === 'object' && objectToString(e) === '[object Error]'; } function objectToString(o) { return Object.prototype.toString.call(o); } /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var config = __webpack_require__(2); /*! * Chai - isProxyEnabled helper * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com> * MIT Licensed */ /** * ### .isProxyEnabled() * * Helper function to check if Chai's proxy protection feature is enabled. If * proxies are unsupported or disabled via the user's Chai config, then return * false. Otherwise, return true. * * @namespace Utils * @name isProxyEnabled */ module.exports = function isProxyEnabled() { return config.useProxy && typeof Proxy !== 'undefined' && typeof Reflect !== 'undefined'; }; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var config = __webpack_require__(2); var fnLengthDesc = Object.getOwnPropertyDescriptor(function () {}, 'length'); /*! * Chai - addLengthGuard utility * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com> * MIT Licensed */ /** * ### .addLengthGuard(fn, assertionName, isChainable) * * Define `length` as a getter on the given uninvoked method assertion. The * getter acts as a guard against chaining `length` directly off of an uninvoked * method assertion, which is a problem because it references `function`'s * built-in `length` property instead of Chai's `length` assertion. When the * getter catches the user making this mistake, it throws an error with a * helpful message. * * There are two ways in which this mistake can be made. The first way is by * chaining the `length` assertion directly off of an uninvoked chainable * method. In this case, Chai suggests that the user use `lengthOf` instead. The * second way is by chaining the `length` assertion directly off of an uninvoked * non-chainable method. Non-chainable methods must be invoked prior to * chaining. In this case, Chai suggests that the user consult the docs for the * given assertion. * * If the `length` property of functions is unconfigurable, then return `fn` * without modification. * * Note that in ES6, the function's `length` property is configurable, so once * support for legacy environments is dropped, Chai's `length` property can * replace the built-in function's `length` property, and this length guard will * no longer be necessary. In the mean time, maintaining consistency across all * environments is the priority. * * @param {Function} fn * @param {String} assertionName * @param {Boolean} isChainable * @namespace Utils * @name addLengthGuard */ module.exports = function addLengthGuard(fn, assertionName, isChainable) { if (!fnLengthDesc.configurable) return fn; Object.defineProperty(fn, 'length', { get: function get() { if (isChainable) { throw Error('Invalid Chai property: ' + assertionName + '.length. Due' + ' to a compatibility issue, "length" cannot directly follow "' + assertionName + '". Use "' + assertionName + '.lengthOf" instead.'); } throw Error('Invalid Chai property: ' + assertionName + '.length. See' + ' docs for proper usage of "' + assertionName + '".'); } }); return fn; }; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var config = __webpack_require__(2); var flag = __webpack_require__(0); var getProperties = __webpack_require__(24); var isProxyEnabled = __webpack_require__(6); /*! * Chai - proxify utility * Copyright(c) 2012-2014 Jake Luer <jake@alogicalparadox.com> * MIT Licensed */ /** * ### .proxify(object) * * Return a proxy of given object that throws an error when a non-existent * property is read. By default, the root cause is assumed to be a misspelled * property, and thus an attempt is made to offer a reasonable suggestion from * the list of existing properties. However, if a nonChainableMethodName is * provided, then the root cause is instead a failure to invoke a non-chainable * method prior to reading the non-existent property. * * If proxies are unsupported or disabled via the user's Chai config, then * return object without modification. * * @param {Object} obj * @param {String} nonChainableMethodName * @namespace Utils * @name proxify */ var builtins = ['__flags', '__methods', '_obj', 'assert']; module.exports = function proxify(obj, nonChainableMethodName) { if (!isProxyEnabled()) return obj; return new Proxy(obj, { get: function proxyGetter(target, property) { // This check is here because we should not throw errors on Symbol properties // such as `Symbol.toStringTag`. // The values for which an error should be thrown can be configured using // the `config.proxyExcludedKeys` setting. if (typeof property === 'string' && config.proxyExcludedKeys.indexOf(property) === -1 && !Reflect.has(target, property)) { // Special message for invalid property access of non-chainable methods. if (nonChainableMethodName) { throw Error('Invalid Chai property: ' + nonChainableMethodName + '.' + property + '. See docs for proper usage of "' + nonChainableMethodName + '".'); } var orderedProperties = getProperties(target).filter(function (property) { return !Object.prototype.hasOwnProperty(property) && builtins.indexOf(property) === -1; }).sort(function (a, b) { return stringDistance(property, a) - stringDistance(property, b); }); if (orderedProperties.length && stringDistance(orderedProperties[0], property) < 4) { // If the property is reasonably close to an existing Chai property, // suggest that property to the user. throw Error('Invalid Chai property: ' + property + '. Did you mean "' + orderedProperties[0] + '"?'); } else { throw Error('Invalid Chai property: ' + property); } } // Use this proxy getter as the starting point for removing implementation // frames from the stack trace of a failed assertion. For property // assertions, this prevents the proxy getter from showing up in the stack // trace since it's invoked before the property getter. For method and // chainable method assertions, this flag will end up getting changed to // the method wrapper, which is good since this frame will no longer be in // the stack once the method is invoked. Note that Chai builtin assertion // properties such as `__flags` are skipped since this is only meant to // capture the starting point of an assertion. This step is also skipped // if the `lockSsfi` flag is set, thus indicating that this assertion is // being called from within another assertion. In that case, the `ssfi` // flag is already set to the outer assertion's starting point. if (builtins.indexOf(property) === -1 && !flag(target, 'lockSsfi')) { flag(target, 'ssfi', proxyGetter); } return Reflect.get(target, property); } }); }; /** * # stringDistance(strA, strB) * Return the Levenshtein distance between two strings. * @param {string} strA * @param {string} strB * @return {number} the string distance between strA and strB * @api private */ function stringDistance(strA, strB, memo) { if (!memo) { // `memo` is a two-dimensional array containing a cache of distances // memo[i][j] is the distance between strA.slice(0, i) and // strB.slice(0, j). memo = []; for (var i = 0; i <= strA.length; i++) { memo[i] = []; } } if (!memo[strA.length] || !memo[strA.length][strB.length]) { if (strA.length === 0 || strB.length === 0) { memo[strA.length][strB.length] = Math.max(strA.length, strB.length); } else { memo[strA.length][strB.length] = Math.min(stringDistance(strA.slice(0, -1), strB, memo) + 1, stringDistance(strA, strB.slice(0, -1), memo) + 1, stringDistance(strA.slice(0, -1), strB.slice(0, -1), memo) + (strA.slice(-1) === strB.slice(-1) ? 0 : 1)); } } return memo[strA.length][strB.length]; } /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var Node = __webpack_require__(4); var Text = function (_Node) { _inherits(Text, _Node); function Text(text) { _classCallCheck(this, Text); var _this = _possibleConstructorReturn(this, (Text.__proto__ || Object.getPrototypeOf(Text)).call(this)); _this.nodeType = _this.TEXT_NODE; _this.nodeValue = text || ''; return _this; } _createClass(Text, [{ key: '_getEnscapeValue', value: function _getEnscapeValue(value) { return value.replace(/</g, '&lt;').replace(/>/g, '&gt;'); } }]); return Text; }(Node); module.exports = Text; /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var g; // This works in non-strict mode g = function () { return this; }(); try { // This works if eval is allowed (see CSP) g = g || Function("return this")() || (1, eval)("this"); } catch (e) { // This works if the window reference is available if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") g = window; } // g can still be undefined, but nothing to do about it... // We return undefined, instead of nothing here, so it's // easier to handle this case. if(!global) { ...} module.exports = g; /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var Document = __webpack_require__(12); var Window = function () { function Window(browserEnv) { _classCallCheck(this, Window); this.document = new Document(this); this.setGlobalVars(); } _createClass(Window, [{ key: 'setGlobalVars', value: function setGlobalVars() { this.setTimeout = setTimeout; this.clearTimeout = clearTimeout; this.setInterval = setInterval; this.clearInterval = clearInterval; this.parseInt = parseInt; this.parseFloat = parseFloat; this.console = { log: function log(val) { console.log(val); }, info: function info() {}, debug: function debug() {}, dir: function dir() {} }; } }]); return Window; }(); module.exports = Window; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } //var Event = require('./event'); //var CanvasEl = require('./canvsel'); var HTMLElement = __webpack_require__(13); var Node = __webpack_require__(4); var Text = __webpack_require__(9); var Comment = __webpack_require__(19); var ElementClassDeclaredMap = { canvas: 'HTMLCanvasElement' }; var Document = function (_Node) { _inherits(Document, _Node); function Document(defaultView) { _classCallCheck(this, Document); var _this = _possibleConstructorReturn(this, (Document.__proto__ || Object.getPrototypeOf(Document)).call(this)); _this.__defaultView = defaultView; return _this; } _createClass(Document, [{ key: 'createElement', value: function createElement(tagName) { /* if(tagName === "canvas"){ return new CanvasEl(); } var node = new domEle.Element(); node.tagName = tagName; */ var node; tagName = (tagName || '').toUpperCase(); if (ElementClassDeclaredMap[tagName]) { var elementClass = __webpack_require__(74)("./" + ElementClassDeclaredMap[tagName].toLowerCase()); node = new elementClass(tagName); } else { node = new HTMLElement(tagName); } node.ownerDocument = this; return node; } }, { key: 'createDocumentFragment', value: function createDocumentFragment() { var node = this.createElement('fragment'); return node; } }, { key: 'createTextNode', value: function createTextNode(text) { return new Text(text); } }, { key: 'createComment', value: function createComment(text) { return new Comment(text); } }, { key: 'getElementById', value: function getElementById(id) { var result; var findChild = function findChild(node) { if (result) { return; } for (var i = 0; i < node.childNodes.length; i++) { var _node = node.childNodes[i]; var _id = _node.id; if (_id == id) { result = node.childNodes[i]; break; } if (_node.childNodes && _node.childNodes.length) { findChild(_node); } } }; findChild(this); return result; } }, { key: 'getElementsByClassName', value: function getElementsByClassName(className) { return this.documentElement.getElementsByClassName(className); } }, { key: 'getElementsByTagName', value: function getElementsByTagName(tagName) { return this.documentElement.getElementsByTagName(tagName); } }, { key: 'defaultView', get: function get() { return this.__defaultView; } }]); return Document; }(Node); module.exports = Document; /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var Element = __webpack_require__(14); var CSSStyleDeclaration = __webpack_require__(18); var HTMLElement = function (_Element) { _inherits(HTMLElement, _Element); function HTMLElement(tagName) { _classCallCheck(this, HTMLElement); var _this = _possibleConstructorReturn(this, (HTMLElement.__proto__ || Object.getPrototypeOf(HTMLElement)).call(this, tagName)); _this.style = new CSSStyleDeclaration(); return _this; } _createClass(HTMLElement, [{ key: 'blur', value: function blur() { console.warn('blur is not realised'); } }, { key: 'unblur', value: function unblur() {} }, { key: 'click', value: function click() {} }, { key: 'focus', value: function focus() {} }, { key: 'forceSpellCheck', value: function forceSpellCheck() {} }]); return HTMLElement; }(Element); module.exports = HTMLElement; /***/ }), /* 14 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descript