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 AboutDialog from '../../dialogs/aboutDialog/AboutDialog.js'; |
26 | import BaseToolbar from '../baseToolbar/BaseToolbar.js'; |
27 | import ToolbarItem from '../baseToolbar/ToolbarItem.js'; |
28 | import theApiKeysManager from '../../core/ApiKeysManager.js'; |
29 | import theGeoLocator from '../../core/GeoLocator.js'; |
30 | import theConfig from '../../data/Config.js'; |
31 | import theTranslator from '../../core/uiLib/Translator.js'; |
32 | import theTravelNotesData from '../../data/TravelNotesData.js'; |
33 | import theUtilities from '../../core/uiLib/Utilities.js'; |
34 | import theErrorsUI from '../../uis/errorsUI/ErrorsUI.js'; |
35 | import theTravelEditor from '../../core/TravelEditor.js'; |
36 | import theDockableDialogsManager from '../../core/DockableDialogsManager.js'; |
37 | import theFullScreenUI from '../../uis/fullScreenUI/FullScreenUI.js'; |
38 | import theFontSizeManager from '../../core/FontSizeManager.js'; |
39 | import OpenInputChangeEL from './OpenInputChangeEL.js'; |
40 | import ImportInputChangeEL from './ImportInputChangeEL.js'; |
41 | import theDevice from '../../core/lib/Device.js'; |
42 | import { INVALID_OBJ_ID, TOOLBAR_POSITION, GEOLOCATION_STATUS, ZERO, ONE } from '../../main/Constants.js'; |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | class TravelNotesToolbar extends BaseToolbar { |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | constructor ( ) { |
57 | super ( ); |
58 | } |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | createUI ( ) { |
65 | super.createUI ( 'Travel & Notes', TOOLBAR_POSITION.topRight ); |
66 | } |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | addToolbarItems ( ) { |
73 | const writeExtension = theDevice.isTouch ? theConfig.files.writeTouch : theConfig.files.writeOthers; |
74 | const translationVar = Object.seal ( { openTaN : '', openGpx : '' } ); |
75 | theConfig.files.openTaN.forEach ( fileExtension => translationVar.openTaN += '.' + fileExtension + ',' ); |
76 | theConfig.files.openGpx.forEach ( fileExtension => translationVar.openGpx += '.' + fileExtension + ',' ); |
77 | const fileExtensions = ( translationVar.openTaN + translationVar.openGpx ).slice ( ZERO, -ONE ); |
78 | translationVar.openTaN = translationVar.openTaN.slice ( ZERO, -ONE ); |
79 | translationVar.openGpx = translationVar.openGpx.slice ( ZERO, -ONE ); |
80 | translationVar.openTaN.replaceAll ( ',', ', ' ); |
81 | translationVar.openGpx.replaceAll ( ',', ', ' ); |
82 | |
83 | this.addToolbarItem ( |
84 | theGeoLocator.status === GEOLOCATION_STATUS.active |
85 | ? |
86 | new ToolbarItem ( |
87 | '🏀', |
88 | theTranslator.getText ( 'TravelNotesToolbar - Stop Geo location' ), |
89 | ( ) => { theGeoLocator.switch ( ); } |
90 | ) |
91 | : |
92 | new ToolbarItem ( |
93 | '🌐', |
94 | theTranslator.getText ( 'TravelNotesToolbar - Start Geo location' ), |
95 | ( ) => { theGeoLocator.switch ( ); } |
96 | ) |
97 | ); |
98 | this.addToolbarItem ( |
99 | new ToolbarItem ( |
100 | '❌', |
101 | theTranslator.getText ( 'TravelNotesToolbar - Cancel travel' ), |
102 | ( ) => { |
103 | theTravelEditor.newTravel ( ); |
104 | document.title = |
105 | 'Travel & Notes' + |
106 | ( '' === theTravelNotesData.travel.name ? '' : ' - ' + theTravelNotesData.travel.name ); |
107 | } |
108 | ) |
109 | ); |
110 | this.addToolbarItem ( |
111 | new ToolbarItem ( |
112 | '💾', |
113 | theTranslator.getText ( 'TravelNotesToolbar - Save travel', { extension : writeExtension } ), |
114 | ( ) => { theTravelEditor.saveTravel ( ); } |
115 | ) |
116 | ); |
117 | this.addToolbarItem ( |
118 | new ToolbarItem ( |
119 | '📂', |
120 | theTranslator.getText ( 'TravelNotesToolbar - Open travel', translationVar ), |
121 | ( ) => { |
122 | if ( |
123 | theConfig.travelNotes.haveBeforeUnloadWarning |
124 | && |
125 | ( |
126 | ! window.confirm ( theTranslator.getText ( |
127 | 'TravelNotesToolbar - This page ask to close; data are perhaps not saved.' ) |
128 | ) |
129 | ) |
130 | ) { |
131 | return; |
132 | } |
133 | theUtilities.openFile ( new OpenInputChangeEL ( ), fileExtensions ); |
134 | } |
135 | ) |
136 | ); |
137 | this.addToolbarItem ( |
138 | new ToolbarItem ( |
139 | '🌏', |
140 | theTranslator.getText ( 'TravelNotesToolbar - Import travel', translationVar ), |
141 | ( ) => { |
142 | if ( INVALID_OBJ_ID === theTravelNotesData.editedRouteObjId ) { |
143 | theUtilities.openFile ( new ImportInputChangeEL ( ), fileExtensions ); |
144 | } |
145 | else { |
146 | theErrorsUI.showError ( |
147 | theTranslator.getText ( |
148 | 'TravelNotesToolbar - Not possible to merge a travel when a route is edited' |
149 | ) |
150 | ); |
151 | } |
152 | } |
153 | ) |
154 | ); |
155 | this.addToolbarItem ( |
156 | new ToolbarItem ( |
157 | '📙', |
158 | theTranslator.getText ( 'TravelNotesToolbar - Open travel roadbook' ), |
159 | 'TravelNotesRoadbook.html?lng=' + |
160 | theConfig.travelNotes.language + '&page=' + |
161 | theTravelNotesData.UUID |
162 | ) |
163 | ); |
164 | if ( theConfig.ApiKeysDialog.showButton ) { |
165 | this.addToolbarItem ( |
166 | new ToolbarItem ( |
167 | '🔑', |
168 | theTranslator.getText ( 'TravelNotesToolbar - api keys' ), |
169 | ( ) => { theApiKeysManager.setKeysFromDialog ( ); } |
170 | ) |
171 | ); |
172 | } |
173 | this.addToolbarItem ( |
174 | new ToolbarItem ( |
175 | '🛄', |
176 | theTranslator.getText ( 'TravelNotesToolbar - Travel properties' ), |
177 | ( ) => { theDockableDialogsManager.travelPropertiesDialog.show ( ); } |
178 | ) |
179 | ); |
180 | this.addToolbarItem ( |
181 | new ToolbarItem ( |
182 | '🗨️', |
183 | theTranslator.getText ( 'TravelNotesToolbar - Travel notes' ), |
184 | ( ) => { theDockableDialogsManager.travelNotesDialog.show ( ); } |
185 | ) |
186 | ); |
187 | this.addToolbarItem ( |
188 | new ToolbarItem ( |
189 | '🔍', |
190 | theTranslator.getText ( 'Search with OpenStreetMap' ), |
191 | ( ) => { theDockableDialogsManager.osmSearchDialog.show ( ); } |
192 | ) |
193 | ); |
194 | this.addToolbarItem ( |
195 | new ToolbarItem ( |
196 | '☢️', |
197 | theTranslator.getText ( 'TravelNotesToolbar - Save as travel', { extension : writeExtension } ), |
198 | ( ) => { theTravelEditor.saveAsTravel ( ); } |
199 | ) |
200 | ); |
201 | this.addToolbarItem ( |
202 | new ToolbarItem ( |
203 | '🛠️', |
204 | theTranslator.getText ( 'TravelNotesToolbar - About Travel & Notes' ), |
205 | ( ) => new AboutDialog ( ).show ( ) |
206 | ) |
207 | ); |
208 | if ( document.fullscreenEnabled ) { |
209 | this.addToolbarItem ( |
210 | document.fullscreenElement |
211 | ? |
212 | new ToolbarItem ( |
213 | '🔻', |
214 | theTranslator.getText ( 'TravelNotesToolbar - disable fullscreen' ), |
215 | ( ) => theFullScreenUI.toggle ( ) |
216 | ) |
217 | : |
218 | new ToolbarItem ( |
219 | '🔺', |
220 | theTranslator.getText ( 'TravelNotesToolbar - enable fullscreen' ), |
221 | ( ) => theFullScreenUI.toggle ( ) |
222 | ) |
223 | ); |
224 | } |
225 | this.addToolbarItem ( |
226 | new ToolbarItem ( |
227 | '+', |
228 | theTranslator.getText ( 'TravelNotesToolbar - Increment the font size' ), |
229 | ( ) => { theFontSizeManager.increment ( ); } |
230 | ) |
231 | ); |
232 | this.addToolbarItem ( |
233 | new ToolbarItem ( |
234 | '-', |
235 | theTranslator.getText ( 'TravelNotesToolbar - Decrement the font size' ), |
236 | ( ) => { theFontSizeManager.decrement ( ); } |
237 | ) |
238 | ); |
239 | this.addToolbarItem ( |
240 | new ToolbarItem ( |
241 | '🏠', |
242 | 'Home', |
243 | window.location.origin |
244 | ) |
245 | ); |
246 | this.addToolbarItem ( |
247 | new ToolbarItem ( |
248 | '?', |
249 | 'Help', |
250 | 'https://wwwouaiebe.github.io/TravelNotes/userGuides/README.html\u0023' |
251 | ) |
252 | ); |
253 | this.addToolbarItem ( |
254 | new ToolbarItem ( |
255 | '@', |
256 | 'Contact', |
257 | ( theConfig.travelNotesToolbar.contactMail.url || window.location.origin ) |
258 | ) |
259 | ); |
260 | } |
261 | } |
262 | |
263 | |
264 | |
265 | |
266 | |
267 | |
268 | |
269 | |
270 | const theTravelNotesToolbar = new TravelNotesToolbar ( ); |
271 | |
272 | export default theTravelNotesToolbar; |
273 | |
274 | |
275 | |