Changeset 272:4869c42b6280


Ignore:
Timestamp:
02/12/10 14:17:15 (2 years ago)
Author:
san
Branch:
default
Message:

Add CKEditor wysiwyg

Files:
197 added
6 edited

Legend:

Unmodified
Added
Removed
  • cyclope/apps/articles/admin.py

    r219 r272  
    2424from django import forms 
    2525from django.utils.translation import ugettext_lazy as _ 
     26from markitup.widgets import AdminMarkItUpWidget 
    2627 
    27 from cyclope.widgets import WYMEditor, ForeignKeyImageRawIdWidget 
     28from cyclope.widgets import WYMEditor, ForeignKeyImageRawIdWidget, CKEditor 
    2829from cyclope.core.collections.admin import CollectibleAdmin 
    2930from cyclope.models import Author 
     
    3536 
    3637class ArticleForm(forms.ModelForm): 
    37     if cyc_settings.CYCLOPE_ARTICLE_TEXT_STYLE.lower() ==  'wysiwyg': 
    38         text = forms.CharField(label=_('Text'), widget=WYMEditor()) 
     38    if cyc_settings.CYCLOPE_STATICPAGE_TEXT_STYLE ==  'textile': 
     39        text = forms.CharField(label=_('Text'), widget=AdminMarkItUpWidget()) 
     40    elif cyc_settings.CYCLOPE_STATICPAGE_TEXT_STYLE == 'wysiwyg': 
     41        text = forms.CharField(label=_('Text'), widget=CKEditor()) 
    3942 
    4043    def __init__(self, *args, **kwargs): 
  • cyclope/apps/staticpages/admin.py

    r270 r272  
    2828 
    2929from cyclope.core.collections.admin import CollectibleAdmin 
    30 from cyclope.widgets import WYMEditor 
     30from cyclope.widgets import WYMEditor, CKEditor 
    3131from cyclope.models import MenuItem 
    3232from cyclope import settings as cyc_settings 
     
    3939                    queryset = MenuItem.tree.all(), required=False, 
    4040                    ) 
    41     if cyc_settings.CYCLOPE_STATICPAGE_TEXT_STYLE ==  'wysiwyg': 
    42         text = forms.CharField(label=_('Text'), widget=WYMEditor()) 
    43     else: 
     41    if cyc_settings.CYCLOPE_STATICPAGE_TEXT_STYLE ==  'textile': 
    4442        text = forms.CharField(label=_('Text'), widget=AdminMarkItUpWidget()) 
    45          
     43    elif cyc_settings.CYCLOPE_STATICPAGE_TEXT_STYLE == 'wysiwyg': 
     44        text = forms.CharField(label=_('Text'), widget=CKEditor()) 
    4645 
    4746    def __init__(self, *args, **kwargs): 
  • cyclope/default_settings.py

    r270 r272  
    236236MARKITUP_FILTER = ('django.contrib.markup.templatetags.markup.textile', {}) 
    237237 
     238 
  • cyclope/default_urls.py

    r270 r272  
    7575        name='content_type_feed'), 
    7676    url(r'^markitup/', include('markitup.urls')), 
     77 
    7778) 
    7879 
  • cyclope/widgets.py

    r245 r272  
    2525""" 
    2626from django import forms 
     27from django.conf import settings 
     28from django.forms.util import flatatt 
    2729from django.utils.safestring import mark_safe 
    28 from django.conf import settings 
    2930from django.utils.translation import ugettext_lazy as _ 
    3031from django.utils.html import escape 
    3132from django.utils.text import truncate_words 
     33from django.utils.html import conditional_escape 
     34from django.utils.encoding import force_unicode 
     35from django.core.urlresolvers import reverse 
    3236from django.contrib.admin.widgets import ForeignKeyRawIdWidget 
    3337 
     
    123127            return '' 
    124128        return obj.thumbnail() 
     129 
     130class CKEditor(forms.Textarea): 
     131    """ 
     132    Widget providing CKEditor for Rich Text Editing. 
     133    """ 
     134    class Media: 
     135        js = ( 
     136            cyc_settings.CYCLOPE_MEDIA_URL + 'ckeditor/ckeditor.js', 
     137        ) 
     138 
     139    def render(self, name, value, attrs={}): 
     140        language = settings.LANGUAGE_CODE[:2] 
     141        if value is None: value = '' 
     142        final_attrs = self.build_attrs(attrs, name=name) 
     143        return mark_safe(u'''<textarea%s>%s</textarea> 
     144        <script type="text/javascript"> 
     145 
     146            CKEDITOR.replace("%s", 
     147                { 
     148                    toolbar : // http://docs.cksource.com/CKEditor_3.x/Developers_Guide/Toolbar 
     149                        [ 
     150                            ['Cut','Copy','Paste','PasteText'], 
     151                            ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'], 
     152                            ['BidiLtr', 'BidiRtl'], 
     153                            '/', 
     154                            ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'], 
     155                            ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'], 
     156                            ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], 
     157                            ['Link','Unlink'], 
     158                            ['Image','Flash','Table','HorizontalRule'], 
     159                            '/', 
     160                            ['Styles','Format','Font','FontSize'], 
     161                            ['TextColor','BGColor'] 
     162                        ], 
     163                    skin: "v2", 
     164                    height:"291", 
     165                    width:"618", 
     166                    filebrowserUploadUrl : "%s", 
     167                    filebrowserBrowseUrl : "%s", 
     168                    language : "%s", 
     169                } 
     170            ); 
     171            // Customizing dialogs 
     172            CKEDITOR.on( 'dialogDefinition', function( ev ){ 
     173                    var dialogName = ev.data.name; 
     174                    var dialogDefinition = ev.data.definition; 
     175                    if ( dialogName == 'link' ) 
     176                    { 
     177                        dialogDefinition.removeContents( 'advanced' ); 
     178                        dialogDefinition.removeContents( 'upload' ); 
     179                    } 
     180 
     181                    if ( dialogName == 'image' ) 
     182                    { 
     183                        dialogDefinition.removeContents( 'advanced' ); 
     184                        dialogDefinition.removeContents( 'Upload' ); 
     185                    } 
     186 
     187                    if ( dialogName == 'flash' ) 
     188                    { 
     189                        dialogDefinition.removeContents( 'advanced' ); 
     190                        dialogDefinition.removeContents( 'Upload' ); 
     191                    } 
     192 
     193            }); 
     194        </script>''' % (flatatt(final_attrs), 
     195                        conditional_escape(force_unicode(value)), 
     196                        final_attrs['id'], 
     197                        "/", # FIXME http://docs.cksource.com/CKEditor_3.x/Developers_Guide/File_Browser_%28Uploader%29 
     198                        reverse('fb_browse')+'?pop=3', # pop=3 is CKEditor 
     199                        language)) 
  • demo/cyclope_project/settings.py

    r219 r272  
    7676 
    7777# possible values for TEXT_STYLE are: 
    78 # textile, markdown or restructuredtext (saves markup, renders with corresponding filter) 
     78# textile (saves markup, renders with corresponding filter) 
    7979# wysiwyg (rich text editor, saves HTML, renders with safe filter) 
    80 # raw (simple text area saves the raw input, renders with safe filter) 
    81 #CYCLOPE_STATICPAGE_TEXT_STYLE = 'textile' 
    82 #CYCLOPE_ARTICLE_TEXT_STYLE = 'textile' 
     80# raw [default] (simple text area saves the raw input, renders with safe filter) 
    8381 
    84 #CYCLOPE_STATICPAGE_TEXT_STYLE = 'wysiwyg' 
    85 #CYCLOPE_ARTICLE_TEXT_STYLE = 'wysiwyg' 
     82CYCLOPE_STATICPAGE_TEXT_STYLE = 'wysiwyg' 
     83CYCLOPE_ARTICLE_TEXT_STYLE = 'wysiwyg' 
    8684 
    8785HAYSTACK_WHOOSH_PATH = os.path.join(CYCLOPE_PROJECT_PATH, 'cyclope_project_index') 
Note: See TracChangeset for help on using the changeset viewer.