@@ -199,23 +199,56 @@ Template.mfTransLang.helpers({
199
199
var orig = mfPkg . native ;
200
200
var lang = RouterLayer . getParam ( 'lang' ) ;
201
201
202
- // summarise matching keys (orig + trans) to a single record
203
- var out = { } , strings = mfPkg . mfStrings . find ( {
202
+ var query = {
204
203
$and : [ { $or : [ { lang : orig } , { lang : lang } ] } ,
205
204
{ removed : undefined } ]
206
- } ) . fetch ( ) ;
205
+ } ;
206
+
207
+ var filter = Session . get ( 'mfTransLangFilter' ) ;
208
+ if ( filter ) {
209
+ filter = new RegExp ( filter , 'i' ) ;
210
+ /*
211
+ since we need to recheck later anyways, no point doing twice
212
+ query.$and.push({
213
+ $or: [
214
+ { key: filter },
215
+ // { text: filter }, // cant do this here, need both langs
216
+ { file: filter }
217
+ ]
218
+ });
219
+ */
220
+ }
221
+
222
+ var out = { } , strings = mfPkg . mfStrings . find ( query ) . fetch ( ) ;
207
223
224
+ // summarise matching keys (orig + trans) to a single record
208
225
_ . each ( strings , function ( str ) {
209
226
if ( ! out [ str . key ] )
210
227
out [ str . key ] = { key : str . key } ;
211
- if ( str . lang == orig )
228
+
229
+ if ( str . lang == orig ) {
212
230
out [ str . key ] . orig = str . text ;
213
- else
231
+ out [ str . key ] . file = str . file ;
232
+ } else {
214
233
out [ str . key ] . trans = str . text ;
234
+ }
235
+
215
236
if ( str . fuzzy )
216
237
out [ str . key ] . fuzzy = true ;
217
238
} ) ;
218
239
240
+ // reject non-matches (can only do after orig/trans merge)
241
+ if ( filter )
242
+ _ . each ( out , function ( str , i ) {
243
+ if ( ! (
244
+ str . key . match ( filter ) ||
245
+ str . file . match ( filter ) ||
246
+ str . orig . match ( filter ) ||
247
+ ( str . trans && str . trans . match ( filter ) )
248
+ ) )
249
+ delete out [ i ] ;
250
+ } ) ;
251
+
219
252
strings = _ . values ( out ) ;
220
253
strings = sortStrings ( strings ) ;
221
254
@@ -243,9 +276,15 @@ Template.mfTransLang.events({
243
276
var key = tr . data ( 'key' ) ;
244
277
if ( key ) changeKey ( key ) ;
245
278
} ,
279
+ 'click #translationStatusSort' : function ( event ) {
280
+ Session . set ( 'translationStatusSort' , event . currentTarget . checked ) ;
281
+ } ,
246
282
'click #translationShowKey' : function ( event ) {
247
283
Session . set ( 'translationShowKey' , event . currentTarget . checked ) ;
248
284
} ,
285
+ 'click #translationShowFile' : function ( event ) {
286
+ Session . set ( 'translationShowFile' , event . currentTarget . checked ) ;
287
+ } ,
249
288
'click #translationCaseInsensitiveOrdering' : function ( event ) {
250
289
Session . set ( 'translationCaseInsensitiveOrdering' , event . currentTarget . checked ) ;
251
290
} ,
@@ -262,15 +301,24 @@ Template.mfTransLang.events({
262
301
} ,
263
302
'keyup #mfTransDest' : function ( event ) {
264
303
unsavedDest = event . target . value ;
304
+ } ,
305
+ 'keyup #mfTransLangFilter' : function ( event ) {
306
+ Session . set ( 'mfTransLangFilter' , event . target . value ) ;
265
307
}
266
308
} ) ;
267
309
268
310
Template . mfTransLang . helpers ( {
311
+ statusSort : function ( ) {
312
+ return Session . get ( 'translationStatusSort' ) ;
313
+ } ,
269
314
showKey : function ( ) {
270
315
return Session . get ( 'translationShowKey' ) ;
271
316
} ,
317
+ showFile : function ( ) {
318
+ return Session . get ( 'translationShowFile' ) ;
319
+ } ,
272
320
caseInsensitiveOrdering : function ( ) {
273
- return Session . get ( 'caseInsensitiveOrdering ' ) ;
321
+ return Session . get ( 'translationCaseInsensitiveOrdering ' ) ;
274
322
} ,
275
323
sortOrderHeaderClass : function ( headerSortField ) {
276
324
var classes = 'translationSort' ;
@@ -323,24 +371,31 @@ Template.mfTransLang.helpers({
323
371
} ,
324
372
isCheckboxChecked : function ( value ) {
325
373
return ( value === true ? 'checked' : '' ) ;
374
+ } ,
375
+ mfTransLangFilter : function ( ) {
376
+ return Session . get ( 'mfTransLangFilter' ) ;
326
377
}
327
378
} ) ;
328
379
380
+ Session . setDefault ( 'translationSortField' , 'orig' ) ;
381
+ Session . setDefault ( 'translationSortOrder' , 'asc' ) ;
382
+ Session . setDefault ( 'translationStatusSort' , true ) ;
383
+ Session . setDefault ( 'translationCaseInsensitiveOrdering' , false ) ;
384
+
329
385
var sortStrings = function ( strings ) {
330
386
var sortField = Session . get ( 'translationSortField' ) ;
331
387
var sortOrder = Session . get ( 'translationSortOrder' ) ;
332
- if ( ! sortField ) {
333
- Session . set ( 'translationSortField' , 'orig' ) ;
334
- sortField = 'orig' ;
335
- }
336
- if ( ! sortOrder ) {
337
- Session . set ( 'translationSortOrder' , 'asc' ) ;
338
- sortOrder = 'asc' ;
339
- }
388
+ var caseInsensitiveOrdering = Session . get ( 'translationCaseInsensitiveOrdering' ) ;
389
+
340
390
return strings . sort ( function ( a , b ) {
391
+ if ( Session . get ( 'translationStatusSort' ) ) {
392
+ if ( a . trans && ! b . trans || b . fuzzy ) return 1 ;
393
+ if ( ! a . trans && b . trans || ! b . fuzzy ) return - 1 ;
394
+ return 0 ;
395
+ }
396
+
341
397
var first = a [ sortField ] ;
342
398
var second = b [ sortField ] ;
343
- var caseInsensitiveOrdering = Session . get ( 'translationCaseInsensitiveOrdering' ) ;
344
399
if ( first && caseInsensitiveOrdering ) first = first . toLowerCase ( ) ;
345
400
if ( second && caseInsensitiveOrdering ) second = second . toLowerCase ( ) ;
346
401
if ( sortOrder === 'asc' ) {
0 commit comments