# HG changeset patch # User Pawel Solyga # Date 1221134480 0 # Node ID 70206a64da4a6c311514cdb9a540d4930a73eb36 # Parent 6186c115a210f8f641a94f42c92e5cf204995b09 Created custom_widgets.py and added TinyMCE django widget that can be later used for particular form fields. Patch by: Pawel Solyga Review by: to-be-reviewed diff -r 6186c115a210 -r 70206a64da4a app/soc/views/helpers/custom_widgets.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/app/soc/views/helpers/custom_widgets.py Thu Sep 11 12:01:20 2008 +0000 @@ -0,0 +1,63 @@ +#!/usr/bin/python2.5 +# +# Copyright 2008 the Melange authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +"""Custom widgets used for form fields. +""" + +__authors__ = [ + '"Pawel Solyga" ', + ] + +import django.newforms as forms +from django.newforms.widgets import flatatt +from django.newforms.util import smart_unicode +from django.utils.html import escape +from django.utils import simplejson +from django.utils.safestring import mark_safe + +class TinyMCE(forms.Textarea): + """ + TinyMCE widget. requires you include tiny_mce_src.js in your template + you can customize the mce_settings by overwriting instance mce_settings, + or add extra options using update_settings + """ + + mce_settings = dict( + mode = "exact", + theme = "simple", + theme_advanced_toolbar_location = "top", + theme_advanced_toolbar_align = "center", + ) + + def update_settings(self, custom): + return_dict = self.mce_settings.copy() + return_dict.update(custom) + return return_dict + + def render(self, name, value, attrs=None): + if value is None: + value = '' + value = smart_unicode(value) + final_attrs = self.build_attrs(attrs, name=name) + + self.mce_settings['elements'] = "id_%s" % name + mce_json = simplejson.JSONEncoder().encode(self.mce_settings) + + return mark_safe(u'%s \ + ' % (flatatt(final_attrs), + escape(value), + mce_json))