@@ -23,6 +23,7 @@ jQuery.noConflict();
2323 , FACEBOOK_DOMAIN_REGEX = / f a c e b o o k .c o m /
2424 , GMAIL_DOMAIN_REGEX = / m a i l .g o o g l e .c o m /
2525 , 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 /
2627 , OUTLOOK_DOMAIN_REGEX = / m a i l .l i v e .c o m /
2728 , MAILCHIMP_DOMAIN_REGEX = / a d m i n .m a i l c h i m p .c o m /
2829
@@ -37,6 +38,7 @@ jQuery.noConflict();
3738 , SELECTOR_INPUT = 'div[contenteditable=true],body[contenteditable=true],textarea,input'
3839 , SELECTOR_GMAIL_EDIT = 'div.aoI' // Class for Gmail's popup message composer
3940 , SELECTOR_INBOX_EDIT = 'div.aT' // Class for Inbox's inline reply container
41+ , SELECTOR_GTT_EDIT = 'div.goog-splitpane-second-container' // GTT editor
4042 , SELECTOR_MAILCHIMP_EDIT = 'iframe.cke_wysiwyg_frame' // Mailchimp web editor
4143 , SELECTOR_OUTLOOK_EDIT = '#ComposeRteEditor_surface' // Outlook web editor
4244 , SELECTOR_EVERNOTE_EDIT = 'gwt-debug-noteEditor' // Evernote web note editor
@@ -217,6 +219,8 @@ jQuery.noConflict();
217219 replaceTextEvernote ( shortcut , autotext ) ;
218220 } else if ( MAILCHIMP_DOMAIN_REGEX . test ( domain ) ) {
219221 replaceTextMailchimp ( shortcut , autotext ) ;
222+ } else if ( GTT_DOMAIN_REGEX . test ( domain ) ) {
223+ replaceTextTranslate ( shortcut , autotext ) ;
220224 } else if ( BASECAMP_DOMAIN_REGEX . test ( domain ) ) {
221225 replaceTextBasecamp ( shortcut , autotext ) ;
222226 } else {
@@ -366,6 +370,21 @@ jQuery.noConflict();
366370 replaceTextContentEditable ( shortcut , autotext , node , iframeWindow ) ;
367371 }
368372
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+
369388 // Reusable handler for editable iframe text replacements
370389 function replaceTextContentEditable ( shortcut , autotext , node , win )
371390 {
@@ -809,7 +828,6 @@ jQuery.noConflict();
809828 // Add to editable divs, textareas, inputs
810829 var $document = $ ( document ) ;
811830 var domain = window . location . host ;
812-
813831 $document . on ( EVENT_NAME_KEYPRESS , SELECTOR_INPUT , keyPressHandler ) ;
814832 $document . on ( EVENT_NAME_KEYUP , SELECTOR_INPUT , keyUpHandler ) ;
815833 $document . on ( EVENT_NAME_BLUR , SELECTOR_INPUT , clearTypingBuffer ) ;
@@ -862,6 +880,21 @@ jQuery.noConflict();
862880 } , TIME_EDITOR_CHECK ) ;
863881 }
864882
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+
865898 // Special case for Mailchimp
866899 if ( MAILCHIMP_DOMAIN_REGEX . test ( domain ) )
867900 {
0 commit comments