UNPKG

3.44 kBJavaScriptView Raw
1/**
2 * @copyright Copyright (c) 2019 Maxim Khorin <maksimovichu@gmail.com>
3 */
4'use strict';
5
6const Base = require('../base/Base');
7
8module.exports = class Theme extends Base {
9
10 constructor (config) {
11 super({
12 // name: [theme name]
13 // directory: [theme directory]
14 // parent: [new Theme]
15 // view: [new View]
16 LocaleFileMap: require('./LocaleFileMap'),
17 ...config
18 });
19 this.createTemplateMap();
20 this.createModelMap();
21 }
22
23 init () {
24 }
25
26 isEmpty () {
27 return this._templates.isEmpty();
28 }
29
30 createTemplateMap () {
31 this._templates = this.createFileMap({
32 directory: 'template'
33 });
34 }
35
36 createModelMap () {
37 this._models = this.createFileMap({
38 directory: 'model',
39 required: true
40 });
41 }
42
43 createFileMap (config) {
44 return ClassHelper.spawn(this.LocaleFileMap, {
45 baseDirectory: this.directory,
46 ...config
47 });
48 }
49
50 // TEMPLATE
51
52 getTemplate (name) {
53 return this._templates.get(...arguments)
54 || this.parent && this.parent.getTemplate(...arguments)
55 || name;
56 }
57
58 getOwnTemplate () {
59 return this._templates.get(...arguments);
60 }
61
62 getOwnTemplateWithOrigin () {
63 return this._templates.get(...arguments)
64 || this.isOrigin && this.parent && this.parent.getOwnTemplate(...arguments);
65 }
66
67 getParentTemplate () {
68 return this.parent && this.parent.getTemplate(...arguments);
69 }
70
71 getViewOwnTemplate () {
72 return this._templates.get(...arguments)
73 || this.parent && this.parent.view === this.view && this.parent.getViewOwnTemplate(...arguments);
74 }
75
76 getViewOwnTemplateWithOrigin () {
77 return this._templates.get(...arguments) || this.parent
78 && (this.isOrigin || this.parent.view === this.view) && this.parent.getViewOwnTemplate(...arguments);
79 }
80
81 getClosestAncestorTemplate () {
82 let ancestor = this, current, closest;
83 while (ancestor) {
84 if (current) {
85 closest = ancestor.getOwnTemplate(...arguments);
86 if (closest && current !== closest) {
87 return closest;
88 }
89 } else {
90 current = ancestor.getOwnTemplate(...arguments);
91 }
92 ancestor = ancestor.parent;
93 }
94 }
95
96 // MODEL
97
98 getModel (name, language) {
99 return this.getOwnModel(name, language) || this.getParentModel(name, language);
100 }
101
102 getOwnModel (name, language) {
103 return this._models.get(name, language);
104 }
105
106 getParentModel (name, language) {
107 return this.parent && this.parent.getModel(name, language);
108 }
109
110 getViewOwnModel (name, language) {
111 return this._models.get(name, language)
112 || this.parent && this.parent.view === this.view && this.parent.getViewOwnModel(name, language);
113 }
114
115 getViewOwnModelWithOrigin () {
116 return this._models.get(...arguments) || this.parent
117 && (this.isOrigin || this.parent.view === this.view) && this.parent.getViewOwnModel(...arguments);
118 }
119};
120
121const ClassHelper = require('../helper/ClassHelper');
\No newline at end of file