diff --git a/adminsortable/admin.py b/adminsortable/admin.py
index 3bad43e..612947d 100644
--- a/adminsortable/admin.py
+++ b/adminsortable/admin.py
@@ -32,6 +32,8 @@ class SortableAdminBase(object):
change_form_template_extends = 'admin/change_form.html'
change_list_template_extends = 'admin/change_list.html'
+ after_sorting_js_callback_name = None
+
def changelist_view(self, request, extra_context=None):
"""
If the model that inherits Sortable has more than one object,
@@ -215,7 +217,8 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
'sortable_by_class_is_sortable': sortable_by_class_is_sortable,
'sortable_by_class_display_name': sortable_by_class_display_name,
'jquery_lib_path': jquery_lib_path,
- 'csrf_cookie_name': getattr(settings, 'CSRF_COOKIE_NAME', 'csrftoken')
+ 'csrf_cookie_name': getattr(settings, 'CSRF_COOKIE_NAME', 'csrftoken'),
+ 'after_sorting_js_callback_name': self.after_sorting_js_callback_name
})
return render(request, self.sortable_change_list_template, context)
@@ -238,7 +241,8 @@ class SortableAdmin(SortableAdminBase, ModelAdmin):
'change_form_template_extends': self.change_form_template_extends,
'has_sortable_tabular_inlines': self.has_sortable_tabular_inlines,
'has_sortable_stacked_inlines': self.has_sortable_stacked_inlines,
- 'csrf_cookie_name': getattr(settings, 'CSRF_COOKIE_NAME', 'csrftoken')
+ 'csrf_cookie_name': getattr(settings, 'CSRF_COOKIE_NAME', 'csrftoken'),
+ 'after_sorting_js_callback_name': self.after_sorting_js_callback_name
})
return super(SortableAdmin, self).change_view(request, object_id,
diff --git a/adminsortable/static/adminsortable/js/admin.sortable.js b/adminsortable/templates/adminsortable/admin.sortable.html
similarity index 83%
rename from adminsortable/static/adminsortable/js/admin.sortable.js
rename to adminsortable/templates/adminsortable/admin.sortable.html
index ad4b099..15a42a1 100644
--- a/adminsortable/static/adminsortable/js/admin.sortable.js
+++ b/adminsortable/templates/adminsortable/admin.sortable.html
@@ -1,47 +1,54 @@
-(function($){
-
- $(function() {
- jQuery('.sortable').sortable({
- axis : 'y',
- containment : 'parent',
- tolerance : 'pointer',
- items : 'li',
- stop : function(event, ui) {
- var indexes = [],
- lineItems = ui.item.parent().find('> li');
-
- lineItems.each(function(i) {
- indexes.push($(this).find(':hidden[name="pk"]').val());
- });
-
- $.ajax({
- url: ui.item.find('a.admin_sorting_url').attr('href'),
- type: 'POST',
- data: { indexes: indexes.join(',') },
- success: function() {
- // set icons based on position
- lineItems.each(function(index, element) {
- var icon = $(element).find('a.admin_sorting_url .fa');
- icon.removeClass('fa-sort-desc fa-sort-asc fa-sort');
-
- if (index === 0) {
- icon.addClass('fa fa-sort-desc');
- }
- else if (index == lineItems.length - 1) {
- icon.addClass('fa fa-sort-asc');
- }
- else {
- icon.addClass('fa fa-sort');
- }
- });
-
- ui.item.effect('highlight', {}, 1000);
- }
- });
- }
- }).click(function(e){
- e.preventDefault();
- });
- });
-
-})(django.jQuery);
+
diff --git a/adminsortable/templates/adminsortable/change_form.html b/adminsortable/templates/adminsortable/change_form.html
index 65763cb..c60b413 100644
--- a/adminsortable/templates/adminsortable/change_form.html
+++ b/adminsortable/templates/adminsortable/change_form.html
@@ -7,17 +7,17 @@
{% url 'admin:jsi18n' as jsi18nurl %}
{% if has_sortable_tabular_inlines or has_sortable_stacked_inlines %}
-
+
{% include 'adminsortable/csrf/jquery.django-csrf.html' with csrf_cookie_name=csrf_cookie_name %}
{% endif %}
{% if has_sortable_tabular_inlines %}
-
+ {% include 'adminsortable/edit_inline/admin.sortable.stacked.inlines.html' with after_sorting_js_callback_name=after_sorting_js_callback_name %}
{% endif %}
{% if has_sortable_stacked_inlines %}
-
+ {% include 'adminsortable/edit_inline/admin.sortable.tabular.inlines.html' with after_sorting_js_callback_name=after_sorting_js_callback_name %}
{% endif %}
{% endblock %}
diff --git a/adminsortable/templates/adminsortable/change_list.html b/adminsortable/templates/adminsortable/change_list.html
index 3be48ab..5fc6ca2 100644
--- a/adminsortable/templates/adminsortable/change_list.html
+++ b/adminsortable/templates/adminsortable/change_list.html
@@ -21,14 +21,31 @@
{% endblock %}
{% block extrahead %}
-{{ block.super }}
-{{ media.js }}
+{{ block.super }}
+{{ media.js }}
{% include 'adminsortable/csrf/jquery.django-csrf.html' with csrf_cookie_name=csrf_cookie_name %}
-
+{% include 'adminsortable/admin.sortable.html' with after_sorting_js_callback_name=after_sorting_js_callback_name %}
+
+
{% endblock %}
{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %}
diff --git a/adminsortable/static/adminsortable/js/admin.sortable.stacked.inlines.js b/adminsortable/templates/adminsortable/edit_inline/admin.sortable.stacked.inlines.html
similarity index 89%
rename from adminsortable/static/adminsortable/js/admin.sortable.stacked.inlines.js
rename to adminsortable/templates/adminsortable/edit_inline/admin.sortable.stacked.inlines.html
index b6e21f4..f414272 100644
--- a/adminsortable/static/adminsortable/js/admin.sortable.stacked.inlines.js
+++ b/adminsortable/templates/adminsortable/edit_inline/admin.sortable.stacked.inlines.html
@@ -1,70 +1,78 @@
-(function($){
-
- $(function() {
- var sorting_urls = $(':hidden[name="admin_sorting_url"]');
- if (sorting_urls.length > 0)
- {
- var sortable_inline_groups = sorting_urls.closest('.inline-group')
- var sortable_inline_rows = sortable_inline_groups.find('.inline-related');
-
- sortable_inline_groups.addClass('sortable')
- sortable_inline_rows.addClass('sortable');
-
- sortable_inline_groups.sortable({
- axis : 'y',
- containment : 'parent',
- create: function(event, ui) {
- $('.inline-related :checkbox').unbind();
- },
- tolerance : 'pointer',
- items : '.inline-related',
- stop : function(event, ui)
- {
- if ($('.inline-deletelink').length > 0) {
- $(ui.sender).sortable('cancel');
- alert($('#localized_save_before_reorder_message').val());
- return false;
- }
-
- var indexes = [];
- ui.item.parent().children('.inline-related').each(function(i)
- {
- var index_value = $(this).find(':hidden[name$="-id"]').val();
- if (index_value !== "" && index_value !== undefined) {
- indexes.push(index_value);
- }
- });
-
- $.ajax({
- url: ui.item.parent().find(':hidden[name="admin_sorting_url"]').val(),
- type: 'POST',
- data: { indexes : indexes.join(',') },
- success: function() {
- var fieldsets = ui.item.find('fieldset'),
- highlightedSelector = fieldsets.filter('.collapsed').length === fieldsets.length ? 'h3' : '.form-row',
- icons = ui.item.parent().find('h3 > .fa');
-
- // set icons based on position
- icons.removeClass('fa-sort-desc fa-sort-asc fa-sort');
- icons.each(function(index, element) {
- var icon = $(element);
- if (index === 0) {
- icon.addClass('fa fa-sort-desc');
- }
- else if (index == icons.length - 1) {
- icon.addClass('fa fa-sort-asc');
- }
- else {
- icon.addClass('fa fa-sort');
- }
- });
-
- ui.item.find(highlightedSelector).effect('highlight', {}, 1000);
- }
- });
- }
- });
- }
- });
-
-})(django.jQuery);
+
diff --git a/adminsortable/static/adminsortable/js/admin.sortable.tabular.inlines.js b/adminsortable/templates/adminsortable/edit_inline/admin.sortable.tabular.inlines.html
similarity index 89%
rename from adminsortable/static/adminsortable/js/admin.sortable.tabular.inlines.js
rename to adminsortable/templates/adminsortable/edit_inline/admin.sortable.tabular.inlines.html
index 376df13..d993b39 100644
--- a/adminsortable/static/adminsortable/js/admin.sortable.tabular.inlines.js
+++ b/adminsortable/templates/adminsortable/edit_inline/admin.sortable.tabular.inlines.html
@@ -1,69 +1,77 @@
-(function($){
-
- $(function() {
- var sorting_urls = $(':hidden[name="admin_sorting_url"]');
- if (sorting_urls.length)
- {
- var sortable_inline_group = sorting_urls.closest('.inline-group');
- var tabular_inline_rows = sortable_inline_group.find('.tabular table tbody tr');
-
- tabular_inline_rows.addClass('sortable');
-
- sortable_inline_group.find('.tabular.inline-related').sortable({
- axis : 'y',
- containment : 'parent',
- create: function(event, ui) {
- $('td.delete :checkbox').unbind();
- },
- tolerance : 'pointer',
- items : 'tr:not(.add-row)',
- stop : function(event, ui) {
- if ($('.inline-deletelink').length > 0) {
- $(ui.sender).sortable('cancel');
- alert($('#localized_save_before_reorder_message').val());
- return false;
- }
-
- var indexes = [];
- ui.item.parent().children('tr').each(function(i)
- {
- var index_value = $(this).find('.original :input:first').val();
+
diff --git a/sample_project/database/test_project.sqlite b/sample_project/database/test_project.sqlite
index d439e4a..944cf22 100644
Binary files a/sample_project/database/test_project.sqlite and b/sample_project/database/test_project.sqlite differ
diff --git a/sample_project/samples/admin.py b/sample_project/samples/admin.py
index ec18418..fb1acf1 100644
--- a/sample_project/samples/admin.py
+++ b/sample_project/samples/admin.py
@@ -83,6 +83,9 @@ class ProjectAdmin(SortableAdmin):
NonSortableCreditInline, NonSortableNoteInline
]
list_display = ['__str__', 'category']
+ after_sorting_js_callback_name = 'afterSortCallback'
+ sortable_change_list_template = 'adminsortable/custom_change_list.html'
+ sortable_change_form_template = "adminsortable/custom_change_form.html"
admin.site.register(Project, ProjectAdmin)
diff --git a/sample_project/templates/adminsortable/custom_change_form.html b/sample_project/templates/adminsortable/custom_change_form.html
new file mode 100644
index 0000000..84f706c
--- /dev/null
+++ b/sample_project/templates/adminsortable/custom_change_form.html
@@ -0,0 +1,15 @@
+{% extends "adminsortable/change_form.html" %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+
+{% endblock %}
diff --git a/sample_project/templates/adminsortable/custom_change_list.html b/sample_project/templates/adminsortable/custom_change_list.html
new file mode 100644
index 0000000..3fbc2b6
--- /dev/null
+++ b/sample_project/templates/adminsortable/custom_change_list.html
@@ -0,0 +1,15 @@
+{% extends 'adminsortable/change_list.html' %}
+
+{% block extrahead %}
+ {{ block.super }}
+
+
+{% endblock %}