2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
6 CKEDITOR.plugins.add( 'listblock',
\r
8 requires : [ 'panel' ],
\r
12 CKEDITOR.ui.panel.prototype.addListBlock = function( name, multiSelect )
\r
14 return this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), multiSelect ) );
\r
17 CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass(
\r
19 base : CKEDITOR.ui.panel.block,
\r
21 $ : function( blockHolder, multiSelect )
\r
23 // Call the base contructor.
\r
24 this.base( blockHolder );
\r
26 this.multiSelect = !!multiSelect;
\r
28 var keys = this.keys;
\r
29 keys[ 40 ] = 'next'; // ARROW-DOWN
\r
30 keys[ 9 ] = 'next'; // TAB
\r
31 keys[ 38 ] = 'prev'; // ARROW-UP
\r
32 keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB
\r
33 keys[ 32 ] = 'click'; // SPACE
\r
35 this._.pendingHtml = [];
\r
44 if ( this._.started )
\r
46 this._.pendingHtml.push( '</ul>' );
\r
47 delete this._.started;
\r
51 getClick : function()
\r
53 if ( !this._.click )
\r
55 this._.click = CKEDITOR.tools.addFunction( function( value )
\r
59 if ( this.multiSelect )
\r
60 marked = this.toggle( value );
\r
65 this.onClick( value, marked );
\r
69 return this._.click;
\r
75 add : function( value, html, title )
\r
77 var pendingHtml = this._.pendingHtml,
\r
78 id = 'cke_' + CKEDITOR.tools.getNextNumber();
\r
80 if ( !this._.started )
\r
82 pendingHtml.push( '<ul class=cke_panel_list>' );
\r
86 this._.items[ value ] = id;
\r
89 '<li id=', id, ' class=cke_panel_listItem>' +
\r
90 '<a _cke_focus=1 hidefocus=true' +
\r
91 ' title="', title || value, '"' +
\r
92 ' href="javascript:void(\'', value, '\')"' +
\r
93 ' onclick="CKEDITOR.tools.callFunction(', this._.getClick(), ',\'', value, '\'); return false;">',
\r
99 startGroup : function( title )
\r
103 var id = 'cke_' + CKEDITOR.tools.getNextNumber();
\r
105 this._.groups[ title ] = id;
\r
107 this._.pendingHtml.push( '<h1 id=', id, ' class=cke_panel_grouptitle>', title, '</h1>' );
\r
110 commit : function()
\r
113 this.element.appendHtml( this._.pendingHtml.join( '' ) );
\r
114 this._.pendingHtml = [];
\r
117 toggle : function( value )
\r
119 var isMarked = this.isMarked( value );
\r
122 this.unmark( value );
\r
124 this.mark( value );
\r
129 hideGroup : function( groupTitle )
\r
131 var group = this.element.getDocument().getById( this._.groups[ groupTitle ] ),
\r
132 list = group && group.getNext();
\r
136 group.setStyle( 'display', 'none' );
\r
138 if ( list && list.getName() == 'ul' )
\r
139 list.setStyle( 'display', 'none' );
\r
143 hideItem : function( value )
\r
145 this.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' );
\r
148 showAll : function()
\r
150 var items = this._.items,
\r
151 groups = this._.groups,
\r
152 doc = this.element.getDocument();
\r
154 for ( var value in items )
\r
156 doc.getById( items[ value ] ).setStyle( 'display', '' );
\r
159 for ( var title in groups )
\r
161 var group = doc.getById( groups[ title ] ),
\r
162 list = group.getNext();
\r
164 group.setStyle( 'display', '' );
\r
166 if ( list && list.getName() == 'ul' )
\r
167 list.setStyle( 'display', '' );
\r
171 mark : function( value )
\r
173 if ( !this.multiSelect )
\r
176 this.element.getDocument().getById( this._.items[ value ] ).addClass( 'cke_selected' );
\r
179 unmark : function( value )
\r
181 this.element.getDocument().getById( this._.items[ value ] ).removeClass( 'cke_selected' );
\r
184 unmarkAll : function()
\r
186 var items = this._.items,
\r
187 doc = this.element.getDocument();
\r
189 for ( var value in items )
\r
191 doc.getById( items[ value ] ).removeClass( 'cke_selected' );
\r
195 isMarked : function( value )
\r
197 return this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' );
\r
200 focus : function( value )
\r
202 this._.focusIndex = -1;
\r
206 var selected = this.element.getDocument().getById( this._.items[ value ] ).getFirst();
\r
208 var links = this.element.getElementsByTag( 'a' ),
\r
212 while( ( link = links.getItem( ++i ) ) )
\r
214 if ( link.equals( selected ) )
\r
216 this._.focusIndex = i;
\r
221 setTimeout( function()
\r