happy-dom 9.18.3 → 9.19.1
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.
Potentially problematic release.
This version of happy-dom might be problematic. Click here for more details.
- package/README.md +15 -1
- package/lib/css/CSSParser.d.ts.map +1 -1
- package/lib/css/CSSParser.js +16 -6
- package/lib/css/CSSParser.js.map +1 -1
- package/lib/css/declaration/AbstractCSSStyleDeclaration.d.ts +2 -2
- package/lib/css/declaration/AbstractCSSStyleDeclaration.d.ts.map +1 -1
- package/lib/css/declaration/AbstractCSSStyleDeclaration.js +2 -2
- package/lib/css/declaration/AbstractCSSStyleDeclaration.js.map +1 -1
- package/lib/css/declaration/css-parser/CSSStyleDeclarationCSSParser.d.ts.map +1 -0
- package/lib/css/declaration/css-parser/CSSStyleDeclarationCSSParser.js.map +1 -0
- package/lib/css/declaration/{utilities → element-style}/CSSStyleDeclarationElementStyle.d.ts +14 -3
- package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.d.ts.map +1 -0
- package/lib/css/declaration/{utilities → element-style}/CSSStyleDeclarationElementStyle.js +102 -84
- package/lib/css/declaration/element-style/CSSStyleDeclarationElementStyle.js.map +1 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementDefaultCSS.d.ts.map +1 -0
- package/lib/css/declaration/{utilities → element-style/config}/CSSStyleDeclarationElementDefaultCSS.js +1 -1
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementDefaultCSS.js.map +1 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementInheritedProperties.d.ts.map +1 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementInheritedProperties.js.map +1 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementMeasurementProperties.d.ts +3 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementMeasurementProperties.d.ts.map +1 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementMeasurementProperties.js +44 -0
- package/lib/css/declaration/element-style/config/CSSStyleDeclarationElementMeasurementProperties.js.map +1 -0
- package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.d.ts +32 -0
- package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.d.ts.map +1 -0
- package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.js +70 -0
- package/lib/css/declaration/measurement-converter/CSSMeasurementConverter.js.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertyGetParser.d.ts +9 -0
- package/lib/css/declaration/property-manager/CSSStyleDeclarationPropertyGetParser.d.ts.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertyGetParser.js +38 -0
- package/lib/css/declaration/property-manager/CSSStyleDeclarationPropertyGetParser.js.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertyManager.d.ts +1 -1
- package/lib/css/declaration/property-manager/CSSStyleDeclarationPropertyManager.d.ts.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertyManager.js +32 -1
- package/lib/css/declaration/property-manager/CSSStyleDeclarationPropertyManager.js.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertySetParser.d.ts +90 -0
- package/lib/css/declaration/property-manager/CSSStyleDeclarationPropertySetParser.d.ts.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertySetParser.js +171 -25
- package/lib/css/declaration/property-manager/CSSStyleDeclarationPropertySetParser.js.map +1 -0
- package/lib/css/declaration/property-manager/CSSStyleDeclarationValueParser.d.ts.map +1 -0
- package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationValueParser.js +1 -1
- package/lib/css/declaration/property-manager/CSSStyleDeclarationValueParser.js.map +1 -0
- package/lib/css/declaration/property-manager/ICSSStyleDeclarationPropertyValue.d.ts +5 -0
- package/lib/css/declaration/property-manager/ICSSStyleDeclarationPropertyValue.d.ts.map +1 -0
- package/lib/css/declaration/property-manager/ICSSStyleDeclarationPropertyValue.js.map +1 -0
- package/lib/match-media/IMediaQueryRange.d.ts +12 -0
- package/lib/match-media/IMediaQueryRange.d.ts.map +1 -0
- package/lib/match-media/IMediaQueryRange.js +3 -0
- package/lib/match-media/IMediaQueryRange.js.map +1 -0
- package/lib/match-media/IMediaQueryRule.d.ts +5 -0
- package/lib/match-media/IMediaQueryRule.d.ts.map +1 -0
- package/lib/match-media/IMediaQueryRule.js +3 -0
- package/lib/match-media/IMediaQueryRule.js.map +1 -0
- package/lib/match-media/MediaQueryItem.d.ts +77 -0
- package/lib/match-media/MediaQueryItem.d.ts.map +1 -0
- package/lib/match-media/MediaQueryItem.js +283 -0
- package/lib/match-media/MediaQueryItem.js.map +1 -0
- package/lib/match-media/MediaQueryList.d.ts +18 -4
- package/lib/match-media/MediaQueryList.d.ts.map +1 -1
- package/lib/match-media/MediaQueryList.js +37 -21
- package/lib/match-media/MediaQueryList.js.map +1 -1
- package/lib/match-media/MediaQueryParser.d.ts +22 -0
- package/lib/match-media/MediaQueryParser.d.ts.map +1 -0
- package/lib/match-media/MediaQueryParser.js +112 -0
- package/lib/match-media/MediaQueryParser.js.map +1 -0
- package/lib/match-media/MediaQueryTypeEnum.d.ts +7 -0
- package/lib/match-media/MediaQueryTypeEnum.d.ts.map +1 -0
- package/lib/match-media/MediaQueryTypeEnum.js +10 -0
- package/lib/match-media/MediaQueryTypeEnum.js.map +1 -0
- package/lib/nodes/element/Element.d.ts +2 -0
- package/lib/nodes/element/Element.d.ts.map +1 -1
- package/lib/nodes/element/Element.js +1 -0
- package/lib/nodes/element/Element.js.map +1 -1
- package/lib/window/IHappyDOMOptions.d.ts +4 -0
- package/lib/window/IHappyDOMOptions.d.ts.map +1 -1
- package/lib/window/IHappyDOMSettings.d.ts +4 -0
- package/lib/window/IHappyDOMSettings.d.ts.map +1 -1
- package/lib/window/Window.d.ts +4 -0
- package/lib/window/Window.d.ts.map +1 -1
- package/lib/window/Window.js +16 -4
- package/lib/window/Window.js.map +1 -1
- package/lib/xml-http-request/utilities/XMLHttpRequestURLUtility.d.ts.map +1 -1
- package/lib/xml-http-request/utilities/XMLHttpRequestURLUtility.js +1 -0
- package/lib/xml-http-request/utilities/XMLHttpRequestURLUtility.js.map +1 -1
- package/package.json +1 -1
- package/src/css/CSSParser.ts +21 -6
- package/src/css/declaration/AbstractCSSStyleDeclaration.ts +2 -2
- package/src/css/declaration/{utilities → element-style}/CSSStyleDeclarationElementStyle.ts +117 -94
- package/src/css/declaration/{utilities → element-style/config}/CSSStyleDeclarationElementDefaultCSS.ts +1 -1
- package/src/css/declaration/element-style/config/CSSStyleDeclarationElementMeasurementProperties.ts +41 -0
- package/src/css/declaration/measurement-converter/CSSMeasurementConverter.ts +81 -0
- package/src/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertyGetParser.ts +51 -0
- package/src/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertyManager.ts +34 -2
- package/src/css/declaration/{utilities → property-manager}/CSSStyleDeclarationPropertySetParser.ts +235 -20
- package/src/css/declaration/{utilities → property-manager}/CSSStyleDeclarationValueParser.ts +2 -1
- package/src/css/declaration/{utilities → property-manager}/ICSSStyleDeclarationPropertyValue.ts +2 -2
- package/src/match-media/IMediaQueryRange.ts +5 -0
- package/src/match-media/IMediaQueryRule.ts +4 -0
- package/src/match-media/MediaQueryItem.ts +336 -0
- package/src/match-media/MediaQueryList.ts +43 -20
- package/src/match-media/MediaQueryParser.ts +113 -0
- package/src/match-media/MediaQueryTypeEnum.ts +7 -0
- package/src/nodes/element/Element.ts +2 -0
- package/src/window/IHappyDOMOptions.ts +4 -0
- package/src/window/IHappyDOMSettings.ts +4 -0
- package/src/window/Window.ts +16 -4
- package/src/xml-http-request/utilities/XMLHttpRequestURLUtility.ts +1 -0
- package/lib/css/declaration/utilities/CSSStyleDeclarationCSSParser.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationCSSParser.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationElementDefaultCSS.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationElementDefaultCSS.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationElementInheritedProperties.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationElementInheritedProperties.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationElementStyle.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationElementStyle.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyGetParser.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyGetParser.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyManager.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertyManager.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertySetParser.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationPropertySetParser.js.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationValueParser.d.ts.map +0 -1
- package/lib/css/declaration/utilities/CSSStyleDeclarationValueParser.js.map +0 -1
- package/lib/css/declaration/utilities/ICSSStyleDeclarationPropertyValue.d.ts +0 -5
- package/lib/css/declaration/utilities/ICSSStyleDeclarationPropertyValue.d.ts.map +0 -1
- package/lib/css/declaration/utilities/ICSSStyleDeclarationPropertyValue.js.map +0 -1
- /package/lib/css/declaration/{utilities → css-parser}/CSSStyleDeclarationCSSParser.d.ts +0 -0
- /package/lib/css/declaration/{utilities → css-parser}/CSSStyleDeclarationCSSParser.js +0 -0
- /package/lib/css/declaration/{utilities → element-style/config}/CSSStyleDeclarationElementDefaultCSS.d.ts +0 -0
- /package/lib/css/declaration/{utilities → element-style/config}/CSSStyleDeclarationElementInheritedProperties.d.ts +0 -0
- /package/lib/css/declaration/{utilities → element-style/config}/CSSStyleDeclarationElementInheritedProperties.js +0 -0
- /package/lib/css/declaration/{utilities → property-manager}/CSSStyleDeclarationValueParser.d.ts +0 -0
- /package/lib/css/declaration/{utilities → property-manager}/ICSSStyleDeclarationPropertyValue.js +0 -0
- /package/src/css/declaration/{utilities → css-parser}/CSSStyleDeclarationCSSParser.ts +0 -0
- /package/src/css/declaration/{utilities → element-style/config}/CSSStyleDeclarationElementInheritedProperties.ts +0 -0
@@ -0,0 +1,283 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const CSSMeasurementConverter_1 = __importDefault(require("../css/declaration/measurement-converter/CSSMeasurementConverter"));
|
7
|
+
const MediaQueryTypeEnum_1 = __importDefault(require("./MediaQueryTypeEnum"));
|
8
|
+
/**
|
9
|
+
* Media query this.
|
10
|
+
*/
|
11
|
+
class MediaQueryItem {
|
12
|
+
/**
|
13
|
+
* Constructor.
|
14
|
+
*
|
15
|
+
* @param options Options.
|
16
|
+
* @param options.ownerWindow Owner window.
|
17
|
+
* @param [options.rootFontSize] Root font size.
|
18
|
+
* @param [options.mediaTypes] Media types.
|
19
|
+
* @param [options.not] Not.
|
20
|
+
* @param [options.rules] Rules.
|
21
|
+
* @param [options.ranges] Ranges.
|
22
|
+
*/
|
23
|
+
constructor(options) {
|
24
|
+
this.rootFontSize = null;
|
25
|
+
this.ownerWindow = options.ownerWindow;
|
26
|
+
this.rootFontSize = options.rootFontSize || null;
|
27
|
+
this.mediaTypes = options.mediaTypes || [];
|
28
|
+
this.not = options.not || false;
|
29
|
+
this.rules = options.rules || [];
|
30
|
+
this.ranges = options.ranges || [];
|
31
|
+
}
|
32
|
+
/**
|
33
|
+
* Returns media string.
|
34
|
+
*/
|
35
|
+
toString() {
|
36
|
+
return `${this.not ? 'not ' : ''}${this.mediaTypes.join(', ')}${(this.not || this.mediaTypes.length > 0) && !!this.ranges.length ? ' and ' : ''}${this.ranges
|
37
|
+
.map((range) => `(${range.before ? `${range.before.value} ${range.before.operator} ` : ''}${range.type}${range.after ? ` ${range.after.operator} ${range.after.value}` : ''})`)
|
38
|
+
.join(' and ')}${(this.not || this.mediaTypes.length > 0) && !!this.rules.length ? ' and ' : ''}${this.rules
|
39
|
+
.map((rule) => (rule.value ? `(${rule.name}: ${rule.value})` : `(${rule.name})`))
|
40
|
+
.join(' and ')}`;
|
41
|
+
}
|
42
|
+
/**
|
43
|
+
* Returns "true" if the item matches.
|
44
|
+
*/
|
45
|
+
matches() {
|
46
|
+
return this.not ? !this.matchesAll() : this.matchesAll();
|
47
|
+
}
|
48
|
+
/**
|
49
|
+
* Returns "true" if all matches.
|
50
|
+
*
|
51
|
+
* @returns "true" if all matches.
|
52
|
+
*/
|
53
|
+
matchesAll() {
|
54
|
+
if (!!this.mediaTypes.length) {
|
55
|
+
let isMediaTypeMatch = false;
|
56
|
+
for (const mediaType of this.mediaTypes) {
|
57
|
+
if (this.matchesMediaType(mediaType)) {
|
58
|
+
isMediaTypeMatch = true;
|
59
|
+
break;
|
60
|
+
}
|
61
|
+
}
|
62
|
+
if (!isMediaTypeMatch) {
|
63
|
+
return false;
|
64
|
+
}
|
65
|
+
}
|
66
|
+
for (const rule of this.rules) {
|
67
|
+
if (!this.matchesRule(rule)) {
|
68
|
+
return false;
|
69
|
+
}
|
70
|
+
}
|
71
|
+
for (const range of this.ranges) {
|
72
|
+
if (!this.matchesRange(range)) {
|
73
|
+
return false;
|
74
|
+
}
|
75
|
+
}
|
76
|
+
return true;
|
77
|
+
}
|
78
|
+
/**
|
79
|
+
* Returns "true" if the mediaType matches.
|
80
|
+
*
|
81
|
+
* @param mediaType Media type.
|
82
|
+
* @returns "true" if the mediaType matches.
|
83
|
+
*/
|
84
|
+
matchesMediaType(mediaType) {
|
85
|
+
if (mediaType === MediaQueryTypeEnum_1.default.all) {
|
86
|
+
return true;
|
87
|
+
}
|
88
|
+
return mediaType === this.ownerWindow.happyDOM.settings.device.mediaType;
|
89
|
+
}
|
90
|
+
/**
|
91
|
+
* Returns "true" if the range matches.
|
92
|
+
*
|
93
|
+
* @param range Range.
|
94
|
+
* @returns "true" if the range matches.
|
95
|
+
*/
|
96
|
+
matchesRange(range) {
|
97
|
+
const windowSize = range.type === 'width' ? this.ownerWindow.innerWidth : this.ownerWindow.innerHeight;
|
98
|
+
if (range.before) {
|
99
|
+
const beforeValue = this.toPixels(range.before.value);
|
100
|
+
if (beforeValue === null) {
|
101
|
+
return false;
|
102
|
+
}
|
103
|
+
switch (range.before.operator) {
|
104
|
+
case '<':
|
105
|
+
if (beforeValue >= windowSize) {
|
106
|
+
return false;
|
107
|
+
}
|
108
|
+
break;
|
109
|
+
case '<=':
|
110
|
+
if (beforeValue > windowSize) {
|
111
|
+
return false;
|
112
|
+
}
|
113
|
+
break;
|
114
|
+
case '>':
|
115
|
+
if (beforeValue <= windowSize) {
|
116
|
+
return false;
|
117
|
+
}
|
118
|
+
break;
|
119
|
+
case '>=':
|
120
|
+
if (beforeValue < windowSize) {
|
121
|
+
return false;
|
122
|
+
}
|
123
|
+
break;
|
124
|
+
}
|
125
|
+
}
|
126
|
+
if (range.after) {
|
127
|
+
const afterValue = this.toPixels(range.after.value);
|
128
|
+
if (afterValue === null) {
|
129
|
+
return false;
|
130
|
+
}
|
131
|
+
switch (range.after.operator) {
|
132
|
+
case '<':
|
133
|
+
if (windowSize >= afterValue) {
|
134
|
+
return false;
|
135
|
+
}
|
136
|
+
break;
|
137
|
+
case '<=':
|
138
|
+
if (windowSize > afterValue) {
|
139
|
+
return false;
|
140
|
+
}
|
141
|
+
break;
|
142
|
+
case '>':
|
143
|
+
if (windowSize <= afterValue) {
|
144
|
+
return false;
|
145
|
+
}
|
146
|
+
break;
|
147
|
+
case '>=':
|
148
|
+
if (windowSize < afterValue) {
|
149
|
+
return false;
|
150
|
+
}
|
151
|
+
break;
|
152
|
+
}
|
153
|
+
}
|
154
|
+
return true;
|
155
|
+
}
|
156
|
+
/**
|
157
|
+
* Returns "true" if the rule matches.
|
158
|
+
*
|
159
|
+
* @param rule Rule.
|
160
|
+
* @returns "true" if the rule matches.
|
161
|
+
*/
|
162
|
+
matchesRule(rule) {
|
163
|
+
if (!rule.value) {
|
164
|
+
switch (rule.name) {
|
165
|
+
case 'min-width':
|
166
|
+
case 'max-width':
|
167
|
+
case 'min-height':
|
168
|
+
case 'max-height':
|
169
|
+
case 'width':
|
170
|
+
case 'height':
|
171
|
+
case 'orientation':
|
172
|
+
case 'prefers-color-scheme':
|
173
|
+
case 'hover':
|
174
|
+
case 'any-hover':
|
175
|
+
case 'any-pointer':
|
176
|
+
case 'pointer':
|
177
|
+
case 'display-mode':
|
178
|
+
case 'min-aspect-ratio':
|
179
|
+
case 'max-aspect-ratio':
|
180
|
+
case 'aspect-ratio':
|
181
|
+
return true;
|
182
|
+
}
|
183
|
+
return false;
|
184
|
+
}
|
185
|
+
switch (rule.name) {
|
186
|
+
case 'min-width':
|
187
|
+
const minWidth = this.toPixels(rule.value);
|
188
|
+
return minWidth !== null && this.ownerWindow.innerWidth >= minWidth;
|
189
|
+
case 'max-width':
|
190
|
+
const maxWidth = this.toPixels(rule.value);
|
191
|
+
return maxWidth !== null && this.ownerWindow.innerWidth <= maxWidth;
|
192
|
+
case 'min-height':
|
193
|
+
const minHeight = this.toPixels(rule.value);
|
194
|
+
return minHeight !== null && this.ownerWindow.innerHeight >= minHeight;
|
195
|
+
case 'max-height':
|
196
|
+
const maxHeight = this.toPixels(rule.value);
|
197
|
+
return maxHeight !== null && this.ownerWindow.innerHeight <= maxHeight;
|
198
|
+
case 'width':
|
199
|
+
const width = this.toPixels(rule.value);
|
200
|
+
return width !== null && this.ownerWindow.innerWidth === width;
|
201
|
+
case 'height':
|
202
|
+
const height = this.toPixels(rule.value);
|
203
|
+
return height !== null && this.ownerWindow.innerHeight === height;
|
204
|
+
case 'orientation':
|
205
|
+
return rule.value === 'landscape'
|
206
|
+
? this.ownerWindow.innerWidth > this.ownerWindow.innerHeight
|
207
|
+
: this.ownerWindow.innerWidth < this.ownerWindow.innerHeight;
|
208
|
+
case 'prefers-color-scheme':
|
209
|
+
return rule.value === this.ownerWindow.happyDOM.settings.device.prefersColorScheme;
|
210
|
+
case 'any-hover':
|
211
|
+
case 'hover':
|
212
|
+
if (rule.value === 'none') {
|
213
|
+
return this.ownerWindow.navigator.maxTouchPoints > 0;
|
214
|
+
}
|
215
|
+
if (rule.value === 'hover') {
|
216
|
+
return this.ownerWindow.navigator.maxTouchPoints === 0;
|
217
|
+
}
|
218
|
+
return false;
|
219
|
+
case 'any-pointer':
|
220
|
+
case 'pointer':
|
221
|
+
if (rule.value === 'none') {
|
222
|
+
return false;
|
223
|
+
}
|
224
|
+
if (rule.value === 'coarse') {
|
225
|
+
return this.ownerWindow.navigator.maxTouchPoints > 0;
|
226
|
+
}
|
227
|
+
if (rule.value === 'fine') {
|
228
|
+
return this.ownerWindow.navigator.maxTouchPoints === 0;
|
229
|
+
}
|
230
|
+
return false;
|
231
|
+
case 'display-mode':
|
232
|
+
return rule.value === 'browser';
|
233
|
+
case 'min-aspect-ratio':
|
234
|
+
case 'max-aspect-ratio':
|
235
|
+
case 'aspect-ratio':
|
236
|
+
const aspectRatio = rule.value.split('/');
|
237
|
+
const aspectRatioWidth = parseInt(aspectRatio[0], 10);
|
238
|
+
const aspectRatioHeight = parseInt(aspectRatio[1], 10);
|
239
|
+
if (isNaN(aspectRatioWidth) || isNaN(aspectRatioHeight)) {
|
240
|
+
return false;
|
241
|
+
}
|
242
|
+
switch (rule.name) {
|
243
|
+
case 'min-aspect-ratio':
|
244
|
+
return (aspectRatioWidth / aspectRatioHeight <=
|
245
|
+
this.ownerWindow.innerWidth / this.ownerWindow.innerHeight);
|
246
|
+
case 'max-aspect-ratio':
|
247
|
+
return (aspectRatioWidth / aspectRatioHeight >=
|
248
|
+
this.ownerWindow.innerWidth / this.ownerWindow.innerHeight);
|
249
|
+
case 'aspect-ratio':
|
250
|
+
return (aspectRatioWidth / aspectRatioHeight ===
|
251
|
+
this.ownerWindow.innerWidth / this.ownerWindow.innerHeight);
|
252
|
+
}
|
253
|
+
}
|
254
|
+
return false;
|
255
|
+
}
|
256
|
+
/**
|
257
|
+
* Convert to pixels.
|
258
|
+
*
|
259
|
+
* @param value Value.
|
260
|
+
* @returns Value in pixels.
|
261
|
+
*/
|
262
|
+
toPixels(value) {
|
263
|
+
if (value.endsWith('em')) {
|
264
|
+
this.rootFontSize =
|
265
|
+
this.rootFontSize ||
|
266
|
+
parseFloat(this.ownerWindow.getComputedStyle(this.ownerWindow.document.documentElement).fontSize);
|
267
|
+
return CSSMeasurementConverter_1.default.toPixels({
|
268
|
+
ownerWindow: this.ownerWindow,
|
269
|
+
value,
|
270
|
+
rootFontSize: this.rootFontSize,
|
271
|
+
parentFontSize: this.rootFontSize
|
272
|
+
});
|
273
|
+
}
|
274
|
+
return CSSMeasurementConverter_1.default.toPixels({
|
275
|
+
ownerWindow: this.ownerWindow,
|
276
|
+
value,
|
277
|
+
rootFontSize: 16,
|
278
|
+
parentFontSize: 16
|
279
|
+
});
|
280
|
+
}
|
281
|
+
}
|
282
|
+
exports.default = MediaQueryItem;
|
283
|
+
//# sourceMappingURL=MediaQueryItem.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MediaQueryItem.js","sourceRoot":"","sources":["../../src/match-media/MediaQueryItem.ts"],"names":[],"mappings":";;;;;AAAA,+HAAuG;AAIvG,8EAAsD;AAEtD;;GAEG;AACH,MAAqB,cAAc;IAQlC;;;;;;;;;;OAUG;IACH,YAAY,OAOX;QArBO,iBAAY,GAA2B,IAAI,CAAC;QAsBnD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;QACjD,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC;QAChC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACI,QAAQ;QACd,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAC5D,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAC9E,GAAG,IAAI,CAAC,MAAM;aACZ,GAAG,CACH,CAAC,KAAK,EAAE,EAAE,CACT,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,IAAI,GACrF,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EACjE,GAAG,CACJ;aACA,IAAI,CAAC,OAAO,CAAC,GACd,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAC7E,GAAG,IAAI,CAAC,KAAK;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;aAChF,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IACnB,CAAC;IAED;;OAEG;IACI,OAAO;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1D,CAAC;IAED;;;;OAIG;IACK,UAAU;QACjB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;YAC7B,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE;gBACxC,IAAI,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE;oBACrC,gBAAgB,GAAG,IAAI,CAAC;oBACxB,MAAM;iBACN;aACD;YAED,IAAI,CAAC,gBAAgB,EAAE;gBACtB,OAAO,KAAK,CAAC;aACb;SACD;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;gBAC5B,OAAO,KAAK,CAAC;aACb;SACD;QAED,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAChC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO,KAAK,CAAC;aACb;SACD;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACK,gBAAgB,CAAC,SAA6B;QACrD,IAAI,SAAS,KAAK,4BAAkB,CAAC,GAAG,EAAE;YACzC,OAAO,IAAI,CAAC;SACZ;QACD,OAAO,SAAS,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC;IAC1E,CAAC;IAED;;;;;OAKG;IACK,YAAY,CAAC,KAAuB;QAC3C,MAAM,UAAU,GACf,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;QAErF,IAAI,KAAK,CAAC,MAAM,EAAE;YACjB,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEtD,IAAI,WAAW,KAAK,IAAI,EAAE;gBACzB,OAAO,KAAK,CAAC;aACb;YAED,QAAQ,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC9B,KAAK,GAAG;oBACP,IAAI,WAAW,IAAI,UAAU,EAAE;wBAC9B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;gBACP,KAAK,IAAI;oBACR,IAAI,WAAW,GAAG,UAAU,EAAE;wBAC7B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;gBACP,KAAK,GAAG;oBACP,IAAI,WAAW,IAAI,UAAU,EAAE;wBAC9B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;gBACP,KAAK,IAAI;oBACR,IAAI,WAAW,GAAG,UAAU,EAAE;wBAC7B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;aACP;SACD;QAED,IAAI,KAAK,CAAC,KAAK,EAAE;YAChB,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEpD,IAAI,UAAU,KAAK,IAAI,EAAE;gBACxB,OAAO,KAAK,CAAC;aACb;YAED,QAAQ,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAC7B,KAAK,GAAG;oBACP,IAAI,UAAU,IAAI,UAAU,EAAE;wBAC7B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;gBACP,KAAK,IAAI;oBACR,IAAI,UAAU,GAAG,UAAU,EAAE;wBAC5B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;gBACP,KAAK,GAAG;oBACP,IAAI,UAAU,IAAI,UAAU,EAAE;wBAC7B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;gBACP,KAAK,IAAI;oBACR,IAAI,UAAU,GAAG,UAAU,EAAE;wBAC5B,OAAO,KAAK,CAAC;qBACb;oBACD,MAAM;aACP;SACD;QAED,OAAO,IAAI,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACK,WAAW,CAAC,IAAqB;QACxC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAChB,QAAQ,IAAI,CAAC,IAAI,EAAE;gBAClB,KAAK,WAAW,CAAC;gBACjB,KAAK,WAAW,CAAC;gBACjB,KAAK,YAAY,CAAC;gBAClB,KAAK,YAAY,CAAC;gBAClB,KAAK,OAAO,CAAC;gBACb,KAAK,QAAQ,CAAC;gBACd,KAAK,aAAa,CAAC;gBACnB,KAAK,sBAAsB,CAAC;gBAC5B,KAAK,OAAO,CAAC;gBACb,KAAK,WAAW,CAAC;gBACjB,KAAK,aAAa,CAAC;gBACnB,KAAK,SAAS,CAAC;gBACf,KAAK,cAAc,CAAC;gBACpB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,kBAAkB,CAAC;gBACxB,KAAK,cAAc;oBAClB,OAAO,IAAI,CAAC;aACb;YACD,OAAO,KAAK,CAAC;SACb;QAED,QAAQ,IAAI,CAAC,IAAI,EAAE;YAClB,KAAK,WAAW;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,OAAO,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,QAAQ,CAAC;YACrE,KAAK,WAAW;gBACf,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3C,OAAO,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,QAAQ,CAAC;YACrE,KAAK,YAAY;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,OAAO,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,SAAS,CAAC;YACxE,KAAK,YAAY;gBAChB,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5C,OAAO,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,IAAI,SAAS,CAAC;YACxE,KAAK,OAAO;gBACX,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxC,OAAO,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,KAAK,KAAK,CAAC;YAChE,KAAK,QAAQ;gBACZ,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC,WAAW,KAAK,MAAM,CAAC;YACnE,KAAK,aAAa;gBACjB,OAAO,IAAI,CAAC,KAAK,KAAK,WAAW;oBAChC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW;oBAC5D,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC;YAC/D,KAAK,sBAAsB;gBAC1B,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,kBAAkB,CAAC;YACpF,KAAK,WAAW,CAAC;YACjB,KAAK,OAAO;gBACX,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;oBAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;iBACrD;gBACD,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,EAAE;oBAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,KAAK,CAAC,CAAC;iBACvD;gBACD,OAAO,KAAK,CAAC;YACd,KAAK,aAAa,CAAC;YACnB,KAAK,SAAS;gBACb,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;oBAC1B,OAAO,KAAK,CAAC;iBACb;gBAED,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE;oBAC5B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,CAAC;iBACrD;gBAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,EAAE;oBAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,cAAc,KAAK,CAAC,CAAC;iBACvD;gBAED,OAAO,KAAK,CAAC;YACd,KAAK,cAAc;gBAClB,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS,CAAC;YACjC,KAAK,kBAAkB,CAAC;YACxB,KAAK,kBAAkB,CAAC;YACxB,KAAK,cAAc;gBAClB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC1C,MAAM,gBAAgB,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACtD,MAAM,iBAAiB,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAEvD,IAAI,KAAK,CAAC,gBAAgB,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE;oBACxD,OAAO,KAAK,CAAC;iBACb;gBAED,QAAQ,IAAI,CAAC,IAAI,EAAE;oBAClB,KAAK,kBAAkB;wBACtB,OAAO,CACN,gBAAgB,GAAG,iBAAiB;4BACpC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAC1D,CAAC;oBACH,KAAK,kBAAkB;wBACtB,OAAO,CACN,gBAAgB,GAAG,iBAAiB;4BACpC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAC1D,CAAC;oBACH,KAAK,cAAc;wBAClB,OAAO,CACN,gBAAgB,GAAG,iBAAiB;4BACpC,IAAI,CAAC,WAAW,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAC1D,CAAC;iBACH;SACF;QAED,OAAO,KAAK,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACK,QAAQ,CAAC,KAAa;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;YACzB,IAAI,CAAC,YAAY;gBAChB,IAAI,CAAC,YAAY;oBACjB,UAAU,CACT,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,QAAQ,CACrF,CAAC;YACH,OAAO,iCAAuB,CAAC,QAAQ,CAAC;gBACvC,WAAW,EAAE,IAAI,CAAC,WAAW;gBAC7B,KAAK;gBACL,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,cAAc,EAAE,IAAI,CAAC,YAAY;aACjC,CAAC,CAAC;SACH;QACD,OAAO,iCAAuB,CAAC,QAAQ,CAAC;YACvC,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK;YACL,YAAY,EAAE,EAAE;YAChB,cAAc,EAAE,EAAE;SAClB,CAAC,CAAC;IACJ,CAAC;CACD;AAtUD,iCAsUC"}
|
@@ -9,16 +9,30 @@ import IEventListener from '../event/IEventListener';
|
|
9
9
|
* https://developer.mozilla.org/en-US/docs/Web/API/MediaQueryList.
|
10
10
|
*/
|
11
11
|
export default class MediaQueryList extends EventTarget {
|
12
|
-
readonly media: string;
|
13
12
|
onchange: (event: Event) => void;
|
14
13
|
private _ownerWindow;
|
14
|
+
private _items;
|
15
|
+
private _media;
|
16
|
+
private _rootFontSize;
|
15
17
|
/**
|
16
18
|
* Constructor.
|
17
19
|
*
|
18
|
-
* @param
|
19
|
-
* @param
|
20
|
+
* @param options Options.
|
21
|
+
* @param options.ownerWindow Owner window.
|
22
|
+
* @param options.media Media.
|
23
|
+
* @param [options.rootFontSize] Root font size.
|
20
24
|
*/
|
21
|
-
constructor(
|
25
|
+
constructor(options: {
|
26
|
+
ownerWindow: IWindow;
|
27
|
+
media: string;
|
28
|
+
rootFontSize?: string | number;
|
29
|
+
});
|
30
|
+
/**
|
31
|
+
* Returns media.
|
32
|
+
*
|
33
|
+
* @returns Media.
|
34
|
+
*/
|
35
|
+
get media(): string;
|
22
36
|
/**
|
23
37
|
* Returns "true" if the document matches.
|
24
38
|
*
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MediaQueryList.d.ts","sourceRoot":"","sources":["../../src/match-media/MediaQueryList.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,cAAc,MAAM,yBAAyB,CAAC;
|
1
|
+
{"version":3,"file":"MediaQueryList.d.ts","sourceRoot":"","sources":["../../src/match-media/MediaQueryList.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAC/C,OAAO,KAAK,MAAM,gBAAgB,CAAC;AACnC,OAAO,OAAO,MAAM,mBAAmB,CAAC;AACxC,OAAO,cAAc,MAAM,yBAAyB,CAAC;AAKrD;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,WAAW;IAC/C,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAQ;IAC/C,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAgC;IAErD;;;;;;;OAOG;gBACS,OAAO,EAAE;QAAE,WAAW,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE;IAO5F;;;;OAIG;IACH,IAAW,KAAK,IAAI,MAAM,CAUzB;IAED;;;;OAIG;IACH,IAAW,OAAO,IAAI,OAAO,CAgB5B;IAED;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI1D;;;;;OAKG;IACI,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAI7D;;OAEG;IACI,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GAAG,IAAI;IAgBhG;;OAEG;IACI,mBAAmB,CACzB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,cAAc,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC,GACjD,IAAI;CAMP"}
|
@@ -5,7 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
6
|
const EventTarget_1 = __importDefault(require("../event/EventTarget"));
|
7
7
|
const MediaQueryListEvent_1 = __importDefault(require("../event/events/MediaQueryListEvent"));
|
8
|
-
const
|
8
|
+
const MediaQueryParser_1 = __importDefault(require("./MediaQueryParser"));
|
9
9
|
/**
|
10
10
|
* Media Query List.
|
11
11
|
*
|
@@ -16,15 +16,34 @@ class MediaQueryList extends EventTarget_1.default {
|
|
16
16
|
/**
|
17
17
|
* Constructor.
|
18
18
|
*
|
19
|
-
* @param
|
20
|
-
* @param
|
19
|
+
* @param options Options.
|
20
|
+
* @param options.ownerWindow Owner window.
|
21
|
+
* @param options.media Media.
|
22
|
+
* @param [options.rootFontSize] Root font size.
|
21
23
|
*/
|
22
|
-
constructor(
|
24
|
+
constructor(options) {
|
23
25
|
super();
|
24
|
-
this.media = '';
|
25
26
|
this.onchange = null;
|
26
|
-
this.
|
27
|
-
this.
|
27
|
+
this._items = null;
|
28
|
+
this._rootFontSize = null;
|
29
|
+
this._ownerWindow = options.ownerWindow;
|
30
|
+
this._media = options.media;
|
31
|
+
this._rootFontSize = options.rootFontSize || null;
|
32
|
+
}
|
33
|
+
/**
|
34
|
+
* Returns media.
|
35
|
+
*
|
36
|
+
* @returns Media.
|
37
|
+
*/
|
38
|
+
get media() {
|
39
|
+
this._items =
|
40
|
+
this._items ||
|
41
|
+
MediaQueryParser_1.default.parse({
|
42
|
+
ownerWindow: this._ownerWindow,
|
43
|
+
mediaQuery: this._media,
|
44
|
+
rootFontSize: this._rootFontSize
|
45
|
+
});
|
46
|
+
return this._items.map((item) => item.toString()).join(', ');
|
28
47
|
}
|
29
48
|
/**
|
30
49
|
* Returns "true" if the document matches.
|
@@ -32,22 +51,19 @@ class MediaQueryList extends EventTarget_1.default {
|
|
32
51
|
* @returns Matches.
|
33
52
|
*/
|
34
53
|
get matches() {
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
return
|
45
|
-
}
|
46
|
-
else if (match[4]) {
|
47
|
-
return this._ownerWindow.innerHeight <= parseInt(match[4]);
|
54
|
+
this._items =
|
55
|
+
this._items ||
|
56
|
+
MediaQueryParser_1.default.parse({
|
57
|
+
ownerWindow: this._ownerWindow,
|
58
|
+
mediaQuery: this._media,
|
59
|
+
rootFontSize: this._rootFontSize
|
60
|
+
});
|
61
|
+
for (const item of this._items) {
|
62
|
+
if (!item.matches()) {
|
63
|
+
return false;
|
48
64
|
}
|
49
65
|
}
|
50
|
-
return
|
66
|
+
return true;
|
51
67
|
}
|
52
68
|
/**
|
53
69
|
* Adds a listener.
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"MediaQueryList.js","sourceRoot":"","sources":["../../src/match-media/MediaQueryList.ts"],"names":[],"mappings":";;;;;AAAA,uEAA+C;AAI/C,8FAAsE;AAEtE,
|
1
|
+
{"version":3,"file":"MediaQueryList.js","sourceRoot":"","sources":["../../src/match-media/MediaQueryList.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,22 @@
|
|
1
|
+
import MediaQueryItem from './MediaQueryItem';
|
2
|
+
import IWindow from '../window/IWindow';
|
3
|
+
/**
|
4
|
+
* Utility for parsing a query string.
|
5
|
+
*/
|
6
|
+
export default class MediaQueryParser {
|
7
|
+
/**
|
8
|
+
* Parses a media query string.
|
9
|
+
*
|
10
|
+
* @param options Options.
|
11
|
+
* @param options.ownerWindow Owner window.
|
12
|
+
* @param options.mediaQuery Media query string.
|
13
|
+
* @param [options.rootFontSize] Root font size.
|
14
|
+
* @returns Media query items.
|
15
|
+
*/
|
16
|
+
static parse(options: {
|
17
|
+
ownerWindow: IWindow;
|
18
|
+
mediaQuery: string;
|
19
|
+
rootFontSize?: string | number | null;
|
20
|
+
}): MediaQueryItem[];
|
21
|
+
}
|
22
|
+
//# sourceMappingURL=MediaQueryParser.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MediaQueryParser.d.ts","sourceRoot":"","sources":["../../src/match-media/MediaQueryParser.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,kBAAkB,CAAC;AAE9C,OAAO,OAAO,MAAM,mBAAmB,CAAC;AA8BxC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACpC;;;;;;;;OAQG;WACW,KAAK,CAAC,OAAO,EAAE;QAC5B,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;KACtC,GAAG,cAAc,EAAE;CA+DpB"}
|
@@ -0,0 +1,112 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
+
const MediaQueryItem_1 = __importDefault(require("./MediaQueryItem"));
|
7
|
+
const MediaQueryTypeEnum_1 = __importDefault(require("./MediaQueryTypeEnum"));
|
8
|
+
/**
|
9
|
+
* Media query RegExp.
|
10
|
+
*
|
11
|
+
* Group 1: "not", "only", "all", "screen", "print".
|
12
|
+
* Group 2: Rule.
|
13
|
+
* Group 3: Rule end paranthesis (must be present if no value).
|
14
|
+
* Group 4: Comma (,).
|
15
|
+
* Group 5: "or", "and".
|
16
|
+
*/
|
17
|
+
const MEDIA_QUERY_REGEXP = /(not|only|all|screen|print)|\(([^\)]+)(\)){0,1}|(,)| +(or|and) +/g;
|
18
|
+
/**
|
19
|
+
* Check if resolution RegExp.
|
20
|
+
*/
|
21
|
+
const IS_RESOLUTION_REGEXP = /[<>]/;
|
22
|
+
/**
|
23
|
+
* Resolution RegExp.
|
24
|
+
*
|
25
|
+
* Group 1: First resolution value.
|
26
|
+
* Group 2: First resolution operator.
|
27
|
+
* Group 3: Resolution type.
|
28
|
+
* Group 4: Second resolution operator.
|
29
|
+
* Group 5: Second resolution value.
|
30
|
+
*/
|
31
|
+
const RESOLUTION_REGEXP = /(?:([0-9]+[a-z]+) *(<|<=|>|=>)){0,1} *(width|height) *(?:(<|<=|>|=>) *([0-9]+[a-z]+)){0,1}/;
|
32
|
+
/**
|
33
|
+
* Utility for parsing a query string.
|
34
|
+
*/
|
35
|
+
class MediaQueryParser {
|
36
|
+
/**
|
37
|
+
* Parses a media query string.
|
38
|
+
*
|
39
|
+
* @param options Options.
|
40
|
+
* @param options.ownerWindow Owner window.
|
41
|
+
* @param options.mediaQuery Media query string.
|
42
|
+
* @param [options.rootFontSize] Root font size.
|
43
|
+
* @returns Media query items.
|
44
|
+
*/
|
45
|
+
static parse(options) {
|
46
|
+
let currentMediaQueryItem = new MediaQueryItem_1.default({
|
47
|
+
ownerWindow: options.ownerWindow,
|
48
|
+
rootFontSize: options.rootFontSize
|
49
|
+
});
|
50
|
+
const mediaQueryItems = [currentMediaQueryItem];
|
51
|
+
const regexp = new RegExp(MEDIA_QUERY_REGEXP);
|
52
|
+
let match = null;
|
53
|
+
while ((match = regexp.exec(options.mediaQuery.toLowerCase()))) {
|
54
|
+
if (match[4] === ',' || match[5] === 'or') {
|
55
|
+
currentMediaQueryItem = new MediaQueryItem_1.default({
|
56
|
+
ownerWindow: options.ownerWindow,
|
57
|
+
rootFontSize: options.rootFontSize
|
58
|
+
});
|
59
|
+
mediaQueryItems.push(currentMediaQueryItem);
|
60
|
+
}
|
61
|
+
else if (match[1] === 'all' || match[1] === 'screen' || match[1] === 'print') {
|
62
|
+
currentMediaQueryItem.mediaTypes.push(match[1]);
|
63
|
+
}
|
64
|
+
else if (match[1] === 'not') {
|
65
|
+
currentMediaQueryItem.not = true;
|
66
|
+
}
|
67
|
+
else if (match[2]) {
|
68
|
+
const resolutionMatch = IS_RESOLUTION_REGEXP.test(match[2])
|
69
|
+
? match[2].match(RESOLUTION_REGEXP)
|
70
|
+
: null;
|
71
|
+
if (resolutionMatch && (resolutionMatch[1] || resolutionMatch[5])) {
|
72
|
+
currentMediaQueryItem.ranges.push({
|
73
|
+
before: resolutionMatch[1]
|
74
|
+
? {
|
75
|
+
value: resolutionMatch[1],
|
76
|
+
operator: resolutionMatch[2]
|
77
|
+
}
|
78
|
+
: null,
|
79
|
+
type: resolutionMatch[3],
|
80
|
+
after: resolutionMatch[5]
|
81
|
+
? {
|
82
|
+
value: resolutionMatch[5],
|
83
|
+
operator: resolutionMatch[4]
|
84
|
+
}
|
85
|
+
: null
|
86
|
+
});
|
87
|
+
}
|
88
|
+
else {
|
89
|
+
const [name, value] = match[2].split(':');
|
90
|
+
const trimmedValue = value ? value.trim() : null;
|
91
|
+
if (!trimmedValue && !match[3]) {
|
92
|
+
return [
|
93
|
+
new MediaQueryItem_1.default({
|
94
|
+
ownerWindow: options.ownerWindow,
|
95
|
+
rootFontSize: options.rootFontSize,
|
96
|
+
not: true,
|
97
|
+
mediaTypes: [MediaQueryTypeEnum_1.default.all]
|
98
|
+
})
|
99
|
+
];
|
100
|
+
}
|
101
|
+
currentMediaQueryItem.rules.push({
|
102
|
+
name: name.trim(),
|
103
|
+
value: trimmedValue
|
104
|
+
});
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
108
|
+
return mediaQueryItems;
|
109
|
+
}
|
110
|
+
}
|
111
|
+
exports.default = MediaQueryParser;
|
112
|
+
//# sourceMappingURL=MediaQueryParser.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MediaQueryParser.js","sourceRoot":"","sources":["../../src/match-media/MediaQueryParser.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MediaQueryTypeEnum.d.ts","sourceRoot":"","sources":["../../src/match-media/MediaQueryTypeEnum.ts"],"names":[],"mappings":"AAAA,aAAK,kBAAkB;IACtB,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,MAAM,WAAW;CACjB;AAED,eAAe,kBAAkB,CAAC"}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
var MediaQueryTypeEnum;
|
4
|
+
(function (MediaQueryTypeEnum) {
|
5
|
+
MediaQueryTypeEnum["all"] = "all";
|
6
|
+
MediaQueryTypeEnum["print"] = "print";
|
7
|
+
MediaQueryTypeEnum["screen"] = "screen";
|
8
|
+
})(MediaQueryTypeEnum || (MediaQueryTypeEnum = {}));
|
9
|
+
exports.default = MediaQueryTypeEnum;
|
10
|
+
//# sourceMappingURL=MediaQueryTypeEnum.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"MediaQueryTypeEnum.js","sourceRoot":"","sources":["../../src/match-media/MediaQueryTypeEnum.ts"],"names":[],"mappings":";;AAAA,IAAK,kBAIJ;AAJD,WAAK,kBAAkB;IACtB,iCAAW,CAAA;IACX,qCAAe,CAAA;IACf,uCAAiB,CAAA;AAClB,CAAC,EAJI,kBAAkB,KAAlB,kBAAkB,QAItB;AAED,kBAAe,kBAAkB,CAAC"}
|
@@ -11,6 +11,7 @@ import IDOMRectList from './IDOMRectList';
|
|
11
11
|
import IAttr from '../attr/IAttr';
|
12
12
|
import INamedNodeMap from '../../named-node-map/INamedNodeMap';
|
13
13
|
import Event from '../../event/Event';
|
14
|
+
import CSSStyleDeclaration from '../../css/declaration/CSSStyleDeclaration';
|
14
15
|
/**
|
15
16
|
* Element.
|
16
17
|
*/
|
@@ -65,6 +66,7 @@ export default class Element extends Node implements IElement {
|
|
65
66
|
};
|
66
67
|
private _classList;
|
67
68
|
_isValue?: string;
|
69
|
+
_computedStyle: CSSStyleDeclaration | null;
|
68
70
|
/**
|
69
71
|
* Returns class list.
|
70
72
|
*
|