Removed unused code files

This commit is contained in:
Corey Oordt 2010-12-16 11:38:55 -05:00
parent 1e546b6309
commit 6693d8dad3
3 changed files with 0 additions and 343 deletions

View file

@ -1,4 +0,0 @@
#from feincms.admin.item_editor import ItemEditor, ItemEditorForm
from tree_editor import TreeEditor, ajax_editable_boolean, \
ajax_editable_boolean_cell, django_boolean_icon
from splitpane_editor import SplitPaneEditor

View file

@ -1,200 +0,0 @@
import re
from django import forms, template
from django.contrib import admin
from django.contrib.admin import helpers
from django.contrib.admin.util import unquote
from django.db.models import loading
from django.forms.formsets import all_valid
from django.forms.models import modelform_factory, inlineformset_factory
from django.http import HttpResponseRedirect, Http404
from django.shortcuts import render_to_response
from django.utils.encoding import force_unicode
from django.utils.functional import curry
from django.utils.translation import ugettext as _
import settings
FRONTEND_EDITING_MATCHER = re.compile(r'(\d+)/(\w+)/(\d+)')
class ItemEditorForm(forms.ModelForm):
region = forms.CharField(widget=forms.HiddenInput())
ordering = forms.IntegerField(widget=forms.HiddenInput())
class ItemEditor(admin.ModelAdmin):
"""
This ModelAdmin class needs an attribute:
show_on_top::
A list of fields which should be displayed at the top of the form.
This does not need to (and should not) include ``template''
"""
def _formfield_callback(self, request):
if settings.DJANGO10_COMPAT:
# This should compare for Django SVN before [9761] (From 2009-01-16),
# but I don't care that much. Doesn't work with git checkouts anyway, so...
return self.formfield_for_dbfield
else:
return curry(self.formfield_for_dbfield, request=request)
def _frontend_editing_view(self, request, cms_id, content_type, content_id):
"""
This view is used strictly for frontend editing -- it is not used inside the
standard administration interface.
"""
try:
model_cls = loading.get_model(self.model._meta.app_label, content_type)
obj = model_cls.objects.get(parent=cms_id, id=content_id)
except:
raise Http404
form_class_base = getattr(model_cls, 'item_editor_form', ItemEditorForm)
ModelForm = modelform_factory(model_cls,
exclude=('parent', 'region', 'ordering'),
form=form_class_base,
formfield_callback=self._formfield_callback(request=request))
# we do not want to edit these two fields in the frontend editing mode; we are
# strictly editing single content blocks there.
# We have to remove them from the form because we explicitly redefined them in
# the ItemEditorForm definition above. Just using exclude is not enough.
del ModelForm.base_fields['region']
del ModelForm.base_fields['ordering']
if request.method == 'POST':
# The prefix is used to replace the formset identifier from the ItemEditor
# interface. Customization of the form is easily possible through either matching
# the prefix (frontend editing) or the formset identifier (ItemEditor) as it is
# done in the richtext and mediafile init.html item editor includes.
form = ModelForm(request.POST, instance=obj, prefix=content_type)
if form.is_valid():
obj = form.save()
return render_to_response('admin/editor/editor_done.html', {
'content': obj.render(request=request),
'identifier': obj.fe_identifier(),
'MEDIA_PATH': settings.MEDIA_PATH,
'MEDIA_HOTLINKING': settings.MEDIA_HOTLINKING,
})
else:
form = ModelForm(instance=obj, prefix=content_type)
return render_to_response('admin/editor/editor.html', {
'frontend_editing': True,
'title': _('Change %s') % force_unicode(model_cls._meta.verbose_name),
'object': obj,
'form': form,
'is_popup': True,
'media': self.media,
'MEDIA_PATH': settings.MEDIA_PATH,
'MEDIA_HOTLINKING': settings.MEDIA_HOTLINKING,
}, context_instance=template.RequestContext(request,
processors=self.model.item_editor_context_processors))
def change_view(self, request, object_id, extra_context=None):
self.model._needs_content_types()
# Recognize frontend editing requests
# This is done here so that the developer does not need to add additional entries to
# urls.py or something...
res = FRONTEND_EDITING_MATCHER.search(object_id)
if res:
return self._frontend_editing_view(request, res.group(1), res.group(2), res.group(3))
ModelForm = modelform_factory(self.model, exclude=('parent',),
formfield_callback=self._formfield_callback(request=request),
form=self.form)
# generate a formset type for every concrete content type
inline_formset_types = [(
content_type,
inlineformset_factory(self.model, content_type, extra=1,
form=getattr(content_type, 'item_editor_form', ItemEditorForm),
formfield_callback=self._formfield_callback(request=request))
) for content_type in self.model._editor_content_types]
opts = self.model._meta
try:
obj = self.model._default_manager.get(pk=unquote(object_id))
except self.model.DoesNotExist:
raise Http404
if not self.has_change_permission(request, obj):
raise PermissionDenied
if request.method == 'POST':
model_form = ModelForm(request.POST, request.FILES, instance=obj)
inline_formsets = [
formset_class(request.POST, request.FILES, instance=obj,
prefix=content_type.__name__.lower())
for content_type, formset_class in inline_formset_types]
if model_form.is_valid() and all_valid(inline_formsets):
model_form.save()
for formset in inline_formsets:
formset.save()
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': force_unicode(opts.verbose_name), 'obj': force_unicode(obj)}
if request.POST.has_key("_continue"):
self.message_user(request, msg + ' ' + _("You may edit it again below."))
return HttpResponseRedirect('.')
elif request.POST.has_key('_addanother'):
self.message_user(request, msg + ' ' + (_("You may add another %s below.") % force_unicode(opts.verbose_name)))
return HttpResponseRedirect("../add/")
else:
self.message_user(request, msg)
return HttpResponseRedirect("../")
else:
model_form = ModelForm(instance=obj)
inline_formsets = [
formset_class(instance=obj, prefix=content_type.__name__.lower())
for content_type, formset_class in inline_formset_types]
# Prepare mapping of content types to their prettified names
content_types = []
for content_type in self.model._editor_content_types:
content_name = content_type._meta.verbose_name
content_types.append((content_name, content_type.__name__.lower()))
context = {}
if hasattr(self.model, '_editor_templates'):
if 'template_key' not in self.show_on_top:
self.show_on_top = ['template_key'] + list(self.show_on_top)
context['available_templates'] = self.model._editor_templates
context.update({
'title': _('Change %s') % force_unicode(opts.verbose_name),
'opts': opts,
'object': obj,
'object_form': model_form,
'inline_formsets': inline_formsets,
'content_types': content_types,
'top_fields': [model_form[field] for field in self.show_on_top],
'settings_fields': [field for field in model_form if field.name not in self.show_on_top],
'media': self.media + model_form.media,
'errors': helpers.AdminErrorList(model_form, inline_formsets),
'MEDIA_PATH': settings.MEDIA_PATH,
'MEDIA_HOTLINKING': settings.MEDIA_HOTLINKING,
})
return self.render_item_editor(request, obj, context)
def render_item_editor(self, request, object, context):
opts = self.model._meta
return render_to_response([
'admin/editor/%s/%s/item_editor.html' % (opts.app_label, opts.object_name.lower()),
'admin/editor/%s/item_editor.html' % opts.app_label,
'admin/editor/item_editor.html',
], context, context_instance=template.RequestContext(request,
processors=self.model.item_editor_context_processors))

View file

@ -1,139 +0,0 @@
from django import template
from django.conf import settings as django_settings
from django.contrib import admin
from django.contrib.admin.util import unquote
from django.core.exceptions import ImproperlyConfigured
from django.db import connection, models
from django.http import HttpResponseRedirect, HttpResponse, Http404
from django.shortcuts import render_to_response
from django.utils import simplejson
from django.utils.encoding import force_unicode, smart_unicode
from django.utils.text import capfirst
from django.utils.translation import ugettext as _
import settings
class SplitPaneEditor(admin.ModelAdmin):
# This can be replaced dynamically with another condition if the need
# should arise. Using AJAX if the tree node count exceeds 25 tries to
# be a sane default only, nothing more.
delayed_tree_loading = lambda self: self.model._tree_manager.count() > 25
def changelist_view(self, request, extra_context=None):
if 'mptt' not in django_settings.INSTALLED_APPS:
# mptt_tags is needed to build the nested tree for the tree view
raise ImproperlyConfigured, 'You have to add \'mptt\' to INSTALLED_APPS to use the SplitPaneEditor'
if not self.has_change_permission(request, None):
raise PermissionDenied
if request.is_ajax():
cmd = request.REQUEST.get('__cmd')
if cmd == 'move_node':
return self._move_node(request)
elif cmd == 'subtree':
return self._subtree_view(request)
return HttpResponse('Oops. AJAX request not understood.')
if '_tree' in request.GET:
# Left frame
return self._tree_view(request)
elif '_blank' in request.GET:
# Default content for right frame (if the user is not editing
# any items currently)
return self._blank_view(request)
elif 'pop' in request.GET:
# Delegate to default implementation for raw_id_fields etc
return super(SplitPaneEditor, self).changelist_view(request, extra_context)
return render_to_response('admin/feincms/splitpane_editor.html')
def _tree_view(self, request):
# XXX the default manager isn't guaranteed to have a method
# named "active" at all...
try:
inactive_nodes = self.model._default_manager.exclude(
id__in=self.model._default_manager.active()).values_list('id', flat=True)
except AttributeError:
inactive_nodes = []
opts = self.model._meta
context = {
'opts': opts,
'root_path': self.admin_site.root_path,
'inactive_nodes': ', '.join('#item%d' % i for i in inactive_nodes),
'MEDIA_PATH': settings.MEDIA_PATH,
}
if self.delayed_tree_loading():
context['object_list'] = self.model._tree_manager.root_nodes()
else:
context['object_list'] = self.model._tree_manager.all()
context['full_object_list'] = True
return render_to_response([
'admin/feincms/%s/%s/splitpane_editor_tree.html' % (opts.app_label, opts.object_name.lower()),
'admin/feincms/%s/splitpane_editor_tree.html' % opts.app_label,
'admin/feincms/splitpane_editor_tree.html',
], context, context_instance=template.RequestContext(request))
def _subtree_view(self, request):
parent = self.model._default_manager.get(pk=request.GET.get('parent'))
return render_to_response('admin/feincms/splitpane_editor_tree_subtree.html', {
'object_list': parent.get_children(),
})
def _blank_view(self, request):
opts = self.model._meta
return render_to_response('admin/feincms/splitpane_editor_blank.html', {
'has_add_permission': self.has_add_permission(request),
'root_path': self.admin_site.root_path,
'title': capfirst(opts.verbose_name_plural),
'opts': opts,
}, context_instance=template.RequestContext(request))
def _move_node(self, request):
destination_id = int(request.POST.get('destination'))
source_id = int(request.POST.get('source'))
position = int(request.POST.get('position'))
if destination_id == 0:
siblings = self.model._tree_manager.root_nodes()
else:
parent = self.model._tree_manager.get(pk=destination_id)
siblings = parent.get_children()
source = self.model._tree_manager.get(pk=source_id)
if siblings.count() == 0:
# This can only happen when destination != 0
# Insert dragged element as new (and only) child
self.model._tree_manager.move_node(source, parent, 'last-child')
elif position == 0:
sibling = siblings[0]
if sibling != source:
# Only do something if item was not dragged to the same place
# as it was before
self.model._tree_manager.move_node(source, siblings[0], 'left')
else:
sibling = siblings[position - 1]
if source in siblings[:position]:
# The item is a direct sibling of its former position. If the
# item's place was somewhere before its new place, we have to
# adjust the position slightly
self.model._tree_manager.move_node(source, siblings[position], 'right')
else:
# Otherwise, add it to the right of the target node. This
# works for last childs too
self.model._tree_manager.move_node(source, siblings[position - 1], 'right')
# Ensure that model save has been run
source = self.model._tree_manager.get(pk=source_id)
source.save()
return HttpResponse('OK')