@@ -30,6 +30,9 @@ function fireOnReady() {
30
30
document . getElementById ( "btn-tm-hits" ) . classList . remove ( "active" ) ;
31
31
document . getElementById ( "tm-hits" ) . style . display = "none" ;
32
32
}
33
+ document . getElementById ( "btn-save-progress" ) . onclick = function ( ) {
34
+ save ( ) ;
35
+ }
33
36
}
34
37
35
38
window . selectedTU = null ;
@@ -316,7 +319,108 @@ function resolveLQI(closeSpan) {
316
319
xhttp . open ( "POST" , queryURL , true ) ;
317
320
xhttp . send ( lQIFormData ) ;
318
321
}
319
- function submitSegment ( target_cell , segment_state ) {
322
+ function save ( ) {
323
+ document . getElementById ( "btn-save-progress" ) . disabled = true ;
324
+
325
+
326
+ let segments = [ ] ;
327
+
328
+ [ ...document . getElementById ( "editor-view" ) . getElementsByClassName ( "target" ) ] . forEach ( ( targetCell , i ) => {
329
+ let target = targetCell . innerHTML . replace ( / & n b s p ; / g, " " ) . replace ( / < p h d r a g g a b l e = " t r u e " c o n t e n t e d i t a b l e = " f a l s e " > \\ n < \/ p h > / g, "\n" ) ;
330
+ if ( target == "" )
331
+ {
332
+ target = "<target/>" ;
333
+ }
334
+ else
335
+ {
336
+ target = "<target>" + target + "</target>" ;
337
+ }
338
+
339
+ let state = targetCell . parentNode . classList ;
340
+ if ( state . contains ( "draft" ) )
341
+ {
342
+ state = "draft" ;
343
+ }
344
+ else if ( state . contains ( "translated" ) )
345
+ {
346
+ state = "translated" ;
347
+ }
348
+ else if ( state . contains ( "reviewed" ) )
349
+ {
350
+ state = "reviewed" ;
351
+ }
352
+ else if ( target != "<target/>" )
353
+ {
354
+ state = "draft" ;
355
+ }
356
+ else
357
+ {
358
+ state = "blank" ;
359
+ }
360
+ segment = {
361
+ "tu-i" : targetCell . parentNode . getAttribute ( "p-id" ) ,
362
+ "s-i" : targetCell . parentNode . getAttribute ( "id" ) ,
363
+ "source" : "<source>" + targetCell . parentNode . getElementsByClassName ( "source" ) [ 0 ] . innerHTML . replace ( / & n b s p ; / g, " " ) . replace ( / < p h d r a g g a b l e = " t r u e " c o n t e n t e d i t a b l e = " f a l s e " > \\ n < \/ p h > / g, "\n" ) + "</source>" ,
364
+ "target" : target ,
365
+ "state" : state
366
+ }
367
+
368
+ segments . push ( segment ) ;
369
+ } ) ;
370
+
371
+ let xhttp = new XMLHttpRequest ( ) ;
372
+ let queryURL = "http://127.0.0.1:8000/project/"
373
+ + filesView . getAttribute ( "cur-p-id" )
374
+ + "/file/"
375
+ + editorView . getAttribute ( "cur-f-id" ) ;
376
+
377
+ let segmentsForm = new FormData ( ) ;
378
+ segmentsForm . append ( "task" , "save_progress" ) ;
379
+ segmentsForm . append ( "editor_mode" , editorMode ) ;
380
+ segmentsForm . append ( "segments" , JSON . stringify ( segments ) ) ;
381
+ segmentsForm . append ( "author_id" , window . username ) ;
382
+
383
+ xhttp . onreadystatechange = function ( ) {
384
+ if ( this . readyState == 4 && this . status == 200 ) {
385
+ console . log ( "Segments submitted succesfully!" ) ;
386
+ [ ...document . getElementById ( "editor-view" ) . getElementsByClassName ( "target" ) ] . forEach ( ( targetCell , i ) => {
387
+ targetCell . parentNode . classList . remove ( "error" ) ;
388
+ } ) ;
389
+
390
+ } else if ( this . readyState == 4 && this . status != 200 ) {
391
+ console . error ( "Segments not submitted succesfully!" ) ;
392
+ document . getElementById ( "btn-save-progress" ) . disabled = false ;
393
+ }
394
+ }
395
+
396
+ xhttp . open ( "POST" , queryURL , true ) ;
397
+ xhttp . send ( segmentsForm ) ;
398
+
399
+ }
400
+ function submitSegment ( target_cell , segment_state , nextSegment = null ) {
401
+ if ( segment_state == null )
402
+ {
403
+ if ( target_cell . parentNode . className == "translated" || target_cell . parentNode . className == "reviewed" )
404
+ {
405
+ return ;
406
+ }
407
+ else if ( target_cell . parentNode . classList . contains ( "blank" ) )
408
+ {
409
+ segment_state = "blank" ;
410
+ }
411
+ else if ( target_cell . parentNode . classList . contains ( "draft" ) )
412
+ {
413
+ segment_state = "draft" ;
414
+ }
415
+ else if ( target_cell . parentNode . classList . contains ( "translated" ) )
416
+ {
417
+ segment_state = "translated" ;
418
+ }
419
+ else
420
+ {
421
+ segment_state = "draft" ;
422
+ }
423
+ }
320
424
paragraph_no = target_cell . parentNode . getAttribute ( "p-id" ) ;
321
425
segment_no = target_cell . parentNode . getAttribute ( "id" ) ;
322
426
source_segment = "<source>" + target_cell . parentNode . getElementsByClassName ( "source" ) [ 0 ] . innerHTML . replace ( / & n b s p ; / g, " " ) . replace ( / < p h d r a g g a b l e = " t r u e " c o n t e n t e d i t a b l e = " f a l s e " > \\ n < \/ p h > / g, "\n" ) + "</source>" ;
@@ -329,9 +433,9 @@ function submitSegment(target_cell, segment_state) {
329
433
target_segment = "<target>" + target_segment + "</target>" ;
330
434
}
331
435
332
- if ( segment_state == "draft" && ! target_cell . parentNode . classList . contains ( "draft" ) ) {
333
- return false ;
334
- }
436
+ // if (segment_state == "draft" && !target_cell.parentNode.classList.contains("draft")) {
437
+ // return false;
438
+ // }
335
439
336
440
let xhttp = new XMLHttpRequest ( ) ;
337
441
let queryURL = "http://127.0.0.1:8000/project/"
@@ -353,6 +457,10 @@ function submitSegment(target_cell, segment_state) {
353
457
if ( this . readyState == 4 && this . status == 200 ) {
354
458
console . log ( "Segment #" + segment_no + " submitted succesfully!" ) ;
355
459
target_cell . parentNode . className = segment_state ;
460
+ if ( nextSegment )
461
+ {
462
+ nextSegment . focus ( ) ;
463
+ }
356
464
} else if ( this . readyState == 4 && this . status != 200 ) {
357
465
console . error ( "Segment #" + segment_no + " not submitted succesfully!" ) ;
358
466
target_cell . parentNode . className = 'error' ;
@@ -477,44 +585,61 @@ function segmentSelect(segmentRow) {
477
585
function tagClickHandler ( tag ) {
478
586
tag . parentNode . parentNode . getElementsByClassName ( "target" ) [ 0 ] .
479
587
innerHTML += tag . outerHTML ;
480
- tag . parentNode . parentNode . classList . remove ( "translated" ) ;
588
+ tag . parentNode . parentNode . classList . remove ( ( "translated" , "reviewed" , "blank" ) ) ;
481
589
tag . parentNode . parentNode . classList . add ( "draft" ) ;
590
+ tag . parentNode . parentNode . getElementsByClassName ( "target" ) [ 0 ] . focus ( ) ;
591
+ document . execCommand ( 'selectAll' , false , null ) ;
592
+ document . getSelection ( ) . collapseToEnd ( ) ;
482
593
}
483
594
function targetKeydownHandler ( e , target_cell ) {
484
595
if ( e . key == "Enter" ) {
485
596
e . preventDefault ( ) ;
486
597
if ( e . ctrlKey ) {
487
598
target_cell . parentNode . classList . remove ( "draft" ) ;
488
- submitSegment ( target_cell , "translated" ) ;
489
599
jumpToNextConfirmedSegment = ! e . shiftKey ;
490
600
targetList = [ ...document . getElementsByClassName ( "target" ) ] . slice ( 1 ) ;
491
601
currentId = targetList . findIndex ( function ( element ) { return element == target_cell } )
602
+ nextSegment = null ;
492
603
for ( i = currentId + 1 ; i < targetList . length ; i ++ ) {
493
604
target = targetList [ i ] ;
494
605
if ( ! target . parentNode . classList . contains ( "translated" ) && jumpToNextConfirmedSegment ) {
495
- target . focus ( ) ;
606
+ nextSegment = target ;
496
607
break ;
497
608
}
498
609
}
610
+ if ( editorMode == "review" )
611
+ {
612
+ segmentState = "reviewed" ;
613
+ }
614
+ else
615
+ {
616
+ segmentState = "translated" ;
617
+ }
618
+ submitSegment ( target_cell , segmentState , nextSegment ) ;
499
619
}
500
620
}
501
621
else if ( e . ctrlKey ) {
502
622
if ( e . key == "Insert" ) {
503
623
target_cell . innerHTML = target_cell . parentNode . getElementsByClassName ( "source" ) [ 0 ] . innerHTML ;
504
624
}
625
+ else if ( e . key == 's' || e . key == 'S' )
626
+ {
627
+ save ( ) ;
628
+ }
505
629
}
506
630
else if ( e . key == "Tab" ) {
507
631
e . preventDefault ( ) ;
508
632
targetList = [ ...document . getElementsByClassName ( "target" ) ] . slice ( 1 ) ;
509
633
currentId = targetList . findIndex ( function ( element ) { return element == target_cell } )
510
- if ( currentId < targetList . length ) {
634
+ if ( currentId < targetList . length - 1 ) {
511
635
targetList [ currentId + 1 ] . focus ( ) ;
512
636
}
513
637
}
514
638
else if ( e . shiftKey ) { }
515
639
else {
516
640
target_cell . parentNode . classList . remove ( "translated" ) ;
517
641
target_cell . parentNode . classList . add ( "draft" ) ;
642
+ document . getElementById ( "btn-save-progress" ) . disabled = false ;
518
643
}
519
644
} ;
520
645
if ( document . readyState === "complete" ) {
0 commit comments