shark-mvc
Version:
Shark-MVC is a small MVC framework born to make our small JS apps easier to build.
1,597 lines (1,211 loc) • 336 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("jquery"), require("mustache"), require("moment"), require("html2hscript"), require("preact"), require("preact-html-converter"));
else if(typeof define === 'function' && define.amd)
define(["jquery", "mustache", "moment", "html2hscript", "preact", "preact-html-converter"], factory);
else if(typeof exports === 'object')
exports["shark-mvc"] = factory(require("jquery"), require("mustache"), require("moment"), require("html2hscript"), require("preact"), require("preact-html-converter"));
else
root["shark-mvc"] = factory(root["$"], root["Mustache"], root["Moment"], root["html2hscript"], root["preact"], root["preact-html-converter"]);
})(this, (__WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE_mustache__, __WEBPACK_EXTERNAL_MODULE_moment__, __WEBPACK_EXTERNAL_MODULE_html2hscript__, __WEBPACK_EXTERNAL_MODULE_preact__, __WEBPACK_EXTERNAL_MODULE_preact_html_converter__) => {
return /******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/browser-split/index.js":
/*!*********************************************!*\
!*** ./node_modules/browser-split/index.js ***!
\*********************************************/
/***/ ((module) => {
/*!
* Cross-Browser Split 1.1.1
* Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
* Available under the MIT License
* ECMAScript compliant, uniform cross-browser split method
*/
/**
* Splits a string into an array of strings using a regex or string separator. Matches of the
* separator are not included in the result array. However, if `separator` is a regex that contains
* capturing groups, backreferences are spliced into the result each time `separator` is matched.
* Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
* cross-browser.
* @param {String} str String to split.
* @param {RegExp|String} separator Regex or string to use for separating the string.
* @param {Number} [limit] Maximum number of items to include in the result array.
* @returns {Array} Array of substrings.
* @example
*
* // Basic use
* split('a b c d', ' ');
* // -> ['a', 'b', 'c', 'd']
*
* // With limit
* split('a b c d', ' ', 2);
* // -> ['a', 'b']
*
* // Backreferences in result array
* split('..word1 word2..', /([a-z]+)(\d+)/i);
* // -> ['..', 'word', '1', ' ', 'word', '2', '..']
*/
module.exports = (function split(undef) {
var nativeSplit = String.prototype.split,
compliantExecNpcg = /()??/.exec("")[1] === undef,
// NPCG: nonparticipating capturing group
self;
self = function(str, separator, limit) {
// If `separator` is not a regex, use `nativeSplit`
if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
return nativeSplit.call(str, separator, limit);
}
var output = [],
flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6
(separator.sticky ? "y" : ""),
// Firefox 3+
lastLastIndex = 0,
// Make `global` and avoid `lastIndex` issues by working with a copy
separator = new RegExp(separator.source, flags + "g"),
separator2, match, lastIndex, lastLength;
str += ""; // Type-convert
if (!compliantExecNpcg) {
// Doesn't need flags gy, but they don't hurt
separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
}
/* Values for `limit`, per the spec:
* If undefined: 4294967295 // Math.pow(2, 32) - 1
* If 0, Infinity, or NaN: 0
* If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
* If negative number: 4294967296 - Math.floor(Math.abs(limit))
* If other: Type-convert, then use the above rules
*/
limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1
limit >>> 0; // ToUint32(limit)
while (match = separator.exec(str)) {
// `separator.lastIndex` is not reliable cross-browser
lastIndex = match.index + match[0].length;
if (lastIndex > lastLastIndex) {
output.push(str.slice(lastLastIndex, match.index));
// Fix browsers whose `exec` methods don't consistently return `undefined` for
// nonparticipating capturing groups
if (!compliantExecNpcg && match.length > 1) {
match[0].replace(separator2, function() {
for (var i = 1; i < arguments.length - 2; i++) {
if (arguments[i] === undef) {
match[i] = undef;
}
}
});
}
if (match.length > 1 && match.index < str.length) {
Array.prototype.push.apply(output, match.slice(1));
}
lastLength = match[0].length;
lastLastIndex = lastIndex;
if (output.length >= limit) {
break;
}
}
if (separator.lastIndex === match.index) {
separator.lastIndex++; // Avoid an infinite loop
}
}
if (lastLastIndex === str.length) {
if (lastLength || !separator.test("")) {
output.push("");
}
} else {
output.push(str.slice(lastLastIndex));
}
return output.length > limit ? output.slice(0, limit) : output;
};
return self;
})();
/***/ }),
/***/ "./node_modules/ev-store/index.js":
/*!****************************************!*\
!*** ./node_modules/ev-store/index.js ***!
\****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var OneVersionConstraint = __webpack_require__(/*! individual/one-version */ "./node_modules/individual/one-version.js");
var MY_VERSION = '7';
OneVersionConstraint('ev-store', MY_VERSION);
var hashKey = '__EV_STORE_KEY@' + MY_VERSION;
module.exports = EvStore;
function EvStore(elem) {
var hash = elem[hashKey];
if (!hash) {
hash = elem[hashKey] = {};
}
return hash;
}
/***/ }),
/***/ "./node_modules/global/document.js":
/*!*****************************************!*\
!*** ./node_modules/global/document.js ***!
\*****************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var topLevel = typeof __webpack_require__.g !== 'undefined' ? __webpack_require__.g :
typeof window !== 'undefined' ? window : {}
var minDoc = __webpack_require__(/*! min-document */ "?34aa");
var doccy;
if (typeof document !== 'undefined') {
doccy = document;
} else {
doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
if (!doccy) {
doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
}
}
module.exports = doccy;
/***/ }),
/***/ "./node_modules/individual/index.js":
/*!******************************************!*\
!*** ./node_modules/individual/index.js ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
/*global window, global*/
var root = typeof window !== 'undefined' ?
window : typeof __webpack_require__.g !== 'undefined' ?
__webpack_require__.g : {};
module.exports = Individual;
function Individual(key, value) {
if (key in root) {
return root[key];
}
root[key] = value;
return value;
}
/***/ }),
/***/ "./node_modules/individual/one-version.js":
/*!************************************************!*\
!*** ./node_modules/individual/one-version.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var Individual = __webpack_require__(/*! ./index.js */ "./node_modules/individual/index.js");
module.exports = OneVersion;
function OneVersion(moduleName, version, defaultValue) {
var key = '__INDIVIDUAL_ONE_VERSION_' + moduleName;
var enforceKey = key + '_ENFORCE_SINGLETON';
var versionValue = Individual(enforceKey, version);
if (versionValue !== version) {
throw new Error('Can only have one copy of ' +
moduleName + '.\n' +
'You already have version ' + versionValue +
' installed.\n' +
'This means you cannot install version ' + version);
}
return Individual(key, defaultValue);
}
/***/ }),
/***/ "./node_modules/is-object/index.js":
/*!*****************************************!*\
!*** ./node_modules/is-object/index.js ***!
\*****************************************/
/***/ ((module) => {
"use strict";
module.exports = function isObject(x) {
return typeof x === 'object' && x !== null;
};
/***/ }),
/***/ "./node_modules/uuid/dist/esm-browser/regex.js":
/*!*****************************************************!*\
!*** ./node_modules/uuid/dist/esm-browser/regex.js ***!
\*****************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i);
/***/ }),
/***/ "./node_modules/uuid/dist/esm-browser/rng.js":
/*!***************************************************!*\
!*** ./node_modules/uuid/dist/esm-browser/rng.js ***!
\***************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (/* binding */ rng)
/* harmony export */ });
// Unique ID creation requires a high quality random # generator. In the browser we therefore
// require the crypto API and do not support built-in fallback to lower quality random number
// generators (like Math.random()).
var getRandomValues;
var rnds8 = new Uint8Array(16);
function rng() {
// lazy load so that environments that need to polyfill have a chance to do so
if (!getRandomValues) {
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation. Also,
// find the complete implementation of crypto (msCrypto) on IE11.
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto !== 'undefined' && typeof msCrypto.getRandomValues === 'function' && msCrypto.getRandomValues.bind(msCrypto);
if (!getRandomValues) {
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
}
}
return getRandomValues(rnds8);
}
/***/ }),
/***/ "./node_modules/uuid/dist/esm-browser/stringify.js":
/*!*********************************************************!*\
!*** ./node_modules/uuid/dist/esm-browser/stringify.js ***!
\*********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _validate_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./validate.js */ "./node_modules/uuid/dist/esm-browser/validate.js");
/**
* Convert array of 16 byte values to UUID string format of the form:
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
*/
var byteToHex = [];
for (var i = 0; i < 256; ++i) {
byteToHex.push((i + 0x100).toString(16).substr(1));
}
function stringify(arr) {
var offset = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
// Note: Be careful editing this code! It's been tuned for performance
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
var uuid = (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase(); // Consistency check for valid UUID. If this throws, it's likely due to one
// of the following:
// - One or more input array values don't map to a hex octet (leading to
// "undefined" in the uuid)
// - Invalid input values for the RFC `version` or `variant` fields
if (!(0,_validate_js__WEBPACK_IMPORTED_MODULE_0__["default"])(uuid)) {
throw TypeError('Stringified UUID is invalid');
}
return uuid;
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stringify);
/***/ }),
/***/ "./node_modules/uuid/dist/esm-browser/v4.js":
/*!**************************************************!*\
!*** ./node_modules/uuid/dist/esm-browser/v4.js ***!
\**************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _rng_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./rng.js */ "./node_modules/uuid/dist/esm-browser/rng.js");
/* harmony import */ var _stringify_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./stringify.js */ "./node_modules/uuid/dist/esm-browser/stringify.js");
function v4(options, buf, offset) {
options = options || {};
var rnds = options.random || (options.rng || _rng_js__WEBPACK_IMPORTED_MODULE_0__["default"])(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds[6] = rnds[6] & 0x0f | 0x40;
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
if (buf) {
offset = offset || 0;
for (var i = 0; i < 16; ++i) {
buf[offset + i] = rnds[i];
}
return buf;
}
return (0,_stringify_js__WEBPACK_IMPORTED_MODULE_1__["default"])(rnds);
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (v4);
/***/ }),
/***/ "./node_modules/uuid/dist/esm-browser/validate.js":
/*!********************************************************!*\
!*** ./node_modules/uuid/dist/esm-browser/validate.js ***!
\********************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var _regex_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./regex.js */ "./node_modules/uuid/dist/esm-browser/regex.js");
function validate(uuid) {
return typeof uuid === 'string' && _regex_js__WEBPACK_IMPORTED_MODULE_0__["default"].test(uuid);
}
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (validate);
/***/ }),
/***/ "./node_modules/virtual-dom/create-element.js":
/*!****************************************************!*\
!*** ./node_modules/virtual-dom/create-element.js ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var createElement = __webpack_require__(/*! ./vdom/create-element.js */ "./node_modules/virtual-dom/vdom/create-element.js")
module.exports = createElement
/***/ }),
/***/ "./node_modules/virtual-dom/diff.js":
/*!******************************************!*\
!*** ./node_modules/virtual-dom/diff.js ***!
\******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var diff = __webpack_require__(/*! ./vtree/diff.js */ "./node_modules/virtual-dom/vtree/diff.js")
module.exports = diff
/***/ }),
/***/ "./node_modules/virtual-dom/h.js":
/*!***************************************!*\
!*** ./node_modules/virtual-dom/h.js ***!
\***************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var h = __webpack_require__(/*! ./virtual-hyperscript/index.js */ "./node_modules/virtual-dom/virtual-hyperscript/index.js")
module.exports = h
/***/ }),
/***/ "./node_modules/virtual-dom/patch.js":
/*!*******************************************!*\
!*** ./node_modules/virtual-dom/patch.js ***!
\*******************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var patch = __webpack_require__(/*! ./vdom/patch.js */ "./node_modules/virtual-dom/vdom/patch.js")
module.exports = patch
/***/ }),
/***/ "./node_modules/virtual-dom/vdom/apply-properties.js":
/*!***********************************************************!*\
!*** ./node_modules/virtual-dom/vdom/apply-properties.js ***!
\***********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(/*! is-object */ "./node_modules/is-object/index.js")
var isHook = __webpack_require__(/*! ../vnode/is-vhook.js */ "./node_modules/virtual-dom/vnode/is-vhook.js")
module.exports = applyProperties
function applyProperties(node, props, previous) {
for (var propName in props) {
var propValue = props[propName]
if (propValue === undefined) {
removeProperty(node, propName, propValue, previous);
} else if (isHook(propValue)) {
removeProperty(node, propName, propValue, previous)
if (propValue.hook) {
propValue.hook(node,
propName,
previous ? previous[propName] : undefined)
}
} else {
if (isObject(propValue)) {
patchObject(node, props, previous, propName, propValue);
} else {
node[propName] = propValue
}
}
}
}
function removeProperty(node, propName, propValue, previous) {
if (previous) {
var previousValue = previous[propName]
if (!isHook(previousValue)) {
if (propName === "attributes") {
for (var attrName in previousValue) {
node.removeAttribute(attrName)
}
} else if (propName === "style") {
for (var i in previousValue) {
node.style[i] = ""
}
} else if (typeof previousValue === "string") {
node[propName] = ""
} else {
node[propName] = null
}
} else if (previousValue.unhook) {
previousValue.unhook(node, propName, propValue)
}
}
}
function patchObject(node, props, previous, propName, propValue) {
var previousValue = previous ? previous[propName] : undefined
// Set attributes
if (propName === "attributes") {
for (var attrName in propValue) {
var attrValue = propValue[attrName]
if (attrValue === undefined) {
node.removeAttribute(attrName)
} else {
node.setAttribute(attrName, attrValue)
}
}
return
}
if(previousValue && isObject(previousValue) &&
getPrototype(previousValue) !== getPrototype(propValue)) {
node[propName] = propValue
return
}
if (!isObject(node[propName])) {
node[propName] = {}
}
var replacer = propName === "style" ? "" : undefined
for (var k in propValue) {
var value = propValue[k]
node[propName][k] = (value === undefined) ? replacer : value
}
}
function getPrototype(value) {
if (Object.getPrototypeOf) {
return Object.getPrototypeOf(value)
} else if (value.__proto__) {
return value.__proto__
} else if (value.constructor) {
return value.constructor.prototype
}
}
/***/ }),
/***/ "./node_modules/virtual-dom/vdom/create-element.js":
/*!*********************************************************!*\
!*** ./node_modules/virtual-dom/vdom/create-element.js ***!
\*********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var document = __webpack_require__(/*! global/document */ "./node_modules/global/document.js")
var applyProperties = __webpack_require__(/*! ./apply-properties */ "./node_modules/virtual-dom/vdom/apply-properties.js")
var isVNode = __webpack_require__(/*! ../vnode/is-vnode.js */ "./node_modules/virtual-dom/vnode/is-vnode.js")
var isVText = __webpack_require__(/*! ../vnode/is-vtext.js */ "./node_modules/virtual-dom/vnode/is-vtext.js")
var isWidget = __webpack_require__(/*! ../vnode/is-widget.js */ "./node_modules/virtual-dom/vnode/is-widget.js")
var handleThunk = __webpack_require__(/*! ../vnode/handle-thunk.js */ "./node_modules/virtual-dom/vnode/handle-thunk.js")
module.exports = createElement
function createElement(vnode, opts) {
var doc = opts ? opts.document || document : document
var warn = opts ? opts.warn : null
vnode = handleThunk(vnode).a
if (isWidget(vnode)) {
return vnode.init()
} else if (isVText(vnode)) {
return doc.createTextNode(vnode.text)
} else if (!isVNode(vnode)) {
if (warn) {
warn("Item is not a valid virtual dom node", vnode)
}
return null
}
var node = (vnode.namespace === null) ?
doc.createElement(vnode.tagName) :
doc.createElementNS(vnode.namespace, vnode.tagName)
var props = vnode.properties
applyProperties(node, props)
var children = vnode.children
for (var i = 0; i < children.length; i++) {
var childNode = createElement(children[i], opts)
if (childNode) {
node.appendChild(childNode)
}
}
return node
}
/***/ }),
/***/ "./node_modules/virtual-dom/vdom/dom-index.js":
/*!****************************************************!*\
!*** ./node_modules/virtual-dom/vdom/dom-index.js ***!
\****************************************************/
/***/ ((module) => {
// Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
// We don't want to read all of the DOM nodes in the tree so we use
// the in-order tree indexing to eliminate recursion down certain branches.
// We only recurse into a DOM node if we know that it contains a child of
// interest.
var noChild = {}
module.exports = domIndex
function domIndex(rootNode, tree, indices, nodes) {
if (!indices || indices.length === 0) {
return {}
} else {
indices.sort(ascending)
return recurse(rootNode, tree, indices, nodes, 0)
}
}
function recurse(rootNode, tree, indices, nodes, rootIndex) {
nodes = nodes || {}
if (rootNode) {
if (indexInRange(indices, rootIndex, rootIndex)) {
nodes[rootIndex] = rootNode
}
var vChildren = tree.children
if (vChildren) {
var childNodes = rootNode.childNodes
for (var i = 0; i < tree.children.length; i++) {
rootIndex += 1
var vChild = vChildren[i] || noChild
var nextIndex = rootIndex + (vChild.count || 0)
// skip recursion down the tree if there are no nodes down here
if (indexInRange(indices, rootIndex, nextIndex)) {
recurse(childNodes[i], vChild, indices, nodes, rootIndex)
}
rootIndex = nextIndex
}
}
}
return nodes
}
// Binary search for an index in the interval [left, right]
function indexInRange(indices, left, right) {
if (indices.length === 0) {
return false
}
var minIndex = 0
var maxIndex = indices.length - 1
var currentIndex
var currentItem
while (minIndex <= maxIndex) {
currentIndex = ((maxIndex + minIndex) / 2) >> 0
currentItem = indices[currentIndex]
if (minIndex === maxIndex) {
return currentItem >= left && currentItem <= right
} else if (currentItem < left) {
minIndex = currentIndex + 1
} else if (currentItem > right) {
maxIndex = currentIndex - 1
} else {
return true
}
}
return false;
}
function ascending(a, b) {
return a > b ? 1 : -1
}
/***/ }),
/***/ "./node_modules/virtual-dom/vdom/patch-op.js":
/*!***************************************************!*\
!*** ./node_modules/virtual-dom/vdom/patch-op.js ***!
\***************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var applyProperties = __webpack_require__(/*! ./apply-properties */ "./node_modules/virtual-dom/vdom/apply-properties.js")
var isWidget = __webpack_require__(/*! ../vnode/is-widget.js */ "./node_modules/virtual-dom/vnode/is-widget.js")
var VPatch = __webpack_require__(/*! ../vnode/vpatch.js */ "./node_modules/virtual-dom/vnode/vpatch.js")
var updateWidget = __webpack_require__(/*! ./update-widget */ "./node_modules/virtual-dom/vdom/update-widget.js")
module.exports = applyPatch
function applyPatch(vpatch, domNode, renderOptions) {
var type = vpatch.type
var vNode = vpatch.vNode
var patch = vpatch.patch
switch (type) {
case VPatch.REMOVE:
return removeNode(domNode, vNode)
case VPatch.INSERT:
return insertNode(domNode, patch, renderOptions)
case VPatch.VTEXT:
return stringPatch(domNode, vNode, patch, renderOptions)
case VPatch.WIDGET:
return widgetPatch(domNode, vNode, patch, renderOptions)
case VPatch.VNODE:
return vNodePatch(domNode, vNode, patch, renderOptions)
case VPatch.ORDER:
reorderChildren(domNode, patch)
return domNode
case VPatch.PROPS:
applyProperties(domNode, patch, vNode.properties)
return domNode
case VPatch.THUNK:
return replaceRoot(domNode,
renderOptions.patch(domNode, patch, renderOptions))
default:
return domNode
}
}
function removeNode(domNode, vNode) {
var parentNode = domNode.parentNode
if (parentNode) {
parentNode.removeChild(domNode)
}
destroyWidget(domNode, vNode);
return null
}
function insertNode(parentNode, vNode, renderOptions) {
var newNode = renderOptions.render(vNode, renderOptions)
if (parentNode) {
parentNode.appendChild(newNode)
}
return parentNode
}
function stringPatch(domNode, leftVNode, vText, renderOptions) {
var newNode
if (domNode.nodeType === 3) {
domNode.replaceData(0, domNode.length, vText.text)
newNode = domNode
} else {
var parentNode = domNode.parentNode
newNode = renderOptions.render(vText, renderOptions)
if (parentNode && newNode !== domNode) {
parentNode.replaceChild(newNode, domNode)
}
}
return newNode
}
function widgetPatch(domNode, leftVNode, widget, renderOptions) {
var updating = updateWidget(leftVNode, widget)
var newNode
if (updating) {
newNode = widget.update(leftVNode, domNode) || domNode
} else {
newNode = renderOptions.render(widget, renderOptions)
}
var parentNode = domNode.parentNode
if (parentNode && newNode !== domNode) {
parentNode.replaceChild(newNode, domNode)
}
if (!updating) {
destroyWidget(domNode, leftVNode)
}
return newNode
}
function vNodePatch(domNode, leftVNode, vNode, renderOptions) {
var parentNode = domNode.parentNode
var newNode = renderOptions.render(vNode, renderOptions)
if (parentNode && newNode !== domNode) {
parentNode.replaceChild(newNode, domNode)
}
return newNode
}
function destroyWidget(domNode, w) {
if (typeof w.destroy === "function" && isWidget(w)) {
w.destroy(domNode)
}
}
function reorderChildren(domNode, moves) {
var childNodes = domNode.childNodes
var keyMap = {}
var node
var remove
var insert
for (var i = 0; i < moves.removes.length; i++) {
remove = moves.removes[i]
node = childNodes[remove.from]
if (remove.key) {
keyMap[remove.key] = node
}
domNode.removeChild(node)
}
var length = childNodes.length
for (var j = 0; j < moves.inserts.length; j++) {
insert = moves.inserts[j]
node = keyMap[insert.key]
// this is the weirdest bug i've ever seen in webkit
domNode.insertBefore(node, insert.to >= length++ ? null : childNodes[insert.to])
}
}
function replaceRoot(oldRoot, newRoot) {
if (oldRoot && newRoot && oldRoot !== newRoot && oldRoot.parentNode) {
oldRoot.parentNode.replaceChild(newRoot, oldRoot)
}
return newRoot;
}
/***/ }),
/***/ "./node_modules/virtual-dom/vdom/patch.js":
/*!************************************************!*\
!*** ./node_modules/virtual-dom/vdom/patch.js ***!
\************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var document = __webpack_require__(/*! global/document */ "./node_modules/global/document.js")
var isArray = __webpack_require__(/*! x-is-array */ "./node_modules/x-is-array/index.js")
var render = __webpack_require__(/*! ./create-element */ "./node_modules/virtual-dom/vdom/create-element.js")
var domIndex = __webpack_require__(/*! ./dom-index */ "./node_modules/virtual-dom/vdom/dom-index.js")
var patchOp = __webpack_require__(/*! ./patch-op */ "./node_modules/virtual-dom/vdom/patch-op.js")
module.exports = patch
function patch(rootNode, patches, renderOptions) {
renderOptions = renderOptions || {}
renderOptions.patch = renderOptions.patch && renderOptions.patch !== patch
? renderOptions.patch
: patchRecursive
renderOptions.render = renderOptions.render || render
return renderOptions.patch(rootNode, patches, renderOptions)
}
function patchRecursive(rootNode, patches, renderOptions) {
var indices = patchIndices(patches)
if (indices.length === 0) {
return rootNode
}
var index = domIndex(rootNode, patches.a, indices)
var ownerDocument = rootNode.ownerDocument
if (!renderOptions.document && ownerDocument !== document) {
renderOptions.document = ownerDocument
}
for (var i = 0; i < indices.length; i++) {
var nodeIndex = indices[i]
rootNode = applyPatch(rootNode,
index[nodeIndex],
patches[nodeIndex],
renderOptions)
}
return rootNode
}
function applyPatch(rootNode, domNode, patchList, renderOptions) {
if (!domNode) {
return rootNode
}
var newNode
if (isArray(patchList)) {
for (var i = 0; i < patchList.length; i++) {
newNode = patchOp(patchList[i], domNode, renderOptions)
if (domNode === rootNode) {
rootNode = newNode
}
}
} else {
newNode = patchOp(patchList, domNode, renderOptions)
if (domNode === rootNode) {
rootNode = newNode
}
}
return rootNode
}
function patchIndices(patches) {
var indices = []
for (var key in patches) {
if (key !== "a") {
indices.push(Number(key))
}
}
return indices
}
/***/ }),
/***/ "./node_modules/virtual-dom/vdom/update-widget.js":
/*!********************************************************!*\
!*** ./node_modules/virtual-dom/vdom/update-widget.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isWidget = __webpack_require__(/*! ../vnode/is-widget.js */ "./node_modules/virtual-dom/vnode/is-widget.js")
module.exports = updateWidget
function updateWidget(a, b) {
if (isWidget(a) && isWidget(b)) {
if ("name" in a && "name" in b) {
return a.id === b.id
} else {
return a.init === b.init
}
}
return false
}
/***/ }),
/***/ "./node_modules/virtual-dom/virtual-hyperscript/hooks/ev-hook.js":
/*!***********************************************************************!*\
!*** ./node_modules/virtual-dom/virtual-hyperscript/hooks/ev-hook.js ***!
\***********************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var EvStore = __webpack_require__(/*! ev-store */ "./node_modules/ev-store/index.js");
module.exports = EvHook;
function EvHook(value) {
if (!(this instanceof EvHook)) {
return new EvHook(value);
}
this.value = value;
}
EvHook.prototype.hook = function (node, propertyName) {
var es = EvStore(node);
var propName = propertyName.substr(3);
es[propName] = this.value;
};
EvHook.prototype.unhook = function(node, propertyName) {
var es = EvStore(node);
var propName = propertyName.substr(3);
es[propName] = undefined;
};
/***/ }),
/***/ "./node_modules/virtual-dom/virtual-hyperscript/hooks/soft-set-hook.js":
/*!*****************************************************************************!*\
!*** ./node_modules/virtual-dom/virtual-hyperscript/hooks/soft-set-hook.js ***!
\*****************************************************************************/
/***/ ((module) => {
"use strict";
module.exports = SoftSetHook;
function SoftSetHook(value) {
if (!(this instanceof SoftSetHook)) {
return new SoftSetHook(value);
}
this.value = value;
}
SoftSetHook.prototype.hook = function (node, propertyName) {
if (node[propertyName] !== this.value) {
node[propertyName] = this.value;
}
};
/***/ }),
/***/ "./node_modules/virtual-dom/virtual-hyperscript/index.js":
/*!***************************************************************!*\
!*** ./node_modules/virtual-dom/virtual-hyperscript/index.js ***!
\***************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var isArray = __webpack_require__(/*! x-is-array */ "./node_modules/x-is-array/index.js");
var VNode = __webpack_require__(/*! ../vnode/vnode.js */ "./node_modules/virtual-dom/vnode/vnode.js");
var VText = __webpack_require__(/*! ../vnode/vtext.js */ "./node_modules/virtual-dom/vnode/vtext.js");
var isVNode = __webpack_require__(/*! ../vnode/is-vnode */ "./node_modules/virtual-dom/vnode/is-vnode.js");
var isVText = __webpack_require__(/*! ../vnode/is-vtext */ "./node_modules/virtual-dom/vnode/is-vtext.js");
var isWidget = __webpack_require__(/*! ../vnode/is-widget */ "./node_modules/virtual-dom/vnode/is-widget.js");
var isHook = __webpack_require__(/*! ../vnode/is-vhook */ "./node_modules/virtual-dom/vnode/is-vhook.js");
var isVThunk = __webpack_require__(/*! ../vnode/is-thunk */ "./node_modules/virtual-dom/vnode/is-thunk.js");
var parseTag = __webpack_require__(/*! ./parse-tag.js */ "./node_modules/virtual-dom/virtual-hyperscript/parse-tag.js");
var softSetHook = __webpack_require__(/*! ./hooks/soft-set-hook.js */ "./node_modules/virtual-dom/virtual-hyperscript/hooks/soft-set-hook.js");
var evHook = __webpack_require__(/*! ./hooks/ev-hook.js */ "./node_modules/virtual-dom/virtual-hyperscript/hooks/ev-hook.js");
module.exports = h;
function h(tagName, properties, children) {
var childNodes = [];
var tag, props, key, namespace;
if (!children && isChildren(properties)) {
children = properties;
props = {};
}
props = props || properties || {};
tag = parseTag(tagName, props);
// support keys
if (props.hasOwnProperty('key')) {
key = props.key;
props.key = undefined;
}
// support namespace
if (props.hasOwnProperty('namespace')) {
namespace = props.namespace;
props.namespace = undefined;
}
// fix cursor bug
if (tag === 'INPUT' &&
!namespace &&
props.hasOwnProperty('value') &&
props.value !== undefined &&
!isHook(props.value)
) {
props.value = softSetHook(props.value);
}
transformProperties(props);
if (children !== undefined && children !== null) {
addChild(children, childNodes, tag, props);
}
return new VNode(tag, props, childNodes, key, namespace);
}
function addChild(c, childNodes, tag, props) {
if (typeof c === 'string') {
childNodes.push(new VText(c));
} else if (typeof c === 'number') {
childNodes.push(new VText(String(c)));
} else if (isChild(c)) {
childNodes.push(c);
} else if (isArray(c)) {
for (var i = 0; i < c.length; i++) {
addChild(c[i], childNodes, tag, props);
}
} else if (c === null || c === undefined) {
return;
} else {
throw UnexpectedVirtualElement({
foreignObject: c,
parentVnode: {
tagName: tag,
properties: props
}
});
}
}
function transformProperties(props) {
for (var propName in props) {
if (props.hasOwnProperty(propName)) {
var value = props[propName];
if (isHook(value)) {
continue;
}
if (propName.substr(0, 3) === 'ev-') {
// add ev-foo support
props[propName] = evHook(value);
}
}
}
}
function isChild(x) {
return isVNode(x) || isVText(x) || isWidget(x) || isVThunk(x);
}
function isChildren(x) {
return typeof x === 'string' || isArray(x) || isChild(x);
}
function UnexpectedVirtualElement(data) {
var err = new Error();
err.type = 'virtual-hyperscript.unexpected.virtual-element';
err.message = 'Unexpected virtual child passed to h().\n' +
'Expected a VNode / Vthunk / VWidget / string but:\n' +
'got:\n' +
errorString(data.foreignObject) +
'.\n' +
'The parent vnode is:\n' +
errorString(data.parentVnode)
'\n' +
'Suggested fix: change your `h(..., [ ... ])` callsite.';
err.foreignObject = data.foreignObject;
err.parentVnode = data.parentVnode;
return err;
}
function errorString(obj) {
try {
return JSON.stringify(obj, null, ' ');
} catch (e) {
return String(obj);
}
}
/***/ }),
/***/ "./node_modules/virtual-dom/virtual-hyperscript/parse-tag.js":
/*!*******************************************************************!*\
!*** ./node_modules/virtual-dom/virtual-hyperscript/parse-tag.js ***!
\*******************************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
"use strict";
var split = __webpack_require__(/*! browser-split */ "./node_modules/browser-split/index.js");
var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;
var notClassId = /^\.|#/;
module.exports = parseTag;
function parseTag(tag, props) {
if (!tag) {
return 'DIV';
}
var noId = !(props.hasOwnProperty('id'));
var tagParts = split(tag, classIdSplit);
var tagName = null;
if (notClassId.test(tagParts[1])) {
tagName = 'DIV';
}
var classes, part, type, i;
for (i = 0; i < tagParts.length; i++) {
part = tagParts[i];
if (!part) {
continue;
}
type = part.charAt(0);
if (!tagName) {
tagName = part;
} else if (type === '.') {
classes = classes || [];
classes.push(part.substring(1, part.length));
} else if (type === '#' && noId) {
props.id = part.substring(1, part.length);
}
}
if (classes) {
if (props.className) {
classes.push(props.className);
}
props.className = classes.join(' ');
}
return props.namespace ? tagName : tagName.toUpperCase();
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/handle-thunk.js":
/*!********************************************************!*\
!*** ./node_modules/virtual-dom/vnode/handle-thunk.js ***!
\********************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isVNode = __webpack_require__(/*! ./is-vnode */ "./node_modules/virtual-dom/vnode/is-vnode.js")
var isVText = __webpack_require__(/*! ./is-vtext */ "./node_modules/virtual-dom/vnode/is-vtext.js")
var isWidget = __webpack_require__(/*! ./is-widget */ "./node_modules/virtual-dom/vnode/is-widget.js")
var isThunk = __webpack_require__(/*! ./is-thunk */ "./node_modules/virtual-dom/vnode/is-thunk.js")
module.exports = handleThunk
function handleThunk(a, b) {
var renderedA = a
var renderedB = b
if (isThunk(b)) {
renderedB = renderThunk(b, a)
}
if (isThunk(a)) {
renderedA = renderThunk(a, null)
}
return {
a: renderedA,
b: renderedB
}
}
function renderThunk(thunk, previous) {
var renderedThunk = thunk.vnode
if (!renderedThunk) {
renderedThunk = thunk.vnode = thunk.render(previous)
}
if (!(isVNode(renderedThunk) ||
isVText(renderedThunk) ||
isWidget(renderedThunk))) {
throw new Error("thunk did not return a valid node");
}
return renderedThunk
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/is-thunk.js":
/*!****************************************************!*\
!*** ./node_modules/virtual-dom/vnode/is-thunk.js ***!
\****************************************************/
/***/ ((module) => {
module.exports = isThunk
function isThunk(t) {
return t && t.type === "Thunk"
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/is-vhook.js":
/*!****************************************************!*\
!*** ./node_modules/virtual-dom/vnode/is-vhook.js ***!
\****************************************************/
/***/ ((module) => {
module.exports = isHook
function isHook(hook) {
return hook &&
(typeof hook.hook === "function" && !hook.hasOwnProperty("hook") ||
typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"))
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/is-vnode.js":
/*!****************************************************!*\
!*** ./node_modules/virtual-dom/vnode/is-vnode.js ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var version = __webpack_require__(/*! ./version */ "./node_modules/virtual-dom/vnode/version.js")
module.exports = isVirtualNode
function isVirtualNode(x) {
return x && x.type === "VirtualNode" && x.version === version
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/is-vtext.js":
/*!****************************************************!*\
!*** ./node_modules/virtual-dom/vnode/is-vtext.js ***!
\****************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var version = __webpack_require__(/*! ./version */ "./node_modules/virtual-dom/vnode/version.js")
module.exports = isVirtualText
function isVirtualText(x) {
return x && x.type === "VirtualText" && x.version === version
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/is-widget.js":
/*!*****************************************************!*\
!*** ./node_modules/virtual-dom/vnode/is-widget.js ***!
\*****************************************************/
/***/ ((module) => {
module.exports = isWidget
function isWidget(w) {
return w && w.type === "Widget"
}
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/version.js":
/*!***************************************************!*\
!*** ./node_modules/virtual-dom/vnode/version.js ***!
\***************************************************/
/***/ ((module) => {
module.exports = "2"
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/vnode.js":
/*!*************************************************!*\
!*** ./node_modules/virtual-dom/vnode/vnode.js ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var version = __webpack_require__(/*! ./version */ "./node_modules/virtual-dom/vnode/version.js")
var isVNode = __webpack_require__(/*! ./is-vnode */ "./node_modules/virtual-dom/vnode/is-vnode.js")
var isWidget = __webpack_require__(/*! ./is-widget */ "./node_modules/virtual-dom/vnode/is-widget.js")
var isThunk = __webpack_require__(/*! ./is-thunk */ "./node_modules/virtual-dom/vnode/is-thunk.js")
var isVHook = __webpack_require__(/*! ./is-vhook */ "./node_modules/virtual-dom/vnode/is-vhook.js")
module.exports = VirtualNode
var noProperties = {}
var noChildren = []
function VirtualNode(tagName, properties, children, key, namespace) {
this.tagName = tagName
this.properties = properties || noProperties
this.children = children || noChildren
this.key = key != null ? String(key) : undefined
this.namespace = (typeof namespace === "string") ? namespace : null
var count = (children && children.length) || 0
var descendants = 0
var hasWidgets = false
var hasThunks = false
var descendantHooks = false
var hooks
for (var propName in properties) {
if (properties.hasOwnProperty(propName)) {
var property = properties[propName]
if (isVHook(property) && property.unhook) {
if (!hooks) {
hooks = {}
}
hooks[propName] = property
}
}
}
for (var i = 0; i < count; i++) {
var child = children[i]
if (isVNode(child)) {
descendants += child.count || 0
if (!hasWidgets && child.hasWidgets) {
hasWidgets = true
}
if (!hasThunks && child.hasThunks) {
hasThunks = true
}
if (!descendantHooks && (child.hooks || child.descendantHooks)) {
descendantHooks = true
}
} else if (!hasWidgets && isWidget(child)) {
if (typeof child.destroy === "function") {
hasWidgets = true
}
} else if (!hasThunks && isThunk(child)) {
hasThunks = true;
}
}
this.count = count + descendants
this.hasWidgets = hasWidgets
this.hasThunks = hasThunks
this.hooks = hooks
this.descendantHooks = descendantHooks
}
VirtualNode.prototype.version = version
VirtualNode.prototype.type = "VirtualNode"
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/vpatch.js":
/*!**************************************************!*\
!*** ./node_modules/virtual-dom/vnode/vpatch.js ***!
\**************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var version = __webpack_require__(/*! ./version */ "./node_modules/virtual-dom/vnode/version.js")
VirtualPatch.NONE = 0
VirtualPatch.VTEXT = 1
VirtualPatch.VNODE = 2
VirtualPatch.WIDGET = 3
VirtualPatch.PROPS = 4
VirtualPatch.ORDER = 5
VirtualPatch.INSERT = 6
VirtualPatch.REMOVE = 7
VirtualPatch.THUNK = 8
module.exports = VirtualPatch
function VirtualPatch(type, vNode, patch) {
this.type = Number(type)
this.vNode = vNode
this.patch = patch
}
VirtualPatch.prototype.version = version
VirtualPatch.prototype.type = "VirtualPatch"
/***/ }),
/***/ "./node_modules/virtual-dom/vnode/vtext.js":
/*!*************************************************!*\
!*** ./node_modules/virtual-dom/vnode/vtext.js ***!
\*************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var version = __webpack_require__(/*! ./version */ "./node_modules/virtual-dom/vnode/version.js")
module.exports = VirtualText
function VirtualText(text) {
this.text = String(text)
}
VirtualText.prototype.version = version
VirtualText.prototype.type = "VirtualText"
/***/ }),
/***/ "./node_modules/virtual-dom/vtree/diff-props.js":
/*!******************************************************!*\
!*** ./node_modules/virtual-dom/vtree/diff-props.js ***!
\******************************************************/
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
var isObject = __webpack_require__(/*! is-object */ "./node_modules/is-object/index.js")
var isHook = __webpack_require__(/*! ../vnode/is-vhook */ "./node_modules/virtual-dom/vnode/is-vhook.js")
module.exports = diffProps
function diffProps(a, b) {
var diff
for (var aKey in a) {
if (!(aKey in b)) {
diff = diff || {}
diff[aKey] = undefined
}
var aValue = a[aKey]
var bValue = b[aKey]
if (aValue === bValue) {
continue
} else if (isObject(aValue) && isObject(bValue)) {
if (getPrototype(bValue) !== getPrototype(aValue)) {
diff = diff || {}
diff[aKey] = bValue
} else if (isHook(bValue)) {
diff = diff || {}
diff[aKey] = bValue
} else {
var objectDiff = diffProps(aValue, bValue)
if (objectDiff)