diff --git a/categories/editor/settings.py b/categories/editor/settings.py
index 9f4658a..399142b 100644
--- a/categories/editor/settings.py
+++ b/categories/editor/settings.py
@@ -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
diff --git a/categories/editor/static/editor/jquery.treeTable.css b/categories/editor/static/editor/jquery.treeTable.css
index f9fccd9..9d9a263 100644
--- a/categories/editor/static/editor/jquery.treeTable.css
+++ b/categories/editor/static/editor/jquery.treeTable.css
@@ -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);
}
diff --git a/categories/editor/templates/admin/editor/grappelli_tree_editor.html b/categories/editor/templates/admin/editor/grappelli_tree_editor.html
new file mode 100644
index 0000000..34da30e
--- /dev/null
+++ b/categories/editor/templates/admin/editor/grappelli_tree_editor.html
@@ -0,0 +1,38 @@
+{% extends "admin/change_list.html" %}
+{% load adminmedia admin_list i18n admin_tree_list %}
+{% block extrahead %}
+ {{block.super}}
+
+{% endblock %}
+{% block result_list %}
+ {% result_tree_list cl %}
+ {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %}
+{% endblock %}
diff --git a/categories/editor/templates/admin/editor/grappelli_tree_list_results.html b/categories/editor/templates/admin/editor/grappelli_tree_list_results.html
new file mode 100644
index 0000000..379471e
--- /dev/null
+++ b/categories/editor/templates/admin/editor/grappelli_tree_list_results.html
@@ -0,0 +1,28 @@
+{% if result_hidden_fields %}
+
{# DIV for HTML validation #}
+ {% for item in result_hidden_fields %}{{ item }}{% endfor %}
+
+{% endif %}
+
+{% if results %}
+
+{% endif %}
\ No newline at end of file
diff --git a/categories/editor/templates/admin/editor/tree_editor.html b/categories/editor/templates/admin/editor/tree_editor.html
index dc1fa02..08b7d2f 100644
--- a/categories/editor/templates/admin/editor/tree_editor.html
+++ b/categories/editor/templates/admin/editor/tree_editor.html
@@ -1,39 +1,39 @@
{% extends "admin/change_list.html" %}
{% load adminmedia admin_list i18n admin_tree_list %}
{% block extrahead %}
- {{block.super}}
-
+ 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);
+
{% 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 %}
\ No newline at end of file
diff --git a/categories/editor/templates/admin/editor/tree_list_results.html b/categories/editor/templates/admin/editor/tree_list_results.html
index 703bf45..e5f1784 100644
--- a/categories/editor/templates/admin/editor/tree_list_results.html
+++ b/categories/editor/templates/admin/editor/tree_list_results.html
@@ -21,4 +21,4 @@
-{% endif %}
+{% endif %}
\ No newline at end of file
diff --git a/categories/editor/templatetags/admin_tree_list.py b/categories/editor/templatetags/admin_tree_list.py
index 61ff5dd..658bd41 100644
--- a/categories/editor/templatetags/admin_tree_list.py
+++ b/categories/editor/templatetags/admin_tree_list.py
@@ -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)
diff --git a/categories/editor/tree_editor.py b/categories/editor/tree_editor.py
index bb43ac4..87855e7 100644
--- a/categories/editor/tree_editor.py
+++ b/categories/editor/tree_editor.py
@@ -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):