@@ -108,13 +108,17 @@ class ZeroWidthEncoder {
108
108
109
109
class LiveTranslatorEnabler {
110
110
_enabled : boolean
111
- persist : boolean
111
+ _persist : boolean
112
+ _options : LiveTranslatorPluginOptions
113
+ _callback : CallableFunction
112
114
113
- constructor ( persist : boolean ) {
115
+ constructor ( options : LiveTranslatorPluginOptions , callback : CallableFunction ) {
114
116
this . _enabled = false
115
- this . persist = persist
117
+ this . _persist = options . persist || false
118
+ this . _options = options
119
+ this . _callback = callback
116
120
const savedRaw = localStorage . getItem ( 'live-translator-enabled' )
117
- if ( persist && savedRaw ) {
121
+ if ( this . _persist && savedRaw ) {
118
122
const saved = JSON . parse ( savedRaw )
119
123
if ( typeof saved === 'boolean' ) {
120
124
this . toggle ( saved )
@@ -132,9 +136,15 @@ class LiveTranslatorEnabler {
132
136
} else {
133
137
this . _enabled = ! this . _enabled
134
138
}
135
- if ( this . persist ) {
139
+ if ( this . _persist ) {
136
140
localStorage . setItem ( 'live-translator-enabled' , JSON . stringify ( this . _enabled ) )
137
141
}
142
+ // Refresh translations to show immediately
143
+ const originalLocale = this . _options . i18n . locale
144
+ this . _options . i18n . locale = ''
145
+ this . _options . i18n . locale = originalLocale
146
+
147
+ this . _callback ( )
138
148
}
139
149
}
140
150
@@ -175,30 +185,9 @@ const createBadge = (meta: TranslationMeta, options: LiveTranslatorPluginOptions
175
185
export const LiveTranslatorPlugin = {
176
186
install ( app : VueConstructor < Vue > , options : LiveTranslatorPluginOptions ) {
177
187
console . log ( 'LiveTranslator is installed' )
178
- const zw = new ZeroWidthEncoder ( )
179
- const ltEnabler = new LiveTranslatorEnabler ( options . persist || false )
180
-
181
- const enableButton = document . createElement ( 'button' )
182
- enableButton . innerText = 'LT'
183
- enableButton . classList . add ( 'live-translator-enable-button' )
184
- const indicator = document . createElement ( 'span' )
185
- indicator . classList . add ( 'live-translator-enable-button-indicator' )
186
- enableButton . appendChild ( indicator )
187
- enableButton . addEventListener ( 'click' , ( ) => {
188
- ltEnabler . toggle ( )
189
- visualize ( )
190
- // Refresh translations to show immediately
191
- const originalLocale = options . i18n . locale
192
- options . i18n . locale = ''
193
- options . i18n . locale = originalLocale
194
- } )
195
- document . body . appendChild ( enableButton )
196
-
197
- const style = document . createElement ( 'style' )
198
- style . id = 'live-translator-plugin-style'
199
- style . innerHTML = css
200
- document . head . appendChild ( style )
201
188
189
+ // intantiate logic
190
+ const zw = new ZeroWidthEncoder ( )
202
191
const visualize = ( ) => {
203
192
const badges = document . querySelectorAll ( '.live-translator-badge' )
204
193
console . log ( 'clearing' , badges . length , 'badges' )
@@ -258,7 +247,26 @@ export const LiveTranslatorPlugin = {
258
247
}
259
248
}
260
249
}
250
+ const ltEnabler = new LiveTranslatorEnabler ( options , visualize )
251
+
252
+ // bind & style UI
253
+ const style = document . createElement ( 'style' )
254
+ style . id = 'live-translator-plugin-style'
255
+ style . innerHTML = css
256
+ document . head . appendChild ( style )
257
+
258
+ const enableButton = document . createElement ( 'button' )
259
+ enableButton . innerText = 'LT'
260
+ enableButton . classList . add ( 'live-translator-enable-button' )
261
+ const indicator = document . createElement ( 'span' )
262
+ indicator . classList . add ( 'live-translator-enable-button-indicator' )
263
+ enableButton . appendChild ( indicator )
264
+ enableButton . addEventListener ( 'click' , ( ) => {
265
+ ltEnabler . toggle ( )
266
+ } )
267
+ document . body . appendChild ( enableButton )
261
268
269
+ // encode meta to translation strings
262
270
const originalFormatter = options . i18n . formatter
263
271
options . i18n . formatter = {
264
272
interpolate ( message , values , path ) {
@@ -275,6 +283,7 @@ export const LiveTranslatorPlugin = {
275
283
} ,
276
284
}
277
285
286
+ // decode & visualize meta
278
287
const throttler = throttle ( visualize , 800 )
279
288
const observer = new MutationObserver ( throttler )
280
289
observer . observe ( document . documentElement ,
0 commit comments