Links adding with CKEditor in chrome 78.0.3904.97 gives an error of following and i have checked latest firefox also and i can reproduce this
link.js?t=J8Q8:27 Uncaught TypeError: Cannot read property 'length' of undefined
at CKEDITOR.dialog.onOk (link.js?t=J8Q8:27)
at CKEDITOR.dialog.<anonymous> (ckeditor.js:613)
at CKEDITOR.dialog.l (ckeditor.js:10)
at CKEDITOR.dialog.fire (ckeditor.js:12)
at button.onClick (ckeditor.js:637)
at button.<anonymous> (ckeditor.js:575)
at button.l (ckeditor.js:10)
at button.fire (ckeditor.js:12)
at button.click (ckeditor.js:574)
at CKEDITOR.dom.element.<anonymous> (ckeditor.js:566)
close the dialog box and adding the link to the ckeditor text area
dialog box is not closing and console gives
link.js?t=J8Q8:27 Uncaught TypeError: Cannot read property 'length' of undefined
at CKEDITOR.dialog.onOk (link.js?t=J8Q8:27)
at CKEDITOR.dialog.<anonymous> (ckeditor.js:613)
at CKEDITOR.dialog.l (ckeditor.js:10)
at CKEDITOR.dialog.fire (ckeditor.js:12)
at button.onClick (ckeditor.js:637)
at button.<anonymous> (ckeditor.js:575)
at button.l (ckeditor.js:10)
at button.fire (ckeditor.js:12)
at button.click (ckeditor.js:574)
at CKEDITOR.dom.element.<anonymous> (ckeditor.js:566)
Using CKEditor as Emberjs Component
components/ckeditor.js
import Ember from 'ember';
import config from 'project/config/environment';
export default Ember.Component.extend( {
allowLinks: true,
didInsertElement: function() {
var self = this,
$textarea = this.$().find( 'textarea' )[0],
ckconfig = {
toolbarGroups: [
{ name: 'styles' },
{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
{ name: 'paragraph', groups: [ 'list' ] },
{ name: 'others' },
{ name: 'clipboard', groups: [ 'undo' ] },
{ name: 'editing', groups: [ 'find', 'selection' ] },
{ name: 'colors' }
],
removeButtons: 'Subscript,Superscript,Cut,Copy,Paste,PasteText,PasteFromWord,Anchor,Styles,Font,FontSize,Find,Replace,SelectAll,BGColor',
format_tags: 'h1;p',
removeDialogTabs: 'link:advanced;link:target',
removePlugins: 'magicline',
disallowedContent : {
'$1': {
styles: 'color'
}
}
},
outputRules = {
indent: false,
breakBeforeOpen: false,
breakAfterOpen: false,
breakBeforeClose: false,
breakAfterClose: false
};
// custom config
if ( this.get( 'allowLinks' ) ) ckconfig.toolbarGroups.splice( 3, 0, { name: 'links' } );
CKEDITOR.config.customConfig = false;
CKEDITOR.config.defaultLanguage = 'en';
CKEDITOR.config.language = 'en';
CKEDITOR.config.contentsCss = config.baseURL + 'ckeditor.css' ;
CKEDITOR.config.height = 420;
CKEDITOR.config.skin = 'bootstrapck,' + config.baseURL + 'assets/bootstrapck/';
CKEDITOR.config.colorButton_colors = '0000FF,FFA500';
CKEDITOR.config.colorButton_enableMore = false;
CKEDITOR.on( 'instanceReady', function(e) {
e.editor.dataProcessor.writer.setRules( 'h1', outputRules );
e.editor.dataProcessor.writer.setRules( 'p', outputRules );
e.editor.dataProcessor.writer.setRules( 'ol', outputRules );
e.editor.dataProcessor.writer.setRules( 'ul', outputRules );
e.editor.dataProcessor.writer.setRules( 'li', outputRules );
} );
CKEDITOR.on( 'dialogDefinition', function(e) {
var dialogName = e.data.name,
dialogDefinition = e.data.definition;
if ( dialogName === 'link' ) {
dialogDefinition.onShow = function () {
var dialog = CKEDITOR.dialog.getCurrent(),
linkType = dialog.getContentElement( 'info' , 'linkType' ),
anchorOptions = dialog.getContentElement( 'info' , 'anchorOptions' ),
emailOptions = dialog.getContentElement( 'info' , 'emailOptions' ),
protocol = dialog.getContentElement( 'info' , 'protocol' );
linkType.getElement().hide();
anchorOptions.getElement().hide();
emailOptions.getElement().hide();
protocol.disable();
};
}
} );
Ember.run( function() {
$textarea.value = self.get( 'value' ) || '';
CKEDITOR.replace( $textarea, ckconfig ).on( 'change', function(e) {
self.set( 'value', e.editor.getData() );
} );
} );
}
} );
anyone has any idea how can I fixed it ? i have checked their github issues as well but unfortunately I couldn't find any thing
Error was in here
CKEDITOR.on( 'dialogDefinition', function(e) {
var dialogName = e.data.name,
dialogDefinition = e.data.definition;
if ( dialogName === 'link' ) {
dialogDefinition.onShow = function () {
var dialog = CKEDITOR.dialog.getCurrent(),
linkType = dialog.getContentElement( 'info' , 'linkType' ),
anchorOptions = dialog.getContentElement( 'info' , 'anchorOptions' ),
emailOptions = dialog.getContentElement( 'info' , 'emailOptions' ),
protocol = dialog.getContentElement( 'info' , 'protocol' );
linkType.getElement().hide();
anchorOptions.getElement().hide();
emailOptions.getElement().hide();
protocol.disable();
};
}
} );
and i have updated this with following code
CKEDITOR.on( 'dialogDefinition', function(e) {
var dialogName = e.data.name,
dialogDefinition = e.data.definition;
if ( dialogName === 'link' ) {
dialogDefinition.getContents('info').get('protocol')['items'].splice(2, 6);
dialogDefinition.getContents('info').get('linkType')['items'].splice(1, 4);
var target = e.data.definition.getContents('target');
var options = target.get('linkTargetType').items;
for (var i = options.length-1; i >= 0; i--) {
var label = options[i][0];
if (!label.match(/new window/i)) {
options.splice(i, 1);
}
}
var targetField = target.get( 'linkTargetType' );
targetField['default'] = '_blank';
}
} );