treeloom 0.0.0-stage → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +373 -0
- package/README.md +72 -2
- package/browser/treeloom.js +11006 -0
- package/browser/treeloom.min.js +1 -0
- package/browser/treeloomRenderOnly.js +10530 -0
- package/browser/treeloomRenderOnly.min.js +1 -0
- package/dist/deflate/domItemToJson.d.ts +14 -0
- package/dist/deflate/domItemToJson.js +43 -0
- package/dist/deflate/domItemToJson.min.js +1 -0
- package/dist/deflate/index.d.ts +7 -0
- package/dist/deflate/index.js +19 -0
- package/dist/deflate/index.min.js +1 -0
- package/dist/deflate/removeEmptyProperties.d.ts +8 -0
- package/dist/deflate/removeEmptyProperties.js +43 -0
- package/dist/deflate/removeEmptyProperties.min.js +1 -0
- package/dist/diff/createChangeList.d.ts +9 -0
- package/dist/diff/createChangeList.js +44 -0
- package/dist/diff/createChangeList.min.js +1 -0
- package/dist/diff/domItemChanges.d.ts +9 -0
- package/dist/diff/domItemChanges.js +154 -0
- package/dist/diff/domItemChanges.min.js +1 -0
- package/dist/diff/domItemHasAttribute.d.ts +11 -0
- package/dist/diff/domItemHasAttribute.js +63 -0
- package/dist/diff/domItemHasAttribute.min.js +1 -0
- package/dist/diff/elementChanges.d.ts +10 -0
- package/dist/diff/elementChanges.js +151 -0
- package/dist/diff/elementChanges.min.js +1 -0
- package/dist/diff/elementHasAttribute.d.ts +10 -0
- package/dist/diff/elementHasAttribute.js +70 -0
- package/dist/diff/elementHasAttribute.min.js +1 -0
- package/dist/diff/getAssignedStyles.d.ts +9 -0
- package/dist/diff/getAssignedStyles.js +22 -0
- package/dist/diff/getAssignedStyles.min.js +1 -0
- package/dist/diff/index.d.ts +9 -0
- package/dist/diff/index.js +27 -0
- package/dist/diff/index.min.js +1 -0
- package/dist/diff/types.d.ts +17 -0
- package/dist/diff/types.js +8 -0
- package/dist/diff/types.min.js +1 -0
- package/dist/domItem/index.d.ts +34 -0
- package/dist/domItem/index.js +81 -0
- package/dist/domItem/index.min.js +1 -0
- package/dist/domItem/objects/addDomItemProperties.d.ts +7 -0
- package/dist/domItem/objects/addDomItemProperties.js +27 -0
- package/dist/domItem/objects/addDomItemProperties.min.js +1 -0
- package/dist/domItem/objects/createCoreItem.d.ts +9 -0
- package/dist/domItem/objects/createCoreItem.js +53 -0
- package/dist/domItem/objects/createCoreItem.min.js +1 -0
- package/dist/domItem/objects/createDomItem.d.ts +10 -0
- package/dist/domItem/objects/createDomItem.js +40 -0
- package/dist/domItem/objects/createDomItem.min.js +1 -0
- package/dist/domItem/objects/documentDomItem.d.ts +12 -0
- package/dist/domItem/objects/documentDomItem.js +36 -0
- package/dist/domItem/objects/documentDomItem.min.js +1 -0
- package/dist/domItem/objects/documentItem.d.ts +18 -0
- package/dist/domItem/objects/documentItem.js +40 -0
- package/dist/domItem/objects/documentItem.min.js +1 -0
- package/dist/domItem/objects/initChildren.d.ts +6 -0
- package/dist/domItem/objects/initChildren.js +44 -0
- package/dist/domItem/objects/initChildren.min.js +1 -0
- package/dist/domItem/objects/initRoot.d.ts +9 -0
- package/dist/domItem/objects/initRoot.js +32 -0
- package/dist/domItem/objects/initRoot.min.js +1 -0
- package/dist/domItem/query/gatherChildItems.d.ts +12 -0
- package/dist/domItem/query/gatherChildItems.js +19 -0
- package/dist/domItem/query/gatherChildItems.min.js +1 -0
- package/dist/domItem/query/getChildTest.d.ts +8 -0
- package/dist/domItem/query/getChildTest.js +15 -0
- package/dist/domItem/query/getChildTest.min.js +1 -0
- package/dist/domItem/query/getChildrenByClass.d.ts +11 -0
- package/dist/domItem/query/getChildrenByClass.js +26 -0
- package/dist/domItem/query/getChildrenByClass.min.js +1 -0
- package/dist/domItem/query/getChildrenByName.d.ts +9 -0
- package/dist/domItem/query/getChildrenByName.js +23 -0
- package/dist/domItem/query/getChildrenByName.min.js +1 -0
- package/dist/domItem/query/getChildrenFromAttribute.d.ts +13 -0
- package/dist/domItem/query/getChildrenFromAttribute.js +28 -0
- package/dist/domItem/query/getChildrenFromAttribute.min.js +1 -0
- package/dist/domItem/query/getItemByElement.d.ts +11 -0
- package/dist/domItem/query/getItemByElement.js +29 -0
- package/dist/domItem/query/getItemByElement.min.js +1 -0
- package/dist/domItem/query/getParentsByClass.d.ts +12 -0
- package/dist/domItem/query/getParentsByClass.js +40 -0
- package/dist/domItem/query/getParentsByClass.min.js +1 -0
- package/dist/domItem/query/getParentsByName.d.ts +9 -0
- package/dist/domItem/query/getParentsByName.js +23 -0
- package/dist/domItem/query/getParentsByName.min.js +1 -0
- package/dist/domItem/query/getParentsByTagName.d.ts +9 -0
- package/dist/domItem/query/getParentsByTagName.js +23 -0
- package/dist/domItem/query/getParentsByTagName.min.js +1 -0
- package/dist/domItem/query/getParentsFromAttribute.d.ts +13 -0
- package/dist/domItem/query/getParentsFromAttribute.js +39 -0
- package/dist/domItem/query/getParentsFromAttribute.min.js +1 -0
- package/dist/domItem/traits/defineTrait.d.ts +10 -0
- package/dist/domItem/traits/defineTrait.js +26 -0
- package/dist/domItem/traits/defineTrait.min.js +1 -0
- package/dist/domItem/traits/definitions.d.ts +7 -0
- package/dist/domItem/traits/definitions.js +20 -0
- package/dist/domItem/traits/definitions.min.js +1 -0
- package/dist/domItem/traits/getNonSerializableKeys.d.ts +9 -0
- package/dist/domItem/traits/getNonSerializableKeys.js +25 -0
- package/dist/domItem/traits/getNonSerializableKeys.min.js +1 -0
- package/dist/domItem/traits/getTraitDefinition.d.ts +7 -0
- package/dist/domItem/traits/getTraitDefinition.js +20 -0
- package/dist/domItem/traits/getTraitDefinition.min.js +1 -0
- package/dist/domItem/traits/hasTrait.d.ts +8 -0
- package/dist/domItem/traits/hasTrait.js +15 -0
- package/dist/domItem/traits/hasTrait.min.js +1 -0
- package/dist/domItem/traits/hasTraits.d.ts +9 -0
- package/dist/domItem/traits/hasTraits.js +16 -0
- package/dist/domItem/traits/hasTraits.min.js +1 -0
- package/dist/domItem/traits/isDomItem.d.ts +8 -0
- package/dist/domItem/traits/isDomItem.js +21 -0
- package/dist/domItem/traits/isDomItem.min.js +1 -0
- package/dist/domItem/traits/withTrait.d.ts +11 -0
- package/dist/domItem/traits/withTrait.js +30 -0
- package/dist/domItem/traits/withTrait.min.js +1 -0
- package/dist/domItem/tree/appendChild.d.ts +8 -0
- package/dist/domItem/tree/appendChild.js +19 -0
- package/dist/domItem/tree/appendChild.min.js +1 -0
- package/dist/domItem/tree/getItemByPath.d.ts +10 -0
- package/dist/domItem/tree/getItemByPath.js +23 -0
- package/dist/domItem/tree/getItemByPath.min.js +1 -0
- package/dist/domItem/tree/getItemPath.d.ts +9 -0
- package/dist/domItem/tree/getItemPath.js +31 -0
- package/dist/domItem/tree/getItemPath.min.js +1 -0
- package/dist/domItem/tree/getTopParentItem.d.ts +8 -0
- package/dist/domItem/tree/getTopParentItem.js +29 -0
- package/dist/domItem/tree/getTopParentItem.min.js +1 -0
- package/dist/domItem/tree/insertChild.d.ts +11 -0
- package/dist/domItem/tree/insertChild.js +22 -0
- package/dist/domItem/tree/insertChild.min.js +1 -0
- package/dist/domItem/tree/itemIdIndex.d.ts +43 -0
- package/dist/domItem/tree/itemIdIndex.js +118 -0
- package/dist/domItem/tree/itemIdIndex.min.js +1 -0
- package/dist/domItem/tree/removeChild.d.ts +8 -0
- package/dist/domItem/tree/removeChild.js +21 -0
- package/dist/domItem/tree/removeChild.min.js +1 -0
- package/dist/domItem/tree/setParentItemReferences.d.ts +7 -0
- package/dist/domItem/tree/setParentItemReferences.js +24 -0
- package/dist/domItem/tree/setParentItemReferences.min.js +1 -0
- package/dist/domItem/types.d.ts +131 -0
- package/dist/domItem/types.js +8 -0
- package/dist/domItem/types.min.js +1 -0
- package/dist/events/functions/activateListener.d.ts +10 -0
- package/dist/events/functions/activateListener.js +45 -0
- package/dist/events/functions/activateListener.min.js +1 -0
- package/dist/events/functions/addEventListener.d.ts +23 -0
- package/dist/events/functions/addEventListener.js +54 -0
- package/dist/events/functions/addEventListener.min.js +1 -0
- package/dist/events/functions/applyActiveListeners.d.ts +9 -0
- package/dist/events/functions/applyActiveListeners.js +52 -0
- package/dist/events/functions/applyActiveListeners.min.js +1 -0
- package/dist/events/functions/assignListener.d.ts +12 -0
- package/dist/events/functions/assignListener.js +39 -0
- package/dist/events/functions/assignListener.min.js +1 -0
- package/dist/events/functions/bindAllListeners.d.ts +10 -0
- package/dist/events/functions/bindAllListeners.js +28 -0
- package/dist/events/functions/bindAllListeners.min.js +1 -0
- package/dist/events/functions/bindElementListeners.d.ts +7 -0
- package/dist/events/functions/bindElementListeners.js +34 -0
- package/dist/events/functions/bindElementListeners.min.js +1 -0
- package/dist/events/functions/bindListeners.d.ts +9 -0
- package/dist/events/functions/bindListeners.js +23 -0
- package/dist/events/functions/bindListeners.min.js +1 -0
- package/dist/events/functions/deactivateListener.d.ts +13 -0
- package/dist/events/functions/deactivateListener.js +58 -0
- package/dist/events/functions/deactivateListener.min.js +1 -0
- package/dist/events/functions/deactivateListeners.d.ts +7 -0
- package/dist/events/functions/deactivateListeners.js +22 -0
- package/dist/events/functions/deactivateListeners.min.js +1 -0
- package/dist/events/functions/findEventListener.d.ts +22 -0
- package/dist/events/functions/findEventListener.js +61 -0
- package/dist/events/functions/findEventListener.min.js +1 -0
- package/dist/events/functions/fullAddEventListener.d.ts +20 -0
- package/dist/events/functions/fullAddEventListener.js +45 -0
- package/dist/events/functions/fullAddEventListener.min.js +1 -0
- package/dist/events/functions/fullRemoveEventListener.d.ts +22 -0
- package/dist/events/functions/fullRemoveEventListener.js +37 -0
- package/dist/events/functions/fullRemoveEventListener.min.js +1 -0
- package/dist/events/functions/listenerOptions.d.ts +12 -0
- package/dist/events/functions/listenerOptions.js +31 -0
- package/dist/events/functions/listenerOptions.min.js +1 -0
- package/dist/events/functions/makeEventHandler.d.ts +10 -0
- package/dist/events/functions/makeEventHandler.js +23 -0
- package/dist/events/functions/makeEventHandler.min.js +1 -0
- package/dist/events/functions/makeForwardingListener.d.ts +11 -0
- package/dist/events/functions/makeForwardingListener.js +46 -0
- package/dist/events/functions/makeForwardingListener.min.js +1 -0
- package/dist/events/functions/receiveForwardedEvent.d.ts +23 -0
- package/dist/events/functions/receiveForwardedEvent.js +40 -0
- package/dist/events/functions/receiveForwardedEvent.min.js +1 -0
- package/dist/events/functions/registerListener.d.ts +11 -0
- package/dist/events/functions/registerListener.js +25 -0
- package/dist/events/functions/registerListener.min.js +1 -0
- package/dist/events/functions/registerListeners.d.ts +10 -0
- package/dist/events/functions/registerListeners.js +26 -0
- package/dist/events/functions/registerListeners.min.js +1 -0
- package/dist/events/functions/removeEventListener.d.ts +18 -0
- package/dist/events/functions/removeEventListener.js +42 -0
- package/dist/events/functions/removeEventListener.min.js +1 -0
- package/dist/events/functions/retrieveListener.d.ts +14 -0
- package/dist/events/functions/retrieveListener.js +39 -0
- package/dist/events/functions/retrieveListener.min.js +1 -0
- package/dist/events/functions/revokeActiveListeners.d.ts +12 -0
- package/dist/events/functions/revokeActiveListeners.js +54 -0
- package/dist/events/functions/revokeActiveListeners.min.js +1 -0
- package/dist/events/functions/setForwardEvents.d.ts +11 -0
- package/dist/events/functions/setForwardEvents.js +26 -0
- package/dist/events/functions/setForwardEvents.min.js +1 -0
- package/dist/events/functions/unassignListener.d.ts +12 -0
- package/dist/events/functions/unassignListener.js +32 -0
- package/dist/events/functions/unassignListener.min.js +1 -0
- package/dist/events/index.d.ts +37 -0
- package/dist/events/index.js +72 -0
- package/dist/events/index.min.js +1 -0
- package/dist/events/objects/createEventListener.d.ts +13 -0
- package/dist/events/objects/createEventListener.js +30 -0
- package/dist/events/objects/createEventListener.min.js +1 -0
- package/dist/events/objects/createEventProxy.d.ts +10 -0
- package/dist/events/objects/createEventProxy.js +48 -0
- package/dist/events/objects/createEventProxy.min.js +1 -0
- package/dist/events/objects/createEventResponder.d.ts +8 -0
- package/dist/events/objects/createEventResponder.js +27 -0
- package/dist/events/objects/createEventResponder.min.js +1 -0
- package/dist/events/objects/options/getListenerOptions.d.ts +6 -0
- package/dist/events/objects/options/getListenerOptions.js +22 -0
- package/dist/events/objects/options/getListenerOptions.min.js +1 -0
- package/dist/events/objects/options/numberToOptions.d.ts +8 -0
- package/dist/events/objects/options/numberToOptions.js +21 -0
- package/dist/events/objects/options/numberToOptions.min.js +1 -0
- package/dist/events/objects/options/optionsToNumber.d.ts +9 -0
- package/dist/events/objects/options/optionsToNumber.js +27 -0
- package/dist/events/objects/options/optionsToNumber.min.js +1 -0
- package/dist/events/objects/options.d.ts +6 -0
- package/dist/events/objects/options.js +24 -0
- package/dist/events/objects/options.min.js +1 -0
- package/dist/events/types.d.ts +87 -0
- package/dist/events/types.js +8 -0
- package/dist/events/types.min.js +1 -0
- package/dist/inflate/index.d.ts +4 -0
- package/dist/inflate/index.js +17 -0
- package/dist/inflate/index.min.js +1 -0
- package/dist/inflate/jsonToDomItem.d.ts +7 -0
- package/dist/inflate/jsonToDomItem.js +30 -0
- package/dist/inflate/jsonToDomItem.min.js +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/main.js +24 -0
- package/dist/main.min.js +1 -0
- package/dist/render/generateElement.d.ts +7 -0
- package/dist/render/generateElement.js +41 -0
- package/dist/render/generateElement.min.js +1 -0
- package/dist/render/index.d.ts +8 -0
- package/dist/render/index.js +25 -0
- package/dist/render/index.min.js +1 -0
- package/dist/render/renderHtml.d.ts +16 -0
- package/dist/render/renderHtml.js +57 -0
- package/dist/render/renderHtml.min.js +1 -0
- package/dist/render/updateChildNodes.d.ts +7 -0
- package/dist/render/updateChildNodes.js +56 -0
- package/dist/render/updateChildNodes.min.js +1 -0
- package/dist/render/updateElement.d.ts +14 -0
- package/dist/render/updateElement.js +110 -0
- package/dist/render/updateElement.min.js +1 -0
- package/dist/render/updateElements.d.ts +9 -0
- package/dist/render/updateElements.js +33 -0
- package/dist/render/updateElements.min.js +1 -0
- package/dist/renderOnly.d.ts +2 -0
- package/dist/renderOnly.js +27 -0
- package/dist/renderOnly.min.js +1 -0
- package/dist/sync/index.d.ts +6 -0
- package/dist/sync/index.js +21 -0
- package/dist/sync/index.min.js +1 -0
- package/dist/sync/updateChildren.d.ts +7 -0
- package/dist/sync/updateChildren.js +38 -0
- package/dist/sync/updateChildren.min.js +1 -0
- package/dist/sync/updateDomItem.d.ts +8 -0
- package/dist/sync/updateDomItem.js +49 -0
- package/dist/sync/updateDomItem.min.js +1 -0
- package/dist/sync/updateDomItems.d.ts +9 -0
- package/dist/sync/updateDomItems.js +33 -0
- package/dist/sync/updateDomItems.min.js +1 -0
- package/package.json +74 -4
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const setParentItemReferences_1 = __importDefault(require("../domItem/tree/setParentItemReferences"));
|
|
15
|
+
const addDomItemProperties_1 = __importDefault(require("../domItem/objects/addDomItemProperties"));
|
|
16
|
+
/**
|
|
17
|
+
* Convert DOM Item to JSON string.
|
|
18
|
+
* @param jsonString
|
|
19
|
+
*/
|
|
20
|
+
const jsonToDomItem = jsonString => {
|
|
21
|
+
const parsedJson = (0, setParentItemReferences_1.default)((0, addDomItemProperties_1.default)(JSON.parse(jsonString)));
|
|
22
|
+
if (parsedJson.nodeName === '#document') {
|
|
23
|
+
const root = parsedJson;
|
|
24
|
+
root.element = document;
|
|
25
|
+
root.head = root.children[0];
|
|
26
|
+
root.body = root.children[1];
|
|
27
|
+
}
|
|
28
|
+
return parsedJson;
|
|
29
|
+
};
|
|
30
|
+
exports.default = jsonToDomItem;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const setParentItemReferences_1=__importDefault(require("../domItem/tree/setParentItemReferences")),addDomItemProperties_1=__importDefault(require("../domItem/objects/addDomItemProperties")),jsonToDomItem=e=>{const t=(0,setParentItemReferences_1.default)((0,addDomItemProperties_1.default)(JSON.parse(e)));if("#document"===t.nodeName){const e=t;e.element=document,e.head=e.children[0],e.body=e.children[1]}return t};exports.default=jsonToDomItem;
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* All of the JSON DOM system functions for building and syncing a Virtual DOM (DomItem tree) to the real HTML DOM.
|
|
13
|
+
*/
|
|
14
|
+
const index_1 = __importDefault(require("./events/index"));
|
|
15
|
+
const index_2 = __importDefault(require("./domItem/index"));
|
|
16
|
+
const documentItem_1 = require("./domItem/objects/documentItem");
|
|
17
|
+
const index_3 = __importDefault(require("./inflate/index"));
|
|
18
|
+
const index_4 = __importDefault(require("./deflate/index"));
|
|
19
|
+
const index_5 = __importDefault(require("./render/index"));
|
|
20
|
+
const index_6 = __importDefault(require("./sync/index"));
|
|
21
|
+
const index_7 = __importDefault(require("./diff/index"));
|
|
22
|
+
// documentItem is a getter (see withDocumentItem), so loading treeloom never touches a real document
|
|
23
|
+
const treeloom = (0, documentItem_1.withDocumentItem)(Object.assign({}, index_1.default, index_2.default, index_3.default, index_4.default, index_5.default, index_6.default, index_7.default));
|
|
24
|
+
module.exports = treeloom;
|
package/dist/main.min.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};const index_1=__importDefault(require("./events/index")),index_2=__importDefault(require("./domItem/index")),documentItem_1=require("./domItem/objects/documentItem"),index_3=__importDefault(require("./inflate/index")),index_4=__importDefault(require("./deflate/index")),index_5=__importDefault(require("./render/index")),index_6=__importDefault(require("./sync/index")),index_7=__importDefault(require("./diff/index")),treeloom=(0,documentItem_1.withDocumentItem)(Object.assign({},index_1.default,index_2.default,index_3.default,index_4.default,index_5.default,index_6.default,index_7.default));module.exports=treeloom;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { DomItem } from '../domItem/types';
|
|
2
|
+
/**
|
|
3
|
+
* Create an HTML element based on the provided attributes and return the element as an Object.
|
|
4
|
+
* @param domItem - The DomItem requiring matching HTML element property
|
|
5
|
+
*/
|
|
6
|
+
declare const generateElement: (domItem: DomItem) => DomItem;
|
|
7
|
+
export default generateElement;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const updateElement_1 = __importDefault(require("./updateElement"));
|
|
15
|
+
/**
|
|
16
|
+
* Create a new DOM Node based on name and data.
|
|
17
|
+
* @param nodeName
|
|
18
|
+
* @param data
|
|
19
|
+
*/
|
|
20
|
+
const makeElementType = (nodeName, data = null, is) => {
|
|
21
|
+
switch (nodeName) {
|
|
22
|
+
case '#text':
|
|
23
|
+
return document.createTextNode(data);
|
|
24
|
+
case '#comment':
|
|
25
|
+
return document.createComment(data);
|
|
26
|
+
default:
|
|
27
|
+
// A customized built-in element (<button is="fancy-button">) has to be given its name when it is created
|
|
28
|
+
return is ? document.createElement(nodeName, {
|
|
29
|
+
is
|
|
30
|
+
}) : document.createElement(nodeName);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Create an HTML element based on the provided attributes and return the element as an Object.
|
|
35
|
+
* @param domItem - The DomItem requiring matching HTML element property
|
|
36
|
+
*/
|
|
37
|
+
const generateElement = domItem => {
|
|
38
|
+
domItem.element = makeElementType(domItem.nodeName, domItem.nodeValue, typeof domItem.attributes.is === 'string' ? domItem.attributes.is : undefined);
|
|
39
|
+
return (0, updateElement_1.default)(domItem);
|
|
40
|
+
};
|
|
41
|
+
exports.default = generateElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const updateElement_1=__importDefault(require("./updateElement")),makeElementType=(e,t=null,n)=>{switch(e){case"#text":return document.createTextNode(t);case"#comment":return document.createComment(t);default:return n?document.createElement(e,{is:n}):document.createElement(e)}},generateElement=e=>(e.element=makeElementType(e.nodeName,e.nodeValue,"string"==typeof e.attributes.is?e.attributes.is:void 0),(0,updateElement_1.default)(e));exports.default=generateElement;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
generateElement: (domItem: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
3
|
+
renderHtml: (item?: import("../domItem/types").DomItem | null, parent?: import("../domItem/types").DomItem, index?: number) => import("../domItem/types").DomItem;
|
|
4
|
+
updateChildNodes: (domItem: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
5
|
+
updateElement: (domItem: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
6
|
+
updateElements: (config: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const generateElement_1 = __importDefault(require("./generateElement"));
|
|
15
|
+
const renderHtml_1 = __importDefault(require("./renderHtml"));
|
|
16
|
+
const updateChildNodes_1 = __importDefault(require("./updateChildNodes"));
|
|
17
|
+
const updateElement_1 = __importDefault(require("./updateElement"));
|
|
18
|
+
const updateElements_1 = __importDefault(require("./updateElements"));
|
|
19
|
+
exports.default = {
|
|
20
|
+
generateElement: generateElement_1.default,
|
|
21
|
+
renderHtml: renderHtml_1.default,
|
|
22
|
+
updateChildNodes: updateChildNodes_1.default,
|
|
23
|
+
updateElement: updateElement_1.default,
|
|
24
|
+
updateElements: updateElements_1.default
|
|
25
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const generateElement_1=__importDefault(require("./generateElement")),renderHtml_1=__importDefault(require("./renderHtml")),updateChildNodes_1=__importDefault(require("./updateChildNodes")),updateElement_1=__importDefault(require("./updateElement")),updateElements_1=__importDefault(require("./updateElements"));exports.default={generateElement:generateElement_1.default,renderHtml:renderHtml_1.default,updateChildNodes:updateChildNodes_1.default,updateElement:updateElement_1.default,updateElements:updateElements_1.default};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DomItem } from '../domItem/types';
|
|
2
|
+
/**
|
|
3
|
+
* This is a shortcut for syncing a Virtual DOM (DomItem tree) item onto the real HTML DOM: builds the real elements
|
|
4
|
+
* for it and its descendants, inserts them into parent's children (the document body by default), and binds their
|
|
5
|
+
* associated listeners.
|
|
6
|
+
* @param item - The DomItem that we want to render the element for
|
|
7
|
+
* @param parent - Where to insert item, when it does not already have a parent - defaults to the
|
|
8
|
+
* document body, so passing nothing keeps working exactly as before
|
|
9
|
+
* @param index - Where in parent's children to put item - defaults to the end (a plain append), so passing nothing
|
|
10
|
+
* keeps working exactly as before. To insert item among parent's already-rendered content (existing real HTML),
|
|
11
|
+
* parent's children must already reflect that content first - see {@link updateDomItems}, which captures the real
|
|
12
|
+
* DOM into items. Skipping that step and inserting anyway will make the next render remove the untracked content,
|
|
13
|
+
* since it is invisible to parent.children.
|
|
14
|
+
*/
|
|
15
|
+
declare const renderHtml: (item?: DomItem | null, parent?: DomItem, index?: number) => DomItem;
|
|
16
|
+
export default renderHtml;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const documentItem_1 = __importDefault(require("../domItem/objects/documentItem"));
|
|
15
|
+
const insertChild_1 = __importDefault(require("../domItem/tree/insertChild"));
|
|
16
|
+
const itemIdIndex_1 = require("../domItem/tree/itemIdIndex");
|
|
17
|
+
const setParentItemReferences_1 = __importDefault(require("../domItem/tree/setParentItemReferences"));
|
|
18
|
+
const updateChildNodes_1 = __importDefault(require("./updateChildNodes"));
|
|
19
|
+
const updateElements_1 = __importDefault(require("./updateElements"));
|
|
20
|
+
/**
|
|
21
|
+
* This is a shortcut for syncing a Virtual DOM (DomItem tree) item onto the real HTML DOM: builds the real elements
|
|
22
|
+
* for it and its descendants, inserts them into parent's children (the document body by default), and binds their
|
|
23
|
+
* associated listeners.
|
|
24
|
+
* @param item - The DomItem that we want to render the element for
|
|
25
|
+
* @param parent - Where to insert item, when it does not already have a parent - defaults to the
|
|
26
|
+
* document body, so passing nothing keeps working exactly as before
|
|
27
|
+
* @param index - Where in parent's children to put item - defaults to the end (a plain append), so passing nothing
|
|
28
|
+
* keeps working exactly as before. To insert item among parent's already-rendered content (existing real HTML),
|
|
29
|
+
* parent's children must already reflect that content first - see {@link updateDomItems}, which captures the real
|
|
30
|
+
* DOM into items. Skipping that step and inserting anyway will make the next render remove the untracked content,
|
|
31
|
+
* since it is invisible to parent.children.
|
|
32
|
+
*/
|
|
33
|
+
const renderHtml = (item = null, parent = (0, documentItem_1.default)().body, index = parent.children.length) => {
|
|
34
|
+
const itemToRender = item === null ? (0, documentItem_1.default)() : item;
|
|
35
|
+
// Every descendant needs its parentItem chain in place before anything below tries to walk up it (a listener
|
|
36
|
+
// being bound looks up its root via getTopParentItem) - set it first, rather than after rendering the subtree.
|
|
37
|
+
(0, setParentItemReferences_1.default)(itemToRender);
|
|
38
|
+
if (itemToRender.parentItem === null) {
|
|
39
|
+
// excluding when documentItem was passed in, insert the item into parent, and place its real element among
|
|
40
|
+
// parent's real children - scoped to just this positioning, not a resync of parent's whole existing subtree
|
|
41
|
+
// (updateElements(parent) would walk every sibling's attributes too, reverting anything about them - like a
|
|
42
|
+
// style change some other, unrelated script made directly on the real DOM - that parent's items don't track)
|
|
43
|
+
(0, insertChild_1.default)(parent, item, index);
|
|
44
|
+
(0, updateChildNodes_1.default)(parent);
|
|
45
|
+
}
|
|
46
|
+
// Register this subtree (root item included) in its own root's id index - unconditionally, since this is
|
|
47
|
+
// correct and idempotent whichever branch above ran: a freshly-attached subtree needs it for the first time,
|
|
48
|
+
// an already-attached one being re-rendered just gets its own (unchanged) entries re-set, and the document
|
|
49
|
+
// root's own very first render (parentItem is {}, not null, so the branch above never runs for it) registers
|
|
50
|
+
// the root's own already-built initial content. Does nothing at all when itemToRender is rendered into some
|
|
51
|
+
// arbitrary, never-rooted container rather than a real DomItemRoot - see registerItemIds.
|
|
52
|
+
(0, itemIdIndex_1.registerItemIds)(itemToRender);
|
|
53
|
+
// Render the elements and return either to original reference, or updated documentItem (whichever is available)
|
|
54
|
+
const updatedItem = (0, updateElements_1.default)(itemToRender);
|
|
55
|
+
return item ?? updatedItem;
|
|
56
|
+
};
|
|
57
|
+
exports.default = renderHtml;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const documentItem_1=__importDefault(require("../domItem/objects/documentItem")),insertChild_1=__importDefault(require("../domItem/tree/insertChild")),itemIdIndex_1=require("../domItem/tree/itemIdIndex"),setParentItemReferences_1=__importDefault(require("../domItem/tree/setParentItemReferences")),updateChildNodes_1=__importDefault(require("./updateChildNodes")),updateElements_1=__importDefault(require("./updateElements")),renderHtml=(e=null,t=(0,documentItem_1.default)().body,r=t.children.length)=>{const d=null===e?(0,documentItem_1.default)():e;(0,setParentItemReferences_1.default)(d),null===d.parentItem&&((0,insertChild_1.default)(t,e,r),(0,updateChildNodes_1.default)(t)),(0,itemIdIndex_1.registerItemIds)(d);const u=(0,updateElements_1.default)(d);return e??u};exports.default=renderHtml;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const updateElement_1 = __importDefault(require("./updateElement"));
|
|
15
|
+
/**
|
|
16
|
+
* Update all the childNodes for this domItem element to mach domItem children.
|
|
17
|
+
* @param domItem
|
|
18
|
+
*/
|
|
19
|
+
const updateChildNodes = domItem => {
|
|
20
|
+
if (!domItem.element) {
|
|
21
|
+
domItem = (0, updateElement_1.default)(domItem);
|
|
22
|
+
}
|
|
23
|
+
if (!domItem.children || !domItem.children.length) {
|
|
24
|
+
domItem.children = [];
|
|
25
|
+
return domItem;
|
|
26
|
+
}
|
|
27
|
+
const element = domItem.element;
|
|
28
|
+
const previousChildNodes = Array.from(element.childNodes);
|
|
29
|
+
domItem.children.map((child, index) => {
|
|
30
|
+
const existing = previousChildNodes.find(childNode => childNode === child.element);
|
|
31
|
+
let childNode = existing ?? child.element;
|
|
32
|
+
if (!childNode) {
|
|
33
|
+
childNode = (0, updateElement_1.default)(child).element;
|
|
34
|
+
}
|
|
35
|
+
if (!previousChildNodes[index]) {
|
|
36
|
+
element.appendChild(childNode);
|
|
37
|
+
return childNode;
|
|
38
|
+
}
|
|
39
|
+
if (childNode !== previousChildNodes[index]) {
|
|
40
|
+
element.replaceChild(childNode, previousChildNodes[index]);
|
|
41
|
+
}
|
|
42
|
+
return childNode;
|
|
43
|
+
}).forEach((childNode, index) => {
|
|
44
|
+
domItem.children[index].element = childNode;
|
|
45
|
+
});
|
|
46
|
+
if (element.childNodes.length > domItem.children.length) {
|
|
47
|
+
const maxLength = domItem.children.length;
|
|
48
|
+
let nodeToRemove = element.childNodes[maxLength];
|
|
49
|
+
while (nodeToRemove) {
|
|
50
|
+
element.removeChild(nodeToRemove);
|
|
51
|
+
nodeToRemove = element.childNodes[maxLength];
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return domItem;
|
|
55
|
+
};
|
|
56
|
+
exports.default = updateChildNodes;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const updateElement_1=__importDefault(require("./updateElement")),updateChildNodes=e=>{if(e.element||(e=(0,updateElement_1.default)(e)),!e.children||!e.children.length)return e.children=[],e;const t=e.element,l=Array.from(t.childNodes);if(e.children.map((e,d)=>{const n=l.find(t=>t===e.element);let r=n??e.element;return r||(r=(0,updateElement_1.default)(e).element),l[d]?(r!==l[d]&&t.replaceChild(r,l[d]),r):(t.appendChild(r),r)}).forEach((t,l)=>{e.children[l].element=t}),t.childNodes.length>e.children.length){const l=e.children.length;let d=t.childNodes[l];for(;d;)t.removeChild(d),d=t.childNodes[l]}return e};exports.default=updateChildNodes;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DomItem } from '../domItem/types';
|
|
2
|
+
/**
|
|
3
|
+
* Update a single objects.DomItem element with the provided attributes / style / elementProperties.
|
|
4
|
+
*
|
|
5
|
+
* Safe to call standalone (not just through {@link updateElements}/{@link renderHtml}): whenever this ends up
|
|
6
|
+
* (re)generating domItem.element - because it had none yet, or because nodeName changed - it also re-attaches
|
|
7
|
+
* domItem's direct children onto that element via {@link updateChildNodes}, so a bare call never orphans an
|
|
8
|
+
* existing child subtree. The plain attribute/style patch path below doesn't touch domItem.element itself, so it
|
|
9
|
+
* doesn't need to.
|
|
10
|
+
* @param domItem - The DomItem having domItem changes to be applied to its
|
|
11
|
+
* element
|
|
12
|
+
*/
|
|
13
|
+
declare const updateElement: (domItem: DomItem) => DomItem;
|
|
14
|
+
export default updateElement;
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
require("core-js/modules/es.array.includes.js");
|
|
7
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
8
|
+
return mod && mod.__esModule ? mod : {
|
|
9
|
+
"default": mod
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
Object.defineProperty(exports, "__esModule", {
|
|
13
|
+
value: true
|
|
14
|
+
});
|
|
15
|
+
const bindListeners_1 = __importDefault(require("../events/functions/bindListeners"));
|
|
16
|
+
const deactivateListeners_1 = __importDefault(require("../events/functions/deactivateListeners"));
|
|
17
|
+
const domItemChanges_1 = __importDefault(require("../diff/domItemChanges"));
|
|
18
|
+
const si_funciona_1 = __importDefault(require("si-funciona"));
|
|
19
|
+
const generateElement_1 = __importDefault(require("./generateElement"));
|
|
20
|
+
const updateChildNodes_1 = __importDefault(require("./updateChildNodes"));
|
|
21
|
+
/**
|
|
22
|
+
* Update a single objects.DomItem element with the provided attributes / style / elementProperties.
|
|
23
|
+
*
|
|
24
|
+
* Safe to call standalone (not just through {@link updateElements}/{@link renderHtml}): whenever this ends up
|
|
25
|
+
* (re)generating domItem.element - because it had none yet, or because nodeName changed - it also re-attaches
|
|
26
|
+
* domItem's direct children onto that element via {@link updateChildNodes}, so a bare call never orphans an
|
|
27
|
+
* existing child subtree. The plain attribute/style patch path below doesn't touch domItem.element itself, so it
|
|
28
|
+
* doesn't need to.
|
|
29
|
+
* @param domItem - The DomItem having domItem changes to be applied to its
|
|
30
|
+
* element
|
|
31
|
+
*/
|
|
32
|
+
const updateElement = domItem => {
|
|
33
|
+
if (!domItem.element) {
|
|
34
|
+
return (0, updateChildNodes_1.default)((0, generateElement_1.default)((0, deactivateListeners_1.default)(domItem)));
|
|
35
|
+
}
|
|
36
|
+
const changes = (0, domItemChanges_1.default)(domItem);
|
|
37
|
+
// From here on the item has an element (an element which is missing was generated above)
|
|
38
|
+
const element = domItem.element;
|
|
39
|
+
const properties = element;
|
|
40
|
+
if (changes.removed.nodeName || changes.added.nodeName) {
|
|
41
|
+
// if the nodeName has changed then remove the element and create a new one
|
|
42
|
+
element.remove();
|
|
43
|
+
return (0, updateChildNodes_1.default)((0, generateElement_1.default)((0, deactivateListeners_1.default)(domItem)));
|
|
44
|
+
}
|
|
45
|
+
for (const dotKey in changes.removed) {
|
|
46
|
+
const value = changes.removed[dotKey];
|
|
47
|
+
if (!dotKey.includes('.')) {
|
|
48
|
+
if (dotKey in element) {
|
|
49
|
+
delete properties[dotKey];
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
element.removeAttribute(dotKey);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const baseKey = si_funciona_1.default.strBefore(dotKey, '.');
|
|
56
|
+
if (baseKey !== 'class' && baseKey !== 'style') {
|
|
57
|
+
throw new Error('Unhandled dotKey: ' + dotKey);
|
|
58
|
+
}
|
|
59
|
+
if (baseKey === 'class') {
|
|
60
|
+
element.classList.remove(value);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
// The key is usually already kebab-case here (domItemChanges normalizes it), but not always - see the fix
|
|
64
|
+
// notes on the matching line below. kabobCase on an already-kebab string is a harmless no-op.
|
|
65
|
+
element.style.removeProperty(si_funciona_1.default.kabobCase(si_funciona_1.default.strAfter(dotKey, '.')));
|
|
66
|
+
}
|
|
67
|
+
for (const dotKey in changes.added) {
|
|
68
|
+
const value = changes.added[dotKey];
|
|
69
|
+
if (dotKey === 'className') {
|
|
70
|
+
element.className = value;
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
if (dotKey === 'style') {
|
|
74
|
+
// Update all styles based on incoming style object
|
|
75
|
+
// setProperty wants CSS names (background-color), but the style object is written in camelCase (backgroundColor)
|
|
76
|
+
for (const style in value) {
|
|
77
|
+
element.style.setProperty(si_funciona_1.default.kabobCase(style), value[style]);
|
|
78
|
+
}
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (!dotKey.includes('.')) {
|
|
82
|
+
if (dotKey in element && dotKey !== 'form') {
|
|
83
|
+
// Some things can be assigned directly, but 'form' attribute cannot
|
|
84
|
+
properties[dotKey] = value;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
element.setAttribute(dotKey, value);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
const baseKey = si_funciona_1.default.strBefore(dotKey, '.');
|
|
91
|
+
if (baseKey !== 'class' && baseKey !== 'style') {
|
|
92
|
+
throw new Error('Unhandled dotKey: ' + dotKey);
|
|
93
|
+
}
|
|
94
|
+
if (baseKey === 'class' && (/\s/.test(value) || !value)) {
|
|
95
|
+
// Skip this empty class name
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (baseKey === 'class') {
|
|
99
|
+
element.classList.add(value);
|
|
100
|
+
continue;
|
|
101
|
+
}
|
|
102
|
+
// domItemChanges is expected to hand this key through already kebab-cased, but a style property which was
|
|
103
|
+
// already assigned on the element (changed, not newly added) can come back through as its original camelCase
|
|
104
|
+
// form; CSSOM silently ignores setProperty with an invalid (camelCase) name, so the style is dropped with no
|
|
105
|
+
// error. kabobCase here is a harmless no-op when the key is already kebab, and a real fix when it is not.
|
|
106
|
+
element.style.setProperty(si_funciona_1.default.kabobCase(si_funciona_1.default.strAfter(dotKey, '.')), value);
|
|
107
|
+
}
|
|
108
|
+
return (0, bindListeners_1.default)(domItem);
|
|
109
|
+
};
|
|
110
|
+
exports.default = updateElement;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";require("core-js/modules/es.array.includes.js");var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const bindListeners_1=__importDefault(require("../events/functions/bindListeners")),deactivateListeners_1=__importDefault(require("../events/functions/deactivateListeners")),domItemChanges_1=__importDefault(require("../diff/domItemChanges")),si_funciona_1=__importDefault(require("si-funciona")),generateElement_1=__importDefault(require("./generateElement")),updateChildNodes_1=__importDefault(require("./updateChildNodes")),updateElement=e=>{if(!e.element)return(0,updateChildNodes_1.default)((0,generateElement_1.default)((0,deactivateListeners_1.default)(e)));const t=(0,domItemChanges_1.default)(e),s=e.element,n=s;if(t.removed.nodeName||t.added.nodeName)return s.remove(),(0,updateChildNodes_1.default)((0,generateElement_1.default)((0,deactivateListeners_1.default)(e)));for(const e in t.removed){const i=t.removed[e];if(!e.includes(".")){if(e in s){delete n[e];continue}s.removeAttribute(e);continue}const r=si_funciona_1.default.strBefore(e,".");if("class"!==r&&"style"!==r)throw new Error("Unhandled dotKey: "+e);"class"!==r?s.style.removeProperty(si_funciona_1.default.kabobCase(si_funciona_1.default.strAfter(e,"."))):s.classList.remove(i)}for(const e in t.added){const i=t.added[e];if("className"===e){s.className=i;continue}if("style"===e){for(const e in i)s.style.setProperty(si_funciona_1.default.kabobCase(e),i[e]);continue}if(!e.includes(".")){if(e in s&&"form"!==e){n[e]=i;continue}s.setAttribute(e,i);continue}const r=si_funciona_1.default.strBefore(e,".");if("class"!==r&&"style"!==r)throw new Error("Unhandled dotKey: "+e);("class"!==r||!/\s/.test(i)&&i)&&("class"!==r?s.style.setProperty(si_funciona_1.default.kabobCase(si_funciona_1.default.strAfter(e,".")),i):s.classList.add(i))}return(0,bindListeners_1.default)(e)};exports.default=updateElement;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DomItem } from '../domItem/types';
|
|
2
|
+
/**
|
|
3
|
+
* Generate HTML element data for each object in the matrix
|
|
4
|
+
* WARNING: This is a recursive function.
|
|
5
|
+
* @param config - The DomItem having child DomItems with config changes to be
|
|
6
|
+
* applied
|
|
7
|
+
*/
|
|
8
|
+
declare const updateElements: (config: DomItem) => DomItem;
|
|
9
|
+
export default updateElements;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const updateChildNodes_1 = __importDefault(require("./updateChildNodes"));
|
|
15
|
+
const updateElement_1 = __importDefault(require("./updateElement"));
|
|
16
|
+
/**
|
|
17
|
+
* Generate HTML element data for each object in the matrix
|
|
18
|
+
* WARNING: This is a recursive function.
|
|
19
|
+
* @param config - The DomItem having child DomItems with config changes to be
|
|
20
|
+
* applied
|
|
21
|
+
*/
|
|
22
|
+
const updateElements = config => {
|
|
23
|
+
if (config.nodeName === '#document') {
|
|
24
|
+
for (const child of config.children) {
|
|
25
|
+
updateElements(child);
|
|
26
|
+
}
|
|
27
|
+
return config;
|
|
28
|
+
}
|
|
29
|
+
const domItem = (0, updateChildNodes_1.default)((0, updateElement_1.default)(config));
|
|
30
|
+
domItem.children.forEach(updateElements);
|
|
31
|
+
return domItem;
|
|
32
|
+
};
|
|
33
|
+
exports.default = updateElements;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const updateChildNodes_1=__importDefault(require("./updateChildNodes")),updateElement_1=__importDefault(require("./updateElement")),updateElements=e=>{if("#document"===e.nodeName){for(const t of e.children)updateElements(t);return e}const t=(0,updateChildNodes_1.default)((0,updateElement_1.default)(e));return t.children.forEach(updateElements),t};exports.default=updateElements;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* The render-only subset of treeloom: build and sync a Virtual DOM (DomItem tree) to the real
|
|
13
|
+
* HTML DOM, and forward fired events elsewhere (see events/objects/setForwardEvents) instead of
|
|
14
|
+
* running local business logic - a consumer that never needs to run that logic locally never
|
|
15
|
+
* needs to go the other way (DOM back to JSON) either, so this excludes deflate, the one part of
|
|
16
|
+
* the full build with no other internal code path depending on it.
|
|
17
|
+
*/
|
|
18
|
+
const index_1 = __importDefault(require("./events/index"));
|
|
19
|
+
const index_2 = __importDefault(require("./domItem/index"));
|
|
20
|
+
const documentItem_1 = require("./domItem/objects/documentItem");
|
|
21
|
+
const index_3 = __importDefault(require("./inflate/index"));
|
|
22
|
+
const index_4 = __importDefault(require("./render/index"));
|
|
23
|
+
const index_5 = __importDefault(require("./sync/index"));
|
|
24
|
+
const index_6 = __importDefault(require("./diff/index"));
|
|
25
|
+
// documentItem is a getter (see withDocumentItem), so loading treeloom never touches a real document
|
|
26
|
+
const treeloomRenderOnly = (0, documentItem_1.withDocumentItem)(Object.assign({}, index_1.default, index_2.default, index_3.default, index_4.default, index_5.default, index_6.default));
|
|
27
|
+
module.exports = treeloomRenderOnly;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};const index_1=__importDefault(require("./events/index")),index_2=__importDefault(require("./domItem/index")),documentItem_1=require("./domItem/objects/documentItem"),index_3=__importDefault(require("./inflate/index")),index_4=__importDefault(require("./render/index")),index_5=__importDefault(require("./sync/index")),index_6=__importDefault(require("./diff/index")),treeloomRenderOnly=(0,documentItem_1.withDocumentItem)(Object.assign({},index_1.default,index_2.default,index_3.default,index_4.default,index_5.default,index_6.default));module.exports=treeloomRenderOnly;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
declare const _default: {
|
|
2
|
+
updateChildren: (domItem: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
3
|
+
updateDomItem: (config: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
4
|
+
updateDomItems: (config: import("../domItem/types").DomItem) => import("../domItem/types").DomItem;
|
|
5
|
+
};
|
|
6
|
+
export default _default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const updateChildren_1 = __importDefault(require("./updateChildren"));
|
|
15
|
+
const updateDomItem_1 = __importDefault(require("./updateDomItem"));
|
|
16
|
+
const updateDomItems_1 = __importDefault(require("./updateDomItems"));
|
|
17
|
+
exports.default = {
|
|
18
|
+
updateChildren: updateChildren_1.default,
|
|
19
|
+
updateDomItem: updateDomItem_1.default,
|
|
20
|
+
updateDomItems: updateDomItems_1.default
|
|
21
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const updateChildren_1=__importDefault(require("./updateChildren")),updateDomItem_1=__importDefault(require("./updateDomItem")),updateDomItems_1=__importDefault(require("./updateDomItems"));exports.default={updateChildren:updateChildren_1.default,updateDomItem:updateDomItem_1.default,updateDomItems:updateDomItems_1.default};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
4
|
+
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
5
|
+
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
6
|
+
var __importDefault = void 0 && (void 0).__importDefault || function (mod) {
|
|
7
|
+
return mod && mod.__esModule ? mod : {
|
|
8
|
+
"default": mod
|
|
9
|
+
};
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", {
|
|
12
|
+
value: true
|
|
13
|
+
});
|
|
14
|
+
const createDomItem_1 = __importDefault(require("../domItem/objects/createDomItem"));
|
|
15
|
+
/**
|
|
16
|
+
* Update all the children for this domItem to match the domItem element childNodes.
|
|
17
|
+
* @param domItem
|
|
18
|
+
*/
|
|
19
|
+
const updateChildren = domItem => {
|
|
20
|
+
if (!domItem.element) {
|
|
21
|
+
domItem.children = [];
|
|
22
|
+
return domItem;
|
|
23
|
+
}
|
|
24
|
+
const previousChildren = domItem.children;
|
|
25
|
+
domItem.children = [];
|
|
26
|
+
domItem.element.childNodes.forEach((childNode, index) => {
|
|
27
|
+
const existing = previousChildren.find(child => child.element === childNode);
|
|
28
|
+
const child = existing ?? (0, createDomItem_1.default)({
|
|
29
|
+
nodeName: childNode.nodeName.toLowerCase(),
|
|
30
|
+
nodeValue: childNode.nodeValue,
|
|
31
|
+
element: childNode
|
|
32
|
+
});
|
|
33
|
+
domItem.children[index] = child;
|
|
34
|
+
child.parentItem = domItem;
|
|
35
|
+
});
|
|
36
|
+
return domItem;
|
|
37
|
+
};
|
|
38
|
+
exports.default = updateChildren;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var __importDefault=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0});const createDomItem_1=__importDefault(require("../domItem/objects/createDomItem")),updateChildren=e=>{if(!e.element)return e.children=[],e;const t=e.children;return e.children=[],e.element.childNodes.forEach((r,n)=>{const o=t.find(e=>e.element===r),d=o??(0,createDomItem_1.default)({nodeName:r.nodeName.toLowerCase(),nodeValue:r.nodeValue,element:r});e.children[n]=d,d.parentItem=e}),e};exports.default=updateChildren;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { DomItem } from '../domItem/types';
|
|
2
|
+
/**
|
|
3
|
+
* Update a single objects.DomItem element with the provided attributes / style / elementProperties
|
|
4
|
+
* @param config - The DomItem having config changes to be applied to its
|
|
5
|
+
* element
|
|
6
|
+
*/
|
|
7
|
+
declare const updateDomItem: (config: DomItem) => DomItem;
|
|
8
|
+
export default updateDomItem;
|