summaryrefslogtreecommitdiff
path: root/_source/plugins/clipboard/dialogs/paste.js
diff options
context:
space:
mode:
Diffstat (limited to '_source/plugins/clipboard/dialogs/paste.js')
-rw-r--r--_source/plugins/clipboard/dialogs/paste.js397
1 files changed, 211 insertions, 186 deletions
diff --git a/_source/plugins/clipboard/dialogs/paste.js b/_source/plugins/clipboard/dialogs/paste.js
index 70527ad..42401d1 100644
--- a/_source/plugins/clipboard/dialogs/paste.js
+++ b/_source/plugins/clipboard/dialogs/paste.js
@@ -1,186 +1,211 @@
-/*
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
-For licensing, see LICENSE.html or http://ckeditor.com/license
-*/
-
-CKEDITOR.dialog.add( 'paste', function( editor )
-{
- var lang = editor.lang.clipboard;
- var isCustomDomain = CKEDITOR.env.isCustomDomain();
-
- function onPasteFrameLoad( win )
- {
- var doc = new CKEDITOR.dom.document( win.document ),
- $ = doc.$;
-
- doc.getById( "cke_actscrpt" ).remove();
-
- CKEDITOR.env.ie ?
- $.body.contentEditable = "true" :
- $.designMode = "on";
-
- CKEDITOR.env.ie && doc.getWindow().on( 'blur', function()
- {
- $.body.contentEditable = "false";
- } );
-
- doc.on( "keydown", function( e )
- {
- var domEvent = e.data,
- key = domEvent.getKeystroke(),
- processed;
-
- switch( key )
- {
- case 27 :
- this.hide();
- processed = 1;
- break;
-
- case 9 :
- case CKEDITOR.SHIFT + 9 :
- this.changeFocus( true );
- processed = 1;
- }
-
- processed && domEvent.preventDefault();
- }, this );
-
- editor.fire( 'ariaWidget', new CKEDITOR.dom.element( win.frameElement ) );
- }
-
- return {
- title : lang.title,
-
- minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350,
- minHeight : CKEDITOR.env.quirks ? 250 : 245,
- onShow : function()
- {
- // FIREFOX BUG: Force the browser to render the dialog to make the to-be-
- // inserted iframe editable. (#3366)
- this.parts.dialog.$.offsetHeight;
-
- var htmlToLoad = '<!doctype html><html><head><style>body { margin: 3px; height: 95%; } </style></head><body>' +
- '<script id="cke_actscrpt" type="text/javascript">' +
- 'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, this ) + ', this );' +
- '</script></body></html>';
-
- var iframe = CKEDITOR.dom.element.createFromHtml(
- '<iframe' +
- ' frameborder="0" ' +
- ' allowTransparency="true"' +
- // Support for custom document.domain in IE.
- ( isCustomDomain ?
- ' src="javascript:void((function(){' +
- 'document.open();' +
- 'document.domain=\'' + document.domain + '\';' +
- 'document.close();' +
- '})())"' : '' ) +
- ' role="region"' +
- ' aria-label="' + lang.pasteArea + '"' +
- ' aria-describedby="' + this.getContentElement( 'general', 'pasteMsg' ).domId + '"' +
- ' aria-multiple="true"' +
- '></iframe>' );
-
- iframe.on( 'load', function( e )
- {
- e.removeListener();
- var doc = iframe.getFrameDocument().$;
- // Custom domain handling is needed after each document.open().
- doc.open();
- if ( isCustomDomain )
- doc.domain = document.domain;
- doc.write( htmlToLoad );
- doc.close();
- }, this );
-
- iframe.setStyles(
- {
- width : '346px',
- height : '130px',
- 'background-color' : 'white',
- border : '1px solid black'
- } );
- iframe.setCustomData( 'dialog', this );
-
- var field = this.getContentElement( 'general', 'editing_area' ),
- container = field.getElement();
- container.setHtml( '' );
- container.append( iframe );
-
- field.getInputElement = function(){ return iframe; };
-
- // Force container to scale in IE.
- if ( CKEDITOR.env.ie )
- {
- container.setStyle( 'display', 'block' );
- container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' );
- }
- },
-
- onHide : function()
- {
- if ( CKEDITOR.env.ie )
- this.getParentEditor().document.getBody().$.contentEditable = 'true';
- },
-
- onLoad : function()
- {
- if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' )
- this.parts.contents.setStyle( 'overflow', 'hidden' );
- },
-
- onOk : function()
- {
- var container = this.getContentElement( 'general', 'editing_area' ).getElement(),
- iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ),
- editor = this.getParentEditor(),
- html = iframe.$.contentWindow.document.body.innerHTML;
-
- setTimeout( function(){
- editor.fire( 'paste', { 'html' : html } );
- }, 0 );
-
- },
-
- contents : [
- {
- id : 'general',
- label : editor.lang.common.generalTab,
- elements : [
- {
- type : 'html',
- id : 'securityMsg',
- html : '<div style="white-space:normal;width:340px;">' + lang.securityMsg + '</div>'
- },
- {
- type : 'html',
- id : 'pasteMsg',
- html : '<div style="white-space:normal;width:340px;">'+lang.pasteMsg +'</div>'
- },
- {
- type : 'html',
- id : 'editing_area',
- style : 'width: 100%; height: 100%;',
- html : '',
- focus : function()
- {
- var win = this.getInputElement().$.contentWindow,
- body = win && win.document.body;
-
- // #3291 : JAWS needs the 500ms delay to detect that the editor iframe
- // iframe is no longer editable. So that it will put the focus into the
- // Paste from Word dialog's editable area instead.
- setTimeout( function()
- {
- // Reactivate design mode for IE to make the cursor blinking.
- CKEDITOR.env.ie && body && ( body.contentEditable = "true" );
- win.focus();
- }, 500 );
- }
- }
- ]
- }
- ]
- };
-});
+/*
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+
+CKEDITOR.dialog.add( 'paste', function( editor )
+{
+ var lang = editor.lang.clipboard;
+ var isCustomDomain = CKEDITOR.env.isCustomDomain();
+
+ function onPasteFrameLoad( win )
+ {
+ var doc = new CKEDITOR.dom.document( win.document ),
+ docElement = doc.$;
+
+ doc.getById( "cke_actscrpt" ).remove();
+
+ CKEDITOR.env.ie ?
+ docElement.body.contentEditable = "true" :
+ docElement.designMode = "on";
+
+ // IE before version 8 will leave cursor blinking inside the document after
+ // editor blurred unless we clean up the selection. (#4716)
+ if ( CKEDITOR.env.ie && CKEDITOR.env.version < 8 )
+ {
+ doc.getWindow().on( 'blur', function()
+ {
+ docElement.selection.empty();
+ } );
+ }
+
+ doc.on( "keydown", function( e )
+ {
+ var domEvent = e.data,
+ key = domEvent.getKeystroke(),
+ processed;
+
+ switch( key )
+ {
+ case 27 :
+ this.hide();
+ processed = 1;
+ break;
+
+ case 9 :
+ case CKEDITOR.SHIFT + 9 :
+ this.changeFocus( true );
+ processed = 1;
+ }
+
+ processed && domEvent.preventDefault();
+ }, this );
+
+ editor.fire( 'ariaWidget', new CKEDITOR.dom.element( win.frameElement ) );
+ }
+
+ return {
+ title : lang.title,
+
+ minWidth : CKEDITOR.env.ie && CKEDITOR.env.quirks ? 370 : 350,
+ minHeight : CKEDITOR.env.quirks ? 250 : 245,
+ onShow : function()
+ {
+ // FIREFOX BUG: Force the browser to render the dialog to make the to-be-
+ // inserted iframe editable. (#3366)
+ this.parts.dialog.$.offsetHeight;
+
+ var htmlToLoad =
+ '<html dir="' + editor.config.contentsLangDirection + '"' +
+ ' lang="' + ( editor.config.contentsLanguage || editor.langCode ) + '">' +
+ '<head><style>body { margin: 3px; height: 95%; } </style></head><body>' +
+ '<script id="cke_actscrpt" type="text/javascript">' +
+ 'window.parent.CKEDITOR.tools.callFunction( ' + CKEDITOR.tools.addFunction( onPasteFrameLoad, this ) + ', this );' +
+ '</script></body>' +
+ '</html>';
+
+ var iframe = CKEDITOR.dom.element.createFromHtml(
+ '<iframe' +
+ ' frameborder="0" ' +
+ ' allowTransparency="true"' +
+ // Support for custom document.domain in IE.
+ ( isCustomDomain ?
+ ' src="javascript:void((function(){' +
+ 'document.open();' +
+ 'document.domain=\'' + document.domain + '\';' +
+ 'document.close();' +
+ '})())"' : '' ) +
+ ' role="region"' +
+ ' aria-label="' + lang.pasteArea + '"' +
+ ' aria-describedby="' + this.getContentElement( 'general', 'pasteMsg' ).domId + '"' +
+ ' aria-multiple="true"' +
+ '></iframe>' );
+
+ iframe.on( 'load', function( e )
+ {
+ e.removeListener();
+ var doc = iframe.getFrameDocument().$;
+ // Custom domain handling is needed after each document.open().
+ doc.open();
+ if ( isCustomDomain )
+ doc.domain = document.domain;
+ doc.write( htmlToLoad );
+ doc.close();
+ }, this );
+
+ iframe.setStyles(
+ {
+ width : '346px',
+ height : '130px',
+ 'background-color' : 'white',
+ border : '1px solid black'
+ } );
+ iframe.setCustomData( 'dialog', this );
+
+ var field = this.getContentElement( 'general', 'editing_area' ),
+ container = field.getElement();
+ container.setHtml( '' );
+ container.append( iframe );
+
+ // IE need a redirect on focus to make
+ // the cursor blinking inside iframe. (#5461)
+ if ( CKEDITOR.env.ie )
+ {
+ var focusGrabber = CKEDITOR.dom.element.createFromHtml( '<span tabindex="-1" style="position:absolute;" role="presentation"></span>' );
+ focusGrabber.on( 'focus', function()
+ {
+ iframe.$.contentWindow.focus();
+ });
+ container.append( focusGrabber );
+
+ // Override focus handler on field.
+ field.focus = function()
+ {
+ focusGrabber.focus();
+ this.fire( 'focus' );
+ };
+ }
+
+ field.getInputElement = function(){ return iframe; };
+
+ // Force container to scale in IE.
+ if ( CKEDITOR.env.ie )
+ {
+ container.setStyle( 'display', 'block' );
+ container.setStyle( 'height', ( iframe.$.offsetHeight + 2 ) + 'px' );
+ }
+ },
+
+ onHide : function()
+ {
+ if ( CKEDITOR.env.ie )
+ this.getParentEditor().document.getBody().$.contentEditable = 'true';
+ },
+
+ onLoad : function()
+ {
+ if ( ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) && editor.lang.dir == 'rtl' )
+ this.parts.contents.setStyle( 'overflow', 'hidden' );
+ },
+
+ onOk : function()
+ {
+ var container = this.getContentElement( 'general', 'editing_area' ).getElement(),
+ iframe = container.getElementsByTag( 'iframe' ).getItem( 0 ),
+ editor = this.getParentEditor(),
+ html = iframe.$.contentWindow.document.body.innerHTML;
+
+ setTimeout( function(){
+ editor.fire( 'paste', { 'html' : html } );
+ }, 0 );
+
+ },
+
+ contents : [
+ {
+ id : 'general',
+ label : editor.lang.common.generalTab,
+ elements : [
+ {
+ type : 'html',
+ id : 'securityMsg',
+ html : '<div style="white-space:normal;width:340px;">' + lang.securityMsg + '</div>'
+ },
+ {
+ type : 'html',
+ id : 'pasteMsg',
+ html : '<div style="white-space:normal;width:340px;">'+lang.pasteMsg +'</div>'
+ },
+ {
+ type : 'html',
+ id : 'editing_area',
+ style : 'width: 100%; height: 100%;',
+ html : '',
+ focus : function()
+ {
+ var win = this.getInputElement().$.contentWindow;
+
+ // #3291 : JAWS needs the 500ms delay to detect that the editor iframe
+ // iframe is no longer editable. So that it will put the focus into the
+ // Paste from Word dialog's editable area instead.
+ setTimeout( function()
+ {
+ win.focus();
+ }, 500 );
+ }
+ }
+ ]
+ }
+ ]
+ };
+});