summaryrefslogtreecommitdiff
path: root/plugins/popup/plugin.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/popup/plugin.js')
-rw-r--r--plugins/popup/plugin.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/plugins/popup/plugin.js b/plugins/popup/plugin.js
new file mode 100644
index 0000000..26d5240
--- /dev/null
+++ b/plugins/popup/plugin.js
@@ -0,0 +1,65 @@
+/**
+ * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.add( 'popup' );
+
+CKEDITOR.tools.extend( CKEDITOR.editor.prototype, {
+ /**
+ * Opens Browser in a popup. The `width` and `height` parameters accept
+ * numbers (pixels) or percent (of screen size) values.
+ *
+ * @member CKEDITOR.editor
+ * @param {String} url The url of the external file browser.
+ * @param {Number/String} [width='80%'] Popup window width.
+ * @param {Number/String} [height='70%'] Popup window height.
+ * @param {String} [options='location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes']
+ * Popup window features.
+ */
+ popup: function( url, width, height, options ) {
+ width = width || '80%';
+ height = height || '70%';
+
+ if ( typeof width == 'string' && width.length > 1 && width.substr( width.length - 1, 1 ) == '%' )
+ width = parseInt( window.screen.width * parseInt( width, 10 ) / 100, 10 );
+
+ if ( typeof height == 'string' && height.length > 1 && height.substr( height.length - 1, 1 ) == '%' )
+ height = parseInt( window.screen.height * parseInt( height, 10 ) / 100, 10 );
+
+ if ( width < 640 )
+ width = 640;
+
+ if ( height < 420 )
+ height = 420;
+
+ var top = parseInt( ( window.screen.height - height ) / 2, 10 ),
+ left = parseInt( ( window.screen.width - width ) / 2, 10 );
+
+ options = ( options || 'location=no,menubar=no,toolbar=no,dependent=yes,minimizable=no,modal=yes,alwaysRaised=yes,resizable=yes,scrollbars=yes' ) + ',width=' + width +
+ ',height=' + height +
+ ',top=' + top +
+ ',left=' + left;
+
+ var popupWindow = window.open( '', null, options, true );
+
+ // Blocked by a popup blocker.
+ if ( !popupWindow )
+ return false;
+
+ try {
+ // Chrome is problematic with moveTo/resizeTo, but it's not really needed here (#8855).
+ var ua = navigator.userAgent.toLowerCase();
+ if ( ua.indexOf( ' chrome/' ) == -1 ) {
+ popupWindow.moveTo( left, top );
+ popupWindow.resizeTo( width, height );
+ }
+ popupWindow.focus();
+ popupWindow.location.href = url;
+ } catch ( e ) {
+ popupWindow = window.open( url, null, options, true );
+ }
+
+ return true;
+ }
+});