Merge pull request #50 from epicserve/grappelli

Made updates so django-categories works with django-grappelli
This commit is contained in:
Corey Oordt 2012-08-28 17:38:59 -07:00
commit fbc21bcc39
8 changed files with 118 additions and 35 deletions

View file

@ -9,3 +9,5 @@ if STATIC_URL == None:
MEDIA_PATH = getattr(settings, 'EDITOR_MEDIA_PATH', '%seditor/' % STATIC_URL)
TREE_INITIAL_STATE = getattr(settings, 'EDITOR_TREE_INITIAL_STATE', 'collapsed')
IS_GRAPPELLI_INSTALLED = 'grappelli' in settings.INSTALLED_APPS

View file

@ -14,6 +14,10 @@
zoom: 1; /* IE7 Hack */
}
.treeTable td.action-checkbox, .treeTable th.action-checkbox-column {
padding-left: 20px;
}
.treeTable tr.collapsed td .expander {
background-image: url(toggle-expand-dark.png);
}

View file

@ -0,0 +1,38 @@
{% extends "admin/change_list.html" %}
{% load adminmedia admin_list i18n admin_tree_list %}
{% block extrahead %}
{{block.super}}
<script type="text/javascript">
(function($) {
$(document).ready(function() {
var srchString = document.getElementById('grp-changelist-search').value;
if (srchString == '')
treeTable = $("#result_list").treeTable({initialState : "{{ EDITOR_TREE_INITIAL_STATE }}"});
else
treeTable = $("#result_list").treeTable({initialState : "expanded"});
function toggleChildren(index, value) {
var row = value.parentNode.parentNode;
if (row.className.match(/child-of-node-\d+/)) {
value.checked = /child-of-node-(\d+)/.exec(row.className);
}
if($(row).hasClass("parent")) {
$("table.treeTable tbody tr.child-of-" + row.id + " input").each(toggleChildren);
}
$("tr input.action-select").actions();
};
$('.action-select').each(
function(){
$(this).bind('click', function(event){
// Get the tr from checkbox -> td -> tr
var row = event.currentTarget.parentNode.parentNode;
$("table.treeTable tbody tr.child-of-" + row.id + " input").each(toggleChildren);
});
});
});
})(django.jQuery);
</script>
{% endblock %}
{% block result_list %}
{% result_tree_list cl %}
{% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
{% endblock %}

View file

@ -0,0 +1,28 @@
{% if result_hidden_fields %}
<div class="hiddenfields"> {# DIV for HTML validation #}
{% for item in result_hidden_fields %}{{ item }}{% endfor %}
</div>
{% endif %}
{% if results %}
<div class="grp-module grp-changelist-results">
<table cellspacing="0" id="result_list">
<thead>
<tr>
{% for header in result_headers %}
<th scope="col" {{ header.class_attrib }}>
{% if header.sortable %}<a href="{{ header.url }}">{% endif %}
{{ header.text|capfirst }}
{% if header.sortable %}</a>{% endif %}
</th>
{% endfor %}
</tr>
</thead>
<tbody>
{% for result in results %}
<tr id="node-{{ result.pk }}" class="grp-row {% cycle 'grp-row-even' 'grp-row-odd' %}{% if result.parent_pk %} child-of-node-{{result.parent_pk}}{% endif %}">{% for item in result %}{{ item }}{% endfor %}</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endif %}

View file

@ -1,39 +1,39 @@
{% extends "admin/change_list.html" %}
{% load adminmedia admin_list i18n admin_tree_list %}
{% block extrahead %}
{{block.super}}
<script type="text/javascript">
(function($) {
$(document).ready(function() {
var srchString = document.getElementById('searchbar').value;
{{block.super}}
<script type="text/javascript">
(function($) {
$(document).ready(function() {
var srchString = document.getElementById('searchbar').value;
if (srchString == '')
treeTable = $("#result_list").treeTable({initialState : "{{ EDITOR_TREE_INITIAL_STATE }}"});
else
treeTable = $("#result_list").treeTable({initialState : "expanded"});
function toggleChildren(index, value) {
var row = value.parentNode.parentNode;
if (row.className.match(/child-of-node-\d+/)) {
value.checked = /child-of-node-(\d+)/.exec(row.className);
}
if($(row).hasClass("parent")) {
$("table.treeTable tbody tr.child-of-" + row.id + " input").each(toggleChildren);
}
$("tr input.action-select").actions();
};
$('.action-select').each(
function(){
$(this).bind('click', function(event){
// Get the tr from checkbox -> td -> tr
var row = event.currentTarget.parentNode.parentNode;
$("table.treeTable tbody tr.child-of-" + row.id + " input").each(toggleChildren);
});
});
});
})(django.jQuery);
</script>
treeTable = $("#result_list").treeTable({initialState : "{{ EDITOR_TREE_INITIAL_STATE }}"});
else
treeTable = $("#result_list").treeTable({initialState : "expanded"});
function toggleChildren(index, value) {
var row = value.parentNode.parentNode;
if (row.className.match(/child-of-node-\d+/)) {
value.checked = /child-of-node-(\d+)/.exec(row.className);
}
if($(row).hasClass("parent")) {
$("table.treeTable tbody tr.child-of-" + row.id + " input").each(toggleChildren);
}
$("tr input.action-select").actions();
};
$('.action-select').each(
function(){
$(this).bind('click', function(event){
// Get the tr from checkbox -> td -> tr
var row = event.currentTarget.parentNode.parentNode;
$("table.treeTable tbody tr.child-of-" + row.id + " input").each(toggleChildren);
});
});
});
})(django.jQuery);
</script>
{% endblock %}
{% block result_list %}
{% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %}
{% result_tree_list cl %}
{% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
{% endblock %}
{% endblock %}

View file

@ -21,4 +21,4 @@
</tbody>
</table>
</div>
{% endif %}
{% endif %}

View file

@ -12,8 +12,14 @@ from django.utils.encoding import smart_unicode, force_unicode
from django.utils.html import escape, conditional_escape
from django.utils.safestring import mark_safe
from categories.editor import settings
register = Library()
TREE_LIST_RESULTS_TEMPLATE = 'admin/editor/tree_list_results.html'
if settings.IS_GRAPPELLI_INSTALLED:
TREE_LIST_RESULTS_TEMPLATE = 'admin/editor/grappelli_tree_list_results.html'
def items_for_tree_result(cl, result, form):
"""
@ -145,4 +151,4 @@ def result_tree_list(cl):
from django.contrib.admin.templatetags.admin_list import result_hidden_fields
result['result_hidden_fields'] = list(result_hidden_fields(cl))
return result
result_tree_list = register.inclusion_tag("admin/editor/tree_list_results.html")(result_tree_list)
result_tree_list = register.inclusion_tag(TREE_LIST_RESULTS_TEMPLATE)(result_tree_list)

View file

@ -104,10 +104,15 @@ class TreeEditor(admin.ModelAdmin):
self.list_display.remove('action_checkbox')
opts = self.model._meta
grappelli_prefix = ""
if settings.IS_GRAPPELLI_INSTALLED:
grappelli_prefix = "grappelli_"
self.change_list_template = [
'admin/%s/%s/editor/tree_editor.html' % (opts.app_label, opts.object_name.lower()),
'admin/%s/editor/tree_editor.html' % opts.app_label,
'admin/editor/tree_editor.html',
'admin/%s/%s/editor/%stree_editor.html' % (opts.app_label, opts.object_name.lower(), grappelli_prefix),
'admin/%s/editor/%stree_editor.html' % (opts.app_label, grappelli_prefix),
'admin/editor/%stree_editor.html' % grappelli_prefix,
]
def get_changelist(self, request, **kwargs):