@@ -30,6 +30,9 @@ function fireOnReady() {
3030 document . getElementById ( "btn-tm-hits" ) . classList . remove ( "active" ) ;
3131 document . getElementById ( "tm-hits" ) . style . display = "none" ;
3232 }
33+ document . getElementById ( "btn-save-progress" ) . onclick = function ( ) {
34+ save ( ) ;
35+ }
3336}
3437
3538window . selectedTU = null ;
@@ -316,7 +319,108 @@ function resolveLQI(closeSpan) {
316319 xhttp . open ( "POST" , queryURL , true ) ;
317320 xhttp . send ( lQIFormData ) ;
318321}
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+ }
320424 paragraph_no = target_cell . parentNode . getAttribute ( "p-id" ) ;
321425 segment_no = target_cell . parentNode . getAttribute ( "id" ) ;
322426 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) {
329433 target_segment = "<target>" + target_segment + "</target>" ;
330434 }
331435
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+ // }
335439
336440 let xhttp = new XMLHttpRequest ( ) ;
337441 let queryURL = "http://127.0.0.1:8000/project/"
@@ -353,6 +457,10 @@ function submitSegment(target_cell, segment_state) {
353457 if ( this . readyState == 4 && this . status == 200 ) {
354458 console . log ( "Segment #" + segment_no + " submitted succesfully!" ) ;
355459 target_cell . parentNode . className = segment_state ;
460+ if ( nextSegment )
461+ {
462+ nextSegment . focus ( ) ;
463+ }
356464 } else if ( this . readyState == 4 && this . status != 200 ) {
357465 console . error ( "Segment #" + segment_no + " not submitted succesfully!" ) ;
358466 target_cell . parentNode . className = 'error' ;
@@ -477,44 +585,61 @@ function segmentSelect(segmentRow) {
477585function tagClickHandler ( tag ) {
478586 tag . parentNode . parentNode . getElementsByClassName ( "target" ) [ 0 ] .
479587 innerHTML += tag . outerHTML ;
480- tag . parentNode . parentNode . classList . remove ( "translated" ) ;
588+ tag . parentNode . parentNode . classList . remove ( ( "translated" , "reviewed" , "blank" ) ) ;
481589 tag . parentNode . parentNode . classList . add ( "draft" ) ;
590+ tag . parentNode . parentNode . getElementsByClassName ( "target" ) [ 0 ] . focus ( ) ;
591+ document . execCommand ( 'selectAll' , false , null ) ;
592+ document . getSelection ( ) . collapseToEnd ( ) ;
482593}
483594function targetKeydownHandler ( e , target_cell ) {
484595 if ( e . key == "Enter" ) {
485596 e . preventDefault ( ) ;
486597 if ( e . ctrlKey ) {
487598 target_cell . parentNode . classList . remove ( "draft" ) ;
488- submitSegment ( target_cell , "translated" ) ;
489599 jumpToNextConfirmedSegment = ! e . shiftKey ;
490600 targetList = [ ...document . getElementsByClassName ( "target" ) ] . slice ( 1 ) ;
491601 currentId = targetList . findIndex ( function ( element ) { return element == target_cell } )
602+ nextSegment = null ;
492603 for ( i = currentId + 1 ; i < targetList . length ; i ++ ) {
493604 target = targetList [ i ] ;
494605 if ( ! target . parentNode . classList . contains ( "translated" ) && jumpToNextConfirmedSegment ) {
495- target . focus ( ) ;
606+ nextSegment = target ;
496607 break ;
497608 }
498609 }
610+ if ( editorMode == "review" )
611+ {
612+ segmentState = "reviewed" ;
613+ }
614+ else
615+ {
616+ segmentState = "translated" ;
617+ }
618+ submitSegment ( target_cell , segmentState , nextSegment ) ;
499619 }
500620 }
501621 else if ( e . ctrlKey ) {
502622 if ( e . key == "Insert" ) {
503623 target_cell . innerHTML = target_cell . parentNode . getElementsByClassName ( "source" ) [ 0 ] . innerHTML ;
504624 }
625+ else if ( e . key == 's' || e . key == 'S' )
626+ {
627+ save ( ) ;
628+ }
505629 }
506630 else if ( e . key == "Tab" ) {
507631 e . preventDefault ( ) ;
508632 targetList = [ ...document . getElementsByClassName ( "target" ) ] . slice ( 1 ) ;
509633 currentId = targetList . findIndex ( function ( element ) { return element == target_cell } )
510- if ( currentId < targetList . length ) {
634+ if ( currentId < targetList . length - 1 ) {
511635 targetList [ currentId + 1 ] . focus ( ) ;
512636 }
513637 }
514638 else if ( e . shiftKey ) { }
515639 else {
516640 target_cell . parentNode . classList . remove ( "translated" ) ;
517641 target_cell . parentNode . classList . add ( "draft" ) ;
642+ document . getElementById ( "btn-save-progress" ) . disabled = false ;
518643 }
519644} ;
520645if ( document . readyState === "complete" ) {
0 commit comments