@endorphinjs/template-runtime
Advanced tools
Comparing version 0.5.4 to 0.5.7
@@ -65,4 +65,4 @@ import { Injector } from './injector'; | ||
queued: boolean; | ||
/** Indicates that component is currently rendering */ | ||
rendering: boolean; | ||
/** Indicates that component is preparing to rendering */ | ||
preparing: boolean; | ||
/** Default props values */ | ||
@@ -151,2 +151,6 @@ defaultProps: object; | ||
/** | ||
* Convert HTMLElement into Endorphin DOM component with given definition | ||
*/ | ||
export declare function createComponentFromElement(el: HTMLElement | Component, definition: ComponentDefinition, root?: Component): Component; | ||
/** | ||
* Mounts given component | ||
@@ -153,0 +157,0 @@ */ |
@@ -18,3 +18,2 @@ import { LinkedList, LinkedListItem } from './linked-list'; | ||
export interface Block { | ||
$$block: true; | ||
parentNode?: void; | ||
@@ -42,3 +41,3 @@ host: Component; | ||
*/ | ||
export declare function injectBlock<T extends Block>(injector: Injector, block: BlockInput<T, 'start' | 'end' | '$$block'>): T; | ||
export declare function injectBlock<T extends Block>(injector: Injector, block: BlockInput<T, 'start' | 'end'>): T; | ||
/** | ||
@@ -45,0 +44,0 @@ * Returns named slot context from given component input’s injector. If slot context |
@@ -160,24 +160,2 @@ 'use strict'; | ||
}; | ||
/** | ||
* Represents given attribute value in element | ||
* @param {Element} elem | ||
* @param {string} name | ||
* @param {*} value | ||
*/ | ||
function representAttributeValue(elem, name, value) { | ||
const type = typeof (value); | ||
if (type === 'boolean') { | ||
value = value ? '' : null; | ||
} | ||
else if (type === 'function') { | ||
value = '𝑓'; | ||
} | ||
else if (Array.isArray(value)) { | ||
value = '[]'; | ||
} | ||
else if (isDefined(value) && type === 'object') { | ||
value = '{}'; | ||
} | ||
isDefined(value) ? elem.setAttribute(name, value) : elem.removeAttribute(name); | ||
} | ||
function safeCall(fn, arg1, arg2) { | ||
@@ -622,3 +600,2 @@ try { | ||
} | ||
block.$$block = true; | ||
injector.ptr = block.end; | ||
@@ -647,3 +624,3 @@ return block; | ||
let { value, next, prev } = item; | ||
if (isBlock(value)) { | ||
if (!isElement(value)) { | ||
next = value.end.next; | ||
@@ -681,3 +658,3 @@ disposeBlock(value); | ||
while (item && item !== end) { | ||
if (!isBlock(item.value)) { | ||
if (isElement(item.value)) { | ||
node = item.value; | ||
@@ -700,7 +677,4 @@ // NB it’s possible that a single block contains nodes from different | ||
} | ||
/** | ||
* Check if given value is a block | ||
*/ | ||
function isBlock(obj) { | ||
return '$$block' in obj; | ||
function isElement(obj) { | ||
return 'nodeType' in obj; | ||
} | ||
@@ -945,2 +919,9 @@ /** | ||
const element = elem(name, cssScope); | ||
return createComponentFromElement(element, definition, root); | ||
} | ||
/** | ||
* Convert HTMLElement into Endorphin DOM component with given definition | ||
*/ | ||
function createComponentFromElement(el, definition, root) { | ||
const element = el; | ||
// Add host scope marker: we can’t rely on tag name since component | ||
@@ -975,3 +956,3 @@ // definition is bound to element in runtime, not compile time | ||
mounted: false, | ||
rendering: false, | ||
preparing: false, | ||
update: void 0, | ||
@@ -993,3 +974,3 @@ queued: false, | ||
const arg = changes || {}; | ||
componentModel.rendering = true; | ||
componentModel.preparing = true; | ||
// Notify slot status | ||
@@ -1004,5 +985,5 @@ for (const p in input.slots) { | ||
runHook(component, 'willRender', arg); | ||
componentModel.preparing = false; | ||
componentModel.update = captureError(component, definition.default, component, getScope(component)); | ||
componentModel.mounted = true; | ||
componentModel.rendering = false; | ||
runHook(component, 'didRender', arg); | ||
@@ -1056,3 +1037,3 @@ runHook(component, 'didMount', arg); | ||
function renderNext(component, changes) { | ||
if (!component.componentModel.rendering) { | ||
if (!component.componentModel.preparing) { | ||
renderComponent(component, changes); | ||
@@ -1086,3 +1067,3 @@ } | ||
componentModel.queued = false; | ||
componentModel.rendering = true; | ||
componentModel.preparing = true; | ||
if (changes) { | ||
@@ -1093,4 +1074,4 @@ runHook(component, 'didChange', arg); | ||
runHook(component, 'willRender', arg); | ||
componentModel.preparing = false; | ||
captureError(component, componentModel.update, component, getScope(component)); | ||
componentModel.rendering = false; | ||
runHook(component, 'didRender', arg); | ||
@@ -1131,3 +1112,3 @@ runHook(component, 'didUpdate', arg); | ||
if (!/^partial:/.test(p)) { | ||
representAttributeValue(component, p.replace(/[A-Z]/g, kebabCase), current); | ||
setAttributeExpression(component, p.replace(/[A-Z]/g, kebabCase), current); | ||
} | ||
@@ -1232,3 +1213,3 @@ } | ||
// on next tick | ||
if (componentModel.mounted && !componentModel.rendering) { | ||
if (componentModel.mounted && !componentModel.preparing) { | ||
scheduleRender(element); | ||
@@ -1502,3 +1483,3 @@ } | ||
actualNext = getItem(item.end.next, end); | ||
if (expectedPrev !== actualPrev && expectedNext !== actualNext) { | ||
if (expectedPrev !== actualPrev || expectedNext !== actualNext) { | ||
// Blocks must be reordered | ||
@@ -2102,2 +2083,3 @@ move(injector, item, expectedPrev ? expectedPrev.end : block.start); | ||
exports.createComponent = createComponent; | ||
exports.createComponentFromElement = createComponentFromElement; | ||
exports.createInjector = createInjector; | ||
@@ -2104,0 +2086,0 @@ exports.createScope = createScope; |
@@ -156,24 +156,2 @@ /** | ||
}; | ||
/** | ||
* Represents given attribute value in element | ||
* @param {Element} elem | ||
* @param {string} name | ||
* @param {*} value | ||
*/ | ||
function representAttributeValue(elem, name, value) { | ||
const type = typeof (value); | ||
if (type === 'boolean') { | ||
value = value ? '' : null; | ||
} | ||
else if (type === 'function') { | ||
value = '𝑓'; | ||
} | ||
else if (Array.isArray(value)) { | ||
value = '[]'; | ||
} | ||
else if (isDefined(value) && type === 'object') { | ||
value = '{}'; | ||
} | ||
isDefined(value) ? elem.setAttribute(name, value) : elem.removeAttribute(name); | ||
} | ||
function safeCall(fn, arg1, arg2) { | ||
@@ -618,3 +596,2 @@ try { | ||
} | ||
block.$$block = true; | ||
injector.ptr = block.end; | ||
@@ -643,3 +620,3 @@ return block; | ||
let { value, next, prev } = item; | ||
if (isBlock(value)) { | ||
if (!isElement(value)) { | ||
next = value.end.next; | ||
@@ -677,3 +654,3 @@ disposeBlock(value); | ||
while (item && item !== end) { | ||
if (!isBlock(item.value)) { | ||
if (isElement(item.value)) { | ||
node = item.value; | ||
@@ -696,7 +673,4 @@ // NB it’s possible that a single block contains nodes from different | ||
} | ||
/** | ||
* Check if given value is a block | ||
*/ | ||
function isBlock(obj) { | ||
return '$$block' in obj; | ||
function isElement(obj) { | ||
return 'nodeType' in obj; | ||
} | ||
@@ -941,2 +915,9 @@ /** | ||
const element = elem(name, cssScope); | ||
return createComponentFromElement(element, definition, root); | ||
} | ||
/** | ||
* Convert HTMLElement into Endorphin DOM component with given definition | ||
*/ | ||
function createComponentFromElement(el, definition, root) { | ||
const element = el; | ||
// Add host scope marker: we can’t rely on tag name since component | ||
@@ -971,3 +952,3 @@ // definition is bound to element in runtime, not compile time | ||
mounted: false, | ||
rendering: false, | ||
preparing: false, | ||
update: void 0, | ||
@@ -989,3 +970,3 @@ queued: false, | ||
const arg = changes || {}; | ||
componentModel.rendering = true; | ||
componentModel.preparing = true; | ||
// Notify slot status | ||
@@ -1000,5 +981,5 @@ for (const p in input.slots) { | ||
runHook(component, 'willRender', arg); | ||
componentModel.preparing = false; | ||
componentModel.update = captureError(component, definition.default, component, getScope(component)); | ||
componentModel.mounted = true; | ||
componentModel.rendering = false; | ||
runHook(component, 'didRender', arg); | ||
@@ -1052,3 +1033,3 @@ runHook(component, 'didMount', arg); | ||
function renderNext(component, changes) { | ||
if (!component.componentModel.rendering) { | ||
if (!component.componentModel.preparing) { | ||
renderComponent(component, changes); | ||
@@ -1082,3 +1063,3 @@ } | ||
componentModel.queued = false; | ||
componentModel.rendering = true; | ||
componentModel.preparing = true; | ||
if (changes) { | ||
@@ -1089,4 +1070,4 @@ runHook(component, 'didChange', arg); | ||
runHook(component, 'willRender', arg); | ||
componentModel.preparing = false; | ||
captureError(component, componentModel.update, component, getScope(component)); | ||
componentModel.rendering = false; | ||
runHook(component, 'didRender', arg); | ||
@@ -1127,3 +1108,3 @@ runHook(component, 'didUpdate', arg); | ||
if (!/^partial:/.test(p)) { | ||
representAttributeValue(component, p.replace(/[A-Z]/g, kebabCase), current); | ||
setAttributeExpression(component, p.replace(/[A-Z]/g, kebabCase), current); | ||
} | ||
@@ -1228,3 +1209,3 @@ } | ||
// on next tick | ||
if (componentModel.mounted && !componentModel.rendering) { | ||
if (componentModel.mounted && !componentModel.preparing) { | ||
scheduleRender(element); | ||
@@ -1498,3 +1479,3 @@ } | ||
actualNext = getItem(item.end.next, end); | ||
if (expectedPrev !== actualPrev && expectedNext !== actualNext) { | ||
if (expectedPrev !== actualPrev || expectedNext !== actualNext) { | ||
// Blocks must be reordered | ||
@@ -2084,3 +2065,3 @@ move(injector, item, expectedPrev ? expectedPrev.end : block.start); | ||
export default endorphin; | ||
export { Store, addClass, addClassIf, addEvent, addPendingClass, addPendingClassIf, animate, appendChild, assign, attributeSet, call, classNames, composeTween, createAnimation, createComponent, createInjector, createScope, createSlot, cssAnimate, detachPendingEvents, disposeBlock, domInsert, domRemove, elem, elemNS, elemNSWithText, elemWithText, emptyBlockContent, enterScope, exitScope, filter, finalizeAttributes, finalizeAttributesNS, finalizePendingEvents, finalizePendingRefs, find, get, getPartial, getProp, getScope, getSlotContext, getState, getVar, injectBlock, insert, isolateElement, mountBlock, mountComponent, mountInnerHTML, mountIterator, mountKeyIterator, mountPartial, mountSlot, move, notifySlotUpdate, obj, pendingEvents, prepareScope, propsSet, removeEvent, removeRef, renderComponent, safeEventListener, scheduleRender, setAttribute, setAttributeExpression, setAttributeExpressionNS, setAttributeNS, setClass, setPendingAttribute, setPendingAttributeNS, setPendingEvent, setPendingRef, setRef, setScope, setVar, stopAnimation, subscribeStore, text, toggleClassIf, tweenAnimate, unmountBlock, unmountComponent, unmountInnerHTML, unmountIterator, unmountKeyIterator, unmountPartial, unmountSlot, updateAttributeExpression, updateAttributeExpressionNS, updateBlock, updateComponent, updateDefaultSlot, updateIncomingSlot, updateInnerHTML, updateIterator, updateKeyIterator, updatePartial, updateText }; | ||
export { Store, addClass, addClassIf, addEvent, addPendingClass, addPendingClassIf, animate, appendChild, assign, attributeSet, call, classNames, composeTween, createAnimation, createComponent, createComponentFromElement, createInjector, createScope, createSlot, cssAnimate, detachPendingEvents, disposeBlock, domInsert, domRemove, elem, elemNS, elemNSWithText, elemWithText, emptyBlockContent, enterScope, exitScope, filter, finalizeAttributes, finalizeAttributesNS, finalizePendingEvents, finalizePendingRefs, find, get, getPartial, getProp, getScope, getSlotContext, getState, getVar, injectBlock, insert, isolateElement, mountBlock, mountComponent, mountInnerHTML, mountIterator, mountKeyIterator, mountPartial, mountSlot, move, notifySlotUpdate, obj, pendingEvents, prepareScope, propsSet, removeEvent, removeRef, renderComponent, safeEventListener, scheduleRender, setAttribute, setAttributeExpression, setAttributeExpressionNS, setAttributeNS, setClass, setPendingAttribute, setPendingAttributeNS, setPendingEvent, setPendingRef, setRef, setScope, setVar, stopAnimation, subscribeStore, text, toggleClassIf, tweenAnimate, unmountBlock, unmountComponent, unmountInnerHTML, unmountIterator, unmountKeyIterator, unmountPartial, unmountSlot, updateAttributeExpression, updateAttributeExpressionNS, updateBlock, updateComponent, updateDefaultSlot, updateIncomingSlot, updateInnerHTML, updateIterator, updateKeyIterator, updatePartial, updateText }; | ||
//# sourceMappingURL=runtime.es.js.map |
@@ -41,11 +41,4 @@ import { Changes, ChangeSet } from './types'; | ||
export declare function assignIfNeeded(prev: any, next: any): boolean; | ||
/** | ||
* Represents given attribute value in element | ||
* @param {Element} elem | ||
* @param {string} name | ||
* @param {*} value | ||
*/ | ||
export declare function representAttributeValue(elem: Element, name: string, value: any): void; | ||
export declare function safeCall<T, U, Y>(fn?: (p1?: T, p2?: U) => Y, arg1?: T, arg2?: U): Y | undefined; | ||
export declare function captureError<T, U, Y>(host: Component, fn?: (p1?: T, p2?: U) => Y, arg1?: T, arg2?: U): Y | undefined; | ||
export declare function runtimeError(host: Component, error: Error): void; |
{ | ||
"name": "@endorphinjs/template-runtime", | ||
"version": "0.5.4", | ||
"version": "0.5.7", | ||
"description": "EndorphinJS template runtime, embedded with template bundles", | ||
@@ -26,3 +26,3 @@ "main": "./dist/runtime.cjs.js", | ||
"devDependencies": { | ||
"@endorphinjs/template-compiler": "^0.5.4", | ||
"@endorphinjs/template-compiler": "^0.5.7", | ||
"@types/mocha": "^5.2.6", | ||
@@ -53,3 +53,3 @@ "@types/node": "^11.13.10", | ||
}, | ||
"gitHead": "70a4c43ceb23b91360801e8b6452d45a89b07220" | ||
"gitHead": "3ae6c86ba95ad44b2f7b71bd751db48ad2b0aae6" | ||
} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
426451
5058