EXT_JS6.0富文本编辑器htmlEditor扩展上传图片
扩展上传图片功能需要重写Ext.form.field.HtmlEditor里面的getToolbarCfg()方法
在项目根目录下面的overrides新建一个文件夹,然后在创建一个js文件如:
重写HtmlEditor.js具体内容
Ext.define("app.overrides.htmleditor.HtmlEditor", {
override: "Ext.form.field.HtmlEditor",
createLinkText: 'Por favor, entre com a URL do link:',
//新增imageupload、imageuploadUrl两个属性
imageupload:true,
imageuploadUrl:'/upload',//图片上传接口
//重写getToolbarCfg方法
getToolbarCfg: function(){
var me = this,
items = [], i,
tipsEnabled = Ext.quickTipsActive && Ext.tip.QuickTipManager.isEnabled(),
baseCSSPrefix = Ext.baseCSSPrefix,
fontSelectItem, undef;
function btn(id, toggle, handler){
return Ext.merge({
itemId: id,
cls: baseCSSPrefix + 'btn-icon',
iconCls: baseCSSPrefix + 'edit-'+id,
enableToggle:toggle !== false,
scope: me,
handler:handler||me.relayBtnCmd,
clickEvent: 'mousedown',
tooltip: tipsEnabled ? me.buttonTips[id] : undef,
overflowText: me.buttonTips[id].title || undef,
tabIndex: -1
}, me.buttonDefaults);
}
//重写getToolbarCfg后新添加、用于上传图片
function btn2(id, toggle, handler){
return Ext.merge({
itemId: id,
cls: baseCSSPrefix + 'btn-icon',
iconCls: 'x-fa fa-image',
enableToggle:toggle !== false,
scope: me,
handler:handler,
clickEvent: 'click',
tooltip: tipsEnabled ? me.buttonTips[id] : undef,
overflowText: me.buttonTips[id].title || undef,
tabIndex: -1
}, me.buttonDefaults);
}
if (me.enableFont && !Ext.isSafari2) {
fontSelectItem = Ext.widget('component', {
itemId: 'fontSelect',
renderTpl: [
'<select id="{id}-selectEl" data-ref="selectEl" class="' + baseCSSPrefix + 'font-select">',
'</select>'
],
childEls: ['selectEl'],
afterRender: function() {
me.fontSelect = this.selectEl;
Ext.Component.prototype.afterRender.apply(this, arguments);
},
onDisable: function() {
var selectEl = this.selectEl;
if (selectEl) {
selectEl.dom.disabled = true;
}
Ext.Component.prototype.onDisable.apply(this, arguments);
},
onEnable: function() {
var selectEl = this.selectEl;
if (selectEl) {
selectEl.dom.disabled = false;
}
Ext.Component.prototype.onEnable.apply(this, arguments);
},
listeners: {
change: function() {
me.win.focus();
me.relayCmd('fontName', me.fontSelect.dom.value);
me.deferFocus();
},
element: 'selectEl'
}
});
items.push(
fontSelectItem,
'-'
);
}
if (me.enableFormat) {
items.push(
btn('bold'),
btn('italic'),
btn('underline')
);
}
//重写getToolbarCfg后新添加的上传图片按钮
if(me.imageupload){
items.push(
'-',
btn2('imageupload',false,me.createImageWindow)
);
}
if (me.enableFontSize) {
items.push(
'-',
btn('increasefontsize', false, me.adjustFont),
btn('decreasefontsize', false, me.adjustFont)
);
}
if (me.enableColors) {
items.push(
'-', Ext.merge({
itemId: 'forecolor',
cls: baseCSSPrefix + 'btn-icon',
iconCls: baseCSSPrefix + 'edit-forecolor',
overflowText: me.buttonTips.forecolor.title,
tooltip: tipsEnabled ? me.buttonTips.forecolor || undef : undef,
tabIndex:-1,
menu: Ext.widget('menu', {
plain: true,
items: [{
xtype: 'colorpicker',
allowReselect: true,
focus: Ext.emptyFn,
value: '000000',
plain: true,
clickEvent: 'mousedown',
handler: function(cp, color) {
me.relayCmd('forecolor', Ext.isWebKit || Ext.isIE ? '#'+color : color);
this.up('menu').hide();
}
}]
})
}, me.buttonDefaults), Ext.merge({
itemId: 'backcolor',
cls: baseCSSPrefix + 'btn-icon',
iconCls: baseCSSPrefix + 'edit-backcolor',
overflowText: me.buttonTips.backcolor.title,
tooltip: tipsEnabled ? me.buttonTips.backcolor || undef : undef,
tabIndex:-1,
menu: Ext.widget('menu', {
plain: true,
items: [{
xtype: 'colorpicker',
focus: Ext.emptyFn,
value: 'FFFFFF',
plain: true,
allowReselect: true,
clickEvent: 'mousedown',
handler: function(cp, color) {
if (Ext.isGecko) {
me.execCmd('useCSS', false);
me.execCmd('hilitecolor', '#'+color);
me.execCmd('useCSS', true);
me.deferFocus();
} else {
me.relayCmd(Ext.isOpera ? 'hilitecolor' : 'backcolor', Ext.isWebKit || Ext.isIE || Ext.isOpera ? '#'+color : color);
}
this.up('menu').hide();
}
}]
})
}, me.buttonDefaults)
);
}
if (me.enableAlignments) {
items.push(
'-',
btn('justifyleft'),
btn('justifycenter'),
btn('justifyright')
);
}
if (!Ext.isSafari2) {
if (me.enableLinks) {
items.push(
'-',
btn('createlink', false, me.createLink)
);
}
if (me.enableLists) {
items.push(
'-',
btn('insertorderedlist'),
btn('insertunorderedlist')
);
}
if (me.enableSourceEdit) {
items.push(
'-',
btn('sourceedit', true, function(){
me.toggleSourceEdit(!me.sourceEditMode);
})
);
}
}
// Everything starts disabled.
for (i = 0; i < items.length; i++) {
if (items[i].itemId !== 'sourceedit') {
items[i].disabled = true;
}
}
// build the toolbar
// Automatically rendered in Component.afterRender's renderChildren call
return {
xtype: 'toolbar',
defaultButtonUI: me.defaultButtonUI,
cls: Ext.baseCSSPrefix + 'html-editor-tb',
enableOverflow: true,
items: items,
// stop form submits
listeners: {
click: function(e){
e.preventDefault();
},
element: 'el'
}
};
},
//新增点击上传图片按钮时弹出窗口
createImageWindow:function (btn) {
var editor=this;
var url=this.imageuploadUrl;
var uploadimage=Ext.create('Ext.form.Panel', {
header: false,
width: 400,
bodyPadding: 10,
frame: true,
items: [{
xtype: 'filefield',
name: 'photo',
fieldLabel: '图片路径',
labelWidth: 100,
labelAlign:'',
msgTarget: 'side',
allowBlank: false,
anchor: '100%',
buttonText: '选择图片'
}]
});
var form=uploadimage.getForm();
Ext.create('Ext.window.Window', {
layout: 'fit',
title:'上传图片',
modal: true,
width: '30%',
height:200,
constrain: true,
items:[
uploadimage
],
buttons: [{
text: '上传',
handler: function() {
if (form.isValid()) {
uploadimage.submit({
url: url,
waitMsg: '照片上传中..',
timeout: 60,
callback: function (options, success, response) {
var element = document.createElement("img");
// element.src='/knowledge/getSystemImage?id=664cfc67dc79455b895935ee69d7f627';
element.src='https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg';
editor.insertAtCursor(element.outerHTML);
}
});
}
}
}]
}).show();
}
}, function() {
Ext.apply(Ext.form.field.HtmlEditor.prototype, {
buttonTips: {
bold: {
title: '粗 (Ctrl+B)',
// text: 'Deixa o texto selecionado em negrito.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
italic: {
title: 'Itálico (Ctrl+I)',
text: 'Deixa o texto selecionado em itálico.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
underline: {
title: 'Sublinhado (Ctrl+U)',
text: 'Sublinha o texto selecionado.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
increasefontsize: {
title: 'Aumentar Texto',
text: 'Aumenta o tamanho da fonte.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
decreasefontsize: {
title: 'Diminuir Texto',
text: 'Diminui o tamanho da fonte.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
backcolor: {
title: 'Cor de Fundo',
text: 'Muda a cor do fundo do texto selecionado.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
forecolor: {
title: 'Cor da Fonte',
text: 'Muda a cor do texto selecionado.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
justifyleft: {
title: 'Alinhar à Esquerda',
text: 'Alinha o texto à esquerda.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
justifycenter: {
title: 'Centralizar Texto',
text: 'Centraliza o texto no editor.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
justifyright: {
title: 'Alinhar à Direita',
text: 'Alinha o texto à direita.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
insertunorderedlist: {
title: 'Lista com Marcadores',
text: 'Inicia uma lista com marcadores.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
insertorderedlist: {
title: 'Lista Numerada',
text: 'Inicia uma lista numerada.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
createlink: {
title: '超链接',
text: 'Transforma o texto selecionado em um link.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
sourceedit: {
title: 'Editar Fonte',
text: 'Troca para o modo de edição de código fonte.',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
},
//工具栏新增上传图片
imageupload: {
title: '图片上传',
iconCls: 'x-fa fa-plus-square',
cls: Ext.baseCSSPrefix + 'html-editor-tip'
}
}
});
});
使用方法:直接调用htmleditor即可
Ext.create('Ext.window.Window', {
// 引入包装好的编辑器
layout: 'fit',
width: '50%',
height:600,
constrain: true,
closable: false,
items:[
{
xtype: 'htmleditor',
//上传图片路径
imageuploadUrl:'/knowledge/saveKnowdgeContentImage',
}
]
}).show();
效果:
注意:由于是测试使用这里的element.src已经写死
element.src='https://dss3.bdstatic.com/70cFv8Sh_Q1YnxGkpoWK1HF6hhy/it/u=2534506313,1688529724&fm=26&gp=0.jpg';```