+ function checkSharedSpace( editor, spaceName )\r
+ {\r
+ var container,\r
+ element;\r
+\r
+ // Try to retrieve the target element from the sharedSpaces settings.\r
+ element = editor.config.sharedSpaces;\r
+ element = element && element[ spaceName ];\r
+ element = element && CKEDITOR.document.getById( element );\r
+\r
+ // If the element is available, we'll then create the container for\r
+ // the space.\r
+ if ( element )\r
+ {\r
+ // Creates an HTML structure that reproduces the editor class hierarchy.\r
+ var html =\r
+ '<span class="cke_shared">' +\r
+ '<span class="' + editor.skinClass + ' cke_editor_' + editor.name + '">' +\r
+ '<span class="' + CKEDITOR.env.cssClass + '">' +\r
+ '<span class="cke_wrapper cke_' + editor.lang.dir + '">' +\r
+ '<span class="cke_editor">' +\r
+ '<div class="cke_' + spaceName + '">' +\r
+ '</div></span></span></span></span></span>';\r
+\r
+ var mainContainer = element.append( CKEDITOR.dom.element.createFromHtml( html, element.getDocument() ) );\r
+\r
+ // Only the first container starts visible. Others get hidden.\r
+ if ( element.getCustomData( 'cke_hasshared' ) )\r
+ mainContainer.hide();\r
+ else\r
+ element.setCustomData( 'cke_hasshared', 1 );\r
+\r
+ // Get the deeper inner <div>.\r
+ container = mainContainer.getChild( [0,0,0,0] );\r
+\r
+ // When the editor gets focus, we show the space container, hiding others.\r
+ editor.on( 'focus', function()\r
+ {\r
+ for ( var i = 0, sibling, children = element.getChildren() ; ( sibling = children.getItem( i ) ) ; i++ )\r
+ {\r
+ if ( sibling.type == CKEDITOR.NODE_ELEMENT\r
+ && !sibling.equals( mainContainer )\r
+ && sibling.hasClass( 'cke_shared' ) )\r
+ {\r
+ sibling.hide();\r
+ }\r
+ }\r
+\r
+ mainContainer.show();\r
+ });\r
+\r
+ editor.on( 'destroy', function()\r
+ {\r
+ mainContainer.remove();\r
+ });\r
+ }\r
+\r
+ return container;\r
+ }\r
+\r