| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- (function ($) {
- "use strict";
- function initItem(item) {
- var empty_label, chainfield = "#id_" + $(item).attr("data-chainfield"),
- url = $(item).attr("data-url"),
- id = "#" + $(item).attr("id"),
- value = JSON.parse($(item).attr("data-value")),
- auto_choose = $(item).attr("data-auto_choose");
- if ($(item).hasClass("chained-fk")) {
- empty_label = $(item).attr("data-empty_label");
- chainedfk.init(chainfield, url, id, value, empty_label, auto_choose);
- } else if ($(item).hasClass("chained")) {
- chainedm2m.init(chainfield, url, id, value, auto_choose);
- } else if ($(item).hasClass("filtered")) {
- // For the ManyToMany using horizontal=True added after the page load
- // using javascript.
- id = id.replace('_from', ''); // we need to remove the _from part
- chainedm2m.init(chainfield, url, id, value, auto_choose);
- }
- }
- $(window).on('load', function () {
- $.each($(".chained"), function (index, item) {
- initItem(item);
- });
- $.each($(".filtered"), function (index, item) {
- if (item.hasAttribute('data-chainfield')) {
- initItem(item);
- }
- });
- });
- $(document).ready(function () {
- $.each($(".chained-fk"), function (index, item) {
- initItem(item);
- });
- });
- function initFormset(chained) {
- var re = /\d+/g,
- prefix,
- match,
- chainfield = $(chained).attr("data-chainfield"),
- chainedId = $(chained).attr("id");
- if (chainfield.indexOf("__prefix__") > -1) {
- /*
- If we have several inlines with the same name, they will get an index, so we need to ignore that and get
- the last numeric value in the id
- */
- do {
- match = re.exec(chainedId);
- if (match) {
- prefix = match[0];
- }
- } while (match);
- chainfield = chainfield.replace("__prefix__", prefix);
- $(chained).attr("data-chainfield", chainfield);
- }
- initItem(chained);
- }
- $(document).on('formset:added', function (event, $row, formsetName) {
- // Fired every time a new inline formset is created
- var chainedFK, chainedM2M, filteredM2M;
- // For the ForeingKey
- chainedFK = $row.find(".chained-fk");
- $.each(chainedFK, function (index, chained) {
- initFormset(chained);
- });
- // For the ManyToMany
- chainedM2M = $row.find(".chained");
- $.each(chainedM2M, function (index, chained) {
- initFormset(chained);
- });
- // For the ManyToMany using horizontal=True added after the page load
- // using javascript.
- filteredM2M = $row.find(".filtered");
- $.each(filteredM2M, function (index, filtered) {
- if (filtered.hasAttribute('data-chainfield')) {
- initFormset(filtered);
- }
- });
- });
- }(jQuery || django.jQuery));
|