--- /dev/null
+/**\r
+ * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\r
+ * For licensing, see LICENSE.md or http://ckeditor.com/license\r
+ */\r
+\r
+/* global CKCONSOLE */\r
+\r
+'use strict';\r
+\r
+( function() {\r
+\r
+ CKCONSOLE.add( 'widget', {\r
+ panels: [\r
+ {\r
+ type: 'box',\r
+ content: '<ul class="ckconsole_list ckconsole_value" data-value="instances"></ul>',\r
+\r
+ refresh: function( editor ) {\r
+ var instances = obj2Array( editor.widgets.instances );\r
+\r
+ return {\r
+ header: 'Instances (' + instances.length + ')',\r
+ instances: generateInstancesList( instances )\r
+ };\r
+ },\r
+\r
+ refreshOn: function( editor, refresh ) {\r
+ editor.widgets.on( 'instanceCreated', function( evt ) {\r
+ refresh();\r
+\r
+ evt.data.on( 'data', refresh );\r
+ } );\r
+\r
+ editor.widgets.on( 'instanceDestroyed', refresh );\r
+ }\r
+ },\r
+\r
+ {\r
+ type: 'box',\r
+ content:\r
+ '<ul class="ckconsole_list">' +\r
+ '<li>focused: <span class="ckconsole_value" data-value="focused"></span></li>' +\r
+ '<li>selected: <span class="ckconsole_value" data-value="selected"></span></li>' +\r
+ '</ul>',\r
+\r
+ refresh: function( editor ) {\r
+ var focused = editor.widgets.focused,\r
+ selected = editor.widgets.selected,\r
+ selectedIds = [];\r
+\r
+ for ( var i = 0; i < selected.length; ++i )\r
+ selectedIds.push( selected[ i ].id );\r
+\r
+ return {\r
+ header: 'Focus & selection',\r
+ focused: focused ? 'id: ' + focused.id : '-',\r
+ selected: selectedIds.length ? 'id: ' + selectedIds.join( ', id: ' ) : '-'\r
+ };\r
+ },\r
+\r
+ refreshOn: function( editor, refresh ) {\r
+ editor.on( 'selectionCheck', refresh, null, null, 999 );\r
+ }\r
+ },\r
+\r
+ {\r
+ type: 'log',\r
+\r
+ on: function( editor, log, logFn ) {\r
+ // Add all listeners with high priorities to log\r
+ // messages in the correct order when one event depends on another.\r
+ // E.g. selectionChange triggers widget selection - if this listener\r
+ // for selectionChange will be executed later than that one, then order\r
+ // will be incorrect.\r
+\r
+ editor.on( 'selectionChange', function( evt ) {\r
+ var msg = 'selection change',\r
+ sel = evt.data.selection,\r
+ el = sel.getSelectedElement(),\r
+ widget;\r
+\r
+ if ( el && ( widget = editor.widgets.getByElement( el, true ) ) )\r
+ msg += ' (id: ' + widget.id + ')';\r
+\r
+ log( msg );\r
+ }, null, null, 1 );\r
+\r
+ editor.widgets.on( 'instanceDestroyed', function( evt ) {\r
+ log( 'instance destroyed (id: ' + evt.data.id + ')' );\r
+ }, null, null, 1 );\r
+\r
+ editor.widgets.on( 'instanceCreated', function( evt ) {\r
+ log( 'instance created (id: ' + evt.data.id + ')' );\r
+ }, null, null, 1 );\r
+\r
+ editor.widgets.on( 'widgetFocused', function( evt ) {\r
+ log( 'widget focused (id: ' + evt.data.widget.id + ')' );\r
+ }, null, null, 1 );\r
+\r
+ editor.widgets.on( 'widgetBlurred', function( evt ) {\r
+ log( 'widget blurred (id: ' + evt.data.widget.id + ')' );\r
+ }, null, null, 1 );\r
+\r
+ editor.widgets.on( 'checkWidgets', logFn( 'checking widgets' ), null, null, 1 );\r
+ editor.widgets.on( 'checkSelection', logFn( 'checking selection' ), null, null, 1 );\r
+ }\r
+ }\r
+ ]\r
+ } );\r
+\r
+ function generateInstancesList( instances ) {\r
+ var html = '',\r
+ instance;\r
+\r
+ for ( var i = 0; i < instances.length; ++i ) {\r
+ instance = instances[ i ];\r
+ html += itemTpl.output( { id: instance.id, name: instance.name, data: JSON.stringify( instance.data ) } );\r
+ }\r
+ return html;\r
+ }\r
+\r
+ function obj2Array( obj ) {\r
+ var arr = [];\r
+ for ( var id in obj )\r
+ arr.push( obj[ id ] );\r
+\r
+ return arr;\r
+ }\r
+\r
+ var itemTpl = new CKEDITOR.template( '<li>id: <code>{id}</code>, name: <code>{name}</code>, data: <code>{data}</code></li>' );\r
+} )();\r