@schukai/monster 3.48.0 → 3.50.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/package.json +1 -1
- package/source/data/datasource/server/restapi/data-fetch-error.mjs +1 -2
- package/source/data/datasource/server/restapi.mjs +10 -7
- package/source/data/transformer.mjs +18 -0
- package/source/dom/constants.mjs +2 -2
- package/source/dom/customcontrol.mjs +63 -66
- package/source/dom/customelement.mjs +157 -172
- package/source/dom/dimension.mjs +1 -3
- package/source/dom/util/extract-keys.mjs +10 -6
- package/source/dom/util/init-options-from-attributes.mjs +14 -16
- package/source/dom/util/set-option-from-attribute.mjs +14 -16
- package/source/dom/util.mjs +11 -4
- package/source/logging/handler/console.mjs +0 -4
- package/source/text/bracketed-key-value-hash.mjs +23 -31
- package/source/text/util.mjs +1 -2
- package/source/types/version.mjs +1 -1
- package/test/cases/data/transformer.mjs +3 -0
- package/test/cases/dom/customcontrol.mjs +21 -45
- package/test/cases/dom/customelement.mjs +2 -1
- package/test/cases/monster.mjs +1 -1
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {Pathfinder} from
|
|
9
|
-
import {isFunction} from
|
|
10
|
-
import {attributeObserverSymbol} from "../customelement.mjs";
|
|
11
|
-
import {extractKeys} from "./extract-keys.mjs";
|
|
8
|
+
import { Pathfinder } from "../../data/pathfinder.mjs";
|
|
9
|
+
import { isFunction } from "../../types/is.mjs";
|
|
10
|
+
import { attributeObserverSymbol } from "../customelement.mjs";
|
|
11
|
+
import { extractKeys } from "./extract-keys.mjs";
|
|
12
12
|
|
|
13
|
-
export {initOptionsFromAttributes};
|
|
13
|
+
export { initOptionsFromAttributes };
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Initializes the given options object based on the attributes of the current DOM element.
|
|
@@ -29,7 +29,7 @@ export {initOptionsFromAttributes};
|
|
|
29
29
|
* // e.g. <div data-monster-option-foo="foo"></div>
|
|
30
30
|
* 'bar.baz': (value) => value + 'bar'
|
|
31
31
|
* // the value of the attribute 'data-monster-option-bar-baz' is appended with 'bar'
|
|
32
|
-
* // and assigned to the 'bar.baz' property in the options object.
|
|
32
|
+
* // and assigned to the 'bar.baz' property in the options object.
|
|
33
33
|
* // e.g. <div data-monster-option-bar-baz="foo"></div>
|
|
34
34
|
* }
|
|
35
35
|
*
|
|
@@ -41,7 +41,7 @@ export {initOptionsFromAttributes};
|
|
|
41
41
|
* @returns {Object} - The initialized options object.
|
|
42
42
|
* @this HTMLElement - The context of the DOM element.
|
|
43
43
|
*/
|
|
44
|
-
function initOptionsFromAttributes(element, options, mapping = {}, prefix =
|
|
44
|
+
function initOptionsFromAttributes(element, options, mapping = {}, prefix = "data-monster-option-") {
|
|
45
45
|
if (!(element instanceof HTMLElement)) return options;
|
|
46
46
|
if (!element.hasAttributes()) return options;
|
|
47
47
|
|
|
@@ -52,7 +52,7 @@ function initOptionsFromAttributes(element, options, mapping = {}, prefix = 'dat
|
|
|
52
52
|
element.getAttributeNames().forEach((name) => {
|
|
53
53
|
if (!name.startsWith(prefix)) return;
|
|
54
54
|
|
|
55
|
-
// check if the attribute name is a valid option.
|
|
55
|
+
// check if the attribute name is a valid option.
|
|
56
56
|
// the mapping between the attribute is simple. The dash is replaced by a dot.
|
|
57
57
|
// e.g. data-monster-url => url
|
|
58
58
|
const optionName = keyMap.get(name.substring(prefix.length).toLowerCase());
|
|
@@ -65,21 +65,19 @@ function initOptionsFromAttributes(element, options, mapping = {}, prefix = 'dat
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
const typeOfOptionValue = typeof finder.getVia(optionName);
|
|
68
|
-
if (typeOfOptionValue ===
|
|
69
|
-
value = value ===
|
|
70
|
-
} else if (typeOfOptionValue ===
|
|
68
|
+
if (typeOfOptionValue === "boolean") {
|
|
69
|
+
value = value === "true";
|
|
70
|
+
} else if (typeOfOptionValue === "number") {
|
|
71
71
|
value = Number(value);
|
|
72
|
-
} else if (typeOfOptionValue ===
|
|
72
|
+
} else if (typeOfOptionValue === "string") {
|
|
73
73
|
value = String(value);
|
|
74
|
-
} else if (typeOfOptionValue ===
|
|
74
|
+
} else if (typeOfOptionValue === "object") {
|
|
75
75
|
value = JSON.parse(value);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
finder.setVia(optionName, value);
|
|
79
79
|
}
|
|
80
|
-
})
|
|
80
|
+
});
|
|
81
81
|
|
|
82
82
|
return options;
|
|
83
83
|
}
|
|
84
|
-
|
|
85
|
-
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import {Pathfinder} from
|
|
9
|
-
import {isFunction} from
|
|
10
|
-
import {attributeObserverSymbol} from "../customelement.mjs";
|
|
11
|
-
import {extractKeys} from "./extract-keys.mjs";
|
|
8
|
+
import { Pathfinder } from "../../data/pathfinder.mjs";
|
|
9
|
+
import { isFunction } from "../../types/is.mjs";
|
|
10
|
+
import { attributeObserverSymbol } from "../customelement.mjs";
|
|
11
|
+
import { extractKeys } from "./extract-keys.mjs";
|
|
12
12
|
|
|
13
|
-
export {setOptionFromAttribute};
|
|
13
|
+
export { setOptionFromAttribute };
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Set the given options object based on the attributes of the current DOM element.
|
|
@@ -29,7 +29,7 @@ export {setOptionFromAttribute};
|
|
|
29
29
|
* // e.g. <div data-monster-option-foo="foo"></div>
|
|
30
30
|
* 'bar.baz': (value) => value + 'bar'
|
|
31
31
|
* // the value of the attribute 'data-monster-option-bar-baz' is appended with 'bar'
|
|
32
|
-
* // and assigned to the 'bar.baz' property in the options object.
|
|
32
|
+
* // and assigned to the 'bar.baz' property in the options object.
|
|
33
33
|
* // e.g. <div data-monster-option-bar-baz="foo"></div>
|
|
34
34
|
* }
|
|
35
35
|
*
|
|
@@ -42,14 +42,14 @@ export {setOptionFromAttribute};
|
|
|
42
42
|
* @returns {Object} - The initialized options object.
|
|
43
43
|
* @this HTMLElement - The context of the DOM element.
|
|
44
44
|
*/
|
|
45
|
-
function setOptionFromAttribute(element, name, options, mapping = {}, prefix =
|
|
45
|
+
function setOptionFromAttribute(element, name, options, mapping = {}, prefix = "data-monster-option-") {
|
|
46
46
|
if (!(element instanceof HTMLElement)) return options;
|
|
47
47
|
if (!element.hasAttributes()) return options;
|
|
48
|
-
|
|
48
|
+
|
|
49
49
|
const keyMap = extractKeys(options);
|
|
50
50
|
const finder = new Pathfinder(options);
|
|
51
51
|
|
|
52
|
-
// check if the attribute name is a valid option.
|
|
52
|
+
// check if the attribute name is a valid option.
|
|
53
53
|
// the mapping between the attribute is simple. The dash is replaced by a dot.
|
|
54
54
|
// e.g. data-monster-url => url
|
|
55
55
|
const optionName = keyMap.get(name.substring(prefix.length).toLowerCase());
|
|
@@ -65,13 +65,13 @@ function setOptionFromAttribute(element, name, options, mapping = {}, prefix = '
|
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
const typeOfOptionValue = typeof finder.getVia(optionName);
|
|
68
|
-
if (typeOfOptionValue ===
|
|
69
|
-
value = value ===
|
|
70
|
-
} else if (typeOfOptionValue ===
|
|
68
|
+
if (typeOfOptionValue === "boolean") {
|
|
69
|
+
value = value === "true";
|
|
70
|
+
} else if (typeOfOptionValue === "number") {
|
|
71
71
|
value = Number(value);
|
|
72
|
-
} else if (typeOfOptionValue ===
|
|
72
|
+
} else if (typeOfOptionValue === "string") {
|
|
73
73
|
value = String(value);
|
|
74
|
-
} else if (typeOfOptionValue ===
|
|
74
|
+
} else if (typeOfOptionValue === "object") {
|
|
75
75
|
value = JSON.parse(value);
|
|
76
76
|
}
|
|
77
77
|
|
|
@@ -79,5 +79,3 @@ function setOptionFromAttribute(element, name, options, mapping = {}, prefix = '
|
|
|
79
79
|
|
|
80
80
|
return options;
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
package/source/dom/util.mjs
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { getGlobal } from "../types/global.mjs";
|
|
9
9
|
import { validateString } from "../types/validate.mjs";
|
|
10
10
|
|
|
11
|
-
export { getDocument, getWindow, getDocumentFragmentFromString, findElementWithIdUpwards,getContainingDocument };
|
|
11
|
+
export { getDocument, getWindow, getDocumentFragmentFromString, findElementWithIdUpwards, getContainingDocument };
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* This method fetches the document object
|
|
@@ -209,7 +209,11 @@ function traverseShadowRoots(element) {
|
|
|
209
209
|
let currentRoot = element.shadowRoot;
|
|
210
210
|
let currentParent = element.parentNode;
|
|
211
211
|
|
|
212
|
-
while (
|
|
212
|
+
while (
|
|
213
|
+
currentParent &&
|
|
214
|
+
currentParent.nodeType !== Node.DOCUMENT_NODE &&
|
|
215
|
+
currentParent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE
|
|
216
|
+
) {
|
|
213
217
|
if (currentRoot && currentRoot.parentNode) {
|
|
214
218
|
currentParent = currentRoot.parentNode;
|
|
215
219
|
currentRoot = currentParent.shadowRoot;
|
|
@@ -238,8 +242,11 @@ function traverseShadowRoots(element) {
|
|
|
238
242
|
* @since 3.36.0
|
|
239
243
|
*/
|
|
240
244
|
function getContainingDocument(element) {
|
|
241
|
-
if (
|
|
242
|
-
|
|
245
|
+
if (
|
|
246
|
+
!element ||
|
|
247
|
+
!(element instanceof HTMLElement || element instanceof element.ownerDocument.defaultView.HTMLElement)
|
|
248
|
+
) {
|
|
249
|
+
throw new Error("Invalid argument. Expected an HTMLElement.");
|
|
243
250
|
}
|
|
244
251
|
|
|
245
252
|
return traverseShadowRoots(element) || null;
|
|
@@ -21,10 +21,6 @@ export { ConsoleHandler };
|
|
|
21
21
|
* @memberOf Monster.Logging.Handler
|
|
22
22
|
*/
|
|
23
23
|
class ConsoleHandler extends Handler {
|
|
24
|
-
constructor() {
|
|
25
|
-
super();
|
|
26
|
-
}
|
|
27
|
-
|
|
28
24
|
/**
|
|
29
25
|
* This is the central log function. this method must be
|
|
30
26
|
* overwritten by derived handlers with their own logic.
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* License text available at https://www.gnu.org/licenses/agpl-3.0.en.html
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
export {parseBracketedKeyValueHash, createBracketedKeyValueHash}
|
|
8
|
+
export { parseBracketedKeyValueHash, createBracketedKeyValueHash };
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Parses a string containing bracketed key-value pairs and returns an object representing the parsed result.
|
|
@@ -49,8 +49,7 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
49
49
|
//const keyValueStack = [];
|
|
50
50
|
|
|
51
51
|
const trimmedHashString = hashString.trim();
|
|
52
|
-
const cleanedHashString = trimmedHashString.charAt(0) ===
|
|
53
|
-
|
|
52
|
+
const cleanedHashString = trimmedHashString.charAt(0) === "#" ? trimmedHashString.slice(1) : trimmedHashString;
|
|
54
53
|
|
|
55
54
|
//const selectors = (keyValueStack.length > 0) ? result[selectorStack[selectorStack.length - 1]] : result;
|
|
56
55
|
let currentSelector = "";
|
|
@@ -65,20 +64,20 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
65
64
|
}
|
|
66
65
|
}
|
|
67
66
|
|
|
68
|
-
let currentKey =
|
|
69
|
-
let currentValue =
|
|
67
|
+
let currentKey = "";
|
|
68
|
+
let currentValue = "";
|
|
70
69
|
let inKey = true;
|
|
71
70
|
let inValue = false;
|
|
72
71
|
let inQuotedValue = false;
|
|
73
72
|
let inSelector = true;
|
|
74
73
|
let escaped = false;
|
|
75
|
-
let quotedValueStartChar =
|
|
74
|
+
let quotedValueStartChar = "";
|
|
76
75
|
|
|
77
76
|
for (let i = 0; i < cleanedHashString.length; i++) {
|
|
78
77
|
const c = cleanedHashString[i];
|
|
79
78
|
const nextChar = cleanedHashString?.[i + 1];
|
|
80
79
|
|
|
81
|
-
if (c ===
|
|
80
|
+
if (c === "\\" && !escaped) {
|
|
82
81
|
escaped = true;
|
|
83
82
|
continue;
|
|
84
83
|
}
|
|
@@ -96,7 +95,6 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
96
95
|
}
|
|
97
96
|
|
|
98
97
|
if (inQuotedValue && quotedValueStartChar !== c) {
|
|
99
|
-
|
|
100
98
|
if (inSelector) {
|
|
101
99
|
currentSelector += c;
|
|
102
100
|
} else if (inKey) {
|
|
@@ -108,19 +106,18 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
108
106
|
continue;
|
|
109
107
|
}
|
|
110
108
|
|
|
111
|
-
if (c ===
|
|
109
|
+
if (c === ";" && inSelector) {
|
|
112
110
|
inSelector = true;
|
|
113
111
|
currentSelector = "";
|
|
114
112
|
continue;
|
|
115
113
|
}
|
|
116
114
|
|
|
117
|
-
|
|
118
|
-
if (inSelector === true && c !== '(') {
|
|
115
|
+
if (inSelector === true && c !== "(") {
|
|
119
116
|
currentSelector += c;
|
|
120
117
|
continue;
|
|
121
118
|
}
|
|
122
119
|
|
|
123
|
-
if (c ===
|
|
120
|
+
if (c === "(" && inSelector) {
|
|
124
121
|
inSelector = false;
|
|
125
122
|
inKey = true;
|
|
126
123
|
|
|
@@ -128,13 +125,12 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
128
125
|
continue;
|
|
129
126
|
}
|
|
130
127
|
|
|
131
|
-
if (inKey === true && c !==
|
|
128
|
+
if (inKey === true && c !== "=") {
|
|
132
129
|
currentKey += c;
|
|
133
130
|
continue;
|
|
134
131
|
}
|
|
135
132
|
|
|
136
|
-
if (c ===
|
|
137
|
-
|
|
133
|
+
if (c === "=" && inKey) {
|
|
138
134
|
inKey = false;
|
|
139
135
|
inValue = true;
|
|
140
136
|
|
|
@@ -160,7 +156,7 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
160
156
|
continue;
|
|
161
157
|
}
|
|
162
158
|
|
|
163
|
-
if (c ===
|
|
159
|
+
if (c === ",") {
|
|
164
160
|
inValue = false;
|
|
165
161
|
inKey = true;
|
|
166
162
|
const decodedCurrentValue = decodeURIComponent(currentValue);
|
|
@@ -170,7 +166,7 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
170
166
|
continue;
|
|
171
167
|
}
|
|
172
168
|
|
|
173
|
-
if (c ===
|
|
169
|
+
if (c === ")") {
|
|
174
170
|
inValue = false;
|
|
175
171
|
//inKey = true;
|
|
176
172
|
inSelector = true;
|
|
@@ -189,14 +185,11 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
189
185
|
}
|
|
190
186
|
}
|
|
191
187
|
|
|
192
|
-
|
|
193
188
|
if (inSelector) {
|
|
194
189
|
return selectors;
|
|
195
190
|
}
|
|
196
191
|
|
|
197
|
-
|
|
198
192
|
return {};
|
|
199
|
-
|
|
200
193
|
}
|
|
201
194
|
|
|
202
195
|
/**
|
|
@@ -208,38 +201,37 @@ function parseBracketedKeyValueHash(hashString) {
|
|
|
208
201
|
* @since 3.37.0
|
|
209
202
|
*/
|
|
210
203
|
function createBracketedKeyValueHash(object, addHashPrefix = true) {
|
|
211
|
-
|
|
212
204
|
if (!object) {
|
|
213
|
-
return addHashPrefix ?
|
|
205
|
+
return addHashPrefix ? "#" : "";
|
|
214
206
|
}
|
|
215
|
-
|
|
216
|
-
let hashString =
|
|
207
|
+
|
|
208
|
+
let hashString = "";
|
|
217
209
|
|
|
218
210
|
function encodeKeyValue(key, value) {
|
|
219
|
-
return encodeURIComponent(key) +
|
|
211
|
+
return encodeURIComponent(key) + "=" + encodeURIComponent(value);
|
|
220
212
|
}
|
|
221
213
|
|
|
222
214
|
for (const selector in object) {
|
|
223
215
|
if (object.hasOwnProperty(selector)) {
|
|
224
216
|
const keyValuePairs = object[selector];
|
|
225
217
|
let selectorString = selector;
|
|
226
|
-
let keyValueString =
|
|
218
|
+
let keyValueString = "";
|
|
227
219
|
|
|
228
220
|
for (const key in keyValuePairs) {
|
|
229
221
|
if (keyValuePairs.hasOwnProperty(key)) {
|
|
230
222
|
const value = keyValuePairs[key];
|
|
231
|
-
keyValueString += keyValueString.length === 0 ?
|
|
223
|
+
keyValueString += keyValueString.length === 0 ? "" : ",";
|
|
232
224
|
keyValueString += encodeKeyValue(key, value);
|
|
233
225
|
}
|
|
234
226
|
}
|
|
235
227
|
|
|
236
228
|
if (keyValueString.length > 0) {
|
|
237
|
-
selectorString +=
|
|
238
|
-
hashString += hashString.length === 0 ?
|
|
229
|
+
selectorString += "(" + keyValueString + ")";
|
|
230
|
+
hashString += hashString.length === 0 ? "" : ";";
|
|
239
231
|
hashString += selectorString;
|
|
240
232
|
}
|
|
241
233
|
}
|
|
242
234
|
}
|
|
243
235
|
|
|
244
|
-
return addHashPrefix ?
|
|
245
|
-
}
|
|
236
|
+
return addHashPrefix ? "#" + hashString : hashString;
|
|
237
|
+
}
|
package/source/text/util.mjs
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export { generateRangeComparisonExpression } from "./generate-range-comparison-expression.mjs"
|
|
2
|
-
|
|
1
|
+
export { generateRangeComparisonExpression } from "./generate-range-comparison-expression.mjs";
|
package/source/types/version.mjs
CHANGED
|
@@ -28,6 +28,9 @@ describe('Transformer', function () {
|
|
|
28
28
|
describe('Transformer.run()', function () {
|
|
29
29
|
|
|
30
30
|
[
|
|
31
|
+
['datetimeformat', "2023-02-04 08:02:01", "04.02.2023, 08:02:01"],
|
|
32
|
+
['datetimeformat:long:short', "2023-02-04 08:02:01","4. Februar 2023 um 08:02"],
|
|
33
|
+
['datetimeformat:short:short', "2023-02-04 08:02:01", "04.02.23, 08:02"],
|
|
31
34
|
['equals:a', "a", true],
|
|
32
35
|
['equals:a', "b", false],
|
|
33
36
|
['equals:3', 3, true],
|
|
@@ -22,6 +22,10 @@ describe('DOM', function () {
|
|
|
22
22
|
before(function (done) {
|
|
23
23
|
initJSDOM().then(() => {
|
|
24
24
|
|
|
25
|
+
import("element-internals-polyfill").then((m) => {
|
|
26
|
+
m.polyfill();
|
|
27
|
+
});
|
|
28
|
+
|
|
25
29
|
// jsdom does not support ElementInternals
|
|
26
30
|
jsdomFlag = navigator.userAgent.includes("jsdom");
|
|
27
31
|
|
|
@@ -72,8 +76,13 @@ describe('DOM', function () {
|
|
|
72
76
|
|
|
73
77
|
describe('create', function () {
|
|
74
78
|
it('should return custom-element object', function () {
|
|
75
|
-
|
|
76
|
-
|
|
79
|
+
try {
|
|
80
|
+
let d = new TestComponent();
|
|
81
|
+
} catch (e) {
|
|
82
|
+
expect(e).to.be.not.null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
expect(typeof d).is.equal('undefined');
|
|
77
86
|
});
|
|
78
87
|
});
|
|
79
88
|
|
|
@@ -84,7 +93,7 @@ describe('DOM', function () {
|
|
|
84
93
|
document.getElementById('test1').appendChild(d);
|
|
85
94
|
expect(document.getElementsByTagName('monster-customcontrol').length).is.equal(1);
|
|
86
95
|
// no data-monster-objectlink="Symbol(monsterUpdater)" because it has nothing to update
|
|
87
|
-
expect(document.getElementById('test1')).contain.html('<monster-customcontrol></monster-customcontrol>')
|
|
96
|
+
expect(document.getElementById('test1')).contain.html('<monster-customcontrol data-monster-error="Error: html is not set."></monster-customcontrol>')
|
|
88
97
|
});
|
|
89
98
|
});
|
|
90
99
|
|
|
@@ -129,11 +138,13 @@ describe('DOM', function () {
|
|
|
129
138
|
let d = document.createElement('monster-customcontrol');
|
|
130
139
|
form.appendChild(d);
|
|
131
140
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
}
|
|
141
|
+
expect(d.form).to.be.instanceof(HTMLFormElement)
|
|
142
|
+
|
|
143
|
+
// if (jsdomFlag) {
|
|
144
|
+
// expect(() => d.form).to.throw(Error);
|
|
145
|
+
// } else {
|
|
146
|
+
// expect(d.form).to.be.instanceof(HTMLFormElement)
|
|
147
|
+
// }
|
|
137
148
|
|
|
138
149
|
|
|
139
150
|
});
|
|
@@ -160,13 +171,7 @@ describe('DOM', function () {
|
|
|
160
171
|
|
|
161
172
|
let d = document.createElement('monster-customcontrol');
|
|
162
173
|
form.appendChild(d);
|
|
163
|
-
|
|
164
|
-
if (jsdomFlag) {
|
|
165
|
-
expect(() => d.setFormValue()).to.throw(Error);
|
|
166
|
-
} else {
|
|
167
|
-
|
|
168
|
-
}
|
|
169
|
-
|
|
174
|
+
|
|
170
175
|
});
|
|
171
176
|
|
|
172
177
|
it('name getter', function () {
|
|
@@ -191,11 +196,6 @@ describe('DOM', function () {
|
|
|
191
196
|
|
|
192
197
|
let d = document.createElement('monster-customcontrol');
|
|
193
198
|
form.appendChild(d);
|
|
194
|
-
if (jsdomFlag) {
|
|
195
|
-
expect(() => d.validity).to.throw(Error);
|
|
196
|
-
} else {
|
|
197
|
-
|
|
198
|
-
}
|
|
199
199
|
|
|
200
200
|
});
|
|
201
201
|
|
|
@@ -204,11 +204,6 @@ describe('DOM', function () {
|
|
|
204
204
|
let d = document.createElement('monster-customcontrol');
|
|
205
205
|
form.appendChild(d);
|
|
206
206
|
|
|
207
|
-
if (jsdomFlag) {
|
|
208
|
-
expect(() => d.validity).to.throw(Error);
|
|
209
|
-
} else {
|
|
210
|
-
|
|
211
|
-
}
|
|
212
207
|
|
|
213
208
|
});
|
|
214
209
|
|
|
@@ -217,11 +212,6 @@ describe('DOM', function () {
|
|
|
217
212
|
let d = document.createElement('monster-customcontrol');
|
|
218
213
|
form.appendChild(d);
|
|
219
214
|
|
|
220
|
-
if (jsdomFlag) {
|
|
221
|
-
expect(() => d.willValidate).to.throw(Error);
|
|
222
|
-
} else {
|
|
223
|
-
|
|
224
|
-
}
|
|
225
215
|
|
|
226
216
|
});
|
|
227
217
|
it('checkValidity()', function () {
|
|
@@ -229,11 +219,6 @@ describe('DOM', function () {
|
|
|
229
219
|
let d = document.createElement('monster-customcontrol');
|
|
230
220
|
form.appendChild(d);
|
|
231
221
|
|
|
232
|
-
if (jsdomFlag) {
|
|
233
|
-
expect(() => d.checkValidity()).to.throw(Error);
|
|
234
|
-
} else {
|
|
235
|
-
|
|
236
|
-
}
|
|
237
222
|
|
|
238
223
|
});
|
|
239
224
|
|
|
@@ -242,11 +227,6 @@ describe('DOM', function () {
|
|
|
242
227
|
let d = document.createElement('monster-customcontrol');
|
|
243
228
|
form.appendChild(d);
|
|
244
229
|
|
|
245
|
-
if (jsdomFlag) {
|
|
246
|
-
expect(() => d.reportValidity()).to.throw(Error);
|
|
247
|
-
} else {
|
|
248
|
-
|
|
249
|
-
}
|
|
250
230
|
|
|
251
231
|
});
|
|
252
232
|
|
|
@@ -255,11 +235,7 @@ describe('DOM', function () {
|
|
|
255
235
|
|
|
256
236
|
let d = document.createElement('monster-customcontrol');
|
|
257
237
|
form.appendChild(d);
|
|
258
|
-
|
|
259
|
-
expect(() => d.setValidity()).to.throw(Error);
|
|
260
|
-
} else {
|
|
261
|
-
expect(d.setValidity({'valueMissing': true}, "my message")).to.be.undefined;
|
|
262
|
-
}
|
|
238
|
+
expect(d.setValidity({'valueMissing': true}, "my message")).to.be.undefined;
|
|
263
239
|
|
|
264
240
|
});
|
|
265
241
|
|
|
@@ -239,7 +239,8 @@ describe('DOM', function () {
|
|
|
239
239
|
document.getElementById('test1').appendChild(d);
|
|
240
240
|
expect(document.getElementsByTagName('monster-testclass').length).is.equal(1);
|
|
241
241
|
// no data-monster-objectlink="Symbol(monsterUpdater)" because it has nothing to update
|
|
242
|
-
|
|
242
|
+
// but data-monster-error="Error: html is not set."
|
|
243
|
+
expect(document.getElementById('test1')).contain.html('<monster-testclass data-monster-error="Error: html is not set."></monster-testclass>');
|
|
243
244
|
});
|
|
244
245
|
});
|
|
245
246
|
|
package/test/cases/monster.mjs
CHANGED