/*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
For licensing, see LICENSE.html or http://ckeditor.com/license\r
*/\r
\r
* @constant\r
* @example\r
*/\r
-CKEDITOR.UI_PANEL = 2;\r
+CKEDITOR.UI_PANEL = 'panel';\r
\r
CKEDITOR.ui.panel = function( document, definition )\r
{\r
className = parentDiv.getParent().getAttribute( 'class' ),\r
langCode = parentDiv.getParent().getAttribute( 'lang' ),\r
doc = iframe.getFrameDocument();\r
- // Initialize the IFRAME document body.\r
- doc.$.open();\r
\r
- // Support for custom document.domain in IE.\r
- if ( CKEDITOR.env.isCustomDomain() )\r
- doc.$.domain = document.domain;\r
+ // Make it scrollable on iOS. (#8308)\r
+ CKEDITOR.env.iOS && parentDiv.setStyles(\r
+ {\r
+ 'overflow' : 'scroll',\r
+ '-webkit-overflow-scrolling' : 'touch'\r
+ });\r
\r
var onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function( ev )\r
{\r
this.onLoad();\r
}, this ) );\r
\r
- doc.$.write(\r
+ var data =\r
'<!DOCTYPE html>' +\r
'<html dir="' + dir + '" class="' + className + '_container" lang="' + langCode + '">' +\r
'<head>' +\r
'<style>.' + className + '_container{visibility:hidden}</style>' +\r
+ CKEDITOR.tools.buildStyleHtml( this.css ) +\r
'</head>' +\r
'<body class="cke_' + dir + ' cke_panel_frame ' + CKEDITOR.env.cssClass + '" style="margin:0;padding:0"' +\r
' onload="( window.CKEDITOR || window.parent.CKEDITOR ).tools.callFunction(' + onLoad + ');"></body>' +\r
- // It looks strange, but for FF2, the styles must go\r
- // after <body>, so it (body) becames immediatelly\r
- // available. (#3031)\r
- CKEDITOR.tools.buildStyleHtml( this.css ) +\r
- '<\/html>' );\r
- doc.$.close();\r
+ '<\/html>';\r
+\r
+ doc.write( data );\r
\r
var win = doc.getWindow();\r
\r
\r
holder = doc.getBody();\r
holder.unselectable();\r
+ CKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad );\r
}\r
else\r
holder = this.document.getById( this.id );\r
{\r
var blocks = this._.blocks,\r
block = blocks[ name ],\r
- current = this._.currentBlock,\r
- holder = this.forceIFrame ?\r
- this.document.getById( this.id + '_frame' )\r
- : this._.holder;\r
+ current = this._.currentBlock;\r
\r
- // Disable context menu for block panel.\r
- holder.getParent().getParent().disableContextMenu();\r
+ // ARIA role works better in IE on the body element, while on the iframe\r
+ // for FF. (#8864)\r
+ var holder = !this.forceIFrame || CKEDITOR.env.ie ?\r
+ this._.holder : this.document.getById( this.id + '_frame' );\r
\r
if ( current )\r
{\r
\r
this._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block );\r
\r
- block.onMark = function( item )\r
- {\r
- holder.setAttribute( 'aria-activedescendant', item.getId() + '_option' );\r
- };\r
-\r
- block.onUnmark = function()\r
- {\r
- holder.removeAttribute( 'aria-activedescendant' );\r
- };\r
-\r
block.show();\r
\r
return block;\r
return false;\r
\r
case 'click' :\r
+ case 'mouseup' :\r
index = this._.focusIndex;\r
link = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index );\r
\r
if ( link )\r
- link.$.click ? link.$.click() : link.$.onclick();\r
+ link.$[ keyAction ] ? link.$[ keyAction ]() : link.$[ 'on' + keyAction ]();\r
\r
return false;\r
}\r
}\r
}\r
});\r
+\r
+/**\r
+ * Fired when a panel is added to the document\r
+ * @name CKEDITOR#ariaWidget\r
+ * @event\r
+ * @param {Object} holder The element wrapping the panel\r
+ */\r