native-document 1.0.120 → 1.0.121
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/dist/native-document.components.min.js +72 -66
- package/dist/native-document.dev.js +57 -47
- package/dist/native-document.dev.js.map +1 -1
- package/dist/native-document.min.js +1 -1
- package/package.json +1 -1
- package/src/core/wrappers/AttributesWrapper.js +32 -40
- package/src/core/wrappers/ElementCreator.js +1 -0
- package/src/core/wrappers/prototypes/attributes-extensions.js +4 -5
- package/src/core/wrappers/prototypes/bind-class-extensions.js +10 -5
- package/src/core/wrappers/template-cloner/NodeCloner.js +7 -4
|
@@ -363,16 +363,16 @@ var NativeComponents = (function (exports) {
|
|
|
363
363
|
// });
|
|
364
364
|
};
|
|
365
365
|
|
|
366
|
-
let DebugManager$
|
|
366
|
+
let DebugManager$2 = {};
|
|
367
367
|
{
|
|
368
|
-
DebugManager$
|
|
368
|
+
DebugManager$2 = {
|
|
369
369
|
log() {},
|
|
370
370
|
warn() {},
|
|
371
371
|
error() {},
|
|
372
372
|
disable() {}
|
|
373
373
|
};
|
|
374
374
|
}
|
|
375
|
-
var DebugManager$
|
|
375
|
+
var DebugManager$1 = DebugManager$2;
|
|
376
376
|
|
|
377
377
|
/**
|
|
378
378
|
*
|
|
@@ -846,17 +846,17 @@ var NativeComponents = (function (exports) {
|
|
|
846
846
|
const method = methods[name];
|
|
847
847
|
|
|
848
848
|
if (typeof method !== 'function') {
|
|
849
|
-
DebugManager$
|
|
849
|
+
DebugManager$1.warn('NDElement.extend', `"${name}" is not a function, skipping`);
|
|
850
850
|
continue;
|
|
851
851
|
}
|
|
852
852
|
|
|
853
853
|
if (protectedMethods.has(name)) {
|
|
854
|
-
DebugManager$
|
|
854
|
+
DebugManager$1.error('NDElement.extend', `Cannot override protected method "${name}"`);
|
|
855
855
|
throw new NativeDocumentError(`Cannot override protected method "${name}"`);
|
|
856
856
|
}
|
|
857
857
|
|
|
858
858
|
if (NDElement.prototype[name]) {
|
|
859
|
-
DebugManager$
|
|
859
|
+
DebugManager$1.warn('NDElement.extend', `Overwriting existing prototype method "${name}"`);
|
|
860
860
|
}
|
|
861
861
|
|
|
862
862
|
NDElement.prototype[name] = method;
|
|
@@ -1081,7 +1081,7 @@ var NativeComponents = (function (exports) {
|
|
|
1081
1081
|
}
|
|
1082
1082
|
}
|
|
1083
1083
|
if (cleanedCount > 0) {
|
|
1084
|
-
DebugManager$
|
|
1084
|
+
DebugManager$1.log('Memory Auto Clean', `🧹 Cleaned ${cleanedCount} orphaned observables`);
|
|
1085
1085
|
}
|
|
1086
1086
|
}
|
|
1087
1087
|
};
|
|
@@ -1969,22 +1969,7 @@ var NativeComponents = (function (exports) {
|
|
|
1969
1969
|
*/
|
|
1970
1970
|
const bindClassAttribute = (element, data) => {
|
|
1971
1971
|
for(const className in data) {
|
|
1972
|
-
|
|
1973
|
-
if(value.__$isObservable) {
|
|
1974
|
-
element.classes.toggle(className, value.val());
|
|
1975
|
-
value.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
1976
|
-
continue;
|
|
1977
|
-
}
|
|
1978
|
-
if(value.__$isObservableWhen) {
|
|
1979
|
-
element.classes.toggle(className, value.isActive());
|
|
1980
|
-
value.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
1981
|
-
continue;
|
|
1982
|
-
}
|
|
1983
|
-
if(value.$hydrate) {
|
|
1984
|
-
value.$hydrate(element, className);
|
|
1985
|
-
continue;
|
|
1986
|
-
}
|
|
1987
|
-
element.classes.toggle(className, value);
|
|
1972
|
+
data[className].bindClassProperty(element, className);
|
|
1988
1973
|
}
|
|
1989
1974
|
};
|
|
1990
1975
|
|
|
@@ -2054,39 +2039,47 @@ var NativeComponents = (function (exports) {
|
|
|
2054
2039
|
element.setAttribute(attributeName, value.val());
|
|
2055
2040
|
};
|
|
2056
2041
|
|
|
2057
|
-
/**
|
|
2058
|
-
*
|
|
2059
|
-
* @param {HTMLElement} element
|
|
2060
|
-
* @param {Object} attributes
|
|
2061
|
-
*/
|
|
2062
|
-
const AttributesWrapper = (element, attributes) => {
|
|
2063
2042
|
|
|
2064
|
-
|
|
2065
|
-
|
|
2066
|
-
|
|
2043
|
+
const AttributeHandlers = {
|
|
2044
|
+
string: (element, attributeName, value) => element.setAttribute(attributeName, value),
|
|
2045
|
+
number: (element, attributeName, value) => element.setAttribute(attributeName, value),
|
|
2046
|
+
boolean: (element, attributeName, value) => bindBooleanAttribute(element, attributeName, value),
|
|
2047
|
+
object: (element, attributeName, value) => {
|
|
2067
2048
|
if(value == null) {
|
|
2068
|
-
|
|
2049
|
+
return;
|
|
2069
2050
|
}
|
|
2051
|
+
|
|
2070
2052
|
if(value.handleNdAttribute) {
|
|
2071
|
-
value.handleNdAttribute(element, attributeName
|
|
2072
|
-
|
|
2053
|
+
value.handleNdAttribute(element, attributeName);
|
|
2054
|
+
return;
|
|
2073
2055
|
}
|
|
2074
|
-
|
|
2075
|
-
|
|
2076
|
-
|
|
2077
|
-
|
|
2078
|
-
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2082
|
-
}
|
|
2056
|
+
|
|
2057
|
+
if(attributeName === 'class') {
|
|
2058
|
+
bindClassAttribute(element, value);
|
|
2059
|
+
return;
|
|
2060
|
+
}
|
|
2061
|
+
if(attributeName === 'style') {
|
|
2062
|
+
bindStyleAttribute(element, value);
|
|
2063
|
+
return;
|
|
2083
2064
|
}
|
|
2084
2065
|
if(BOOLEAN_ATTRIBUTES.has(attributeName)) {
|
|
2085
2066
|
bindBooleanAttribute(element, attributeName, value);
|
|
2086
|
-
continue;
|
|
2087
2067
|
}
|
|
2068
|
+
}
|
|
2069
|
+
};
|
|
2088
2070
|
|
|
2089
|
-
|
|
2071
|
+
/**
|
|
2072
|
+
*
|
|
2073
|
+
* @param {HTMLElement} element
|
|
2074
|
+
* @param {Object} attributes
|
|
2075
|
+
*/
|
|
2076
|
+
const AttributesWrapper = (element, attributes) => {
|
|
2077
|
+
|
|
2078
|
+
for(const originalAttributeName in attributes) {
|
|
2079
|
+
const attributeName = originalAttributeName.toLowerCase();
|
|
2080
|
+
let value = attributes[originalAttributeName];
|
|
2081
|
+
const typeOf = typeof value;
|
|
2082
|
+
AttributeHandlers[typeOf](element, attributeName, value);
|
|
2090
2083
|
}
|
|
2091
2084
|
return element;
|
|
2092
2085
|
};
|
|
@@ -2226,10 +2219,6 @@ var NativeComponents = (function (exports) {
|
|
|
2226
2219
|
return this;
|
|
2227
2220
|
};
|
|
2228
2221
|
|
|
2229
|
-
String.prototype.handleNdAttribute = function(element, attributeName) {
|
|
2230
|
-
element.setAttribute(attributeName, this);
|
|
2231
|
-
};
|
|
2232
|
-
|
|
2233
2222
|
ObservableItem.prototype.handleNdAttribute = function(element, attributeName) {
|
|
2234
2223
|
if(BOOLEAN_ATTRIBUTES.has(attributeName)) {
|
|
2235
2224
|
bindBooleanAttribute(element, attributeName, this);
|
|
@@ -2239,6 +2228,20 @@ var NativeComponents = (function (exports) {
|
|
|
2239
2228
|
bindAttributeWithObservable(element, attributeName, this);
|
|
2240
2229
|
};
|
|
2241
2230
|
|
|
2231
|
+
ObservableItem.prototype.bindClassProperty = function(element, className) {
|
|
2232
|
+
element.classes.toggle(className, this.val());
|
|
2233
|
+
this.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
2234
|
+
};
|
|
2235
|
+
|
|
2236
|
+
ObservableWhen.prototype.bindClassProperty = function(element, className) {
|
|
2237
|
+
element.classes.toggle(className, this.isActive());
|
|
2238
|
+
this.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
2239
|
+
};
|
|
2240
|
+
|
|
2241
|
+
Boolean.prototype.bindClassProperty = function(element, className) {
|
|
2242
|
+
element.classes.toggle(className, this);
|
|
2243
|
+
};
|
|
2244
|
+
|
|
2242
2245
|
let $textNodeCache = null;
|
|
2243
2246
|
|
|
2244
2247
|
const ElementCreator = {
|
|
@@ -3070,19 +3073,22 @@ var NativeComponents = (function (exports) {
|
|
|
3070
3073
|
}
|
|
3071
3074
|
}
|
|
3072
3075
|
if(this.$classes) {
|
|
3073
|
-
const cache = {};
|
|
3074
3076
|
const keys = Object.keys(this.$classes);
|
|
3075
3077
|
|
|
3076
3078
|
if(keys.length === 1) {
|
|
3077
3079
|
const key = keys[0];
|
|
3078
3080
|
const callback = this.$classes[key];
|
|
3079
3081
|
steps.push((clonedNode, data) => {
|
|
3080
|
-
|
|
3081
|
-
ElementCreator.processClassAttribute(clonedNode, cache);
|
|
3082
|
+
callback.apply(null, data).bindClassProperty(clonedNode, key);
|
|
3082
3083
|
});
|
|
3083
3084
|
} else {
|
|
3085
|
+
const properties = this.$classes;
|
|
3086
|
+
const keysLength = keys.length;
|
|
3084
3087
|
steps.push((clonedNode, data) => {
|
|
3085
|
-
|
|
3088
|
+
for(let i = 0; i < keysLength; i++) {
|
|
3089
|
+
const key = keys[i];
|
|
3090
|
+
properties[key].apply(null, data).bindClassProperty(clonedNode, key);
|
|
3091
|
+
}
|
|
3086
3092
|
});
|
|
3087
3093
|
}
|
|
3088
3094
|
}
|
|
@@ -3946,7 +3952,7 @@ var NativeComponents = (function (exports) {
|
|
|
3946
3952
|
const $getStoreOrThrow = (method, name) => {
|
|
3947
3953
|
const item = $stores.get(name);
|
|
3948
3954
|
if (!item) {
|
|
3949
|
-
DebugManager$
|
|
3955
|
+
DebugManager$1.error('Store', `Store.${method}('${name}') : store not found. Did you call Store.create('${name}') first?`);
|
|
3950
3956
|
throw new NativeDocumentError(
|
|
3951
3957
|
`Store.${method}('${name}') : store not found.`
|
|
3952
3958
|
);
|
|
@@ -3959,7 +3965,7 @@ var NativeComponents = (function (exports) {
|
|
|
3959
3965
|
*/
|
|
3960
3966
|
const $applyReadOnly = (observer, name, context) => {
|
|
3961
3967
|
const readOnlyError = (method) => () => {
|
|
3962
|
-
DebugManager$
|
|
3968
|
+
DebugManager$1.error('Store', `Store.${context}('${name}') is read-only. '${method}()' is not allowed.`);
|
|
3963
3969
|
throw new NativeDocumentError(
|
|
3964
3970
|
`Store.${context}('${name}') is read-only.`
|
|
3965
3971
|
);
|
|
@@ -3990,7 +3996,7 @@ var NativeComponents = (function (exports) {
|
|
|
3990
3996
|
*/
|
|
3991
3997
|
create(name, value) {
|
|
3992
3998
|
if ($stores.has(name)) {
|
|
3993
|
-
DebugManager$
|
|
3999
|
+
DebugManager$1.warn('Store', `Store.create('${name}') : a store with this name already exists. Use Store.get('${name}') to retrieve it.`);
|
|
3994
4000
|
throw new NativeDocumentError(
|
|
3995
4001
|
`Store.create('${name}') : a store with this name already exists.`
|
|
3996
4002
|
);
|
|
@@ -4011,7 +4017,7 @@ var NativeComponents = (function (exports) {
|
|
|
4011
4017
|
*/
|
|
4012
4018
|
createResettable(name, value) {
|
|
4013
4019
|
if ($stores.has(name)) {
|
|
4014
|
-
DebugManager$
|
|
4020
|
+
DebugManager$1.warn('Store', `Store.createResettable('${name}') : a store with this name already exists.`);
|
|
4015
4021
|
throw new NativeDocumentError(
|
|
4016
4022
|
`Store.createResettable('${name}') : a store with this name already exists.`
|
|
4017
4023
|
);
|
|
@@ -4047,7 +4053,7 @@ var NativeComponents = (function (exports) {
|
|
|
4047
4053
|
*/
|
|
4048
4054
|
createComposed(name, computation, dependencies) {
|
|
4049
4055
|
if ($stores.has(name)) {
|
|
4050
|
-
DebugManager$
|
|
4056
|
+
DebugManager$1.warn('Store', `Store.createComposed('${name}') : a store with this name already exists.`);
|
|
4051
4057
|
throw new NativeDocumentError(
|
|
4052
4058
|
`Store.createComposed('${name}') : a store with this name already exists.`
|
|
4053
4059
|
);
|
|
@@ -4070,7 +4076,7 @@ var NativeComponents = (function (exports) {
|
|
|
4070
4076
|
}
|
|
4071
4077
|
const depItem = $stores.get(depName);
|
|
4072
4078
|
if (!depItem) {
|
|
4073
|
-
DebugManager$
|
|
4079
|
+
DebugManager$1.error('Store', `Store.createComposed('${name}') : dependency '${depName}' not found. Create it first.`);
|
|
4074
4080
|
throw new NativeDocumentError(
|
|
4075
4081
|
`Store.createComposed('${name}') : dependency store '${depName}' not found.`
|
|
4076
4082
|
);
|
|
@@ -4104,13 +4110,13 @@ var NativeComponents = (function (exports) {
|
|
|
4104
4110
|
reset(name) {
|
|
4105
4111
|
const item = $getStoreOrThrow('reset', name);
|
|
4106
4112
|
if (item.composed) {
|
|
4107
|
-
DebugManager$
|
|
4113
|
+
DebugManager$1.error('Store', `Store.reset('${name}') : composed stores cannot be reset. Their value is derived from dependencies.`);
|
|
4108
4114
|
throw new NativeDocumentError(
|
|
4109
4115
|
`Store.reset('${name}') : composed stores cannot be reset.`
|
|
4110
4116
|
);
|
|
4111
4117
|
}
|
|
4112
4118
|
if (!item.resettable) {
|
|
4113
|
-
DebugManager$
|
|
4119
|
+
DebugManager$1.error('Store', `Store.reset('${name}') : this store is not resettable. Use Store.createResettable('${name}', value) instead of Store.create().`);
|
|
4114
4120
|
throw new NativeDocumentError(
|
|
4115
4121
|
`Store.reset('${name}') : this store is not resettable. Use Store.createResettable('${name}', value) instead of Store.create().`
|
|
4116
4122
|
);
|
|
@@ -4131,7 +4137,7 @@ var NativeComponents = (function (exports) {
|
|
|
4131
4137
|
const item = $getStoreOrThrow('use', name);
|
|
4132
4138
|
|
|
4133
4139
|
if (item.composed) {
|
|
4134
|
-
DebugManager$
|
|
4140
|
+
DebugManager$1.error('Store', `Store.use('${name}') : composed stores are read-only. Use Store.follow('${name}') instead.`);
|
|
4135
4141
|
throw new NativeDocumentError(
|
|
4136
4142
|
`Store.use('${name}') : composed stores are read-only. Use Store.follow('${name}') instead.`
|
|
4137
4143
|
);
|
|
@@ -4198,7 +4204,7 @@ var NativeComponents = (function (exports) {
|
|
|
4198
4204
|
get(name) {
|
|
4199
4205
|
const item = $stores.get(name);
|
|
4200
4206
|
if (!item) {
|
|
4201
|
-
DebugManager$
|
|
4207
|
+
DebugManager$1.warn('Store', `Store.get('${name}') : store not found.`);
|
|
4202
4208
|
return null;
|
|
4203
4209
|
}
|
|
4204
4210
|
return item.observer;
|
|
@@ -4220,7 +4226,7 @@ var NativeComponents = (function (exports) {
|
|
|
4220
4226
|
delete(name) {
|
|
4221
4227
|
const item = $stores.get(name);
|
|
4222
4228
|
if (!item) {
|
|
4223
|
-
DebugManager$
|
|
4229
|
+
DebugManager$1.warn('Store', `Store.delete('${name}') : store not found, nothing to delete.`);
|
|
4224
4230
|
return;
|
|
4225
4231
|
}
|
|
4226
4232
|
item.subscribers.forEach(follower => follower.destroy());
|
|
@@ -4322,7 +4328,7 @@ var NativeComponents = (function (exports) {
|
|
|
4322
4328
|
return undefined;
|
|
4323
4329
|
},
|
|
4324
4330
|
set(target, prop, value) {
|
|
4325
|
-
DebugManager$
|
|
4331
|
+
DebugManager$1.error('Store', `Forbidden: You cannot overwrite the store key '${String(prop)}'. Use .use('${String(prop)}').set(value) instead.`);
|
|
4326
4332
|
throw new NativeDocumentError(`Store structure is immutable. Use .set() on the observable.`);
|
|
4327
4333
|
},
|
|
4328
4334
|
deleteProperty(target, prop) {
|
|
@@ -1788,22 +1788,7 @@ var NativeDocument = (function (exports) {
|
|
|
1788
1788
|
*/
|
|
1789
1789
|
const bindClassAttribute = (element, data) => {
|
|
1790
1790
|
for(const className in data) {
|
|
1791
|
-
|
|
1792
|
-
if(value.__$isObservable) {
|
|
1793
|
-
element.classes.toggle(className, value.val());
|
|
1794
|
-
value.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
1795
|
-
continue;
|
|
1796
|
-
}
|
|
1797
|
-
if(value.__$isObservableWhen) {
|
|
1798
|
-
element.classes.toggle(className, value.isActive());
|
|
1799
|
-
value.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
1800
|
-
continue;
|
|
1801
|
-
}
|
|
1802
|
-
if(value.$hydrate) {
|
|
1803
|
-
value.$hydrate(element, className);
|
|
1804
|
-
continue;
|
|
1805
|
-
}
|
|
1806
|
-
element.classes.toggle(className, value);
|
|
1791
|
+
data[className].bindClassProperty(element, className);
|
|
1807
1792
|
}
|
|
1808
1793
|
};
|
|
1809
1794
|
|
|
@@ -1873,6 +1858,35 @@ var NativeDocument = (function (exports) {
|
|
|
1873
1858
|
element.setAttribute(attributeName, value.val());
|
|
1874
1859
|
};
|
|
1875
1860
|
|
|
1861
|
+
|
|
1862
|
+
const AttributeHandlers = {
|
|
1863
|
+
string: (element, attributeName, value) => element.setAttribute(attributeName, value),
|
|
1864
|
+
number: (element, attributeName, value) => element.setAttribute(attributeName, value),
|
|
1865
|
+
boolean: (element, attributeName, value) => bindBooleanAttribute(element, attributeName, value),
|
|
1866
|
+
object: (element, attributeName, value) => {
|
|
1867
|
+
if(value == null) {
|
|
1868
|
+
return;
|
|
1869
|
+
}
|
|
1870
|
+
|
|
1871
|
+
if(value.handleNdAttribute) {
|
|
1872
|
+
value.handleNdAttribute(element, attributeName);
|
|
1873
|
+
return;
|
|
1874
|
+
}
|
|
1875
|
+
|
|
1876
|
+
if(attributeName === 'class') {
|
|
1877
|
+
bindClassAttribute(element, value);
|
|
1878
|
+
return;
|
|
1879
|
+
}
|
|
1880
|
+
if(attributeName === 'style') {
|
|
1881
|
+
bindStyleAttribute(element, value);
|
|
1882
|
+
return;
|
|
1883
|
+
}
|
|
1884
|
+
if(BOOLEAN_ATTRIBUTES.has(attributeName)) {
|
|
1885
|
+
bindBooleanAttribute(element, attributeName, value);
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
};
|
|
1889
|
+
|
|
1876
1890
|
/**
|
|
1877
1891
|
*
|
|
1878
1892
|
* @param {HTMLElement} element
|
|
@@ -1887,29 +1901,8 @@ var NativeDocument = (function (exports) {
|
|
|
1887
1901
|
for(const originalAttributeName in attributes) {
|
|
1888
1902
|
const attributeName = originalAttributeName.toLowerCase();
|
|
1889
1903
|
let value = attributes[originalAttributeName];
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
}
|
|
1893
|
-
if(value.handleNdAttribute) {
|
|
1894
|
-
value.handleNdAttribute(element, attributeName, value);
|
|
1895
|
-
continue;
|
|
1896
|
-
}
|
|
1897
|
-
if(typeof value === 'object') {
|
|
1898
|
-
if(attributeName === 'class') {
|
|
1899
|
-
bindClassAttribute(element, value);
|
|
1900
|
-
continue;
|
|
1901
|
-
}
|
|
1902
|
-
if(attributeName === 'style') {
|
|
1903
|
-
bindStyleAttribute(element, value);
|
|
1904
|
-
continue;
|
|
1905
|
-
}
|
|
1906
|
-
}
|
|
1907
|
-
if(BOOLEAN_ATTRIBUTES.has(attributeName)) {
|
|
1908
|
-
bindBooleanAttribute(element, attributeName, value);
|
|
1909
|
-
continue;
|
|
1910
|
-
}
|
|
1911
|
-
|
|
1912
|
-
element.setAttribute(attributeName, value);
|
|
1904
|
+
const typeOf = typeof value;
|
|
1905
|
+
AttributeHandlers[typeOf](element, attributeName, value);
|
|
1913
1906
|
}
|
|
1914
1907
|
return element;
|
|
1915
1908
|
};
|
|
@@ -2062,10 +2055,6 @@ var NativeDocument = (function (exports) {
|
|
|
2062
2055
|
return this;
|
|
2063
2056
|
};
|
|
2064
2057
|
|
|
2065
|
-
String.prototype.handleNdAttribute = function(element, attributeName) {
|
|
2066
|
-
element.setAttribute(attributeName, this);
|
|
2067
|
-
};
|
|
2068
|
-
|
|
2069
2058
|
ObservableItem.prototype.handleNdAttribute = function(element, attributeName) {
|
|
2070
2059
|
if(BOOLEAN_ATTRIBUTES.has(attributeName)) {
|
|
2071
2060
|
bindBooleanAttribute(element, attributeName, this);
|
|
@@ -2079,6 +2068,24 @@ var NativeDocument = (function (exports) {
|
|
|
2079
2068
|
this.$hydrate(element, attributeName);
|
|
2080
2069
|
};
|
|
2081
2070
|
|
|
2071
|
+
ObservableItem.prototype.bindClassProperty = function(element, className) {
|
|
2072
|
+
element.classes.toggle(className, this.val());
|
|
2073
|
+
this.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
2074
|
+
};
|
|
2075
|
+
|
|
2076
|
+
ObservableWhen.prototype.bindClassProperty = function(element, className) {
|
|
2077
|
+
element.classes.toggle(className, this.isActive());
|
|
2078
|
+
this.subscribe((shouldAdd) => element.classes.toggle(className, shouldAdd));
|
|
2079
|
+
};
|
|
2080
|
+
|
|
2081
|
+
TemplateBinding.prototype.bindClassProperty = function(element, className) {
|
|
2082
|
+
this.$hydrate(element, className);
|
|
2083
|
+
};
|
|
2084
|
+
|
|
2085
|
+
Boolean.prototype.bindClassProperty = function(element, className) {
|
|
2086
|
+
element.classes.toggle(className, this);
|
|
2087
|
+
};
|
|
2088
|
+
|
|
2082
2089
|
let $textNodeCache = null;
|
|
2083
2090
|
|
|
2084
2091
|
const ElementCreator = {
|
|
@@ -3039,19 +3046,22 @@ var NativeDocument = (function (exports) {
|
|
|
3039
3046
|
}
|
|
3040
3047
|
}
|
|
3041
3048
|
if(this.$classes) {
|
|
3042
|
-
const cache = {};
|
|
3043
3049
|
const keys = Object.keys(this.$classes);
|
|
3044
3050
|
|
|
3045
3051
|
if(keys.length === 1) {
|
|
3046
3052
|
const key = keys[0];
|
|
3047
3053
|
const callback = this.$classes[key];
|
|
3048
3054
|
steps.push((clonedNode, data) => {
|
|
3049
|
-
|
|
3050
|
-
ElementCreator.processClassAttribute(clonedNode, cache);
|
|
3055
|
+
callback.apply(null, data).bindClassProperty(clonedNode, key);
|
|
3051
3056
|
});
|
|
3052
3057
|
} else {
|
|
3058
|
+
const properties = this.$classes;
|
|
3059
|
+
const keysLength = keys.length;
|
|
3053
3060
|
steps.push((clonedNode, data) => {
|
|
3054
|
-
|
|
3061
|
+
for(let i = 0; i < keysLength; i++) {
|
|
3062
|
+
const key = keys[i];
|
|
3063
|
+
properties[key].apply(null, data).bindClassProperty(clonedNode, key);
|
|
3064
|
+
}
|
|
3055
3065
|
});
|
|
3056
3066
|
}
|
|
3057
3067
|
}
|