123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645 |
- ! function () {
- "use strict";
- function VNode() {}
- function h(nodeName, attributes) {
- var lastSimple, child, simple, i, children = EMPTY_CHILDREN;
- for (i = arguments.length; i-- > 2;) {
- stack.push(arguments[i]);
- }
- if (attributes && null != attributes.children) {
- if (!stack.length) {
- stack.push(attributes.children);
- }
- delete attributes.children;
- }
- while (stack.length) {
- if ((child = stack.pop()) && void 0 !== child.pop)
- for (i = child.length; i--;) stack.push(child[i]);
- else {
- if ('boolean' == typeof child) child = null;
- if (simple = 'function' != typeof nodeName)
- if (null == child) child = '';
- else if ('number' == typeof child) child = String(child);
- else if ('string' != typeof child) simple = !1;
- if (simple && lastSimple) children[children.length - 1] += child;
- else if (children === EMPTY_CHILDREN) children = [child];
- else children.push(child);
- lastSimple = simple;
- }
- }
- var p = new VNode();
- p.nodeName = nodeName;
- p.children = children;
- p.attributes = null == attributes ? void 0 : attributes;
- p.key = null == attributes ? void 0 : attributes.key;
- if (void 0 !== options.vnode) {
- options.vnode(p);
- }
- return p;
- }
- function extend(obj, props) {
- for (var i in props) {
- obj[i] = props[i];
- }
- return obj;
- }
- function cloneElement(vnode, props) {
- return h(vnode.nodeName, extend(extend({}, vnode.attributes), props), arguments.length > 2 ? [].slice.call(arguments, 2) : vnode.children);
- }
- function enqueueRender(component) {
- if (!component.__d && (component.__d = !0) && 1 == items.push(component)) {
- (options.debounceRendering || defer)(rerender);
- }
- }
- function rerender() {
- var p, list = items;
- items = [];
- while (p = list.pop()) {
- if (p.__d) renderComponent(p);
- }
- }
- function isSameNodeType(node, vnode, hydrating) {
- if ("string" == typeof vnode || "number" == typeof vnode) {
- return void 0 !== node.splitText;
- }
- if ("string" == typeof vnode.nodeName) {
- return !node._componentConstructor && isNamedNode(node, vnode.nodeName);
- } else {
- return hydrating || node._componentConstructor === vnode.nodeName;
- }
- }
- function isNamedNode(node, nodeName) {
- return node.__n === nodeName || node.nodeName.toLowerCase() === nodeName.toLowerCase();
- }
- function getNodeProps(vnode) {
- var props = extend({}, vnode.attributes);
- props.children = vnode.children;
- var defaultProps = vnode.nodeName.defaultProps;
- if (void 0 !== defaultProps) {
- for (var i in defaultProps)
- if (void 0 === props[i]) props[i] = defaultProps[i];
- }
- return props;
- }
- function createNode(nodeName, isSvg) {
- var node = isSvg ? document.createElementNS("http://www.w3.org/2000/svg", nodeName) : document.createElement(nodeName);
- node.__n = nodeName;
- return node;
- }
- function removeNode(node) {
- var parentNode = node.parentNode;
- if (parentNode) {
- parentNode.removeChild(node);
- }
- }
- function setAccessor(node, name, old, value, isSvg) {
- if ("className" === name) {
- name = 'class';
- }
- if ("key" === name) {;
- } else if ("ref" === name) {
- if (old) {
- old(null);
- }
- if (value) {
- value(node);
- }
- } else if ("class" === name && !isSvg) {
- node.className = value || '';
- } else if ("style" === name) {
- if (!value || "string" == typeof value || "string" == typeof old) {
- node.style.cssText = value || '';
- }
- if (value && "object" == typeof value) {
- if ("string" != typeof old) {
- for (var i in old)
- if (!(i in value)) node.style[i] = '';
- }
- for (var i in value) {
- node.style[i] = 'number' == typeof value[i] && !1 === IS_NON_DIMENSIONAL.test(i) ? value[i] + 'px' : value[i];
- }
- }
- } else if ("dangerouslySetInnerHTML" === name) {
- if (value) {
- node.innerHTML = value.__html || '';
- }
- } else if ("o" == name[0] && "n" == name[1]) {
- var useCapture = name !== (name = name.replace(/Capture$/, ""));
- name = name.toLowerCase().substring(2);
- if (value) {
- if (!old) {
- node.addEventListener(name, eventProxy, useCapture);
- }
- } else {
- node.removeEventListener(name, eventProxy, useCapture);
- }
- (node.__l || (node.__l = {}))[name] = value;
- } else if ("list" !== name && "type" !== name && !isSvg && name in node) {
- setProperty(node, name, null == value ? "" : value);
- if (null == value || !1 === value) {
- node.removeAttribute(name);
- }
- } else {
- var ns = isSvg && name !== (name = name.replace(/^xlink\:?/, ""));
- if (null == value || !1 === value) {
- if (ns) node.removeAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase());
- else node.removeAttribute(name);
- } else if ("function" != typeof value) {
- if (ns) node.setAttributeNS('http://www.w3.org/1999/xlink', name.toLowerCase(), value);
- else node.setAttribute(name, value);
- }
- }
- }
- function setProperty(node, name, value) {
- try {
- node[name] = value;
- } catch (e) {}
- }
- function eventProxy(e) {
- return this.__l[e.type](options.event && options.event(e) || e);
- }
- function flushMounts() {
- var c;
- while (c = mounts.pop()) {
- if (options.afterMount) {
- options.afterMount(c);
- }
- if (c.componentDidMount) {
- c.componentDidMount();
- }
- }
- }
- function diff(dom, vnode, context, mountAll, parent, componentRoot) {
- if (!diffLevel++) {
- isSvgMode = null != parent && void 0 !== parent.ownerSVGElement;
- hydrating = null != dom && !("__preactattr_" in dom);
- }
- var ret = idiff(dom, vnode, context, mountAll, componentRoot);
- if (parent && ret.parentNode !== parent) {
- parent.appendChild(ret);
- }
- if (!--diffLevel) {
- hydrating = !1;
- if (!componentRoot) {
- flushMounts();
- }
- }
- return ret;
- }
- function idiff(dom, vnode, context, mountAll, componentRoot) {
- var out = dom,
- prevSvgMode = isSvgMode;
- if (null == vnode || "boolean" == typeof vnode) {
- vnode = '';
- }
- if ("string" == typeof vnode || "number" == typeof vnode) {
- if (dom && void 0 !== dom.splitText && dom.parentNode && (!dom._component || componentRoot)) {
- if (dom.nodeValue != vnode) {
- dom.nodeValue = vnode;
- }
- } else {
- out = document.createTextNode(vnode);
- if (dom) {
- if (dom.parentNode) {
- dom.parentNode.replaceChild(out, dom);
- }
- recollectNodeTree(dom, !0);
- }
- }
- out.__preactattr_ = !0;
- return out;
- }
- var vnodeName = vnode.nodeName;
- if ("function" == typeof vnodeName) {
- return buildComponentFromVNode(dom, vnode, context, mountAll);
- }
- isSvgMode = "svg" === vnodeName ? !0 : "foreignObject" === vnodeName ? !1 : isSvgMode;
- vnodeName = String(vnodeName);
- if (!dom || !isNamedNode(dom, vnodeName)) {
- out = createNode(vnodeName, isSvgMode);
- if (dom) {
- while (dom.firstChild) {
- out.appendChild(dom.firstChild);
- }
- if (dom.parentNode) {
- dom.parentNode.replaceChild(out, dom);
- }
- recollectNodeTree(dom, !0);
- }
- }
- var fc = out.firstChild,
- props = out.__preactattr_,
- vchildren = vnode.children;
- if (null == props) {
- props = out.__preactattr_ = {};
- for (var a = out.attributes, i = a.length; i--;) {
- props[a[i].name] = a[i].value;
- }
- }
- if (!hydrating && vchildren && 1 === vchildren.length && "string" == typeof vchildren[0] && null != fc && void 0 !== fc.splitText && null == fc.nextSibling) {
- if (fc.nodeValue != vchildren[0]) {
- fc.nodeValue = vchildren[0];
- }
- } else if (vchildren && vchildren.length || null != fc) {
- innerDiffNode(out, vchildren, context, mountAll, hydrating || null != props.dangerouslySetInnerHTML);
- }
- diffAttributes(out, vnode.attributes, props);
- isSvgMode = prevSvgMode;
- return out;
- }
- function innerDiffNode(dom, vchildren, context, mountAll, isHydrating) {
- var j, c, f, vchild, child, originalChildren = dom.childNodes,
- children = [],
- keyed = {},
- keyedLen = 0,
- min = 0,
- len = originalChildren.length,
- childrenLen = 0,
- vlen = vchildren ? vchildren.length : 0;
- if (0 !== len) {
- for (var i = 0; i < len; i++) {
- var _child = originalChildren[i],
- props = _child.__preactattr_,
- key = vlen && props ? _child._component ? _child._component.__k : props.key : null;
- if (null != key) {
- keyedLen++;
- keyed[key] = _child;
- } else if (props || (void 0 !== _child.splitText ? isHydrating ? _child.nodeValue.trim() : !0 : isHydrating)) children[childrenLen++] = _child;
- }
- }
- if (0 !== vlen) {
- for (var i = 0; i < vlen; i++) {
- vchild = vchildren[i];
- child = null;
- var key = vchild.key;
- if (null != key) {
- if (keyedLen && void 0 !== keyed[key]) {
- child = keyed[key];
- keyed[key] = void 0;
- keyedLen--;
- }
- } else if (!child && min < childrenLen)
- for (j = min; j < childrenLen; j++)
- if (void 0 !== children[j] && isSameNodeType(c = children[j], vchild, isHydrating)) {
- child = c;
- children[j] = void 0;
- if (j === childrenLen - 1) childrenLen--;
- if (j === min) min++;
- break;
- }
- child = idiff(child, vchild, context, mountAll);
- f = originalChildren[i];
- if (child && child !== dom && child !== f)
- if (null == f) dom.appendChild(child);
- else if (child === f.nextSibling) removeNode(f);
- else dom.insertBefore(child, f);
- }
- }
- if (keyedLen) {
- for (var i in keyed)
- if (void 0 !== keyed[i]) recollectNodeTree(keyed[i], !1);
- }
- while (min <= childrenLen) {
- if (void 0 !== (child = children[childrenLen--])) recollectNodeTree(child, !1);
- }
- }
- function recollectNodeTree(node, unmountOnly) {
- var component = node._component;
- if (component) {
- unmountComponent(component);
- } else {
- if (null != node.__preactattr_ && node.__preactattr_.ref) {
- node.__preactattr_.ref(null);
- }
- if (!1 === unmountOnly || null == node.__preactattr_) {
- removeNode(node);
- }
- removeChildren(node);
- }
- }
- function removeChildren(node) {
- node = node.lastChild;
- while (node) {
- var next = node.previousSibling;
- recollectNodeTree(node, !0);
- node = next;
- }
- }
- function diffAttributes(dom, attrs, old) {
- var name;
- for (name in old) {
- if ((!attrs || null == attrs[name]) && null != old[name]) setAccessor(dom, name, old[name], old[name] = void 0, isSvgMode);
- }
- for (name in attrs) {
- if (!('children' === name || 'innerHTML' === name || name in old && attrs[name] === ('value' === name || 'checked' === name ? dom[name] : old[name]))) setAccessor(dom, name, old[name], old[name] = attrs[name], isSvgMode);
- }
- }
- function collectComponent(component) {
- var name = component.constructor.name;
- (components[name] || (components[name] = [])).push(component);
- }
- function createComponent(Ctor, props, context) {
- var inst, list = components[Ctor.name];
- if (Ctor.prototype && Ctor.prototype.render) {
- inst = new Ctor(props, context);
- Component.call(inst, props, context);
- } else {
- inst = new Component(props, context);
- inst.constructor = Ctor;
- inst.render = doRender;
- }
- if (list) {
- for (var i = list.length; i--;)
- if (list[i].constructor === Ctor) {
- inst.__b = list[i].__b;
- list.splice(i, 1);
- break;
- }
- }
- return inst;
- }
- function doRender(props, state, context) {
- return this.constructor(props, context);
- }
- function setComponentProps(component, props, opts, context, mountAll) {
- if (!component.__x) {
- component.__x = !0;
- if (component.__r = props.ref) {
- delete props.ref;
- }
- if (component.__k = props.key) {
- delete props.key;
- }
- if (!component.base || mountAll) {
- if (component.componentWillMount) {
- component.componentWillMount();
- }
- } else if (component.componentWillReceiveProps) {
- component.componentWillReceiveProps(props, context);
- }
- if (context && context !== component.context) {
- if (!component.__c) {
- component.__c = component.context;
- }
- component.context = context;
- }
- if (!component.__p) {
- component.__p = component.props;
- }
- component.props = props;
- component.__x = !1;
- if (0 !== opts) {
- if (1 === opts || !1 !== options.syncComponentUpdates || !component.base) renderComponent(component, 1, mountAll);
- else enqueueRender(component);
- }
- if (component.__r) {
- component.__r(component);
- }
- }
- }
- function renderComponent(component, opts, mountAll, isChild) {
- if (!component.__x) {
- var rendered, inst, cbase, props = component.props,
- state = component.state,
- context = component.context,
- previousProps = component.__p || props,
- previousState = component.__s || state,
- previousContext = component.__c || context,
- isUpdate = component.base,
- nextBase = component.__b,
- initialBase = isUpdate || nextBase,
- initialChildComponent = component._component,
- skip = !1;
- if (isUpdate) {
- component.props = previousProps;
- component.state = previousState;
- component.context = previousContext;
- if (2 !== opts && component.shouldComponentUpdate && !1 === component.shouldComponentUpdate(props, state, context)) {
- skip = !0;
- } else if (component.componentWillUpdate) {
- component.componentWillUpdate(props, state, context);
- }
- component.props = props;
- component.state = state;
- component.context = context;
- }
- component.__p = component.__s = component.__c = component.__b = null;
- component.__d = !1;
- if (!skip) {
- rendered = component.render(props, state, context);
- if (component.getChildContext) {
- context = extend(extend({}, context), component.getChildContext());
- }
- var toUnmount, base, childComponent = rendered && rendered.nodeName;
- if ("function" == typeof childComponent) {
- var childProps = getNodeProps(rendered);
- inst = initialChildComponent;
- if (inst && inst.constructor === childComponent && childProps.key == inst.__k) {
- setComponentProps(inst, childProps, 1, context, !1);
- } else {
- toUnmount = inst;
- component._component = inst = createComponent(childComponent, childProps, context);
- inst.__b = inst.__b || nextBase;
- inst.__u = component;
- setComponentProps(inst, childProps, 0, context, !1);
- renderComponent(inst, 1, mountAll, !0);
- }
- base = inst.base;
- } else {
- cbase = initialBase;
- toUnmount = initialChildComponent;
- if (toUnmount) {
- cbase = component._component = null;
- }
- if (initialBase || 1 === opts) {
- if (cbase) {
- cbase._component = null;
- }
- base = diff(cbase, rendered, context, mountAll || !isUpdate, initialBase && initialBase.parentNode, !0);
- }
- }
- if (initialBase && base !== initialBase && inst !== initialChildComponent) {
- var baseParent = initialBase.parentNode;
- if (baseParent && base !== baseParent) {
- baseParent.replaceChild(base, initialBase);
- if (!toUnmount) {
- initialBase._component = null;
- recollectNodeTree(initialBase, !1);
- }
- }
- }
- if (toUnmount) {
- unmountComponent(toUnmount);
- }
- component.base = base;
- if (base && !isChild) {
- var componentRef = component,
- t = component;
- while (t = t.__u) {
- (componentRef = t).base = base;
- }
- base._component = componentRef;
- base._componentConstructor = componentRef.constructor;
- }
- }
- if (!isUpdate || mountAll) {
- mounts.unshift(component);
- } else if (!skip) {
- if (component.componentDidUpdate) {
- component.componentDidUpdate(previousProps, previousState, previousContext);
- }
- if (options.afterUpdate) {
- options.afterUpdate(component);
- }
- }
- if (null != component.__h) {
- while (component.__h.length) component.__h.pop().call(component);
- }
- if (!diffLevel && !isChild) {
- flushMounts();
- }
- }
- }
- function buildComponentFromVNode(dom, vnode, context, mountAll) {
- var c = dom && dom._component,
- originalComponent = c,
- oldDom = dom,
- isDirectOwner = c && dom._componentConstructor === vnode.nodeName,
- isOwner = isDirectOwner,
- props = getNodeProps(vnode);
- while (c && !isOwner && (c = c.__u)) {
- isOwner = c.constructor === vnode.nodeName;
- }
- if (c && isOwner && (!mountAll || c._component)) {
- setComponentProps(c, props, 3, context, mountAll);
- dom = c.base;
- } else {
- if (originalComponent && !isDirectOwner) {
- unmountComponent(originalComponent);
- dom = oldDom = null;
- }
- c = createComponent(vnode.nodeName, props, context);
- if (dom && !c.__b) {
- c.__b = dom;
- oldDom = null;
- }
- setComponentProps(c, props, 1, context, mountAll);
- dom = c.base;
- if (oldDom && dom !== oldDom) {
- oldDom._component = null;
- recollectNodeTree(oldDom, !1);
- }
- }
- return dom;
- }
- function unmountComponent(component) {
- if (options.beforeUnmount) {
- options.beforeUnmount(component);
- }
- var base = component.base;
- component.__x = !0;
- if (component.componentWillUnmount) {
- component.componentWillUnmount();
- }
- component.base = null;
- var inner = component._component;
- if (inner) {
- unmountComponent(inner);
- } else if (base) {
- if (base.__preactattr_ && base.__preactattr_.ref) {
- base.__preactattr_.ref(null);
- }
- component.__b = base;
- removeNode(base);
- collectComponent(component);
- removeChildren(base);
- }
- if (component.__r) {
- component.__r(null);
- }
- }
- function Component(props, context) {
- this.__d = !0;
- this.context = context;
- this.props = props;
- this.state = this.state || {};
- }
- function render(vnode, parent, merge) {
- return diff(merge, vnode, {}, !1, parent, !1);
- }
- var options = {};
- var stack = [];
- var EMPTY_CHILDREN = [];
- var defer = "function" == typeof Promise ? Promise.resolve().then.bind(Promise.resolve()) : setTimeout;
- var IS_NON_DIMENSIONAL = /acit|ex(?:s|g|n|p|$)|rph|ows|mnc|ntw|ine[ch]|zoo|^ord/i;
- var items = [];
- var mounts = [];
- var diffLevel = 0;
- var isSvgMode = !1;
- var hydrating = !1;
- var components = {};
- extend(Component.prototype, {
- setState: function (state, callback) {
- var s = this.state;
- if (!this.__s) {
- this.__s = extend({}, s);
- }
- extend(s, "function" == typeof state ? state(s, this.props) : state);
- if (callback) {
- (this.__h = this.__h || []).push(callback);
- }
- enqueueRender(this);
- },
- forceUpdate: function (callback) {
- if (callback) {
- (this.__h = this.__h || []).push(callback);
- }
- renderComponent(this, 2);
- },
- render: function () {}
- });
- var preact = {
- h: h,
- createElement: h,
- cloneElement: cloneElement,
- Component: Component,
- render: render,
- rerender: rerender,
- options: options
- };
- if ("undefined" != typeof module) {
- module.exports = preact;
- } else {
- self.preact = preact;
- }
- }();
|