forked from Techsystech/web
[FIX] introduce widget text_ckeditor4_raw to display unfiltered html
[IMP] filter html in text_ckeditor4 [FIX] only detach textarea on stop to circumvent issues with jquery dialog6.1
parent
a211bf2f81
commit
c7adb6e405
|
@ -1,4 +1,4 @@
|
||||||
.openerp .oe_form_field_text_ckeditor4.disabled, .openerp td.oe_form_field_text_ckeditor4 {
|
.openerp .oe_form_field_text_ckeditor4.disabled, .openerp td.oe_form_field_text_ckeditor4, .openerp .oe_form_field_text_ckeditor4_raw.disabled.openerp, .openerp td.oe_form_field_text_ckeditor4_raw {
|
||||||
/* here we need to reset openerp's styles to
|
/* here we need to reset openerp's styles to
|
||||||
* have the HTML display as (probably) intended
|
* have the HTML display as (probably) intended
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -28,21 +28,39 @@ openerp.web_ckeditor4 = function(openerp)
|
||||||
'openerp.web_ckeditor4.FieldCKEditor4');
|
'openerp.web_ckeditor4.FieldCKEditor4');
|
||||||
openerp.web.page.readonly.add('text_ckeditor4',
|
openerp.web.page.readonly.add('text_ckeditor4',
|
||||||
'openerp.web_ckeditor4.FieldCKEditor4Readonly');
|
'openerp.web_ckeditor4.FieldCKEditor4Readonly');
|
||||||
|
openerp.web.form.widgets.add('text_ckeditor4_raw',
|
||||||
|
'openerp.web_ckeditor4.FieldCKEditor4Raw');
|
||||||
|
openerp.web.page.readonly.add('text_ckeditor4_raw',
|
||||||
|
'openerp.web_ckeditor4.FieldCKEditor4ReadonlyRaw');
|
||||||
openerp.web.form.widgets.add('text_html',
|
openerp.web.form.widgets.add('text_html',
|
||||||
'openerp.web_ckeditor4.FieldCKEditor4');
|
'openerp.web_ckeditor4.FieldCKEditor4');
|
||||||
openerp.web.page.readonly.add('text_html',
|
openerp.web.page.readonly.add('text_html',
|
||||||
'openerp.web_ckeditor4.FieldCKEditor4Readonly');
|
'openerp.web_ckeditor4.FieldCKEditor4Readonly');
|
||||||
|
|
||||||
function filter_html(value)
|
function filter_html(value, ckeditor_filter, ckeditor_writer)
|
||||||
{
|
{
|
||||||
//TODO: it should be possible to use ckeditor to do the filtering
|
var fragment = CKEDITOR.htmlParser.fragment.fromHtml(value);
|
||||||
return value;
|
ckeditor_filter.applyTo(fragment);
|
||||||
}
|
ckeditor_writer.reset();
|
||||||
|
fragment.writeHtml(ckeditor_writer);
|
||||||
|
return ckeditor_writer.getHtml();
|
||||||
|
};
|
||||||
|
default_ckeditor_filter = new CKEDITOR.filter(
|
||||||
|
{
|
||||||
|
'*':
|
||||||
|
{
|
||||||
|
attributes: 'href,src,style,alt,width,height',
|
||||||
|
},
|
||||||
|
'html head title meta style body p div span a h1 h2 h3 h4 h5 img br hr table tr th td ul ol li dd dt': true,
|
||||||
|
});
|
||||||
|
default_ckeditor_writer = new CKEDITOR.htmlParser.basicWriter();
|
||||||
|
|
||||||
openerp.web_ckeditor4.FieldCKEditor4 = openerp.web.form.FieldText.extend({
|
openerp.web_ckeditor4.FieldCKEditor4 = openerp.web.form.FieldText.extend({
|
||||||
ckeditor_config: {
|
ckeditor_config: {
|
||||||
removePlugins: 'iframe,flash,forms,smiley,pagebreak,stylescombo',
|
removePlugins: 'iframe,flash,forms,smiley,pagebreak,stylescombo',
|
||||||
},
|
},
|
||||||
|
ckeditor_filter: default_ckeditor_filter,
|
||||||
|
ckeditor_writer: default_ckeditor_writer,
|
||||||
start: function()
|
start: function()
|
||||||
{
|
{
|
||||||
var self = this;
|
var self = this;
|
||||||
|
@ -57,21 +75,34 @@ openerp.web_ckeditor4 = function(openerp)
|
||||||
_.extend(
|
_.extend(
|
||||||
{
|
{
|
||||||
language: openerp.connection.user_context.lang.split('_')[0],
|
language: openerp.connection.user_context.lang.split('_')[0],
|
||||||
|
on:
|
||||||
|
{
|
||||||
|
'beforeUndoImage': function()
|
||||||
|
{
|
||||||
|
if(!self.is_dirty())
|
||||||
|
{
|
||||||
|
self.on_ui_change();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
this.ckeditor_config));
|
this.ckeditor_config));
|
||||||
self.editor.once('beforeUndoImage', function () { self.on_ui_change() });
|
|
||||||
},
|
},
|
||||||
get_value: function()
|
get_value: function()
|
||||||
{
|
{
|
||||||
return this.editor ? openerp.web.parse_value(this.editor.getData(), this) : this.value;
|
return this.editor ? openerp.web.parse_value(this.editor.getData(), this) : this.value;
|
||||||
},
|
},
|
||||||
|
filter_html: function(value)
|
||||||
|
{
|
||||||
|
return filter_html(value, this.ckeditor_filter, this.ckeditor_writer);
|
||||||
|
},
|
||||||
set_value: function(value)
|
set_value: function(value)
|
||||||
{
|
{
|
||||||
if(this.modifiers.readonly)
|
if(this.modifiers.readonly)
|
||||||
{
|
{
|
||||||
this._super.apply(this, [value]);
|
this._super.apply(this, [value]);
|
||||||
|
|
||||||
this.$element.html(filter_html(value));
|
this.$element.html(this.filter_html(value));
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -100,18 +131,34 @@ openerp.web_ckeditor4 = function(openerp)
|
||||||
{
|
{
|
||||||
if(this.editor)
|
if(this.editor)
|
||||||
{
|
{
|
||||||
this.editor.destroy(true);
|
this.$element.find('textarea').detach();
|
||||||
this.editor = null;
|
|
||||||
}
|
}
|
||||||
return this._super.apply(this, arguments);
|
return this._super.apply(this, arguments);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
openerp.web_ckeditor4.FieldCKEditor4Raw = openerp.web_ckeditor4.FieldCKEditor4.extend({
|
||||||
|
filter_html: function(value)
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
openerp.web_ckeditor4.FieldCKEditor4Readonly = openerp.web.page.FieldCharReadonly.extend({
|
|
||||||
|
openerp.web_ckeditor4.FieldCKEditor4ReadonlyRaw = openerp.web.page.FieldCharReadonly.extend({
|
||||||
set_value: function (value)
|
set_value: function (value)
|
||||||
{
|
{
|
||||||
this._super.apply(this, arguments);
|
this._super.apply(this, arguments);
|
||||||
this.$element.find('div').html(filter_html(value));
|
this.$element.find('div').html(value);
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
openerp.web_ckeditor4.FieldCKEditor4Readonly = openerp.web.page.FieldCharReadonly.extend({
|
||||||
|
ckeditor_filter: default_ckeditor_filter,
|
||||||
|
ckeditor_writer: default_ckeditor_writer,
|
||||||
|
set_value: function (value)
|
||||||
|
{
|
||||||
|
this._super.apply(this, arguments);
|
||||||
|
this.$element.find('div').html(filter_html(value, this.ckeditor_filter, this.ckeditor_writer));
|
||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue