: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
editor.commands.addCommand({
mac : 'Command-w|Command-q'
// TextArea button and Setting button
jQuery('<div class="ui-dialog-buttonset"></div>').css('float', 'left')
jQuery('<button></button>').html(self.fm.i18n('TextArea'))
ta.val(editor.session.getValue()).show().trigger('focus');
jQuery(this).text('AceEditor');
editor.setValue(ta.hide().val(), -1);
jQuery(this).html(self.fm.i18n('TextArea'));
jQuery('<button>Ace editor setting</button>')
secondary: 'ui-icon-triangle-1-e'
editor.showSettingsMenu();
jQuery('#ace_settingsmenu')
.find('div[contains="setOptions"]').hide().end()
.parent().appendTo(jQuery('#elfinder'));
.prependTo(taBase.next());
// trigger event 'editEditorPrepare'
self.trigger('Prepare', {
//dialog.trigger('resize');
if (!self.confObj.loader) {
self.confObj.loader = jQuery.Deferred();
self.fm.loadScript([ cdn+'/ace.js' ], function() {
self.confObj.loader.resolve();
}, void 0, {obj: window, name: 'ace'});
self.confObj.loader.done(start);
close : function(textarea, instance) {
instance && instance.destroy();
save : function(textarea, instance) {
instance && jQuery(textarea).data('ace') && (textarea.value = instance.session.getValue());
focus : function(textarea, instance) {
instance && jQuery(textarea).data('ace') && instance.focus();
resize : function(textarea, instance, e, data) {
instance && instance.resize();
// called on initialization of elFinder cmd edit (this: this editor's config object)
setup : function(opts, fm) {
if (fm.UA.ltIE10 || !fm.options.cdns.codemirror) {
// `mimes` is not set for support everything kind of text file
iconImg : 'img/editor-icons.png 0 -176'
load : function(textarea) {
cmUrl = fm.convAbsUrl(fm.options.cdns.codemirror),
dfrd = jQuery.Deferred(),
start = function(CodeMirror) {
var ta = jQuery(textarea),
editor, editorBase, opts;
base.height(base.height());
// CodeMirror configure options
'Ctrl-S': function() { self.doSave(); },
'Ctrl-Q': function() { self.doCancel(); },
'Ctrl-W': function() { self.doCancel(); }
// trigger event 'editEditorPrepare'
self.trigger('Prepare', {
editor = CodeMirror.fromTextArea(textarea, opts);
// return editor instance
info = CodeMirror.findModeByMIME(self.file.mime);
if (! info && (m = self.file.name.match(/.+\.([^.]+)$/))) {
info = CodeMirror.findModeByExtension(m[1]);
CodeMirror.modeURL = useRequire? 'codemirror/mode/%N/%N.min' : cmUrl + '/mode/%N/%N.min.js';
editor.setOption('mode', spec);
CodeMirror.autoLoadMode(editor, mode);
// show MIME:mode in title bar
base.prev().children('.elfinder-dialog-title').append(' (' + spec + (mode != 'null'? ' : ' + mode : '') + ')');
editorBase = jQuery(editor.getWrapperElement()).css({
// fix CSS conflict to SimpleMDE
editorBase.height('100%');
// TextArea button and Setting button
jQuery('<div class="ui-dialog-buttonset"></div>').css('float', 'left')
jQuery('<button></button>').html(self.fm.i18n('TextArea'))
ta.val(editor.getValue()).show().trigger('focus');
jQuery(this).text('CodeMirror');
editor.setValue(ta.hide().val());
jQuery(this).html(self.fm.i18n('TextArea'));
// load script then start
if (!self.confObj.loader) {
self.confObj.loader = jQuery.Deferred();
'codemirror/lib/codemirror': 'codemirror'
'codemirror/addon/mode/loadmode.min',
'codemirror/mode/meta.min'
], function(CodeMirror) {
self.confObj.loader.resolve(CodeMirror);
cmUrl + '/codemirror.min.js'
cmUrl + '/addon/mode/loadmode.min.js',
cmUrl + '/mode/meta.min.js'
self.confObj.loader.resolve(CodeMirror);
self.fm.loadCss(cmUrl + '/codemirror.css');
self.confObj.loader.done(start);
close : function(textarea, instance) {
instance && instance.toTextArea();
save : function(textarea, instance) {
instance && jQuery(textarea).data('cm') && (textarea.value = instance.getValue());
focus : function(textarea, instance) {
instance && jQuery(textarea).data('cm') && instance.focus();
resize : function(textarea, instance, e, data) {
instance && instance.refresh();
// called on initialization of elFinder cmd edit (this: this editor's config object)
setup : function(opts, fm) {
if (fm.UA.ltIE10 || !fm.options.cdns.simplemde) {
iconImg : 'img/editor-icons.png 0 -80'
load : function(textarea) {
base = jQuery(textarea).parent(),
dfrd = jQuery.Deferred(),
cdn = fm.options.cdns.simplemde,
start = function(SimpleMDE) {
delta = base.outerHeight(true) - h + 14,
editor, editorBase, opts;
textarea._setHeight = function(height) {
var h = height || base.height(),
base.children('.editor-toolbar,.editor-statusbar').each(function() {
ctrH += jQuery(this).outerHeight(true);
areaH = h - ctrH - delta;
editorBase.height(areaH);
editor.codemirror.refresh();
// trigger event 'editEditorPrepare'
self.trigger('Prepare', {
editor = new SimpleMDE(opts);
editorBase = jQuery(editor.codemirror.getWrapperElement());
editorBase.css('min-height', '50px')
.children('.CodeMirror-scroll').css('min-height', '50px');
// check SimpleMDE & start
if (!self.confObj.loader) {
self.confObj.loader = jQuery.Deferred();
self.fm.loadCss(cdn+'/simplemde.min.css');
self.confObj.loader.resolve(SimpleMDE);
self.fm.loadScript([cdn+'/simplemde.min.js'], function() {
self.confObj.loader.resolve(SimpleMDE);
self.confObj.loader.done(start);
close : function(textarea, instance) {
instance && instance.toTextArea();
save : function(textarea, instance) {
instance && (textarea.value = instance.value());
focus : function(textarea, instance) {
instance && instance.codemirror.focus();
resize : function(textarea, instance, e, data) {
instance && textarea._setHeight();
// CKEditor for html file
iconImg : 'img/editor-icons.png 0 0'
exts : ['htm', 'html', 'xhtml'],
setup : function(opts, fm) {
if (!fm.options.cdns.ckeditor) {
confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor || {});
if (opts.extraOptions.managerUrl) {
confObj.managerUrl = opts.extraOptions.managerUrl;
load : function(textarea) {
dfrd = jQuery.Deferred(),
var base = jQuery(textarea).parent(),
dlg = base.closest('.elfinder-dialog'),
reg = /([&?]getfile=)[^&]+/,
loc = self.confObj.managerUrl || window.location.href.replace(/#.*$/, ''),
loc = loc.replace(reg, '$1' + name);
loc += '?getfile=' + name;
// CKEditor configure options
filebrowserBrowseUrl : loc,
toolbarCanCollapse: true,
toolbarStartupExpanded: !fm.UA.Mobile,
extraPlugins: 'colorbutton,justify,docprops',
'instanceReady' : function(e) {
editor.resize('100%', h);
dlg.one('beforedommove.'+fm.namespace, function() {
}).one('dommove.'+fm.namespace, function() {
self.load(textarea).done(function(editor) {
// return editor instance
// trigger event 'editEditorPrepare'
self.trigger('Prepare', {
CKEDITOR.replace(textarea.id, Object.assign(opts, self.confObj.ckeOpts));
CKEDITOR.on('dialogDefinition', function(e) {
var dlg = e.data.definition.dialog;
dlg.on('show', function(e) {
fm.getUI().append(jQuery('.cke_dialog_background_cover')).append(this.getElement().$);
dlg.on('hide', function(e) {
jQuery('body:first').append(jQuery('.cke_dialog_background_cover')).append(this.getElement().$);
if (!self.confObj.loader) {
self.confObj.loader = jQuery.Deferred();
window.CKEDITOR_BASEPATH = fm.options.cdns.ckeditor + '/';
jQuery.getScript(fm.options.cdns.ckeditor + '/ckeditor.js', function() {
self.confObj.loader.resolve();
self.confObj.loader.done(init);
close : function(textarea, instance) {
instance && instance.destroy();
save : function(textarea, instance) {
instance && (textarea.value = instance.getData());
focus : function(textarea, instance) {
instance && instance.focus();
resize : function(textarea, instance, e, data) {
if (instance.status === 'ready') {
instance.resize('100%', jQuery(textarea).parent().height());
// CKEditor5 balloon mode for html file
iconImg : 'img/editor-icons.png 0 -16'
exts : ['htm', 'html', 'xhtml'],
html : '<div class="edit-editor-ckeditor5"></div>',
setup : function(opts, fm) {
// check cdn and ES6 support
if (!fm.options.cdns.ckeditor5 || typeof window.Symbol !== 'function' || typeof Symbol() !== 'symbol') {
// @deprecated option extraOptions.ckeditor5Mode
if (opts.extraOptions.ckeditor5Mode) {
confObj.ckeditor5Mode = opts.extraOptions.ckeditor5Mode;
confObj.ckeOpts = Object.assign({}, opts.extraOptions.ckeditor5 || {});
if (confObj.ckeOpts.mode) {
confObj.ckeditor5Mode = confObj.ckeOpts.mode;
delete confObj.ckeOpts.mode;