summaryrefslogtreecommitdiff
path: root/plugins/sourcedialog/dialogs
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/sourcedialog/dialogs')
-rw-r--r--plugins/sourcedialog/dialogs/sourcedialog.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/plugins/sourcedialog/dialogs/sourcedialog.js b/plugins/sourcedialog/dialogs/sourcedialog.js
new file mode 100644
index 0000000..81aa7c8
--- /dev/null
+++ b/plugins/sourcedialog/dialogs/sourcedialog.js
@@ -0,0 +1,78 @@
+/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.dialog.add( 'sourcedialog', function( editor ) {
+ var size = CKEDITOR.document.getWindow().getViewPaneSize();
+
+ // Make it maximum 800px wide, but still fully visible in the viewport.
+ var width = Math.min( size.width - 70, 800);
+
+ // Make it use 2/3 of the viewport height.
+ var height = size.height / 1.5;
+
+ // Store old editor data to avoid unnecessary setData.
+ var oldData;
+
+ return {
+ title: editor.lang.sourcedialog.title,
+ minWidth: 100,
+ minHeight: 100,
+
+ onShow: function() {
+ this.setValueOf( 'main', 'data', oldData = editor.getData() );
+ },
+
+ onOk: (function() {
+ function setData( newData ) {
+ var that = this;
+
+ editor.setData( newData, function() {
+ that.hide();
+
+ // Ensure correct selection.
+ var range = editor.createRange();
+ range.moveToElementEditStart( editor.editable() );
+ range.select();
+ } );
+ }
+
+ return function( event ) {
+ // Remove CR from input data for reliable comparison with editor data.
+ var newData = this.getValueOf( 'main', 'data' ).replace( /\r/g, '' );
+
+ // Avoid unnecessary setData. Also preserve selection
+ // when user changed his mind and goes back to wysiwyg editing.
+ if ( newData === oldData )
+ return true;
+
+ // Set data asynchronously to avoid errors in IE.
+ CKEDITOR.env.ie ?
+ CKEDITOR.tools.setTimeout( setData, 0, this, newData )
+ :
+ setData.call( this, newData );
+
+ // Don't let the dialog close before setData is over.
+ return false;
+ };
+ })(),
+
+ contents: [{
+ id: 'main',
+ label: editor.lang.sourcedialog.title,
+ elements: [{
+ type: 'textarea',
+ type: 'textarea',
+ id: 'data',
+ dir: 'ltr',
+ inputStyle: 'cursor:auto;' +
+ 'width:' + width + 'px;' +
+ 'height:' + height + 'px;' +
+ 'tab-size:4;' +
+ 'text-align:left;',
+ 'class': 'cke_source'
+ }]
+ }]
+ };
+});