@nationalarchives/frontend 0.1.23-prerelease → 0.1.25-prerelease
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/README.md +22 -0
- package/govuk-prototype-kit.config.json +4 -12
- package/nationalarchives/all.css +2 -2
- package/nationalarchives/all.css.map +1 -1
- package/nationalarchives/all.js +1 -1
- package/nationalarchives/all.js.map +1 -1
- package/nationalarchives/assets/fonts/OpenSans-Regular.ttf +0 -0
- package/nationalarchives/assets/fonts/RobotoMono-Medium.ttf +0 -0
- package/nationalarchives/components/_index.scss +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.css.map +1 -1
- package/nationalarchives/components/breadcrumbs/breadcrumbs.stories.js +1 -1
- package/nationalarchives/components/button/button.css +1 -1
- package/nationalarchives/components/button/button.css.map +1 -1
- package/nationalarchives/components/button/button.scss +12 -12
- package/nationalarchives/components/button/template.njk +2 -2
- package/nationalarchives/components/card/card.css +1 -1
- package/nationalarchives/components/card/card.css.map +1 -1
- package/nationalarchives/components/card/card.scss +9 -4
- package/nationalarchives/components/card/card.stories.js +27 -78
- package/nationalarchives/components/card/fixtures.json +17 -17
- package/nationalarchives/components/card/macro-options.json +47 -17
- package/nationalarchives/components/card/template.njk +47 -46
- package/nationalarchives/components/cookie-banner/cookie-banner.css +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.css.map +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.js.map +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.mjs +17 -16
- package/nationalarchives/components/cookie-banner/cookie-banner.scss +1 -1
- package/nationalarchives/components/cookie-banner/cookie-banner.stories.js +95 -45
- package/nationalarchives/components/cookie-banner/fixtures.json +84 -1
- package/nationalarchives/components/cookie-banner/macro-options.json +7 -1
- package/nationalarchives/components/cookie-banner/template.njk +4 -4
- package/nationalarchives/components/featured-records/_index.scss +1 -0
- package/nationalarchives/components/featured-records/featured-records.css +1 -0
- package/nationalarchives/components/featured-records/featured-records.css.map +1 -0
- package/nationalarchives/components/featured-records/featured-records.scss +95 -0
- package/nationalarchives/components/featured-records/featured-records.stories.js +51 -0
- package/nationalarchives/components/featured-records/fixtures.json +4 -0
- package/nationalarchives/components/featured-records/macro-options.json +70 -0
- package/nationalarchives/components/featured-records/macro.njk +3 -0
- package/nationalarchives/components/featured-records/template.njk +20 -0
- package/nationalarchives/components/filters/filters.css +1 -1
- package/nationalarchives/components/filters/filters.css.map +1 -1
- package/nationalarchives/components/filters/filters.scss +6 -6
- package/nationalarchives/components/filters/template.njk +1 -1
- package/nationalarchives/components/footer/footer.css +1 -1
- package/nationalarchives/components/footer/footer.css.map +1 -1
- package/nationalarchives/components/footer/footer.scss +2 -5
- package/nationalarchives/components/footer/footer.stories.js +1 -1
- package/nationalarchives/components/footer/template.njk +4 -4
- package/nationalarchives/components/gallery/gallery.css +1 -1
- package/nationalarchives/components/gallery/gallery.css.map +1 -1
- package/nationalarchives/components/gallery/gallery.scss +2 -2
- package/nationalarchives/components/gallery/gallery.stories.js +2 -2
- package/nationalarchives/components/grid/grid.css +1 -1
- package/nationalarchives/components/grid/grid.css.map +1 -1
- package/nationalarchives/components/grid/grid.scss +12 -0
- package/nationalarchives/components/grid/grid.stories.js +12 -0
- package/nationalarchives/components/header/header.css +1 -1
- package/nationalarchives/components/header/header.css.map +1 -1
- package/nationalarchives/components/header/header.scss +59 -27
- package/nationalarchives/components/header/header.stories.js +4 -6
- package/nationalarchives/components/header/macro-options.json +2 -2
- package/nationalarchives/components/header/template.njk +4 -4
- package/nationalarchives/components/hero/hero.css +1 -1
- package/nationalarchives/components/hero/hero.css.map +1 -1
- package/nationalarchives/components/hero/hero.scss +6 -6
- package/nationalarchives/components/hero/hero.stories.js +6 -0
- package/nationalarchives/components/index-grid/index-grid.css +1 -1
- package/nationalarchives/components/index-grid/index-grid.css.map +1 -1
- package/nationalarchives/components/index-grid/index-grid.scss +1 -1
- package/nationalarchives/components/index-grid/index-grid.stories.js +3 -1
- package/nationalarchives/components/message/message.css +1 -1
- package/nationalarchives/components/message/message.css.map +1 -1
- package/nationalarchives/components/pagination/macro-options.json +6 -0
- package/nationalarchives/components/pagination/pagination.css +1 -1
- package/nationalarchives/components/pagination/pagination.css.map +1 -1
- package/nationalarchives/components/pagination/pagination.scss +5 -1
- package/nationalarchives/components/pagination/pagination.stories.js +417 -2
- package/nationalarchives/components/pagination/template.njk +10 -3
- package/nationalarchives/components/phase-banner/fixtures.json +5 -41
- package/nationalarchives/components/phase-banner/macro-options.json +6 -0
- package/nationalarchives/components/phase-banner/phase-banner.css +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.css.map +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.scss +1 -1
- package/nationalarchives/components/phase-banner/phase-banner.stories.js +4 -28
- package/nationalarchives/components/phase-banner/template.njk +3 -1
- package/nationalarchives/components/picture/picture.css +1 -1
- package/nationalarchives/components/picture/picture.css.map +1 -1
- package/nationalarchives/components/picture/picture.scss +5 -4
- package/nationalarchives/components/sensitive-image/sensitive-image.css +1 -1
- package/nationalarchives/components/sensitive-image/sensitive-image.css.map +1 -1
- package/nationalarchives/components/sensitive-image/sensitive-image.stories.js +3 -0
- package/nationalarchives/components/skip-link/skip-link.css +1 -1
- package/nationalarchives/components/skip-link/skip-link.css.map +1 -1
- package/nationalarchives/components/skip-link/skip-link.stories.js +4 -1
- package/nationalarchives/components/tabs/tabs.css +1 -1
- package/nationalarchives/components/tabs/tabs.css.map +1 -1
- package/nationalarchives/components/tabs/tabs.js +1 -1
- package/nationalarchives/components/tabs/tabs.js.map +1 -1
- package/nationalarchives/components/tabs/tabs.mjs +0 -4
- package/nationalarchives/components/tabs/tabs.stories.js +6 -3
- package/nationalarchives/lib/cookies.mjs +165 -62
- package/nationalarchives/prototype-kit.css +23 -0
- package/nationalarchives/prototype-kit.css.map +1 -0
- package/nationalarchives/{_prototype-kit.scss → prototype-kit.scss} +3 -3
- package/nationalarchives/stories/utilities/colour-schemes/colour-schemes.stories.js +189 -74
- package/nationalarchives/stories/utilities/lists/lists.mdx +18 -0
- package/nationalarchives/stories/utilities/{typography → lists}/lists.stories.js +1 -1
- package/nationalarchives/stories/utilities/overrides/overrides.mdx +27 -20
- package/nationalarchives/stories/utilities/overrides/overrides.stories.js +19 -2
- package/nationalarchives/stories/utilities/tables/tables.mdx +8 -0
- package/nationalarchives/stories/utilities/tables/tables.stories.js +45 -0
- package/nationalarchives/stories/utilities/typography/heading-groups.stories.js +59 -19
- package/nationalarchives/stories/utilities/typography/typography.mdx +3 -25
- package/nationalarchives/stories/utilities/typography/typography.stories.js +28 -2
- package/nationalarchives/templates/layouts/_generic.njk +1 -0
- package/nationalarchives/templates/layouts/_prototype-kit.njk +4 -1
- package/nationalarchives/tests/cookies.test.js +427 -0
- package/nationalarchives/tests/uuid.test.js +17 -0
- package/nationalarchives/tools/_colour.scss +15 -20
- package/nationalarchives/tools/_spacing.scss +91 -2
- package/nationalarchives/tools/_typography.scss +15 -8
- package/nationalarchives/utilities/_a11y.scss +2 -1
- package/nationalarchives/utilities/_colour.scss +100 -0
- package/nationalarchives/utilities/_global.scss +2 -98
- package/nationalarchives/utilities/_index.scss +2 -0
- package/nationalarchives/utilities/_lists.scss +5 -0
- package/nationalarchives/utilities/_overrides.scss +16 -36
- package/nationalarchives/utilities/_tables.scss +86 -0
- package/nationalarchives/utilities/_typography.scss +150 -71
- package/nationalarchives/variables/_colour.scss +10 -8
- package/nationalarchives/variables/_spacing.scss +14 -9
- package/nationalarchives/variables/_typography.scss +10 -7
- package/package.json +14 -14
- package/nationalarchives/assets/fonts/OpenSans-Medium.ttf +0 -0
- package/nationalarchives/assets/fonts/fa-regular-400.ttf +0 -0
- package/nationalarchives/assets/fonts/fa-regular-400.woff2 +0 -0
- package/nationalarchives/components/profile/_index.scss +0 -1
- package/nationalarchives/components/profile/fixtures.json +0 -4
- package/nationalarchives/components/profile/macro-options.json +0 -14
- package/nationalarchives/components/profile/macro.njk +0 -3
- package/nationalarchives/components/profile/profile.css +0 -1
- package/nationalarchives/components/profile/profile.css.map +0 -1
- package/nationalarchives/components/profile/profile.scss +0 -5
- package/nationalarchives/components/profile/profile.stories.js +0 -31
- package/nationalarchives/components/profile/template.njk +0 -15
- package/nationalarchives/lib/font-awesome/regular.css +0 -5
- package/nationalarchives/lib/font-awesome/regular.css.map +0 -1
- package/nationalarchives/lib/font-awesome/regular.scss +0 -28
- package/nationalarchives/stories/development/about.mdx +0 -122
- package/nationalarchives/stories/development/contributing.mdx +0 -32
- package/nationalarchives/stories/development/cookies.mdx +0 -82
- package/nationalarchives/stories/development/publishing.mdx +0 -15
- package/nationalarchives/stories/development/structure.mdx +0 -88
- package/nationalarchives/stories/development/using/compiled.mdx +0 -9
- package/nationalarchives/stories/development/using/hosted.mdx +0 -53
- package/nationalarchives/stories/development/using/npm.mdx +0 -59
|
@@ -1,3 +1,35 @@
|
|
|
1
|
+
export class CookieEventHandler {
|
|
2
|
+
events = {};
|
|
3
|
+
|
|
4
|
+
constructor() {
|
|
5
|
+
if (CookieEventHandler._instance) {
|
|
6
|
+
return CookieEventHandler._instance;
|
|
7
|
+
}
|
|
8
|
+
CookieEventHandler._instance = this;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Add an event listener.
|
|
13
|
+
* @param {string} event - The event to add a listener for.
|
|
14
|
+
* @param {function} callback - The callback function to call when the event is triggered.
|
|
15
|
+
*/
|
|
16
|
+
on(event, callback) {
|
|
17
|
+
if (!Object.prototype.hasOwnProperty.call(this.events, event)) {
|
|
18
|
+
this.events[event] = [];
|
|
19
|
+
}
|
|
20
|
+
this.events[event] = [...this.events[event], callback];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** @protected */
|
|
24
|
+
trigger(event, data = {}) {
|
|
25
|
+
if (Object.prototype.hasOwnProperty.call(this.events, event)) {
|
|
26
|
+
this.events[event].forEach((eventToTrigger) =>
|
|
27
|
+
eventToTrigger.call(this, data),
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
1
33
|
/**
|
|
2
34
|
* Class to handle cookies.
|
|
3
35
|
* @class Cookies
|
|
@@ -6,49 +38,68 @@
|
|
|
6
38
|
*/
|
|
7
39
|
export default class Cookies {
|
|
8
40
|
/** @protected */
|
|
9
|
-
|
|
41
|
+
extraPolicies = [];
|
|
42
|
+
/** @protected */
|
|
43
|
+
domain = "";
|
|
44
|
+
/** @protected */
|
|
45
|
+
secure = true;
|
|
46
|
+
/** @protected */
|
|
47
|
+
policiesKey = "";
|
|
10
48
|
|
|
11
49
|
/**
|
|
12
50
|
* Create a cookie handler.
|
|
13
|
-
* @param {string[]} [
|
|
14
|
-
* @param {string} [
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
}
|
|
24
|
-
this
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
...this.#policies,
|
|
31
|
-
...this.allPolicies,
|
|
32
|
-
})
|
|
33
|
-
: this.#policies;
|
|
51
|
+
* @param {string[]} [extraPolicies=[]] - The extra cookie policies to manage in addition to essential, settings and usage.
|
|
52
|
+
* @param {string} [options.domain=""] - The domain to register the cookie with.
|
|
53
|
+
* @param {string} [options.secure=true] - Only set cookie in HTTPS environments.
|
|
54
|
+
* @param {string} [options.policiesKey=cookies_policy] - The name of the cookie.
|
|
55
|
+
*/
|
|
56
|
+
constructor(extraPolicies = [], options = {}) {
|
|
57
|
+
const {
|
|
58
|
+
domain = "",
|
|
59
|
+
secure = true,
|
|
60
|
+
policiesKey = "cookies_policy",
|
|
61
|
+
} = options;
|
|
62
|
+
this.extraPolicies = extraPolicies;
|
|
63
|
+
this.domain = domain;
|
|
64
|
+
this.secure = secure;
|
|
65
|
+
this.policiesKey = policiesKey;
|
|
66
|
+
this.events = new CookieEventHandler();
|
|
67
|
+
this.init();
|
|
34
68
|
}
|
|
35
69
|
|
|
36
|
-
|
|
37
|
-
|
|
70
|
+
/** @protected */
|
|
71
|
+
init() {
|
|
72
|
+
this.savePolicies({
|
|
73
|
+
...Object.fromEntries(
|
|
74
|
+
this.extraPolicies.map((k) => [k.toLowerCase(), false]),
|
|
75
|
+
),
|
|
76
|
+
usage: false,
|
|
77
|
+
settings: false,
|
|
78
|
+
...this.policies,
|
|
79
|
+
essential: true,
|
|
80
|
+
});
|
|
38
81
|
}
|
|
39
82
|
|
|
40
|
-
|
|
41
|
-
#deserialise(cookieString) {
|
|
83
|
+
get all() {
|
|
42
84
|
const deserialised = {};
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
85
|
+
document.cookie
|
|
86
|
+
.split("; ")
|
|
87
|
+
.filter((x) => x)
|
|
88
|
+
.forEach((cookie) => {
|
|
89
|
+
const parts = cookie.trim().split("=");
|
|
90
|
+
if (parts[0]) {
|
|
91
|
+
deserialised[parts[0]] = parts[1];
|
|
92
|
+
}
|
|
93
|
+
});
|
|
47
94
|
return deserialised;
|
|
48
95
|
}
|
|
49
96
|
|
|
50
|
-
get
|
|
51
|
-
|
|
97
|
+
get policies() {
|
|
98
|
+
try {
|
|
99
|
+
return JSON.parse(this.get(this.policiesKey) || "{}");
|
|
100
|
+
} catch (e) {
|
|
101
|
+
return {};
|
|
102
|
+
}
|
|
52
103
|
}
|
|
53
104
|
|
|
54
105
|
/**
|
|
@@ -87,16 +138,36 @@ export default class Cookies {
|
|
|
87
138
|
* @param {number} [options.maxAge=31536000] - The maximum age of the cookie in seconds.
|
|
88
139
|
* @param {string} [options.path=/] - The path to register the cookie for.
|
|
89
140
|
* @param {string} [options.sameSite=Lax] - The sameSite attribute.
|
|
141
|
+
* @param {string} [options.domain=this.domain] - The domain to register the cookie with.
|
|
142
|
+
* @param {string} [options.secure=this.secure] - Only set cookie in HTTPS environments.
|
|
90
143
|
*/
|
|
91
144
|
set(key, value, options = {}) {
|
|
92
145
|
const {
|
|
93
146
|
maxAge = 60 * 60 * 24 * 365,
|
|
94
147
|
path = "/",
|
|
95
148
|
sameSite = "Lax",
|
|
149
|
+
domain = this.domain,
|
|
150
|
+
secure = this.secure,
|
|
96
151
|
} = options;
|
|
97
|
-
|
|
152
|
+
if (!key) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const cookie = `${encodeURIComponent(key)}=${encodeURIComponent(value)};${
|
|
156
|
+
domain ? ` domain=${domain}; ` : ""
|
|
157
|
+
} samesite=${sameSite}; path=${path}; max-age=${maxAge}${
|
|
158
|
+
secure ? "; secure" : ""
|
|
159
|
+
}`;
|
|
160
|
+
document.cookie = cookie;
|
|
161
|
+
this.events.trigger("setCookie", {
|
|
162
|
+
key,
|
|
98
163
|
value,
|
|
99
|
-
|
|
164
|
+
maxAge,
|
|
165
|
+
path,
|
|
166
|
+
sameSite,
|
|
167
|
+
domain,
|
|
168
|
+
secure,
|
|
169
|
+
cookie,
|
|
170
|
+
});
|
|
100
171
|
}
|
|
101
172
|
|
|
102
173
|
/**
|
|
@@ -104,12 +175,20 @@ export default class Cookies {
|
|
|
104
175
|
* @param {string} key - The cookie name.
|
|
105
176
|
* @param {string} [path=/] - The path to the cookie is registered on.
|
|
106
177
|
*/
|
|
107
|
-
delete(key, path = "/") {
|
|
108
|
-
|
|
178
|
+
delete(key, path = "/", domain = null) {
|
|
179
|
+
const options = { maxAge: -1, path, domain: domain || undefined };
|
|
180
|
+
this.set(key, "", options);
|
|
181
|
+
this.events.trigger("deleteCookie", { key, ...options });
|
|
109
182
|
}
|
|
110
183
|
|
|
111
|
-
|
|
112
|
-
|
|
184
|
+
/**
|
|
185
|
+
* Delete all cookies.
|
|
186
|
+
*/
|
|
187
|
+
deleteAll(path = "/", domain = null) {
|
|
188
|
+
Object.keys(this.all).forEach((cookie) => {
|
|
189
|
+
this.delete(cookie, path, domain);
|
|
190
|
+
});
|
|
191
|
+
this.events.trigger("deleteAllCookies", { path, domain });
|
|
113
192
|
}
|
|
114
193
|
|
|
115
194
|
/**
|
|
@@ -117,8 +196,9 @@ export default class Cookies {
|
|
|
117
196
|
* @param {string} policy - The name of the policy.
|
|
118
197
|
*/
|
|
119
198
|
acceptPolicy(policy) {
|
|
120
|
-
this
|
|
121
|
-
this.
|
|
199
|
+
this.setPolicy(policy, true);
|
|
200
|
+
this.events.trigger("acceptPolicy", policy);
|
|
201
|
+
this.events.trigger("changePolicy", { [policy]: true });
|
|
122
202
|
}
|
|
123
203
|
|
|
124
204
|
/**
|
|
@@ -126,47 +206,61 @@ export default class Cookies {
|
|
|
126
206
|
* @param {string} policy - The name of the policy.
|
|
127
207
|
*/
|
|
128
208
|
rejectPolicy(policy) {
|
|
209
|
+
this.setPolicy(policy, false);
|
|
210
|
+
this.events.trigger("rejectPolicy", policy);
|
|
211
|
+
this.events.trigger("changePolicy", { [policy]: false });
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Set a policy.
|
|
216
|
+
* @param {string} policy - The name of the policy.
|
|
217
|
+
* @param {boolean} accepted - Whether the policy is accepted or not.
|
|
218
|
+
*/
|
|
219
|
+
setPolicy(policy, accepted) {
|
|
129
220
|
if (policy === "essential") {
|
|
130
221
|
return;
|
|
131
222
|
}
|
|
132
|
-
this
|
|
133
|
-
this.savePolicies();
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/** @protected */
|
|
137
|
-
#setPolicy(policy, accepted) {
|
|
138
|
-
this.policies = {
|
|
223
|
+
this.savePolicies({
|
|
139
224
|
...this.policies,
|
|
140
225
|
[policy]: accepted,
|
|
141
226
|
essential: true,
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Commit the policy preferences to the browser.
|
|
147
|
-
*/
|
|
148
|
-
savePolicies() {
|
|
149
|
-
this.set(this.cookiesPolicyKey, JSON.stringify(this.policies));
|
|
227
|
+
});
|
|
228
|
+
this.events.trigger("changePolicy", { [policy]: accepted });
|
|
150
229
|
}
|
|
151
230
|
|
|
152
231
|
/**
|
|
153
232
|
* Accept all the cookie policies.
|
|
154
233
|
*/
|
|
155
234
|
acceptAllPolicies() {
|
|
156
|
-
Object.
|
|
157
|
-
this
|
|
235
|
+
const allPolicies = Object.fromEntries(
|
|
236
|
+
Object.keys(this.policies).map((k) => [k.toLowerCase(), true]),
|
|
158
237
|
);
|
|
159
|
-
this.savePolicies();
|
|
238
|
+
this.savePolicies(allPolicies);
|
|
239
|
+
this.events.trigger("acceptAllPolicies");
|
|
240
|
+
this.events.trigger("changePolicy", allPolicies);
|
|
160
241
|
}
|
|
161
242
|
|
|
162
243
|
/**
|
|
163
244
|
* Reject all the cookie policies.
|
|
164
245
|
*/
|
|
165
246
|
rejectAllPolicies() {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
247
|
+
const allPolicies = {
|
|
248
|
+
...Object.fromEntries(
|
|
249
|
+
Object.keys(this.policies).map((k) => [k.toLowerCase(), false]),
|
|
250
|
+
),
|
|
251
|
+
essential: true,
|
|
252
|
+
};
|
|
253
|
+
this.savePolicies(allPolicies);
|
|
254
|
+
this.events.trigger("rejectAllPolicies");
|
|
255
|
+
this.events.trigger("changePolicy", allPolicies);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* Commit policy preferences to the browser.
|
|
260
|
+
* @param {object} policies - The policies to commit.
|
|
261
|
+
*/
|
|
262
|
+
savePolicies(policies) {
|
|
263
|
+
this.set(this.policiesKey, JSON.stringify(policies));
|
|
170
264
|
}
|
|
171
265
|
|
|
172
266
|
/**
|
|
@@ -179,4 +273,13 @@ export default class Cookies {
|
|
|
179
273
|
? this.policies[policy] === true
|
|
180
274
|
: null;
|
|
181
275
|
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Add an event listener.
|
|
279
|
+
* @param {string} event - The event to add a listener for.
|
|
280
|
+
* @param {function} callback - The callback function to call when the event is triggered.
|
|
281
|
+
*/
|
|
282
|
+
on(event, callback) {
|
|
283
|
+
this.events.on(event, callback);
|
|
284
|
+
}
|
|
182
285
|
}
|