--- /dev/null
+/*\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.plugins.add( 'devtools',\r
+{\r
+ lang : [ 'en' ],\r
+\r
+ init : function( editor )\r
+ {\r
+ editor._.showDialogDefinitionTooltips = 1;\r
+ },\r
+ onLoad : function()\r
+ {\r
+ CKEDITOR.document.appendStyleText( CKEDITOR.config.devtools_styles ||\r
+ '#cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }' +\r
+ '#cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }' +\r
+ '#cke_tooltip ul { padding: 0pt; list-style-type: none; }' );\r
+ }\r
+});\r
+\r
+(function()\r
+{\r
+ function defaultCallback( editor, dialog, element, tabName )\r
+ {\r
+ var lang = editor.lang.devTools,\r
+ link = '<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.' +\r
+ ( element ? ( element.type == 'text' ? 'textInput' : element.type ) : 'content' ) +\r
+ '.html" target="_blank">' + ( element ? element.type : 'content' ) + '</a>',\r
+ str =\r
+ '<h2>' + lang.title + '</h2>' +\r
+ '<ul>' +\r
+ '<li><strong>' + lang.dialogName + '</strong> : ' + dialog.getName() + '</li>' +\r
+ '<li><strong>' + lang.tabName + '</strong> : ' + tabName + '</li>';\r
+\r
+ if ( element )\r
+ str += '<li><strong>' + lang.elementId + '</strong> : ' + element.id + '</li>';\r
+\r
+ str += '<li><strong>' + lang.elementType + '</strong> : ' + link + '</li>';\r
+\r
+ return str + '</ul>';\r
+ }\r
+\r
+ function showTooltip( callback, el, editor, dialog, obj, tabName )\r
+ {\r
+ var pos = el.getDocumentPosition(),\r
+ styles = { 'z-index' : CKEDITOR.dialog._.currentZIndex + 10, top : ( pos.y + el.getSize( 'height' ) ) + 'px' };\r
+\r
+ tooltip.setHtml( callback( editor, dialog, obj, tabName ) );\r
+ tooltip.show();\r
+\r
+ // Translate coordinate for RTL.\r
+ if ( editor.lang.dir == 'rtl' )\r
+ {\r
+ var viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize();\r
+ styles.right = ( viewPaneSize.width - pos.x - el.getSize( 'width' ) ) + 'px';\r
+ }\r
+ else\r
+ styles.left = pos.x + 'px';\r
+\r
+ tooltip.setStyles( styles );\r
+ }\r
+\r
+ var tooltip;\r
+ CKEDITOR.on( 'reset', function()\r
+ {\r
+ tooltip && tooltip.remove();\r
+ tooltip = null;\r
+ });\r
+\r
+ CKEDITOR.on( 'dialogDefinition', function( evt )\r
+ {\r
+ var editor = evt.editor;\r
+ if ( editor._.showDialogDefinitionTooltips )\r
+ {\r
+ if ( !tooltip )\r
+ {\r
+ tooltip = CKEDITOR.dom.element.createFromHtml( '<div id="cke_tooltip" tabindex="-1" style="position: absolute"></div>', CKEDITOR.document );\r
+ tooltip.hide();\r
+ tooltip.on( 'mouseover', function(){ this.show(); } );\r
+ tooltip.on( 'mouseout', function(){ this.hide(); } );\r
+ tooltip.appendTo( CKEDITOR.document.getBody() );\r
+ }\r
+\r
+ var dialog = evt.data.definition.dialog,\r
+ callback = editor.config.devtools_textCallback || defaultCallback;\r
+\r
+ dialog.on( 'load', function()\r
+ {\r
+ var tabs = dialog.parts.tabs.getChildren(), tab;\r
+ for ( var i = 0, len = tabs.count(); i < len; i++ )\r
+ {\r
+ tab = tabs.getItem( i );\r
+ tab.on( 'mouseover', function()\r
+ {\r
+ var id = this.$.id;\r
+ showTooltip( callback, this, editor, dialog, null, id.substring( 4, id.lastIndexOf( '_' ) ) );\r
+ });\r
+ tab.on( 'mouseout', function()\r
+ {\r
+ tooltip.hide();\r
+ });\r
+ }\r
+\r
+ dialog.foreach( function( obj )\r
+ {\r
+ if ( obj.type in { hbox : 1, vbox : 1 } )\r
+ return;\r
+\r
+ var el = obj.getElement();\r
+ if ( el )\r
+ {\r
+ el.on( 'mouseover', function()\r
+ {\r
+ showTooltip( callback, this, editor, dialog, obj, dialog._.currentTabId );\r
+ });\r
+ el.on( 'mouseout', function()\r
+ {\r
+ tooltip.hide();\r
+ });\r
+ }\r
+ });\r
+ });\r
+ }\r
+ });\r
+})();\r
+\r
+/**\r
+ * A function that returns the text to be displayed inside the developer tooltip when hovering over a dialog UI element.\r
+ * There are 4 parameters that are being passed into the function: editor, dialog, element, tab name.\r
+ * @name editor.config.devtools_textCallback\r
+ * @since 3.6\r
+ * @type Function\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * // Show dialog name, tab id and element id.\r
+ * config.devtools_textCallback = function( editor, dialog, element, tabName )\r
+ * {\r
+ * var lang = editor.lang.devTools,\r
+ * link = '<a href="http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.dialog.definition.' +\r
+ * ( element ? ( element.type == 'text' ? 'textInput' : element.type ) : 'content' ) +\r
+ * '.html" target="_blank">' + ( element ? element.type : 'content' ) + '</a>',\r
+ * str =\r
+ * '<h2>' + lang.title + '</h2>' +\r
+ * '<ul>' +\r
+ * '<li><strong>' + lang.dialogName + '</strong> : ' + dialog.getName() + '</li>' +\r
+ * '<li><strong>' + lang.tabName + '</strong> : ' + tabName + '</li>';\r
+ *\r
+ * if ( element )\r
+ * str += '<li><strong>' + lang.elementId + '</strong> : ' + element.id + '</li>';\r
+ *\r
+ * str += '<li><strong>' + lang.elementType + '</strong> : ' + link + '</li>';\r
+ *\r
+ * return str + '</ul>';\r
+ * }\r
+ */\r
+\r
+/**\r
+ * A setting that holds CSS rules to be injected do page and contain styles to be applied to the tooltip element.\r
+ * @name CKEDITOR.config.devtools_styles\r
+ * @since 3.6\r
+ * @type String\r
+ * @default (see example)\r
+ * @example\r
+ * // This is actually the default value.\r
+ * CKEDITOR.config.devtools_styles = "\r
+ * #cke_tooltip { padding: 5px; border: 2px solid #333; background: #ffffff }\r
+ * #cke_tooltip h2 { font-size: 1.1em; border-bottom: 1px solid; margin: 0; padding: 1px; }\r
+ * #cke_tooltip ul { padding: 0pt; list-style-type: none; }\r
+ * ";\r
+ */\r