UNPKG

1.65 kBJavaScriptView Raw
1const State = require("../state/State");
2
3/**
4 * Class representing Page Map
5 * @abstract
6 * @type {AbstractPageMap}
7 */
8class AbstractPageMap {
9
10 constructor() {
11 this.pages = new Map();
12 }
13
14 /**
15 * Define page by page selector
16 * @param {string} alias - alias of page
17 * @param {string|RegExp} selector - regexp selector of page
18 * @param {AbstractPage} pageObject - constructed page
19 * @example
20 * class PageMap extends AbstractPageMap {
21 * constructor() {
22 * super();
23 * this.definePage("Your Page", /^.+page.html$/, new YourPage())
24 * }
25 * }
26 */
27 definePage(alias, selector, pageObject) {
28 this.pages.set(alias, new PageDefinition(alias, selector, pageObject))
29 }
30
31 /**
32 * Get page definition by alias
33 * @param {string} alias - alias of page definition
34 * @return {PageDefinition} - page definition by alias
35 */
36 getPage(alias) {
37 const page = this.pages.get(alias);
38 if (page) {
39 return page
40 } else {
41 throw new Error(`${alias} page is not defined`)
42 }
43 }
44
45 init() {
46 State.setPageMap(this);
47 }
48
49}
50
51/**
52 * Class representing page definition
53 * @type {PageDefinition}
54 */
55class PageDefinition {
56
57 /**
58 * Page definition
59 * @param {string} alias - alias
60 * @param {string|RegExp} selector - selector
61 * @param {AbstractPage} pageObject - page object
62 */
63 constructor(alias, selector, pageObject) {
64 this.alias = alias;
65 this.selector = selector;
66 this.pageObject = pageObject;
67 }
68
69}
70
71module.exports = AbstractPageMap;
\No newline at end of file