1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | import theNoteDialogToolbarData from './NoteDialogToolbarData.js'; |
26 | import theHTMLElementsFactory from '../../../core/uiLib/HTMLElementsFactory.js'; |
27 | import theTranslator from '../../../core/uiLib/Translator.js'; |
28 | import theHTMLSanitizer from '../../../core/htmlSanitizer/HTMLSanitizer.js'; |
29 | |
30 | import { NOT_FOUND } from '../../../main/Constants.js'; |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | class NoteDialogToolbar { |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | #rootHTMLElement; |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | #iconSelect; |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | #openFileButton; |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | #editionButtons; |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | #addIconsSelector ( ) { |
73 | this.#iconSelect = theHTMLElementsFactory.create ( |
74 | 'select', |
75 | { |
76 | className : 'TravelNotes-NoteDialog-Select', |
77 | id : 'TravelNotes-NoteDialog-IconSelect' |
78 | }, |
79 | this.#rootHTMLElement |
80 | ); |
81 | |
82 | theNoteDialogToolbarData.preDefinedIconsData.forEach ( |
83 | selectOption => { |
84 | this.#iconSelect.add ( theHTMLElementsFactory.create ( 'option', { text : selectOption.name } ) ); |
85 | } |
86 | ); |
87 | this.#iconSelect.selectedIndex = NOT_FOUND; |
88 | } |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | #addToolbarButtons ( ) { |
95 | this.#openFileButton = theHTMLElementsFactory.create ( |
96 | 'div', |
97 | { |
98 | className : 'TravelNotes-BaseDialog-Button', |
99 | title : theTranslator.getText ( 'NoteDialogToolbar - Open a configuration file' ), |
100 | textContent : '📂' |
101 | }, |
102 | this.#rootHTMLElement |
103 | ); |
104 | } |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | #addEditionButtons ( ) { |
111 | theNoteDialogToolbarData.editionButtonsData.forEach ( |
112 | editionButtonData => { |
113 | const newButton = theHTMLElementsFactory.create ( |
114 | 'div', |
115 | { |
116 | dataset : { |
117 | HtmlBefore : editionButtonData.htmlBefore, |
118 | HtmlAfter : editionButtonData.htmlAfter |
119 | }, |
120 | className : 'TravelNotes-NoteDialog-EditorButton' |
121 | }, |
122 | this.#rootHTMLElement |
123 | ); |
124 | theHTMLSanitizer.sanitizeToHtmlElement ( editionButtonData.title, newButton ); |
125 | this.#editionButtons.push ( newButton ); |
126 | } |
127 | ); |
128 | } |
129 | |
130 | |
131 | |
132 | |
133 | |
134 | #addToolbarElements ( ) { |
135 | |
136 | this.#addIconsSelector ( ); |
137 | this.#addToolbarButtons ( ); |
138 | this.#addEditionButtons ( ); |
139 | } |
140 | |
141 | |
142 | |
143 | |
144 | |
145 | |
146 | #addEventListeners ( eventListeners ) { |
147 | this.#iconSelect.addEventListener ( 'change', eventListeners.iconSelectorChange ); |
148 | this.#editionButtons.forEach ( |
149 | button => { button.addEventListener ( 'click', eventListeners.editionButtonsClick ); } |
150 | ); |
151 | this.#openFileButton.addEventListener ( 'click', eventListeners.openCfgFileButtonClick, false ); |
152 | } |
153 | |
154 | |
155 | |
156 | |
157 | |
158 | |
159 | #removeEventListeners ( eventListeners ) { |
160 | this.#iconSelect.removeEventListener ( 'change', eventListeners.iconSelectorChange ); |
161 | this.#editionButtons.forEach ( |
162 | button => { button.removeEventListener ( 'click', eventListeners.editionButtonsClick ); } |
163 | ); |
164 | this.#openFileButton.removeEventListener ( 'click', eventListeners.openCfgFileButtonClick, false ); |
165 | } |
166 | |
167 | |
168 | |
169 | |
170 | |
171 | |
172 | constructor ( eventListeners ) { |
173 | |
174 | Object.freeze ( this ); |
175 | |
176 | this.#editionButtons = []; |
177 | |
178 | this.#rootHTMLElement = theHTMLElementsFactory.create ( |
179 | 'div', |
180 | { |
181 | id : 'TravelNotes-NoteDialog-ToolbarDiv' |
182 | } |
183 | ); |
184 | |
185 | this.#addToolbarElements ( ); |
186 | this.#addEventListeners ( eventListeners ); |
187 | } |
188 | |
189 | |
190 | |
191 | |
192 | |
193 | |
194 | destructor ( eventListeners ) { |
195 | this.#removeEventListeners ( eventListeners ); |
196 | } |
197 | |
198 | |
199 | |
200 | |
201 | |
202 | |
203 | update ( eventListeners ) { |
204 | this.#removeEventListeners ( eventListeners ); |
205 | this.#rootHTMLElement.textContent = ''; |
206 | this.#editionButtons = []; |
207 | this.#addToolbarElements ( ); |
208 | this.#addEventListeners ( eventListeners ); |
209 | } |
210 | |
211 | |
212 | |
213 | |
214 | |
215 | |
216 | get rootHTMLElement ( ) { return this.#rootHTMLElement; } |
217 | |
218 | } |
219 | |
220 | export default NoteDialogToolbar; |
221 | |
222 | |
223 | |