3
3
// Setup in msgfmt:core on server, only used on the client in msgfmt:ui
4
4
mfPkg . mfRevisions = new Mongo . Collection ( 'mfRevisions' ) ;
5
5
6
+ var ironRouter = Package [ 'iron:router' ] && Package [ 'iron:router' ] . Router ;
7
+
6
8
/*
7
9
* Finds the name of the first route using the given template
8
10
*/
9
11
function routeNameFromTemplate ( name ) {
10
- var route = _ . find ( Router . routes , function ( route ) {
11
- if ( route . options . template )
12
- return route . options . template == name ;
13
- else
14
- return route . name == name ;
15
- } ) ;
16
- return route && route . name ;
12
+ var route ;
13
+
14
+ if ( ironRouter ) {
15
+
16
+ route = _ . find ( ironRouter . routes , function ( route ) {
17
+ if ( route . options . template )
18
+ return route . options . template === name ;
19
+ else
20
+ return route . getName ( ) === name ;
21
+ } ) ;
22
+ return route && route . getName ( ) ;
23
+
24
+ }
25
+
26
+ // Unsupported router
27
+ return ;
28
+ }
29
+
30
+ function routePathFromName ( name ) {
31
+ if ( ironRouter )
32
+ return ironRouter . path ( name ) ;
17
33
}
18
34
19
35
/*
@@ -92,103 +108,98 @@ function changeKey(newKey) {
92
108
$ ( '#mfTransDest' ) . focus ( ) ;
93
109
}
94
110
95
- if ( Package [ 'iron:router' ] )
96
- Package [ 'iron:router' ] . Router . map ( function ( ) {
97
- // Main translation page, summary of all language data
98
- this . route ( 'mfTrans' , {
99
- path : '/translate' ,
100
- waitOn : function ( ) {
101
- return Meteor . subscribe ( 'mfStats' ) ;
102
- } ,
103
- data : function ( ) {
104
- var data = { } ;
105
- data . strings = mfPkg . mfStrings . find ( ) ;
106
- data . stats = mfPkg . mfMeta . findOne ( { _id : '__stats' } ) ;
107
- data . native = mfPkg . native ;
108
- return data ;
109
- }
110
- } ) ;
111
+ RouterLayer . route ( '/translate' , { template : 'mfTrans' } ) ;
112
+ RouterLayer . route ( '/translate/:lang' , { template : 'mfTransLang' } ) ;
113
+
114
+ Template . mfTrans . onCreated ( function ( ) {
115
+ this . subscribe ( 'mfStats' ) ;
116
+ } ) ;
111
117
112
- // Modify translations for a particular language
113
- this . route ( 'mfTransLang' , {
114
- path : '/translate/:lang' ,
115
- waitOn : function ( ) {
116
- // Note, this is in ADDITION to the regular mfStrings sub
117
- return Meteor . subscribe ( 'mfStrings' ,
118
- [ mfPkg . native , this . params . lang ] , 0 , true ) ;
119
- } ,
120
- onBeforeAction : function ( ) {
121
- if ( ! mfPkg . webUI . allowed . call ( this ) || mfPkg . webUI . denied . call ( this ) ) {
122
- this . render ( 'mfTransLangDenied' ) ;
123
- } else {
124
- // Temporary, only used to override preserve on dest
125
- Session . set ( 'mfTransTrans' , this . params . lang ) ;
126
-
127
- // Handle ctrl-up/ctrl-down, respectively
128
- $ ( window ) . on ( 'keydown.mfTrans' , function ( event ) {
129
- if ( event . ctrlKey && ( event . which == 38 || event . which == 40 ) ) {
130
- event . preventDefault ( ) ; event . stopPropagation ( ) ;
131
- var tr = event . which == 38
132
- ? $ ( '#mfTransLang tr.current' ) . prev ( )
133
- : $ ( '#mfTransLang tr.current' ) . next ( ) ;
134
- if ( tr . length ) {
135
- changeKey ( tr . data ( 'key' ) ) ;
136
- mfCheckScroll ( tr ) ;
137
- }
138
- }
139
- } ) ;
140
-
141
- this . subscribe ( 'mfRevisions' , this . params . lang , 10 ) ;
142
- this . next ( ) ;
118
+ Template . mfTransLang . onCreated ( function ( ) {
119
+ // Note, this is in ADDITION to the regular mfStrings sub
120
+ var lang = RouterLayer . getParam ( 'lang' ) ;
121
+ this . subscribe ( 'mfStrings' , [ mfPkg . native , lang ] , 0 , true ) ;
122
+ this . subscribe ( 'mfRevisions' , lang , 10 ) ;
123
+
124
+ // Temporary, only used to override preserve on dest
125
+ Session . set ( 'mfTransTrans' , lang ) ;
126
+
127
+ // Handle ctrl-up/ctrl-down, respectively
128
+ $ ( window ) . on ( 'keydown.mfTrans' , function ( event ) {
129
+ if ( event . ctrlKey && ( event . which == 38 || event . which == 40 ) ) {
130
+ event . preventDefault ( ) ; event . stopPropagation ( ) ;
131
+ var tr = event . which == 38
132
+ ? $ ( '#mfTransLang tr.current' ) . prev ( )
133
+ : $ ( '#mfTransLang tr.current' ) . next ( ) ;
134
+ if ( tr . length ) {
135
+ changeKey ( tr . data ( 'key' ) ) ;
136
+ mfCheckScroll ( tr ) ;
143
137
}
144
- } ,
145
- onStop : function ( ) {
146
- $ ( window ) . off ( 'keydown.mfTrans' ) ;
147
- } ,
148
- data : function ( ) {
149
- var data = { strings : { } } ;
150
- var strings , out = { } ;
151
- data . orig = mfPkg . native ;
152
- data . trans = this . params . lang ;
153
-
154
- // summarise matching keys (orig + trans) to a single record
155
- strings = mfPkg . mfStrings . find ( {
156
- $and : [ { $or : [ { lang : data . orig } , { lang : this . params . lang } ] } ,
157
- { removed : undefined } ]
158
- } ) . fetch ( ) ;
159
- _ . each ( strings , function ( str ) {
160
- if ( ! out [ str . key ] )
161
- out [ str . key ] = { key : str . key } ;
162
- if ( str . lang == data . orig )
163
- out [ str . key ] . orig = str . text ;
164
- else
165
- out [ str . key ] . trans = str . text ;
166
- if ( str . fuzzy )
167
- out [ str . key ] . fuzzy = true ;
168
- } ) ;
169
- data . strings = _ . values ( out ) ;
170
- data . strings . sort ( function ( a , b ) {
171
- if ( ! a . trans && b . trans )
172
- return - 1 ;
173
- else if ( a . trans && ! b . trans )
174
- return 1 ;
175
-
176
- if ( ! a . fuzzy && b . fuzzy )
177
- return - 1 ;
178
- else if ( b . fuzzy && ! a . fuzzy )
179
- return 1 ;
180
-
181
- return a . text - b . text ;
182
- } ) ;
183
-
184
- return data ;
185
138
}
186
139
} ) ;
187
140
} ) ;
188
141
142
+ Template . mfTransLang . onDestroyed ( function ( ) {
143
+ $ ( window ) . off ( 'keydown.mfTrans' ) ;
144
+ } ) ;
145
+
146
+ Template . mfTrans . helpers ( {
147
+ strings : function ( ) { return mfPkg . mfStrings . find ( ) ; } ,
148
+ stats : function ( ) { return mfPkg . mfMeta . findOne ( { _id : '__stats' } ) ; } ,
149
+ native : mfPkg . native ,
150
+ allowed : function ( ) {
151
+ return ! mfPkg . webUI . allowed . call ( this ) || mfPkg . webUI . denied . call ( this ) ;
152
+ }
153
+ } ) ;
154
+
155
+ Template . mfTransLang . helpers ( {
156
+ allowed : function ( ) {
157
+ return ! mfPkg . webUI . allowed . call ( this ) || mfPkg . webUI . denied . call ( this ) ;
158
+ } ,
159
+ strings : function ( ) {
160
+ var orig = mfPkg . native ;
161
+ var lang = RouterLayer . getParam ( 'lang' ) ;
162
+
163
+ // summarise matching keys (orig + trans) to a single record
164
+ var out = { } , strings = mfPkg . mfStrings . find ( {
165
+ $and : [ { $or : [ { lang : orig } , { lang : lang } ] } ,
166
+ { removed : undefined } ]
167
+ } ) . fetch ( ) ;
168
+
169
+ _ . each ( strings , function ( str ) {
170
+ if ( ! out [ str . key ] )
171
+ out [ str . key ] = { key : str . key } ;
172
+ if ( str . lang == orig )
173
+ out [ str . key ] . orig = str . text ;
174
+ else
175
+ out [ str . key ] . trans = str . text ;
176
+ if ( str . fuzzy )
177
+ out [ str . key ] . fuzzy = true ;
178
+ } ) ;
179
+
180
+ strings = _ . values ( out ) ;
181
+ strings . sort ( function ( a , b ) {
182
+ if ( ! a . trans && b . trans )
183
+ return - 1 ;
184
+ else if ( a . trans && ! b . trans )
185
+ return 1 ;
186
+
187
+ if ( ! a . fuzzy && b . fuzzy )
188
+ return - 1 ;
189
+ else if ( b . fuzzy && ! a . fuzzy )
190
+ return 1 ;
191
+
192
+ return a . text - b . text ;
193
+ } ) ;
194
+
195
+ return strings ;
196
+ }
197
+ } ) ;
198
+
199
+
189
200
Template . mfTrans . events ( {
190
201
'click #mfTransNewSubmit' : function ( ) {
191
- Router . go ( '/translate/' + $ ( '#mfTransNewText' ) . val ( ) ) ;
202
+ RouterLayer . go ( 'mfTransLang' , { lang : $ ( '#mfTransNewText' ) . val ( ) } ) ;
192
203
} ,
193
204
'click #mfAllJs' : function ( event , tpl ) {
194
205
// Make sure we have no conflicts with iron-router
@@ -223,26 +234,25 @@ Template.mfTransLang.helpers({
223
234
mfTransOrig : function ( ) {
224
235
var str = mfPkg . mfStrings . findOne ( {
225
236
key : Session . get ( 'mfTransKey' ) ,
226
- lang : this . orig
237
+ lang : mfPkg . native
227
238
} ) ;
228
239
return str ? str . text : '' ;
229
240
} ,
230
241
mfTransTrans : function ( ) {
231
242
var str = mfPkg . mfStrings . findOne ( {
232
243
key : Session . get ( 'mfTransKey' ) ,
233
- lang : this . trans
244
+ lang : RouterLayer . getParam ( 'lang' )
234
245
} ) ;
235
246
return str ? str . text : '' ;
236
247
} ,
237
248
keyInfo : function ( ) {
238
249
var str = mfPkg . mfStrings . findOne ( {
239
250
key : Session . get ( 'mfTransKey' ) ,
240
- lang : this . orig
251
+ lang : mfPkg . native
241
252
} ) ;
242
253
if ( str && str . template ) {
243
254
var routeName = routeNameFromTemplate ( str . template ) ;
244
- if ( routeName )
245
- str . routeUrl = Router . path ( routeName ) ;
255
+ if ( routeName ) str . routeUrl = routePathFromName ( routeName ) ;
246
256
}
247
257
return str || { } ;
248
258
}
@@ -257,7 +267,7 @@ var initialRender = _.once(function() {
257
267
$ ( '#mfTransDest' ) . focus ( ) ;
258
268
} ) ;
259
269
260
- Template . mfTransLang . rendered = function ( ) {
270
+ Template . mfTransLang . onRendered ( function ( ) {
261
271
var tr , key = Session . get ( 'mfTransKey' ) ;
262
272
263
273
// For unset or nonexistent key, set to first row
@@ -269,4 +279,4 @@ Template.mfTransLang.rendered = function() {
269
279
var transDest = $ ( '#mfTransDest' ) ;
270
280
if ( typeof transDest . tabOverride === 'function' ) transDest . tabOverride ( ) ;
271
281
initialRender ( ) ;
272
- } ;
282
+ } ) ;
0 commit comments