85 lines
3.2 KiB
Python
85 lines
3.2 KiB
Python
from django.conf import settings
|
|
from django.forms.fields import CharField
|
|
from django.utils.translation import ugettext_lazy as _
|
|
|
|
from cms import __version__ as cms_version
|
|
from cms.plugin_base import CMSPluginBase
|
|
from cms.plugin_pool import plugin_pool
|
|
from djangocms_text_ckeditor.widgets import TextEditorWidget
|
|
from djangocms_text_ckeditor.models import Text
|
|
from djangocms_text_ckeditor.utils import plugin_tags_to_user_html
|
|
from djangocms_text_ckeditor.forms import TextForm
|
|
|
|
|
|
class TextPlugin(CMSPluginBase):
|
|
model = Text
|
|
name = _("Text")
|
|
form = TextForm
|
|
render_template = "cms/plugins/text.html"
|
|
change_form_template = "cms/plugins/text_plugin_change_form.html"
|
|
|
|
def get_editor_widget(self, request, plugins, pk, placeholder, language):
|
|
"""
|
|
Returns the Django form Widget to be used for
|
|
the text area
|
|
"""
|
|
return TextEditorWidget(installed_plugins=plugins, pk=pk, placeholder=placeholder, plugin_language=language)
|
|
|
|
def get_form_class(self, request, plugins, pk, placeholder, language):
|
|
"""
|
|
Returns a subclass of Form to be used by this plugin
|
|
"""
|
|
# We avoid mutating the Form declared above by subclassing
|
|
class TextPluginForm(self.form):
|
|
pass
|
|
|
|
widget = self.get_editor_widget(request, plugins, pk, placeholder, language)
|
|
TextPluginForm.declared_fields["body"] = CharField(
|
|
widget=widget, required=False
|
|
)
|
|
return TextPluginForm
|
|
|
|
def get_form(self, request, obj=None, **kwargs):
|
|
plugins = plugin_pool.get_text_enabled_plugins(
|
|
self.placeholder,
|
|
self.page
|
|
)
|
|
pk = self.cms_plugin_instance.pk
|
|
form = self.get_form_class(request, plugins, pk, self.cms_plugin_instance.placeholder,
|
|
self.cms_plugin_instance.language)
|
|
kwargs['form'] = form # override standard form
|
|
return super(TextPlugin, self).get_form(request, obj, **kwargs)
|
|
|
|
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
|
|
"""
|
|
We override the change form template path
|
|
to provide backwards compatibility with CMS 2.x
|
|
"""
|
|
ckeditor_basepath = '{0}/ckeditor/'.format(settings.STATIC_URL)
|
|
if ckeditor_basepath.startswith('//'):
|
|
protocol = 'https' if request.is_secure else 'http'
|
|
ckeditor_basepath = '{0}:{1}'.format(protocol, ckeditor_basepath)
|
|
context.update({'CKEDITOR_BASEPATH': ckeditor_basepath})
|
|
if cms_version.startswith('2'):
|
|
context['change_form_template'] = "admin/cms/page/plugin_change_form.html"
|
|
return super(TextPlugin, self).render_change_form(request, context, add, change, form_url, obj)
|
|
|
|
def render(self, context, instance, placeholder):
|
|
context.update({
|
|
'body': plugin_tags_to_user_html(
|
|
instance.body,
|
|
context,
|
|
placeholder
|
|
),
|
|
'placeholder': placeholder,
|
|
'object': instance
|
|
})
|
|
return context
|
|
|
|
def save_model(self, request, obj, form, change):
|
|
obj.clean_plugins()
|
|
super(TextPlugin, self).save_model(request, obj, form, change)
|
|
|
|
|
|
plugin_pool.register_plugin(TextPlugin)
|