Skip to content

Commit 065c024

Browse files
committed
Merge branch 't/10138' into major
2 parents a63677d + 9b14b9c commit 065c024

File tree

1 file changed

+139
-141
lines changed

1 file changed

+139
-141
lines changed

plugins/elementspath/plugin.js

Lines changed: 139 additions & 141 deletions
Original file line numberDiff line numberDiff line change
@@ -57,159 +57,157 @@
5757
CKEDITOR.plugins.add( 'elementspath', {
5858
lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,el,en-au,en-ca,en-gb,en,eo,es,et,eu,fa,fi,fo,fr-ca,fr,gl,gu,he,hi,hr,hu,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt-br,pt,ro,ru,sk,sl,sr-latn,sr,sv,th,tr,ug,uk,vi,zh-cn,zh', // %REMOVE_LINE_CORE%
5959
init: function( editor ) {
60-
// Elements path isn't available in inline mode.
61-
if ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE )
62-
return;
63-
64-
var spaceId = editor.ui.spaceId( 'path' );
65-
var spaceElement;
66-
var getSpaceElement = function() {
67-
if ( !spaceElement )
68-
spaceElement = CKEDITOR.document.getById( spaceId );
69-
return spaceElement;
70-
};
71-
72-
var idBase = 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_';
73-
74-
editor._.elementsPath = { idBase: idBase, filters: [] };
75-
7660
editor.on( 'uiSpace', function( event ) {
77-
if ( event.data.space == 'bottom' ) {
78-
event.data.html += '<span id="' + spaceId + '_label" class="cke_voice_label">' + editor.lang.elementspath.eleLabel + '</span>' +
79-
'<span id="' + spaceId + '" class="cke_path" role="group" aria-labelledby="' + spaceId + '_label">' + emptyHtml + '</span>';
80-
}
81-
});
82-
83-
// Register the ui element to the focus manager.
84-
editor.on( 'uiReady', function() {
85-
var element = editor.ui.space( 'path' );
86-
element && editor.focusManager.add( element, 1 );
87-
});
88-
89-
90-
function onClick( elementIndex ) {
91-
var element = editor._.elementsPath.list[ elementIndex ];
92-
if ( element.equals( editor.editable() ) ) {
93-
var range = editor.createRange();
94-
range.selectNodeContents( element );
95-
range.select();
96-
} else
97-
editor.getSelection().selectElement( element );
98-
99-
// It is important to focus() *after* the above selection
100-
// manipulation, otherwise Firefox will have troubles. #10119
101-
editor.focus();
102-
}
103-
104-
var onClickHanlder = CKEDITOR.tools.addFunction( onClick );
105-
106-
var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) {
107-
var idBase = editor._.elementsPath.idBase,
108-
element;
109-
110-
ev = new CKEDITOR.dom.event( ev );
111-
112-
var rtl = editor.lang.dir == 'rtl';
113-
switch ( ev.getKeystroke() ) {
114-
case rtl ? 39:
115-
37 : // LEFT-ARROW
116-
case 9: // TAB
117-
element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );
118-
if ( !element )
119-
element = CKEDITOR.document.getById( idBase + '0' );
120-
element.focus();
121-
return false;
122-
123-
case rtl ? 37:
124-
39 : // RIGHT-ARROW
125-
case CKEDITOR.SHIFT + 9: // SHIFT + TAB
126-
element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );
127-
if ( !element )
128-
element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );
129-
element.focus();
130-
return false;
131-
132-
case 27: // ESC
133-
editor.focus();
134-
return false;
135-
136-
case 13: // ENTER // Opera
137-
case 32: // SPACE
138-
onClick( elementIndex );
139-
return false;
140-
}
141-
return true;
142-
});
143-
144-
editor.on( 'selectionChange', function( ev ) {
145-
var env = CKEDITOR.env,
146-
editable = editor.editable(),
147-
selection = ev.data.selection,
148-
element = selection.getStartElement(),
149-
html = [],
150-
elementsList = editor._.elementsPath.list = [],
151-
filters = editor._.elementsPath.filters;
152-
153-
while ( element ) {
154-
var ignore = 0,
155-
name;
156-
157-
if ( element.data( 'cke-display-name' ) )
158-
name = element.data( 'cke-display-name' );
159-
else if ( element.data( 'cke-real-element-type' ) )
160-
name = element.data( 'cke-real-element-type' );
161-
else
162-
name = element.getName();
163-
164-
for ( var i = 0; i < filters.length; i++ ) {
165-
var ret = filters[ i ]( element, name );
166-
if ( ret === false ) {
167-
ignore = 1;
168-
break;
169-
}
170-
name = ret || name;
171-
}
172-
173-
if ( !ignore ) {
174-
var index = elementsList.push( element ) - 1,
175-
label = editor.lang.elementspath.eleTitle.replace( /%1/, name );
176-
177-
var item = pathItemTpl.output({
178-
id: idBase + index,
179-
label: label,
180-
text: name,
181-
jsTitle: 'javascript:void(\'' + name + '\')',
182-
index: index,
183-
keyDownFn: onKeyDownHandler,
184-
clickFn: onClickHanlder
185-
});
186-
html.unshift( item );
61+
if ( event.data.space == 'bottom' )
62+
initElementsPath( editor, event.data );
63+
} );
64+
}
65+
} );
66+
67+
function initElementsPath( editor, bottomSpaceData ) {
68+
var spaceId = editor.ui.spaceId( 'path' );
69+
var spaceElement;
70+
var getSpaceElement = function() {
71+
if ( !spaceElement )
72+
spaceElement = CKEDITOR.document.getById( spaceId );
73+
return spaceElement;
74+
};
75+
76+
var idBase = 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_';
77+
78+
editor._.elementsPath = { idBase: idBase, filters: [] };
79+
80+
bottomSpaceData.html += '<span id="' + spaceId + '_label" class="cke_voice_label">' + editor.lang.elementspath.eleLabel + '</span>' +
81+
'<span id="' + spaceId + '" class="cke_path" role="group" aria-labelledby="' + spaceId + '_label">' + emptyHtml + '</span>';
82+
83+
// Register the ui element to the focus manager.
84+
editor.on( 'uiReady', function() {
85+
var element = editor.ui.space( 'path' );
86+
element && editor.focusManager.add( element, 1 );
87+
} );
88+
89+
function onClick( elementIndex ) {
90+
var element = editor._.elementsPath.list[ elementIndex ];
91+
if ( element.equals( editor.editable() ) ) {
92+
var range = editor.createRange();
93+
range.selectNodeContents( element );
94+
range.select();
95+
} else
96+
editor.getSelection().selectElement( element );
97+
98+
// It is important to focus() *after* the above selection
99+
// manipulation, otherwise Firefox will have troubles. #10119
100+
editor.focus();
101+
}
187102

103+
var onClickHanlder = CKEDITOR.tools.addFunction( onClick );
104+
105+
var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) {
106+
var idBase = editor._.elementsPath.idBase,
107+
element;
108+
109+
ev = new CKEDITOR.dom.event( ev );
110+
111+
var rtl = editor.lang.dir == 'rtl';
112+
switch ( ev.getKeystroke() ) {
113+
case rtl ? 39:
114+
37 : // LEFT-ARROW
115+
case 9: // TAB
116+
element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );
117+
if ( !element )
118+
element = CKEDITOR.document.getById( idBase + '0' );
119+
element.focus();
120+
return false;
121+
122+
case rtl ? 37:
123+
39 : // RIGHT-ARROW
124+
case CKEDITOR.SHIFT + 9: // SHIFT + TAB
125+
element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );
126+
if ( !element )
127+
element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );
128+
element.focus();
129+
return false;
130+
131+
case 27: // ESC
132+
editor.focus();
133+
return false;
134+
135+
case 13: // ENTER // Opera
136+
case 32: // SPACE
137+
onClick( elementIndex );
138+
return false;
139+
}
140+
return true;
141+
} );
142+
143+
editor.on( 'selectionChange', function( ev ) {
144+
var env = CKEDITOR.env,
145+
editable = editor.editable(),
146+
selection = ev.data.selection,
147+
element = selection.getStartElement(),
148+
html = [],
149+
elementsList = editor._.elementsPath.list = [],
150+
filters = editor._.elementsPath.filters;
151+
152+
while ( element ) {
153+
var ignore = 0,
154+
name;
155+
156+
if ( element.data( 'cke-display-name' ) )
157+
name = element.data( 'cke-display-name' );
158+
else if ( element.data( 'cke-real-element-type' ) )
159+
name = element.data( 'cke-real-element-type' );
160+
else
161+
name = element.getName();
162+
163+
for ( var i = 0; i < filters.length; i++ ) {
164+
var ret = filters[ i ]( element, name );
165+
if ( ret === false ) {
166+
ignore = 1;
167+
break;
188168
}
169+
name = ret || name;
170+
}
189171

190-
if ( element.equals( editable ) )
191-
break;
172+
if ( !ignore ) {
173+
var index = elementsList.push( element ) - 1,
174+
label = editor.lang.elementspath.eleTitle.replace( /%1/, name );
175+
176+
var item = pathItemTpl.output({
177+
id: idBase + index,
178+
label: label,
179+
text: name,
180+
jsTitle: 'javascript:void(\'' + name + '\')',
181+
index: index,
182+
keyDownFn: onKeyDownHandler,
183+
clickFn: onClickHanlder
184+
} );
185+
html.unshift( item );
192186

193-
element = element.getParent();
194187
}
195188

196-
var space = getSpaceElement();
197-
space.setHtml( html.join( '' ) + emptyHtml );
198-
editor.fire( 'elementsPathUpdate', { space: space } );
199-
});
189+
if ( element.equals( editable ) )
190+
break;
200191

201-
function empty() {
202-
spaceElement && spaceElement.setHtml( emptyHtml );
203-
delete editor._.elementsPath.list;
192+
element = element.getParent();
204193
}
205194

206-
editor.on( 'readOnly', empty );
207-
editor.on( 'contentDomUnload', empty );
195+
var space = getSpaceElement();
196+
space.setHtml( html.join( '' ) + emptyHtml );
197+
editor.fire( 'elementsPathUpdate', { space: space } );
198+
} );
208199

209-
editor.addCommand( 'elementsPathFocus', commands.toolbarFocus );
210-
editor.setKeystroke( CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' );
200+
function empty() {
201+
spaceElement && spaceElement.setHtml( emptyHtml );
202+
delete editor._.elementsPath.list;
211203
}
212-
});
204+
205+
editor.on( 'readOnly', empty );
206+
editor.on( 'contentDomUnload', empty );
207+
208+
editor.addCommand( 'elementsPathFocus', commands.toolbarFocus );
209+
editor.setKeystroke( CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' );
210+
}
213211
})();
214212

215213
/**

0 commit comments

Comments
 (0)