diff --git a/nested_inline/__init__.py b/nested_inline/__init__.py index c197406..bb501ac 100644 --- a/nested_inline/__init__.py +++ b/nested_inline/__init__.py @@ -1 +1 @@ -__version__ = (0, 3, 5) +__version__ = (0, 3, 5, 1) diff --git a/nested_inline/admin.py b/nested_inline/admin.py index 6793771..eb155f1 100644 --- a/nested_inline/admin.py +++ b/nested_inline/admin.py @@ -44,8 +44,9 @@ def get_inline_instances(self, request, obj=None): def save_formset(self, request, form, formset, change): """ Given an inline formset save it to the database. + self.saved_related_instances can be used in child class overridden save_formset(). """ - instances = formset.save() + self.saved_related_instances = formset.save() for form in formset.forms: if hasattr(form, 'nested_formsets') and form not in formset.deleted_forms: @@ -155,7 +156,7 @@ def add_view(self, request, form_url='', extra_context=None): ModelForm = self.get_form(request) formsets = [] - inline_instances = self.get_inline_instances(request, None) + inline_instances = [] if request.method == 'POST': form = ModelForm(request.POST, request.FILES) if form.is_valid(): @@ -165,7 +166,7 @@ def add_view(self, request, form_url='', extra_context=None): form_validated = False new_object = self.model() prefixes = {} - for FormSet, inline in zip(self.get_formsets(request), inline_instances): + for FormSet, inline in self.get_formsets_with_inlines(request): prefix = FormSet.get_default_prefix() prefixes[prefix] = prefixes.get(prefix, 0) + 1 if prefixes[prefix] != 1 or not prefix: @@ -175,6 +176,7 @@ def add_view(self, request, form_url='', extra_context=None): save_as_new="_saveasnew" in request.POST, prefix=prefix, queryset=inline.get_queryset(request)) formsets.append(formset) + inline_instances.append(inline) if inline.inlines: self.add_nested_inline_formsets(request, inline, formset) if self.all_valid_with_nesting(formsets) and form_validated: @@ -195,7 +197,7 @@ def add_view(self, request, form_url='', extra_context=None): initial[k] = initial[k].split(",") form = ModelForm(initial=initial) prefixes = {} - for FormSet, inline in zip(self.get_formsets(request), inline_instances): + for FormSet, inline in self.get_formsets_with_inlines(request): prefix = FormSet.get_default_prefix() prefixes[prefix] = prefixes.get(prefix, 0) + 1 if prefixes[prefix] != 1 or not prefix: @@ -203,6 +205,7 @@ def add_view(self, request, form_url='', extra_context=None): formset = FormSet(instance=self.model(), prefix=prefix, queryset=inline.get_queryset(request)) formsets.append(formset) + inline_instances.append(inline) if hasattr(inline, 'inlines') and inline.inlines: self.add_nested_inline_formsets(request, inline, formset) @@ -227,7 +230,7 @@ def add_view(self, request, form_url='', extra_context=None): context = { 'title': _('Add %s') % force_text(opts.verbose_name), 'adminform': adminForm, - 'is_popup': "_popup" in request.REQUEST, + 'is_popup': "_popup" in request.GET or "_popup" in request.POST, 'show_delete': False, 'media': media, 'inline_admin_formsets': inline_admin_formsets, @@ -259,7 +262,7 @@ def change_view(self, request, object_id, form_url='', extra_context=None): ModelForm = self.get_form(request, obj) formsets = [] - inline_instances = self.get_inline_instances(request, obj) + inline_instances = [] if request.method == 'POST': form = ModelForm(request.POST, request.FILES, instance=obj) if form.is_valid(): @@ -269,7 +272,7 @@ def change_view(self, request, object_id, form_url='', extra_context=None): form_validated = False new_object = obj prefixes = {} - for FormSet, inline in zip(self.get_formsets(request, new_object), inline_instances): + for FormSet, inline in self.get_formsets_with_inlines(request, new_object): prefix = FormSet.get_default_prefix() prefixes[prefix] = prefixes.get(prefix, 0) + 1 if prefixes[prefix] != 1 or not prefix: @@ -278,6 +281,7 @@ def change_view(self, request, object_id, form_url='', extra_context=None): instance=new_object, prefix=prefix, queryset=inline.get_queryset(request)) formsets.append(formset) + inline_instances.append(inline) if hasattr(inline, 'inlines') and inline.inlines: self.add_nested_inline_formsets(request, inline, formset) @@ -291,7 +295,7 @@ def change_view(self, request, object_id, form_url='', extra_context=None): else: form = ModelForm(instance=obj) prefixes = {} - for FormSet, inline in zip(self.get_formsets(request, obj), inline_instances): + for FormSet, inline in self.get_formsets_with_inlines(request, obj): prefix = FormSet.get_default_prefix() prefixes[prefix] = prefixes.get(prefix, 0) + 1 if prefixes[prefix] != 1 or not prefix: @@ -299,6 +303,7 @@ def change_view(self, request, object_id, form_url='', extra_context=None): formset = FormSet(instance=obj, prefix=prefix, queryset=inline.get_queryset(request)) formsets.append(formset) + inline_instances.append(inline) if hasattr(inline, 'inlines') and inline.inlines: self.add_nested_inline_formsets(request, inline, formset) @@ -325,7 +330,7 @@ def change_view(self, request, object_id, form_url='', extra_context=None): 'adminform': adminForm, 'object_id': object_id, 'original': obj, - 'is_popup': "_popup" in request.REQUEST, + 'is_popup': "_popup" in request.GET or "_popup" in request.POST, 'media': media, 'inline_admin_formsets': inline_admin_formsets, 'errors': helpers.AdminErrorList(form, formsets), @@ -364,8 +369,12 @@ def get_inline_instances(self, request, obj=None): inline_instances.append(inline) return inline_instances + def get_formsets_with_inlines(self, request, obj=None): + for inline in self.get_inline_instances(request, obj): + yield inline.get_formset(request, obj), inline + def get_formsets(self, request, obj=None): - for inline in self.get_inline_instances(request): + for inline in self.get_inline_instances(request, obj): yield inline.get_formset(request, obj) diff --git a/nested_inline/static/admin/js/inlines-nested.js b/nested_inline/static/admin/js/inlines-nested.js index 1f4a949..a853883 100644 --- a/nested_inline/static/admin/js/inlines-nested.js +++ b/nested_inline/static/admin/js/inlines-nested.js @@ -100,6 +100,7 @@ // If a post-delete callback was provided, call it with the deleted form: if (options.removed) { options.removed(formset_to_update); + $(document).trigger('formset:removed', [row, options.prefix]); } }); if (row.is("tr")) { @@ -131,6 +132,7 @@ // If a post-add callback was supplied, call it with the added form: if (options.added) { options.added(row); + $(document).trigger('formset:added', [row, options.prefix]); } nextIndex = nextIndex + 1; }); diff --git a/nested_inline/static/admin/js/inlines-nested.min.js b/nested_inline/static/admin/js/inlines-nested.min.js index bfdd991..391e571 100644 --- a/nested_inline/static/admin/js/inlines-nested.min.js +++ b/nested_inline/static/admin/js/inlines-nested.min.js @@ -1 +1 @@ -(function(e){function t(r,i,s,o){var u=e(false);var a=r.replace(/[-][0-9][-]/g,"-0-");var f=e("#"+a+"-group ."+a+"-0-nested-inline").not(".cloned");if(!f.length){f=e("#"+a+"-group ."+a+"-nested-inline").not(".cloned")}f.each(function(f,l){var c=e(this).attr("id").split("-group")[0];var h=c.replace(a+"-0",r+"-"+i);var p=e(l).clone();p.addClass("cloned");if(p.children().first().hasClass("tabular")){p.find(".form-row").not(".empty-form").remove();p.find(".nested-inline-row").remove();template_form=p.find("#"+c+"-empty");new_form=template_form.clone().removeClass(s.emptyCssClass).addClass("dynamic-"+h);new_form.insertBefore(template_form);var d=new_form.find("input");d.each(function(){var t=e(this);if(t.val()){t.removeAttr("value")}});n(p,c,h);p.find("#id_"+h+"-TOTAL_FORMS").val(1);p.find("#id_"+h+"-INITIAL_FORMS").val(0);var v=p.find(".add-row").text();p.find(".add-row").remove();p.find(".tabular.inline-related tbody tr."+h+"-not-nested").tabularFormset({prefix:h,adminStaticPrefix:s.adminStaticPrefix,addText:v,deleteText:s.deleteText});var m=t(h,0,s,false);if(m.length){p.find(".form-row").addClass("no-bottom-border")}m.each(function(){if(!e(this).next()){border_class=""}else{border_class=" no-bottom-border"}p.find("#"+h+"-empty").before(e('').html(e("",{colspan:"100%"}).html(e(this))))})}else{var m=t(h,0,s,true);p.find(".inline-related").not(".empty-form").remove();template_form=p.find("#"+c+"-empty");new_form=template_form.clone().removeClass(s.emptyCssClass).addClass("dynamic-"+h);new_form.insertBefore(template_form);var d=new_form.find("input");d.each(function(){var t=e(this);if(t.val()){t.removeAttr("value")}});new_form.find(".inline_label").text("#1");n(p,c,h);p.find("#id_"+h+"-TOTAL_FORMS").val(1);p.find("#id_"+h+"-INITIAL_FORMS").val(0);var v=p.find(".add-row").text();p.find(".add-row").remove();p.find(".inline-related").stackedFormset({prefix:h,adminStaticPrefix:s.adminStaticPrefix,addText:v,deleteText:s.deleteText});m.each(function(){new_form.append(e(this))})}if(o){p=p.add(e('
'))}if(u.length){u=u.add(p)}else{u=p}});return u}function n(t,n,i){t.attr("id",t.attr("id").replace(n,i));t.find("*").each(function(){if(e(this).attr("for")){e(this).attr("for",e(this).attr("for").replace(n,i))}if(e(this).attr("class")){e(this).attr("class",e(this).attr("class").replace(n,i))}if(this.id){this.id=this.id.replace(n,i)}if(this.name){this.name=this.name.replace(n,i)}});prefix_fix=t.find(".inline-related").first();nextIndex=r(i);if(prefix_fix.hasClass("tabular")){prefix_fix=prefix_fix.find(".form-row").first();prefix_fix.attr("id",prefix_fix.attr("id").replace("-empty","-"+nextIndex))}else{prefix_fix.attr("id",prefix_fix.attr("id").replace("-empty","-"+nextIndex))}prefix_fix.find("*").each(function(){if(e(this).attr("for")){e(this).attr("for",e(this).attr("for").replace("__prefix__","0"))}if(e(this).attr("class")){e(this).attr("class",e(this).attr("class").replace("__prefix__","0"))}if(this.id){this.id=this.id.replace("__prefix__","0")}if(this.name){this.name=this.name.replace("__prefix__","0")}})}function r(t){formset_prop=e("#id_"+t+"-TOTAL_FORMS");if(!formset_prop.length){return 0}return parseInt(formset_prop.attr("autocomplete","off").val())}function i(t,n){var i=r(t);if(n){e("#id_"+t+"-TOTAL_FORMS").attr("autocomplete","off").val(parseInt(i)+1)}else{e("#id_"+t+"-TOTAL_FORMS").attr("autocomplete","off").val(parseInt(i)-1)}}function s(t){var n=e("#id_"+t+"-MAX_NUM_FORMS").attr("autocomplete","off").val();if(typeof n=="undefined"){return""}return parseInt(n)}e.fn.formset=function(n){var o=e.extend({},e.fn.formset.defaults,n);var u=e(this);var a=u.parent();var f=function(t,n,r){var i=new RegExp("("+n+"-(\\d+|__prefix__))");var s=n+"-"+r;if(e(t).attr("for")){e(t).attr("for",e(t).attr("for").replace(i,s))}if(t.id){t.id=t.id.replace(i,s)}if(t.name){t.name=t.name.replace(i,s)}};var l=r(o.prefix);u.each(function(t){e(this).not("."+o.emptyCssClass).addClass(o.formCssClass)});var c=s(o.prefix)===""||s(o.prefix)-r(o.prefix)>0;if(u.length&&c){var h;if(u.attr("tagName")=="TR"){var p=this.eq(-1).children().length;a.append(''+o.addText+"");h=a.find("tr:last a")}else{u.filter(":last").after('
'+o.addText+"
");h=u.filter(":last").next().find("a")}h.click(function(n){n.preventDefault();var u=r(o.prefix);var a=e("#"+o.prefix+"-empty");var l=a.clone(true);l.removeClass(o.emptyCssClass).addClass(o.formCssClass).attr("id",o.prefix+"-"+u);if(l.is("tr")){l.children(":last").append('
'+o.deleteText+"
")}else if(l.is("ul")||l.is("ol")){l.append('
  • '+o.deleteText+"
  • ")}else{l.children(":first").append(''+o.deleteText+"")}l.find("*").each(function(){f(this,o.prefix,u)});l.insertBefore(e(a));i(o.prefix,true);if(s(o.prefix)!==""&&s(o.prefix)-r(o.prefix)<=0){h.parent().hide()}l.find("a."+o.deleteCssClass).click(function(t){t.preventDefault();var n=e(this).parents("."+o.formCssClass);var r=n.parent();while(n.next().hasClass("nested-inline-row")){n.next().remove()}n.remove();i(o.prefix,false);if(o.removed){o.removed(r)}});if(l.is("tr")){nested_formsets=t(o.prefix,u,o,false);if(nested_formsets.length){l.addClass("no-bottom-border")}nested_formsets.each(function(){if(!e(this).next()){border_class=""}else{border_class=" no-bottom-border"}e('').html(e("",{colspan:"100%"}).html(e(this))).insertBefore(e(a))})}else{nested_formsets=t(o.prefix,u,o,true);nested_formsets.each(function(){l.append(e(this))})}if(o.added){o.added(l)}u=u+1})}return this};e.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null};e.fn.tabularFormset=function(t){var n=e(this);var r=function(t){row_number=0;e(n.selector).not(".add-row").removeClass("row1 row2").each(function(){e(this).addClass("row"+(row_number%2+1));next=e(this).next();while(next.hasClass("nested-inline-row")){next.addClass("row"+(row_number%2+1));next=next.next()}row_number=row_number+1})};var i=function(){if(typeof DateTimeShortcuts!="undefined"){e(".datetimeshortcuts").remove();DateTimeShortcuts.init()}};var s=function(){if(typeof SelectFilter!="undefined"){e(".selectfilter").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],false,t.adminStaticPrefix)});e(".selectfilterstacked").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],true,t.adminStaticPrefix)})}};var o=function(t){t.find(".prepopulated_field").each(function(){var n=e(this),r=n.find("input, select, textarea"),i=r.data("dependency_list")||[],s=[];e.each(i,function(e,n){s.push("#"+t.find(".field-"+n).find("input, select, textarea").attr("id"))});if(s.length){r.prepopulate(s,r.attr("maxlength"))}})};n.formset({prefix:t.prefix,addText:t.addText,formCssClass:"dynamic-"+t.prefix,deleteCssClass:"inline-deletelink",deleteText:t.deleteText,emptyCssClass:"empty-form",removed:r,added:function(e){o(e);i();s();r(e)}});return n};e.fn.stackedFormset=function(t){var n=e(this);var r=function(t){t.children(".inline-related").not(".empty-form").children("h3").find(".inline_label").each(function(t){var n=t+1;e(this).html(e(this).html().replace(/(#\d+)/g,"#"+n))})};var i=function(){if(typeof DateTimeShortcuts!="undefined"){e(".datetimeshortcuts").remove();DateTimeShortcuts.init()}};var s=function(){if(typeof SelectFilter!="undefined"){e(".selectfilter").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],false,t.adminStaticPrefix)});e(".selectfilterstacked").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],true,t.adminStaticPrefix)})}};var o=function(t){t.find(".prepopulated_field").each(function(){var n=e(this),r=n.find("input, select, textarea"),i=r.data("dependency_list")||[],s=[];e.each(i,function(e,n){s.push("#"+t.find(".form-row .field-"+n).find("input, select, textarea").attr("id"))});if(s.length){r.prepopulate(s,r.attr("maxlength"))}})};n.formset({prefix:t.prefix,addText:t.addText,formCssClass:"dynamic-"+t.prefix,deleteCssClass:"inline-deletelink",deleteText:t.deleteText,emptyCssClass:"empty-form",removed:r,added:function(e){o(e);i();s();r(e.parent())}});return n};})(django.jQuery) +(function(e){function t(r,i,s,o){var u=e(!1),a=r.replace(/[-][0-9][-]/g,"-0-"),f=e("#"+a+"-group ."+a+"-0-nested-inline").not(".cloned");return f.length||(f=e("#"+a+"-group ."+a+"-nested-inline").not(".cloned")),f.each(function(f,l){var c=e(this).attr("id").split("-group")[0],h=c.replace(a+"-0",r+"-"+i),p=e(l).clone();p.addClass("cloned");if(p.children().first().hasClass("tabular")){p.find(".form-row").not(".empty-form").remove(),p.find(".nested-inline-row").remove(),template_form=p.find("#"+c+"-empty"),new_form=template_form.clone().removeClass(s.emptyCssClass).addClass("dynamic-"+h),new_form.insertBefore(template_form);var d=new_form.find("input");d.each(function(){var t=e(this);t.val()&&t.removeAttr("value")}),n(p,c,h),p.find("#id_"+h+"-TOTAL_FORMS").val(1),p.find("#id_"+h+"-INITIAL_FORMS").val(0);var v=p.find(".add-row").text();p.find(".add-row").remove(),p.find(".tabular.inline-related tbody tr."+h+"-not-nested").tabularFormset({prefix:h,adminStaticPrefix:s.adminStaticPrefix,addText:v,deleteText:s.deleteText});var m=t(h,0,s,!1);m.length&&p.find(".form-row").addClass("no-bottom-border"),m.each(function(){e(this).next()?border_class=" no-bottom-border":border_class="",p.find("#"+h+"-empty").before(e('').html(e("",{colspan:"100%"}).html(e(this))))})}else{var m=t(h,0,s,!0);p.find(".inline-related").not(".empty-form").remove(),template_form=p.find("#"+c+"-empty"),new_form=template_form.clone().removeClass(s.emptyCssClass).addClass("dynamic-"+h),new_form.insertBefore(template_form);var d=new_form.find("input");d.each(function(){var t=e(this);t.val()&&t.removeAttr("value")}),new_form.find(".inline_label").text("#1"),n(p,c,h),p.find("#id_"+h+"-TOTAL_FORMS").val(1),p.find("#id_"+h+"-INITIAL_FORMS").val(0);var v=p.find(".add-row").text();p.find(".add-row").remove(),p.find(".inline-related").stackedFormset({prefix:h,adminStaticPrefix:s.adminStaticPrefix,addText:v,deleteText:s.deleteText}),m.each(function(){new_form.append(e(this))})}o&&(p=p.add(e('
    '))),u.length?u=u.add(p):u=p}),u}function n(t,n,i){t.attr("id",t.attr("id").replace(n,i)),t.find("*").each(function(){e(this).attr("for")&&e(this).attr("for",e(this).attr("for").replace(n,i)),e(this).attr("class")&&e(this).attr("class",e(this).attr("class").replace(n,i)),this.id&&(this.id=this.id.replace(n,i)),this.name&&(this.name=this.name.replace(n,i))}),prefix_fix=t.find(".inline-related").first(),nextIndex=r(i),prefix_fix.hasClass("tabular")?(prefix_fix=prefix_fix.find(".form-row").first(),prefix_fix.attr("id",prefix_fix.attr("id").replace("-empty","-"+nextIndex))):prefix_fix.attr("id",prefix_fix.attr("id").replace("-empty","-"+nextIndex)),prefix_fix.find("*").each(function(){e(this).attr("for")&&e(this).attr("for",e(this).attr("for").replace("__prefix__","0")),e(this).attr("class")&&e(this).attr("class",e(this).attr("class").replace("__prefix__","0")),this.id&&(this.id=this.id.replace("__prefix__","0")),this.name&&(this.name=this.name.replace("__prefix__","0"))})}function r(t){return formset_prop=e("#id_"+t+"-TOTAL_FORMS"),formset_prop.length?parseInt(formset_prop.attr("autocomplete","off").val()):0}function i(t,n){var i=r(t);n?e("#id_"+t+"-TOTAL_FORMS").attr("autocomplete","off").val(parseInt(i)+1):e("#id_"+t+"-TOTAL_FORMS").attr("autocomplete","off").val(parseInt(i)-1)}function s(t){var n=e("#id_"+t+"-MAX_NUM_FORMS").attr("autocomplete","off").val();return typeof n=="undefined"?"":parseInt(n)}e.fn.formset=function(n){var o=e.extend({},e.fn.formset.defaults,n),u=e(this),a=u.parent(),f=function(t,n,r){var i=new RegExp("("+n+"-(\\d+|__prefix__))"),s=n+"-"+r;e(t).attr("for")&&e(t).attr("for",e(t).attr("for").replace(i,s)),t.id&&(t.id=t.id.replace(i,s)),t.name&&(t.name=t.name.replace(i,s))},l=r(o.prefix);u.each(function(t){e(this).not("."+o.emptyCssClass).addClass(o.formCssClass)});var c=s(o.prefix)===""||s(o.prefix)-r(o.prefix)>0;if(u.length&&c){var h;if(u.attr("tagName")=="TR"){var p=this.eq(-1).children().length;a.append(''+o.addText+""),h=a.find("tr:last a")}else u.filter(":last").after('"),h=u.filter(":last").next().find("a");h.click(function(n){n.preventDefault();var u=r(o.prefix),a=e("#"+o.prefix+"-empty"),l=a.clone(!0);l.removeClass(o.emptyCssClass).addClass(o.formCssClass).attr("id",o.prefix+"-"+u),l.is("tr")?l.children(":last").append('
    '+o.deleteText+"
    "):l.is("ul")||l.is("ol")?l.append('
  • '+o.deleteText+"
  • "):l.children(":first").append(''+o.deleteText+""),l.find("*").each(function(){f(this,o.prefix,u)}),l.insertBefore(e(a)),i(o.prefix,!0),s(o.prefix)!==""&&s(o.prefix)-r(o.prefix)<=0&&h.parent().hide(),l.find("a."+o.deleteCssClass).click(function(t){t.preventDefault();var n=e(this).parents("."+o.formCssClass),r=n.parent();while(n.next().hasClass("nested-inline-row"))n.next().remove();n.remove(),i(o.prefix,!1),o.removed&&(o.removed(r),e(document).trigger("formset:removed",[n,o.prefix]))}),l.is("tr")?(nested_formsets=t(o.prefix,u,o,!1),nested_formsets.length&&l.addClass("no-bottom-border"),nested_formsets.each(function(){e(this).next()?border_class=" no-bottom-border":border_class="",e('').html(e("",{colspan:"100%"}).html(e(this))).insertBefore(e(a))})):(nested_formsets=t(o.prefix,u,o,!0),nested_formsets.each(function(){l.append(e(this))})),o.added&&(o.added(l),e(document).trigger("formset:added",[l,o.prefix])),u+=1})}return this},e.fn.formset.defaults={prefix:"form",addText:"add another",deleteText:"remove",addCssClass:"add-row",deleteCssClass:"delete-row",emptyCssClass:"empty-row",formCssClass:"dynamic-form",added:null,removed:null},e.fn.tabularFormset=function(t){var n=e(this),r=function(t){row_number=0,e(n.selector).not(".add-row").removeClass("row1 row2").each(function(){e(this).addClass("row"+(row_number%2+1)),next=e(this).next();while(next.hasClass("nested-inline-row"))next.addClass("row"+(row_number%2+1)),next=next.next();row_number+=1})},i=function(){typeof DateTimeShortcuts!="undefined"&&(e(".datetimeshortcuts").remove(),DateTimeShortcuts.init())},s=function(){typeof SelectFilter!="undefined"&&(e(".selectfilter").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],!1,t.adminStaticPrefix)}),e(".selectfilterstacked").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],!0,t.adminStaticPrefix)}))},o=function(t){t.find(".prepopulated_field").each(function(){var n=e(this),r=n.find("input, select, textarea"),i=r.data("dependency_list")||[],s=[];e.each(i,function(e,n){s.push("#"+t.find(".field-"+n).find("input, select, textarea").attr("id"))}),s.length&&r.prepopulate(s,r.attr("maxlength"))})};return n.formset({prefix:t.prefix,addText:t.addText,formCssClass:"dynamic-"+t.prefix,deleteCssClass:"inline-deletelink",deleteText:t.deleteText,emptyCssClass:"empty-form",removed:r,added:function(e){o(e),i(),s(),r(e)}}),n},e.fn.stackedFormset=function(t){var n=e(this),r=function(t){t.children(".inline-related").not(".empty-form").children("h3").find(".inline_label").each(function(t){var n=t+1;e(this).html(e(this).html().replace(/(#\d+)/g,"#"+n))})},i=function(){typeof DateTimeShortcuts!="undefined"&&(e(".datetimeshortcuts").remove(),DateTimeShortcuts.init())},s=function(){typeof SelectFilter!="undefined"&&(e(".selectfilter").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],!1,t.adminStaticPrefix)}),e(".selectfilterstacked").each(function(e,n){var r=n.name.split("-");SelectFilter.init(n.id,r[r.length-1],!0,t.adminStaticPrefix)}))},o=function(t){t.find(".prepopulated_field").each(function(){var n=e(this),r=n.find("input, select, textarea"),i=r.data("dependency_list")||[],s=[];e.each(i,function(e,n){s.push("#"+t.find(".form-row .field-"+n).find("input, select, textarea").attr("id"))}),s.length&&r.prepopulate(s,r.attr("maxlength"))})};return n.formset({prefix:t.prefix,addText:t.addText,formCssClass:"dynamic-"+t.prefix,deleteCssClass:"inline-deletelink",deleteText:t.deleteText,emptyCssClass:"empty-form",removed:r,added:function(e){o(e),i(),s(),r(e.parent())}}),n}})(django.jQuery); \ No newline at end of file