+++ /dev/null
-/*\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
-CKEDITOR.plugins.add( 'listblock',\r
-{\r
- requires : [ 'panel' ],\r
-\r
- onLoad : function()\r
- {\r
- CKEDITOR.ui.panel.prototype.addListBlock = function( name, definition )\r
- {\r
- return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), definition ) );\r
- };\r
-\r
- CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass(\r
- {\r
- base : CKEDITOR.ui.panel.block,\r
-\r
- $ : function( blockHolder, blockDefinition )\r
- {\r
- blockDefinition = blockDefinition || {};\r
-\r
- var attribs = blockDefinition.attributes || ( blockDefinition.attributes = {} );\r
- ( this.multiSelect = !!blockDefinition.multiSelect ) &&\r
- ( attribs[ 'aria-multiselectable' ] = true );\r
- // Provide default role of 'listbox'.\r
- !attribs.role && ( attribs.role = 'listbox' );\r
-\r
- // Call the base contructor.\r
- this.base.apply( this, arguments );\r
-\r
- var keys = this.keys;\r
- keys[ 40 ] = 'next'; // ARROW-DOWN\r
- keys[ 9 ] = 'next'; // TAB\r
- keys[ 38 ] = 'prev'; // ARROW-UP\r
- keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB\r
- keys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE\r
- CKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (#8041).\r
-\r
- this._.pendingHtml = [];\r
- this._.items = {};\r
- this._.groups = {};\r
- },\r
-\r
- _ :\r
- {\r
- close : function()\r
- {\r
- if ( this._.started )\r
- {\r
- this._.pendingHtml.push( '</ul>' );\r
- delete this._.started;\r
- }\r
- },\r
-\r
- getClick : function()\r
- {\r
- if ( !this._.click )\r
- {\r
- this._.click = CKEDITOR.tools.addFunction( function( value )\r
- {\r
- var marked = true;\r
-\r
- if ( this.multiSelect )\r
- marked = this.toggle( value );\r
- else\r
- this.mark( value );\r
-\r
- if ( this.onClick )\r
- this.onClick( value, marked );\r
- },\r
- this );\r
- }\r
- return this._.click;\r
- }\r
- },\r
-\r
- proto :\r
- {\r
- add : function( value, html, title )\r
- {\r
- var pendingHtml = this._.pendingHtml,\r
- id = CKEDITOR.tools.getNextId();\r
-\r
- if ( !this._.started )\r
- {\r
- pendingHtml.push( '<ul role="presentation" class=cke_panel_list>' );\r
- this._.started = 1;\r
- this._.size = this._.size || 0;\r
- }\r
-\r
- this._.items[ value ] = id;\r
-\r
- pendingHtml.push(\r
- '<li id=', id, ' class=cke_panel_listItem role=presentation>' +\r
- '<a id="', id, '_option" _cke_focus=1 hidefocus=true' +\r
- ' title="', title || value, '"' +\r
- ' href="javascript:void(\'', value, '\')" ' +\r
- ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) + // #188\r
- '="CKEDITOR.tools.callFunction(', this._.getClick(), ',\'', value, '\'); return false;"',\r
- ' role="option">',\r
- html || value,\r
- '</a>' +\r
- '</li>' );\r
- },\r
-\r
- startGroup : function( title )\r
- {\r
- this._.close();\r
-\r
- var id = CKEDITOR.tools.getNextId();\r
-\r
- this._.groups[ title ] = id;\r
-\r
- this._.pendingHtml.push( '<h1 role="presentation" id=', id, ' class=cke_panel_grouptitle>', title, '</h1>' );\r
- },\r
-\r
- commit : function()\r
- {\r
- this._.close();\r
- this.element.appendHtml( this._.pendingHtml.join( '' ) );\r
- delete this._.size;\r
-\r
- this._.pendingHtml = [];\r
- },\r
-\r
- toggle : function( value )\r
- {\r
- var isMarked = this.isMarked( value );\r
-\r
- if ( isMarked )\r
- this.unmark( value );\r
- else\r
- this.mark( value );\r
-\r
- return !isMarked;\r
- },\r
-\r
- hideGroup : function( groupTitle )\r
- {\r
- var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ),\r
- list = group && group.getNext();\r
-\r
- if ( group )\r
- {\r
- group.setStyle( 'display', 'none' );\r
-\r
- if ( list && list.getName() == 'ul' )\r
- list.setStyle( 'display', 'none' );\r
- }\r
- },\r
-\r
- hideItem : function( value )\r
- {\r
- this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' );\r
- },\r
-\r
- showAll : function()\r
- {\r
- var items = this._.items,\r
- groups = this._.groups,\r
- doc = this.element.getDocument();\r
-\r
- for ( var value in items )\r
- {\r
- doc.getById( items[ value ] ).setStyle( 'display', '' );\r
- }\r
-\r
- for ( var title in groups )\r
- {\r
- var group = doc.getById( groups[ title ] ),\r
- list = group.getNext();\r
-\r
- group.setStyle( 'display', '' );\r
-\r
- if ( list && list.getName() == 'ul' )\r
- list.setStyle( 'display', '' );\r
- }\r
- },\r
-\r
- mark : function( value )\r
- {\r
- if ( !this.multiSelect )\r
- this.unmarkAll();\r
-\r
- var itemId = this._.items[ value ],\r
- item = this.element.getDocument().getById( itemId );\r
- item.addClass( 'cke_selected' );\r
-\r
- this.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true );\r
- this.onMark && this.onMark( item );\r
- },\r
-\r
- unmark : function( value )\r
- {\r
- var doc = this.element.getDocument(),\r
- itemId = this._.items[ value ],\r
- item = doc.getById( itemId );\r
-\r
- item.removeClass( 'cke_selected' );\r
- doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' );\r
-\r
- this.onUnmark && this.onUnmark( item );\r
- },\r
-\r
- unmarkAll : function()\r
- {\r
- var items = this._.items,\r
- doc = this.element.getDocument();\r
-\r
- for ( var value in items )\r
- {\r
- var itemId = items[ value ];\r
-\r
- doc.getById( itemId ).removeClass( 'cke_selected' );\r
- doc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' );\r
- }\r
-\r
- this.onUnmark && this.onUnmark();\r
- },\r
-\r
- isMarked : function( value )\r
- {\r
- return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' );\r
- },\r
-\r
- focus : function( value )\r
- {\r
- this._.focusIndex = -1;\r
-\r
- if ( value )\r
- {\r
- var selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst();\r
-\r
- var links = this.element.getElementsByTag( 'a' ),\r
- link,\r
- i = -1;\r
-\r
- while ( ( link = links.getItem( ++i ) ) )\r
- {\r
- if ( link.equals( selected ) )\r
- {\r
- this._.focusIndex = i;\r
- break;\r
- }\r
- }\r
-\r
- setTimeout( function()\r
- {\r
- selected.focus();\r
- },\r
- 0 );\r
- }\r
- }\r
- }\r
- });\r
- }\r
-});\r