@domql/element 2.4.1 → 2.4.2

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.
@@ -17,6 +17,7 @@ var __copyProps = (to, from, except, desc) => {
17
17
  }
18
18
  return to;
19
19
  };
20
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
20
21
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
22
  // If the importer is in node compatibility mode or this is not an ESM
22
23
  // file that has been converted to a CommonJS file using a Babel-
@@ -26,19 +27,26 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
27
  mod
27
28
  ));
28
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var element_exports = {};
30
- __export(element_exports, {
31
- TREE: () => import_tree.TREE,
32
- create: () => import_create.default,
33
- createNode: () => import_node.default,
34
- define: () => import_define.default,
35
- set: () => import_set.default,
36
- update: () => import_update.default
30
+ var mixins_exports = {};
31
+ __export(mixins_exports, {
32
+ attr: () => import_attr.default,
33
+ classList: () => import_classList.default,
34
+ content: () => import_content.default,
35
+ data: () => import_data.default,
36
+ html: () => import_html.default,
37
+ registry: () => import_registry.default,
38
+ state: () => import_state.default,
39
+ style: () => import_style.default,
40
+ text: () => import_text.default
37
41
  });
38
- module.exports = __toCommonJS(element_exports);
39
- var import_tree = require("./tree");
40
- var import_create = __toESM(require("./create"), 1);
41
- var import_node = __toESM(require("./node"), 1);
42
- var import_define = __toESM(require("./define"), 1);
43
- var import_update = __toESM(require("./update"), 1);
44
- var import_set = __toESM(require("./set"), 1);
42
+ module.exports = __toCommonJS(mixins_exports);
43
+ var import_attr = __toESM(require("./attr"), 1);
44
+ var import_classList = __toESM(require("./classList"), 1);
45
+ var import_content = __toESM(require("./content"), 1);
46
+ var import_data = __toESM(require("./data"), 1);
47
+ var import_html = __toESM(require("./html"), 1);
48
+ var import_style = __toESM(require("./style"), 1);
49
+ var import_text = __toESM(require("./text"), 1);
50
+ var import_state = __toESM(require("./state"), 1);
51
+ var import_registry = __toESM(require("./registry"), 1);
52
+ __reExport(mixins_exports, require("./registry"), module.exports);
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var registry_exports = {};
20
+ __export(registry_exports, {
21
+ default: () => registry_default,
22
+ parseFilters: () => parseFilters
23
+ });
24
+ module.exports = __toCommonJS(registry_exports);
25
+ var import__ = require(".");
26
+ var registry_default = {
27
+ attr: import__.attr,
28
+ style: import__.style,
29
+ text: import__.text,
30
+ html: import__.html,
31
+ content: import__.content,
32
+ data: import__.data,
33
+ class: import__.classList,
34
+ state: import__.state,
35
+ extend: {},
36
+ childExtend: {},
37
+ childExtendRecursive: {},
38
+ props: {},
39
+ path: {},
40
+ if: {},
41
+ define: {},
42
+ transform: {},
43
+ __ref: {},
44
+ __hash: {},
45
+ __text: {},
46
+ nextElement: {},
47
+ previousElement: {},
48
+ key: {},
49
+ tag: {},
50
+ query: {},
51
+ parent: {},
52
+ node: {},
53
+ set: {},
54
+ update: {},
55
+ setProps: {},
56
+ remove: {},
57
+ updateContent: {},
58
+ removeContent: {},
59
+ lookup: {},
60
+ spotByPath: {},
61
+ keys: {},
62
+ log: {},
63
+ parse: {},
64
+ parseDeep: {},
65
+ on: {},
66
+ component: {},
67
+ context: {},
68
+ $setStateCollection: {},
69
+ $setCollection: {},
70
+ $setPropsCollection: {}
71
+ };
72
+ const parseFilters = {
73
+ elementKeys: [
74
+ "tag",
75
+ "text",
76
+ "style",
77
+ "attr",
78
+ "class",
79
+ "state",
80
+ "props",
81
+ "data",
82
+ "content",
83
+ "html",
84
+ "on",
85
+ "key"
86
+ ],
87
+ propsKeys: ["__element", "update"],
88
+ stateKeys: []
89
+ };
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var state_exports = {};
20
+ __export(state_exports, {
21
+ default: () => state_default,
22
+ state: () => state
23
+ });
24
+ module.exports = __toCommonJS(state_exports);
25
+ var import_state = require("@domql/state");
26
+ var import_utils = require("@domql/utils");
27
+ const state = (params, element, node) => {
28
+ const state2 = (0, import_utils.exec)(params, element);
29
+ if ((0, import_utils.isObject)(state2)) {
30
+ for (const param in state2) {
31
+ if (import_state.IGNORE_STATE_PARAMS.includes(param))
32
+ continue;
33
+ if (!state2.hasOwnProperty(param))
34
+ continue;
35
+ element.state[param] = (0, import_utils.exec)(state2[param], element);
36
+ }
37
+ }
38
+ return element;
39
+ };
40
+ var state_default = state;
@@ -16,16 +16,18 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var tree_exports = {};
20
- __export(tree_exports, {
21
- ROOT: () => ROOT,
22
- TREE: () => TREE
19
+ var style_exports = {};
20
+ __export(style_exports, {
21
+ default: () => style_default
23
22
  });
24
- module.exports = __toCommonJS(tree_exports);
23
+ module.exports = __toCommonJS(style_exports);
25
24
  var import_utils = require("@domql/utils");
26
25
  var import_report = require("@domql/report");
27
- const ROOT = {
28
- key: ":root",
29
- node: import_utils.document ? import_utils.document.body : (0, import_report.report)("DocumentNotDefined", import_utils.document)
26
+ var style_default = (params, element, node) => {
27
+ if (params) {
28
+ if ((0, import_utils.isObject)(params))
29
+ (0, import_utils.map)(node.style, params, element);
30
+ else
31
+ (0, import_report.report)("HTMLInvalidStyles", params);
32
+ }
30
33
  };
31
- const TREE = ROOT;
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var text_exports = {};
20
+ __export(text_exports, {
21
+ asd: () => asd,
22
+ default: () => text_default
23
+ });
24
+ module.exports = __toCommonJS(text_exports);
25
+ var import__ = require("..");
26
+ var import_utils = require("@domql/utils");
27
+ const asd = (param, element, node) => {
28
+ const prop = (0, import_utils.exec)(param, element);
29
+ if (element.tag === "string") {
30
+ node.nodeValue = prop;
31
+ } else if (param !== void 0 || param !== null) {
32
+ if (element.__text && element.__text.text !== prop)
33
+ return;
34
+ element.__text.text = prop;
35
+ if (element.__text.node)
36
+ element.__text.node.nodeValue = prop;
37
+ else
38
+ (0, import__.create)({ tag: "string", text: prop }, element, "__text");
39
+ }
40
+ };
41
+ var text_default = (param, element, node) => {
42
+ let prop = (0, import_utils.exec)(param, element);
43
+ if ((0, import_utils.isString)(prop) && prop.includes("{{")) {
44
+ prop = (0, import_utils.replaceLiteralsWithObjectFields)(prop, element.state);
45
+ }
46
+ if (element.tag === "string") {
47
+ if (element.text === prop)
48
+ return;
49
+ node.nodeValue = prop;
50
+ } else if (param !== void 0 || param !== null) {
51
+ if (element.__text) {
52
+ if (element.__text.text === prop)
53
+ return;
54
+ element.__text.text = prop;
55
+ if (element.__text.node)
56
+ element.__text.node.nodeValue = prop;
57
+ } else
58
+ (0, import__.create)({ tag: "string", text: prop }, element, "__text");
59
+ }
60
+ };
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var create_exports = {};
20
+ __export(create_exports, {
21
+ createProps: () => createProps,
22
+ syncProps: () => syncProps
23
+ });
24
+ module.exports = __toCommonJS(create_exports);
25
+ var import_utils = require("@domql/utils");
26
+ var import_ignore = require("./ignore");
27
+ var import_inherit = require("./inherit");
28
+ const createPropsStack = (element, parent) => {
29
+ const { props, __ref } = element;
30
+ const propsStack = __ref.__props = (0, import_inherit.inheritParentProps)(element, parent);
31
+ if ((0, import_utils.isObject)(props))
32
+ propsStack.push(props);
33
+ else if (props === "inherit" && parent.props)
34
+ propsStack.push(parent.props);
35
+ else if (props)
36
+ propsStack.push(props);
37
+ if ((0, import_utils.isArray)(__ref.__extend)) {
38
+ __ref.__extend.forEach((extend) => {
39
+ if (extend.props)
40
+ propsStack.push(extend.props);
41
+ });
42
+ }
43
+ __ref.__props = propsStack;
44
+ return propsStack;
45
+ };
46
+ const syncProps = (props, element) => {
47
+ element.props = {};
48
+ const mergedProps = { update, __element: element };
49
+ props.forEach((v) => {
50
+ if (import_ignore.IGNORE_PROPS_PARAMS.includes(v))
51
+ return;
52
+ const execProps = (0, import_utils.exec)(v, element);
53
+ if ((0, import_utils.isObject)(execProps) && execProps.__element)
54
+ return;
55
+ element.props = (0, import_utils.deepMerge)(
56
+ mergedProps,
57
+ (0, import_utils.deepClone)(execProps, import_ignore.IGNORE_PROPS_PARAMS),
58
+ import_ignore.IGNORE_PROPS_PARAMS
59
+ );
60
+ });
61
+ element.props = mergedProps;
62
+ return element.props;
63
+ };
64
+ const createProps = function(element, parent, cached) {
65
+ const propsStack = cached || createPropsStack(element, parent);
66
+ const { __ref } = element;
67
+ if (propsStack.length) {
68
+ __ref.__props = propsStack;
69
+ syncProps(propsStack, element);
70
+ element.props.update = update;
71
+ }
72
+ return element;
73
+ };
74
+ function update(props, options) {
75
+ const element = this.__element;
76
+ element.update({ props }, options);
77
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var ignore_exports = {};
20
+ __export(ignore_exports, {
21
+ IGNORE_PROPS_PARAMS: () => IGNORE_PROPS_PARAMS
22
+ });
23
+ module.exports = __toCommonJS(ignore_exports);
24
+ const IGNORE_PROPS_PARAMS = ["update", "__element"];
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var props_exports = {};
17
+ module.exports = __toCommonJS(props_exports);
18
+ __reExport(props_exports, require("./ignore"), module.exports);
19
+ __reExport(props_exports, require("./create"), module.exports);
20
+ __reExport(props_exports, require("./inherit"), module.exports);
21
+ __reExport(props_exports, require("./update"), module.exports);
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var inherit_exports = {};
20
+ __export(inherit_exports, {
21
+ inheritParentProps: () => inheritParentProps
22
+ });
23
+ module.exports = __toCommonJS(inherit_exports);
24
+ var import_utils = require("@domql/utils");
25
+ const objectizeStringProperty = (propValue) => {
26
+ if ((0, import_utils.is)(propValue)("string", "number")) {
27
+ return { inheritedString: propValue };
28
+ }
29
+ return propValue;
30
+ };
31
+ const inheritParentProps = (element, parent) => {
32
+ let propsStack = [];
33
+ const parentProps = (0, import_utils.exec)(parent, parent.state).props;
34
+ const matchParent = parent.props && parentProps[element.key];
35
+ const matchParentIsString = (0, import_utils.isString)(matchParent);
36
+ const matchParentChildProps = parentProps && parentProps.childProps;
37
+ if (matchParent) {
38
+ if (matchParentIsString) {
39
+ const inheritedStringExists = propsStack.filter((v) => v.inheritedString)[0];
40
+ if (inheritedStringExists)
41
+ inheritedStringExists.inheritedString = matchParent;
42
+ else {
43
+ propsStack = [].concat(objectizeStringProperty(matchParent), propsStack);
44
+ }
45
+ } else {
46
+ propsStack.push(objectizeStringProperty(matchParent));
47
+ }
48
+ }
49
+ if (matchParentChildProps)
50
+ propsStack.push(matchParentChildProps);
51
+ return propsStack;
52
+ };
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var update_exports = {};
20
+ __export(update_exports, {
21
+ updateProps: () => updateProps
22
+ });
23
+ module.exports = __toCommonJS(update_exports);
24
+ var import_create = require("./create");
25
+ var import_inherit = require("./inherit");
26
+ const updateProps = (newProps, element, parent) => {
27
+ const { __ref } = element;
28
+ let propsStack = __ref.__props;
29
+ const parentProps = (0, import_inherit.inheritParentProps)(element, parent);
30
+ if (parentProps)
31
+ propsStack = __ref.__props = [].concat(parentProps, propsStack);
32
+ if (newProps)
33
+ propsStack = __ref.__props = [].concat(newProps, propsStack);
34
+ if (propsStack)
35
+ (0, import_create.syncProps)(propsStack, element);
36
+ return element;
37
+ };
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var import_element = require("../../src/element");
3
+ const dom = (0, import_element.create)({});
4
+ test("should create EMPTY element", () => {
5
+ expect(dom).toHaveProperty("key");
6
+ expect(dom).toHaveProperty("state");
7
+ expect(dom).toHaveProperty("parent");
8
+ expect(dom).toHaveProperty("node");
9
+ expect(dom).toHaveProperty("set");
10
+ expect(dom).toHaveProperty("update");
11
+ expect(dom).toHaveProperty("__ref");
12
+ });
13
+ test("should create valid DOM node", () => {
14
+ expect(dom.node).toBeInstanceOf(window.HTMLDivElement);
15
+ });
16
+ test("must be able to create valid PATH", () => {
17
+ expect(dom.__ref.__path).toStrictEqual([dom.key]);
18
+ });
19
+ test("if it HAS a NODE, don't recreate", () => {
20
+ const node = document.createElement("div");
21
+ const dom2 = (0, import_element.create)({ node });
22
+ expect(dom2.node.parentElement).toBe(document.body);
23
+ });
24
+ test("create with number", () => {
25
+ const numb = (0, import_element.create)(0);
26
+ expect(numb.text).toBe(0);
27
+ expect(numb.tag).toBe("string");
28
+ expect(numb.node.nodeType).toBe(3);
29
+ });
30
+ test("create with string", () => {
31
+ const str = (0, import_element.create)("hello");
32
+ expect(str.text).toBe("hello");
33
+ expect(str.tag).toBe("string");
34
+ expect(str.node.nodeType).toBe(3);
35
+ });
36
+ test("creating conditions", () => {
37
+ const element = (0, import_element.create)({
38
+ data: { visible: true },
39
+ if: (element2) => element2.data.visible
40
+ });
41
+ expect(element.tag).toBe("div");
42
+ });
43
+ test("creating nesting", () => {
44
+ const element = (0, import_element.create)({
45
+ header: {
46
+ h1: {}
47
+ }
48
+ });
49
+ expect(element.header.tag).toBe("header");
50
+ expect(element.header.h1.tag).toBe("h1");
51
+ });
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ var import_element = require("../../src/element");
3
+ const element = (0, import_element.create)({});
4
+ test("should SET element", () => {
5
+ element.set({ text: "test" });
6
+ expect(element.content.text).toBe("test");
7
+ element.set({ text: "test2" });
8
+ expect(element.content.text).toBe("test2");
9
+ });
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ var import_element = require("../../src/element");
3
+ const element = (0, import_element.create)({});
4
+ test("should UPDATE element", () => {
5
+ expect(element.text).toBeUndefined();
6
+ element.update("test");
7
+ expect(element.text).toBe("test");
8
+ });