@@ -23,6 +23,7 @@ jQuery.noConflict();
23
23
, FACEBOOK_DOMAIN_REGEX = / f a c e b o o k .c o m /
24
24
, GMAIL_DOMAIN_REGEX = / m a i l .g o o g l e .c o m /
25
25
, INBOX_DOMAIN_REGEX = / i n b o x .g o o g l e .c o m /
26
+ , GTT_DOMAIN_REGEX = / t r a n s l a t e .g o o g l e .c o m /
26
27
, OUTLOOK_DOMAIN_REGEX = / m a i l .l i v e .c o m /
27
28
, MAILCHIMP_DOMAIN_REGEX = / a d m i n .m a i l c h i m p .c o m /
28
29
@@ -37,6 +38,7 @@ jQuery.noConflict();
37
38
, SELECTOR_INPUT = 'div[contenteditable=true],body[contenteditable=true],textarea,input'
38
39
, SELECTOR_GMAIL_EDIT = 'div.aoI' // Class for Gmail's popup message composer
39
40
, SELECTOR_INBOX_EDIT = 'div.aT' // Class for Inbox's inline reply container
41
+ , SELECTOR_GTT_EDIT = 'div.goog-splitpane-second-container' // GTT editor
40
42
, SELECTOR_MAILCHIMP_EDIT = 'iframe.cke_wysiwyg_frame' // Mailchimp web editor
41
43
, SELECTOR_OUTLOOK_EDIT = '#ComposeRteEditor_surface' // Outlook web editor
42
44
, SELECTOR_EVERNOTE_EDIT = 'gwt-debug-noteEditor' // Evernote web note editor
@@ -217,6 +219,8 @@ jQuery.noConflict();
217
219
replaceTextEvernote ( shortcut , autotext ) ;
218
220
} else if ( MAILCHIMP_DOMAIN_REGEX . test ( domain ) ) {
219
221
replaceTextMailchimp ( shortcut , autotext ) ;
222
+ } else if ( GTT_DOMAIN_REGEX . test ( domain ) ) {
223
+ replaceTextTranslate ( shortcut , autotext ) ;
220
224
} else if ( BASECAMP_DOMAIN_REGEX . test ( domain ) ) {
221
225
replaceTextBasecamp ( shortcut , autotext ) ;
222
226
} else {
@@ -366,6 +370,21 @@ jQuery.noConflict();
366
370
replaceTextContentEditable ( shortcut , autotext , node , iframeWindow ) ;
367
371
}
368
372
373
+ // Specific handler for Google Translate iframe replacements
374
+ function replaceTextTranslate ( shortcut , autotext )
375
+ {
376
+ debugLog ( "Domain: Google Translate" ) ;
377
+
378
+ // Get the focused / selected text node
379
+ var iframeWindow = document . querySelector ( SELECTOR_GTT_EDIT )
380
+ . querySelector ( 'iframe' ) . contentWindow ;
381
+ var node = findFocusedNode ( iframeWindow ) ;
382
+ debugLog ( "node:" , node ) ;
383
+
384
+ // Pass onto editable iframe text handler
385
+ replaceTextContentEditable ( shortcut , autotext , node , iframeWindow ) ;
386
+ }
387
+
369
388
// Reusable handler for editable iframe text replacements
370
389
function replaceTextContentEditable ( shortcut , autotext , node , win )
371
390
{
@@ -809,7 +828,6 @@ jQuery.noConflict();
809
828
// Add to editable divs, textareas, inputs
810
829
var $document = $ ( document ) ;
811
830
var domain = window . location . host ;
812
-
813
831
$document . on ( EVENT_NAME_KEYPRESS , SELECTOR_INPUT , keyPressHandler ) ;
814
832
$document . on ( EVENT_NAME_KEYUP , SELECTOR_INPUT , keyUpHandler ) ;
815
833
$document . on ( EVENT_NAME_BLUR , SELECTOR_INPUT , clearTypingBuffer ) ;
@@ -862,6 +880,21 @@ jQuery.noConflict();
862
880
} , TIME_EDITOR_CHECK ) ;
863
881
}
864
882
883
+ // Special case for Google Translate
884
+ if ( GTT_DOMAIN_REGEX . test ( domain ) )
885
+ {
886
+ debugLog ( "Domain: Google Translate" ) ;
887
+
888
+ // Annoying, need to check for existence of editor element
889
+ var editorCheck = setInterval ( function ( ) {
890
+ var $target = $ ( SELECTOR_GTT_EDIT ) ;
891
+ if ( $target . length ) {
892
+ clearInterval ( editorCheck ) ;
893
+ addListenersToIframe ( $target . find ( 'iframe' ) ) ;
894
+ }
895
+ } , TIME_EDITOR_CHECK ) ;
896
+ }
897
+
865
898
// Special case for Mailchimp
866
899
if ( MAILCHIMP_DOMAIN_REGEX . test ( domain ) )
867
900
{
0 commit comments