udata 10.0.3.dev32541__py2.py3-none-any.whl → 10.0.3.dev32594__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of udata might be problematic. Click here for more details.

Files changed (58) hide show
  1. udata/core/dataset/models.py +6 -0
  2. udata/core/discussions/models.py +8 -0
  3. udata/core/organization/models.py +6 -0
  4. udata/core/post/models.py +6 -0
  5. udata/core/reuse/models.py +6 -0
  6. udata/core/spatial/models.py +6 -0
  7. udata/core/user/models.py +6 -0
  8. udata/features/territories/models.py +6 -0
  9. udata/mail.py +17 -1
  10. udata/static/chunks/{11.ffe19f0319ffd1bc9737.js → 11.727465d72948bc466d43.js} +3 -3
  11. udata/static/chunks/{11.ffe19f0319ffd1bc9737.js.map → 11.727465d72948bc466d43.js.map} +1 -1
  12. udata/static/chunks/{13.645dd0b7c0b9210f1b56.js → 13.bef5fdb3e147e94fea99.js} +2 -2
  13. udata/static/chunks/{13.645dd0b7c0b9210f1b56.js.map → 13.bef5fdb3e147e94fea99.js.map} +1 -1
  14. udata/static/chunks/{17.8e19985c4d12a3b7b0c0.js → 17.b91d28f550dc44bc4979.js} +2 -2
  15. udata/static/chunks/{17.8e19985c4d12a3b7b0c0.js.map → 17.b91d28f550dc44bc4979.js.map} +1 -1
  16. udata/static/chunks/{19.825a43c330157e351fca.js → 19.4f7a5b71ef006ac268c1.js} +3 -3
  17. udata/static/chunks/{19.825a43c330157e351fca.js.map → 19.4f7a5b71ef006ac268c1.js.map} +1 -1
  18. udata/static/chunks/{5.860362216c0ce3ec565f.js → 5.448ccace1bf3389d9b38.js} +3 -3
  19. udata/static/chunks/{5.860362216c0ce3ec565f.js.map → 5.448ccace1bf3389d9b38.js.map} +1 -1
  20. udata/static/chunks/{6.6617c697f229f362d732.js → 6.037369868acc94a7533f.js} +3 -3
  21. udata/static/chunks/{6.6617c697f229f362d732.js.map → 6.037369868acc94a7533f.js.map} +1 -1
  22. udata/static/chunks/{8.05a0db37aa4ed53ea45e.js → 8.60610fd40b95ca119141.js} +2 -2
  23. udata/static/chunks/{8.05a0db37aa4ed53ea45e.js.map → 8.60610fd40b95ca119141.js.map} +1 -1
  24. udata/static/common.js +1 -1
  25. udata/static/common.js.map +1 -1
  26. udata/templates/mail/badge_added_association.html +3 -3
  27. udata/templates/mail/badge_added_association.txt +2 -2
  28. udata/templates/mail/badge_added_certified.html +3 -3
  29. udata/templates/mail/badge_added_certified.txt +1 -1
  30. udata/templates/mail/badge_added_company.html +3 -3
  31. udata/templates/mail/badge_added_company.txt +2 -2
  32. udata/templates/mail/badge_added_local_authority.html +3 -3
  33. udata/templates/mail/badge_added_local_authority.txt +2 -2
  34. udata/templates/mail/badge_added_public_service.html +3 -3
  35. udata/templates/mail/badge_added_public_service.txt +1 -1
  36. udata/templates/mail/discussion_closed.html +3 -3
  37. udata/templates/mail/discussion_closed.txt +1 -1
  38. udata/templates/mail/frequency_reminder.html +1 -1
  39. udata/templates/mail/frequency_reminder.txt +1 -1
  40. udata/templates/mail/membership_refused.html +1 -1
  41. udata/templates/mail/membership_request.html +3 -3
  42. udata/templates/mail/membership_request.txt +1 -1
  43. udata/templates/mail/new_discussion.html +3 -3
  44. udata/templates/mail/new_discussion.txt +1 -1
  45. udata/templates/mail/new_discussion_comment.html +3 -3
  46. udata/templates/mail/new_discussion_comment.txt +1 -1
  47. udata/templates/mail/new_member.html +2 -2
  48. udata/templates/mail/new_member.txt +1 -1
  49. udata/templates/mail/new_reuse.html +3 -3
  50. udata/templates/mail/new_reuse.txt +2 -2
  51. udata/templates/mail/user_mail_card.html +1 -1
  52. udata/tests/test_mail.py +61 -1
  53. {udata-10.0.3.dev32541.dist-info → udata-10.0.3.dev32594.dist-info}/METADATA +2 -2
  54. {udata-10.0.3.dev32541.dist-info → udata-10.0.3.dev32594.dist-info}/RECORD +58 -58
  55. {udata-10.0.3.dev32541.dist-info → udata-10.0.3.dev32594.dist-info}/LICENSE +0 -0
  56. {udata-10.0.3.dev32541.dist-info → udata-10.0.3.dev32594.dist-info}/WHEEL +0 -0
  57. {udata-10.0.3.dev32541.dist-info → udata-10.0.3.dev32594.dist-info}/entry_points.txt +0 -0
  58. {udata-10.0.3.dev32541.dist-info → udata-10.0.3.dev32594.dist-info}/top_level.txt +0 -0
udata/static/common.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e){function __webpack_require__(c){if(a[c])return a[c].exports;var f=a[c]={exports:{},id:c,loaded:!1};return e[c].call(f.exports,f,f.exports,__webpack_require__),f.loaded=!0,f.exports}var c=window.webpackJsonp;window.webpackJsonp=function(r,b){for(var t,d,_=0,n=[];_<r.length;_++)d=r[_],f[d]&&n.push.apply(n,f[d]),f[d]=0;for(t in b){var i=b[t];switch(typeof i){case"object":e[t]=function(c){var a=c.slice(1),f=c[0];return function(c,r,b){e[f].apply(this,[c,r,b].concat(a))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(c&&c(r,b);n.length;)n.shift().call(null,__webpack_require__);if(b[0])return a[0]=0,__webpack_require__(0)};var a={},f={31:0};__webpack_require__.e=function(e,c){if(0===f[e])return c.call(null,__webpack_require__);if(void 0!==f[e])f[e].push(c);else{f[e]=[c];var a=document.getElementsByTagName("head")[0],r=document.createElement("script");r.type="text/javascript",r.charset="utf-8",r.async=!0,r.src=__webpack_require__.p+"chunks/"+e+"."+{0:"f575c19b056e559584d4",1:"c78e30240d3784c22a76",2:"c67aa76cc078c193aed5",3:"174a03e48d267820919b",4:"bfba880427270ef61dfd",5:"860362216c0ce3ec565f",6:"6617c697f229f362d732",7:"5237c02df1fdd7c2449a",8:"05a0db37aa4ed53ea45e",9:"985935421e62c97a9f86",10:"a99bb538cfbadb38dbcb",11:"ffe19f0319ffd1bc9737",12:"50d20132d60ff7279de9",13:"645dd0b7c0b9210f1b56",14:"8b85221f000b80696e52",15:"10e44b70e118e7ebc13a",16:"a43cef89812c95f1b02e",17:"8e19985c4d12a3b7b0c0",18:"3b5ad23785c7be62ee30",19:"825a43c330157e351fca",20:"727bc4349ebdc499fff7",21:"3a20f161cfa3ff59cb67",22:"4289d31d931fb184a394",23:"32fd0887bdcc0b87a7c5",24:"a8d73082a87feb753036",25:"334bb014e5afb23064f1",26:"0f8affafd27dcc123fc0",27:"10a6d497f15faa1ddeee",28:"06100ef3e7e642814327",29:"4d752ece5790785c5889",30:"e97e10c9246818e2b4b2",32:"1696bf45d7e680cd3b8a",33:"98be721e901eda7ed45c"}[e]+".js",a.appendChild(r)}},__webpack_require__.m=e,__webpack_require__.c=a,__webpack_require__.p="/static/"}(function(e){for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c))switch(typeof e[c]){case"function":break;case"object":e[c]=function(c){var a=c.slice(1),f=e[c[0]];return function(e,c,r){f.apply(this,[e,c,r].concat(a))}}(e[c]);break;default:e[c]=e[e[c]]}return e}([]));
1
+ !function(e){function __webpack_require__(c){if(a[c])return a[c].exports;var f=a[c]={exports:{},id:c,loaded:!1};return e[c].call(f.exports,f,f.exports,__webpack_require__),f.loaded=!0,f.exports}var c=window.webpackJsonp;window.webpackJsonp=function(r,b){for(var t,d,_=0,n=[];_<r.length;_++)d=r[_],f[d]&&n.push.apply(n,f[d]),f[d]=0;for(t in b){var i=b[t];switch(typeof i){case"object":e[t]=function(c){var a=c.slice(1),f=c[0];return function(c,r,b){e[f].apply(this,[c,r,b].concat(a))}}(i);break;case"function":e[t]=i;break;default:e[t]=e[i]}}for(c&&c(r,b);n.length;)n.shift().call(null,__webpack_require__);if(b[0])return a[0]=0,__webpack_require__(0)};var a={},f={31:0};__webpack_require__.e=function(e,c){if(0===f[e])return c.call(null,__webpack_require__);if(void 0!==f[e])f[e].push(c);else{f[e]=[c];var a=document.getElementsByTagName("head")[0],r=document.createElement("script");r.type="text/javascript",r.charset="utf-8",r.async=!0,r.src=__webpack_require__.p+"chunks/"+e+"."+{0:"f575c19b056e559584d4",1:"c78e30240d3784c22a76",2:"c67aa76cc078c193aed5",3:"174a03e48d267820919b",4:"bfba880427270ef61dfd",5:"448ccace1bf3389d9b38",6:"037369868acc94a7533f",7:"5237c02df1fdd7c2449a",8:"60610fd40b95ca119141",9:"985935421e62c97a9f86",10:"a99bb538cfbadb38dbcb",11:"727465d72948bc466d43",12:"50d20132d60ff7279de9",13:"bef5fdb3e147e94fea99",14:"8b85221f000b80696e52",15:"10e44b70e118e7ebc13a",16:"a43cef89812c95f1b02e",17:"b91d28f550dc44bc4979",18:"3b5ad23785c7be62ee30",19:"4f7a5b71ef006ac268c1",20:"727bc4349ebdc499fff7",21:"3a20f161cfa3ff59cb67",22:"4289d31d931fb184a394",23:"32fd0887bdcc0b87a7c5",24:"a8d73082a87feb753036",25:"334bb014e5afb23064f1",26:"0f8affafd27dcc123fc0",27:"10a6d497f15faa1ddeee",28:"06100ef3e7e642814327",29:"4d752ece5790785c5889",30:"e97e10c9246818e2b4b2",32:"1696bf45d7e680cd3b8a",33:"98be721e901eda7ed45c"}[e]+".js",a.appendChild(r)}},__webpack_require__.m=e,__webpack_require__.c=a,__webpack_require__.p="/static/"}(function(e){for(var c in e)if(Object.prototype.hasOwnProperty.call(e,c))switch(typeof e[c]){case"function":break;case"object":e[c]=function(c){var a=c.slice(1),f=e[c[0]];return function(e,c,r){f.apply(this,[e,c,r].concat(a))}}(e[c]);break;default:e[c]=e[e[c]]}return e}([]));
2
2
  //# sourceMappingURL=common.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap 4041001d529ceca748ef"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","parentJsonpFunction","window","chunkIds","moreModules","chunkId","i","callbacks","length","installedChunks","push","apply","_m","args","slice","templateId","a","b","c","this","concat","shift","31","e","callback","undefined","head","document","getElementsByTagName","script","createElement","type","charset","async","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","32","33","appendChild","m","Object","prototype","hasOwnProperty","fn"],"mappings":"CAAS,SAAUA,GCwDnB,QAAAC,qBAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAE,WACAE,GAAAJ,EACAK,QAAA,EAUA,OANAP,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,qBAGAI,EAAAE,QAAA,EAGAF,EAAAD,QA3EA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,GAIA,IADA,GAAAV,GAAAW,EAAAC,EAAA,EAAAC,KACQD,EAAAH,EAAAK,OAAoBF,IAC5BD,EAAAF,EAAAG,GACAG,EAAAJ,IACAE,EAAAG,KAAAC,MAAAJ,EAAAE,EAAAJ,IACAI,EAAAJ,GAAA,CAEA,KAAAX,IAAAU,GAAA,CACA,GAAAQ,GAAAR,EAAAV,EAGA,cAAAkB,IACA,aAEApB,EAAAE,GAAA,SAAAkB,GACA,GAAAC,GAAAD,EAAAE,MAAA,GAAAC,EAAAH,EAAA,EACA,iBAAAI,EAAAC,EAAAC,GACA1B,EAAAuB,GAAAJ,MAAAQ,MAAAH,EAAAC,EAAAC,GAAAE,OAAAP,MAEMD,EACN,MACA,gBAEApB,EAAAE,GAAAkB,CACA,MACA,SAEApB,EAAAE,GAAAF,EAAAoB,IAKA,IADAX,KAAAE,EAAAC,GACAG,EAAAC,QACAD,EAAAc,QAAArB,KAAA,KAAAP,oBACA,IAAAW,EAAA,GAEA,MADAT,GAAA,KACAF,oBAAA,GAKA,IAAAE,MAKAc,GACAa,GAAA,EA6BA7B,qBAAA8B,EAAA,SAAAlB,EAAAmB,GAEA,OAAAf,EAAAJ,GACA,MAAAmB,GAAAxB,KAAA,KAAAP,oBAGA,IAAAgC,SAAAhB,EAAAJ,GACAI,EAAAJ,GAAAK,KAAAc,OACI,CAEJf,EAAAJ,IAAAmB,EACA,IAAAE,GAAAC,SAAAC,qBAAA,WACAC,EAAAF,SAAAG,cAAA,SACAD,GAAAE,KAAA,kBACAF,EAAAG,QAAA,QACAH,EAAAI,OAAA,EAEAJ,EAAAK,IAAAzC,oBAAA0C,EAAA,UAAA9B,EAAA,KAAsE+B,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,wBAAk5B/D,GAAA,MACx9BqB,EAAA2C,YAAAxC,KAKApC,oBAAA6E,EAAA9E,EAGAC,oBAAAyB,EAAAvB,EAGAF,oBAAA0C,EAAA,YDIW,SAAS3C,GAEnB,IAAI,GAAIc,KAAKd,GACZ,GAAG+E,OAAOC,UAAUC,eAAezE,KAAKR,EAASc,GAChD,aAAcd,GAAQc,IACtB,IAAK,WAAY,KACjB,KAAK,SAEJd,EAAQc,GAAM,SAASM,GACtB,GAAIC,GAAOD,EAAGE,MAAM,GAAI4D,EAAKlF,EAAQoB,EAAG,GACxC,OAAO,UAAUI,EAAEC,EAAEC,GACpBwD,EAAG/D,MAAMQ,MAAOH,EAAEC,EAAEC,GAAGE,OAAOP,MAE9BrB,EAAQc,GACV,MACD,SAECd,EAAQc,GAAKd,EAAQA,EAAQc,IAKhC,MAAOd","file":"common.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId])\n/******/ \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tvar _m = moreModules[moduleId];\n/******/\n/******/ \t\t\t// Check if module is deduplicated\n/******/ \t\t\tswitch(typeof _m) {\n/******/ \t\t\tcase \"object\":\n/******/ \t\t\t\t// Module can be created from a template\n/******/ \t\t\t\tmodules[moduleId] = (function(_m) {\n/******/ \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n/******/ \t\t\t\t\treturn function (a,b,c) {\n/******/ \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}(_m));\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tcase \"function\":\n/******/ \t\t\t\t// Normal module\n/******/ \t\t\t\tmodules[moduleId] = _m;\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tdefault:\n/******/ \t\t\t\t// Module is a copy of another module\n/******/ \t\t\t\tmodules[moduleId] = modules[_m];\n/******/ \t\t\t\tbreak;\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n/******/ \t\twhile(callbacks.length)\n/******/ \t\t\tcallbacks.shift().call(null, __webpack_require__);\n/******/ \t\tif(moreModules[0]) {\n/******/ \t\t\tinstalledModules[0] = 0;\n/******/ \t\t\treturn __webpack_require__(0);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// object to store loaded and loading chunks\n/******/ \t// \"0\" means \"already loaded\"\n/******/ \t// Array means \"loading\", array contains callbacks\n/******/ \tvar installedChunks = {\n/******/ \t\t31:0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n/******/ \t\t// \"0\" is the signal for \"already loaded\"\n/******/ \t\tif(installedChunks[chunkId] === 0)\n/******/ \t\t\treturn callback.call(null, __webpack_require__);\n/******/\n/******/ \t\t// an array means \"currently loading\".\n/******/ \t\tif(installedChunks[chunkId] !== undefined) {\n/******/ \t\t\tinstalledChunks[chunkId].push(callback);\n/******/ \t\t} else {\n/******/ \t\t\t// start chunk loading\n/******/ \t\t\tinstalledChunks[chunkId] = [callback];\n/******/ \t\t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\t\tvar script = document.createElement('script');\n/******/ \t\t\tscript.type = 'text/javascript';\n/******/ \t\t\tscript.charset = 'utf-8';\n/******/ \t\t\tscript.async = true;\n/******/\n/******/ \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"f575c19b056e559584d4\",\"1\":\"c78e30240d3784c22a76\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"bfba880427270ef61dfd\",\"5\":\"860362216c0ce3ec565f\",\"6\":\"6617c697f229f362d732\",\"7\":\"5237c02df1fdd7c2449a\",\"8\":\"05a0db37aa4ed53ea45e\",\"9\":\"985935421e62c97a9f86\",\"10\":\"a99bb538cfbadb38dbcb\",\"11\":\"ffe19f0319ffd1bc9737\",\"12\":\"50d20132d60ff7279de9\",\"13\":\"645dd0b7c0b9210f1b56\",\"14\":\"8b85221f000b80696e52\",\"15\":\"10e44b70e118e7ebc13a\",\"16\":\"a43cef89812c95f1b02e\",\"17\":\"8e19985c4d12a3b7b0c0\",\"18\":\"3b5ad23785c7be62ee30\",\"19\":\"825a43c330157e351fca\",\"20\":\"727bc4349ebdc499fff7\",\"21\":\"3a20f161cfa3ff59cb67\",\"22\":\"4289d31d931fb184a394\",\"23\":\"32fd0887bdcc0b87a7c5\",\"24\":\"a8d73082a87feb753036\",\"25\":\"334bb014e5afb23064f1\",\"26\":\"0f8affafd27dcc123fc0\",\"27\":\"10a6d497f15faa1ddeee\",\"28\":\"06100ef3e7e642814327\",\"29\":\"4d752ece5790785c5889\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"1696bf45d7e680cd3b8a\",\"33\":\"98be721e901eda7ed45c\"}[chunkId] + \".js\";\n/******/ \t\t\thead.appendChild(script);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/static/\";\n/******/ })\n/************************************************************************/\n/******/ ((function(modules) {\n\t// Check all modules for deduplicated modules\n\tfor(var i in modules) {\n\t\tif(Object.prototype.hasOwnProperty.call(modules, i)) {\n\t\t\tswitch(typeof modules[i]) {\n\t\t\tcase \"function\": break;\n\t\t\tcase \"object\":\n\t\t\t\t// Module can be created from a template\n\t\t\t\tmodules[i] = (function(_m) {\n\t\t\t\t\tvar args = _m.slice(1), fn = modules[_m[0]];\n\t\t\t\t\treturn function (a,b,c) {\n\t\t\t\t\t\tfn.apply(this, [a,b,c].concat(args));\n\t\t\t\t\t};\n\t\t\t\t}(modules[i]));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Module is a copy of another module\n\t\t\t\tmodules[i] = modules[modules[i]];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn modules;\n}([])));\n\n\n/** WEBPACK FOOTER **\n ** common.js\n **/"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tvar _m = moreModules[moduleId];\n\n \t\t\t// Check if module is deduplicated\n \t\t\tswitch(typeof _m) {\n \t\t\tcase \"object\":\n \t\t\t\t// Module can be created from a template\n \t\t\t\tmodules[moduleId] = (function(_m) {\n \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n \t\t\t\t\treturn function (a,b,c) {\n \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n \t\t\t\t\t};\n \t\t\t\t}(_m));\n \t\t\t\tbreak;\n \t\t\tcase \"function\":\n \t\t\t\t// Normal module\n \t\t\t\tmodules[moduleId] = _m;\n \t\t\t\tbreak;\n \t\t\tdefault:\n \t\t\t\t// Module is a copy of another module\n \t\t\t\tmodules[moduleId] = modules[_m];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t31:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"f575c19b056e559584d4\",\"1\":\"c78e30240d3784c22a76\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"bfba880427270ef61dfd\",\"5\":\"860362216c0ce3ec565f\",\"6\":\"6617c697f229f362d732\",\"7\":\"5237c02df1fdd7c2449a\",\"8\":\"05a0db37aa4ed53ea45e\",\"9\":\"985935421e62c97a9f86\",\"10\":\"a99bb538cfbadb38dbcb\",\"11\":\"ffe19f0319ffd1bc9737\",\"12\":\"50d20132d60ff7279de9\",\"13\":\"645dd0b7c0b9210f1b56\",\"14\":\"8b85221f000b80696e52\",\"15\":\"10e44b70e118e7ebc13a\",\"16\":\"a43cef89812c95f1b02e\",\"17\":\"8e19985c4d12a3b7b0c0\",\"18\":\"3b5ad23785c7be62ee30\",\"19\":\"825a43c330157e351fca\",\"20\":\"727bc4349ebdc499fff7\",\"21\":\"3a20f161cfa3ff59cb67\",\"22\":\"4289d31d931fb184a394\",\"23\":\"32fd0887bdcc0b87a7c5\",\"24\":\"a8d73082a87feb753036\",\"25\":\"334bb014e5afb23064f1\",\"26\":\"0f8affafd27dcc123fc0\",\"27\":\"10a6d497f15faa1ddeee\",\"28\":\"06100ef3e7e642814327\",\"29\":\"4d752ece5790785c5889\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"1696bf45d7e680cd3b8a\",\"33\":\"98be721e901eda7ed45c\"}[chunkId] + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 4041001d529ceca748ef\n **/"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack:///common.js","webpack:///webpack/bootstrap 42ff70d0bb71049750c0"],"names":["modules","__webpack_require__","moduleId","installedModules","exports","module","id","loaded","call","parentJsonpFunction","window","chunkIds","moreModules","chunkId","i","callbacks","length","installedChunks","push","apply","_m","args","slice","templateId","a","b","c","this","concat","shift","31","e","callback","undefined","head","document","getElementsByTagName","script","createElement","type","charset","async","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","32","33","appendChild","m","Object","prototype","hasOwnProperty","fn"],"mappings":"CAAS,SAAUA,GCwDnB,QAAAC,qBAAAC,GAGA,GAAAC,EAAAD,GACA,MAAAC,GAAAD,GAAAE,OAGA,IAAAC,GAAAF,EAAAD,IACAE,WACAE,GAAAJ,EACAK,QAAA,EAUA,OANAP,GAAAE,GAAAM,KAAAH,EAAAD,QAAAC,IAAAD,QAAAH,qBAGAI,EAAAE,QAAA,EAGAF,EAAAD,QA3EA,GAAAK,GAAAC,OAAA,YACAA,QAAA,sBAAAC,EAAAC,GAIA,IADA,GAAAV,GAAAW,EAAAC,EAAA,EAAAC,KACQD,EAAAH,EAAAK,OAAoBF,IAC5BD,EAAAF,EAAAG,GACAG,EAAAJ,IACAE,EAAAG,KAAAC,MAAAJ,EAAAE,EAAAJ,IACAI,EAAAJ,GAAA,CAEA,KAAAX,IAAAU,GAAA,CACA,GAAAQ,GAAAR,EAAAV,EAGA,cAAAkB,IACA,aAEApB,EAAAE,GAAA,SAAAkB,GACA,GAAAC,GAAAD,EAAAE,MAAA,GAAAC,EAAAH,EAAA,EACA,iBAAAI,EAAAC,EAAAC,GACA1B,EAAAuB,GAAAJ,MAAAQ,MAAAH,EAAAC,EAAAC,GAAAE,OAAAP,MAEMD,EACN,MACA,gBAEApB,EAAAE,GAAAkB,CACA,MACA,SAEApB,EAAAE,GAAAF,EAAAoB,IAKA,IADAX,KAAAE,EAAAC,GACAG,EAAAC,QACAD,EAAAc,QAAArB,KAAA,KAAAP,oBACA,IAAAW,EAAA,GAEA,MADAT,GAAA,KACAF,oBAAA,GAKA,IAAAE,MAKAc,GACAa,GAAA,EA6BA7B,qBAAA8B,EAAA,SAAAlB,EAAAmB,GAEA,OAAAf,EAAAJ,GACA,MAAAmB,GAAAxB,KAAA,KAAAP,oBAGA,IAAAgC,SAAAhB,EAAAJ,GACAI,EAAAJ,GAAAK,KAAAc,OACI,CAEJf,EAAAJ,IAAAmB,EACA,IAAAE,GAAAC,SAAAC,qBAAA,WACAC,EAAAF,SAAAG,cAAA,SACAD,GAAAE,KAAA,kBACAF,EAAAG,QAAA,QACAH,EAAAI,OAAA,EAEAJ,EAAAK,IAAAzC,oBAAA0C,EAAA,UAAA9B,EAAA,KAAsE+B,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,EAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,uBAAAC,GAAA,wBAAk5B/D,GAAA,MACx9BqB,EAAA2C,YAAAxC,KAKApC,oBAAA6E,EAAA9E,EAGAC,oBAAAyB,EAAAvB,EAGAF,oBAAA0C,EAAA,YDIW,SAAS3C,GAEnB,IAAI,GAAIc,KAAKd,GACZ,GAAG+E,OAAOC,UAAUC,eAAezE,KAAKR,EAASc,GAChD,aAAcd,GAAQc,IACtB,IAAK,WAAY,KACjB,KAAK,SAEJd,EAAQc,GAAM,SAASM,GACtB,GAAIC,GAAOD,EAAGE,MAAM,GAAI4D,EAAKlF,EAAQoB,EAAG,GACxC,OAAO,UAAUI,EAAEC,EAAEC,GACpBwD,EAAG/D,MAAMQ,MAAOH,EAAEC,EAAEC,GAAGE,OAAOP,MAE9BrB,EAAQc,GACV,MACD,SAECd,EAAQc,GAAKd,EAAQA,EAAQc,IAKhC,MAAOd","file":"common.js","sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// install a JSONP callback for chunk loading\n/******/ \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n/******/ \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n/******/ \t\t// add \"moreModules\" to the modules object,\n/******/ \t\t// then flag all \"chunkIds\" as loaded and fire callback\n/******/ \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n/******/ \t\tfor(;i < chunkIds.length; i++) {\n/******/ \t\t\tchunkId = chunkIds[i];\n/******/ \t\t\tif(installedChunks[chunkId])\n/******/ \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n/******/ \t\t\tinstalledChunks[chunkId] = 0;\n/******/ \t\t}\n/******/ \t\tfor(moduleId in moreModules) {\n/******/ \t\t\tvar _m = moreModules[moduleId];\n/******/\n/******/ \t\t\t// Check if module is deduplicated\n/******/ \t\t\tswitch(typeof _m) {\n/******/ \t\t\tcase \"object\":\n/******/ \t\t\t\t// Module can be created from a template\n/******/ \t\t\t\tmodules[moduleId] = (function(_m) {\n/******/ \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n/******/ \t\t\t\t\treturn function (a,b,c) {\n/******/ \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n/******/ \t\t\t\t\t};\n/******/ \t\t\t\t}(_m));\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tcase \"function\":\n/******/ \t\t\t\t// Normal module\n/******/ \t\t\t\tmodules[moduleId] = _m;\n/******/ \t\t\t\tbreak;\n/******/ \t\t\tdefault:\n/******/ \t\t\t\t// Module is a copy of another module\n/******/ \t\t\t\tmodules[moduleId] = modules[_m];\n/******/ \t\t\t\tbreak;\n/******/ \t\t\t}\n/******/ \t\t}\n/******/ \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n/******/ \t\twhile(callbacks.length)\n/******/ \t\t\tcallbacks.shift().call(null, __webpack_require__);\n/******/ \t\tif(moreModules[0]) {\n/******/ \t\t\tinstalledModules[0] = 0;\n/******/ \t\t\treturn __webpack_require__(0);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// object to store loaded and loading chunks\n/******/ \t// \"0\" means \"already loaded\"\n/******/ \t// Array means \"loading\", array contains callbacks\n/******/ \tvar installedChunks = {\n/******/ \t\t31:0\n/******/ \t};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId])\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\texports: {},\n/******/ \t\t\tid: moduleId,\n/******/ \t\t\tloaded: false\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.loaded = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/ \t// This file contains only the entry chunk.\n/******/ \t// The chunk loading function for additional chunks\n/******/ \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n/******/ \t\t// \"0\" is the signal for \"already loaded\"\n/******/ \t\tif(installedChunks[chunkId] === 0)\n/******/ \t\t\treturn callback.call(null, __webpack_require__);\n/******/\n/******/ \t\t// an array means \"currently loading\".\n/******/ \t\tif(installedChunks[chunkId] !== undefined) {\n/******/ \t\t\tinstalledChunks[chunkId].push(callback);\n/******/ \t\t} else {\n/******/ \t\t\t// start chunk loading\n/******/ \t\t\tinstalledChunks[chunkId] = [callback];\n/******/ \t\t\tvar head = document.getElementsByTagName('head')[0];\n/******/ \t\t\tvar script = document.createElement('script');\n/******/ \t\t\tscript.type = 'text/javascript';\n/******/ \t\t\tscript.charset = 'utf-8';\n/******/ \t\t\tscript.async = true;\n/******/\n/******/ \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"f575c19b056e559584d4\",\"1\":\"c78e30240d3784c22a76\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"bfba880427270ef61dfd\",\"5\":\"448ccace1bf3389d9b38\",\"6\":\"037369868acc94a7533f\",\"7\":\"5237c02df1fdd7c2449a\",\"8\":\"60610fd40b95ca119141\",\"9\":\"985935421e62c97a9f86\",\"10\":\"a99bb538cfbadb38dbcb\",\"11\":\"727465d72948bc466d43\",\"12\":\"50d20132d60ff7279de9\",\"13\":\"bef5fdb3e147e94fea99\",\"14\":\"8b85221f000b80696e52\",\"15\":\"10e44b70e118e7ebc13a\",\"16\":\"a43cef89812c95f1b02e\",\"17\":\"b91d28f550dc44bc4979\",\"18\":\"3b5ad23785c7be62ee30\",\"19\":\"4f7a5b71ef006ac268c1\",\"20\":\"727bc4349ebdc499fff7\",\"21\":\"3a20f161cfa3ff59cb67\",\"22\":\"4289d31d931fb184a394\",\"23\":\"32fd0887bdcc0b87a7c5\",\"24\":\"a8d73082a87feb753036\",\"25\":\"334bb014e5afb23064f1\",\"26\":\"0f8affafd27dcc123fc0\",\"27\":\"10a6d497f15faa1ddeee\",\"28\":\"06100ef3e7e642814327\",\"29\":\"4d752ece5790785c5889\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"1696bf45d7e680cd3b8a\",\"33\":\"98be721e901eda7ed45c\"}[chunkId] + \".js\";\n/******/ \t\t\thead.appendChild(script);\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"/static/\";\n/******/ })\n/************************************************************************/\n/******/ ((function(modules) {\n\t// Check all modules for deduplicated modules\n\tfor(var i in modules) {\n\t\tif(Object.prototype.hasOwnProperty.call(modules, i)) {\n\t\t\tswitch(typeof modules[i]) {\n\t\t\tcase \"function\": break;\n\t\t\tcase \"object\":\n\t\t\t\t// Module can be created from a template\n\t\t\t\tmodules[i] = (function(_m) {\n\t\t\t\t\tvar args = _m.slice(1), fn = modules[_m[0]];\n\t\t\t\t\treturn function (a,b,c) {\n\t\t\t\t\t\tfn.apply(this, [a,b,c].concat(args));\n\t\t\t\t\t};\n\t\t\t\t}(modules[i]));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Module is a copy of another module\n\t\t\t\tmodules[i] = modules[modules[i]];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\treturn modules;\n}([])));\n\n\n/** WEBPACK FOOTER **\n ** common.js\n **/"," \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, callbacks = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId])\n \t\t\t\tcallbacks.push.apply(callbacks, installedChunks[chunkId]);\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tvar _m = moreModules[moduleId];\n\n \t\t\t// Check if module is deduplicated\n \t\t\tswitch(typeof _m) {\n \t\t\tcase \"object\":\n \t\t\t\t// Module can be created from a template\n \t\t\t\tmodules[moduleId] = (function(_m) {\n \t\t\t\t\tvar args = _m.slice(1), templateId = _m[0];\n \t\t\t\t\treturn function (a,b,c) {\n \t\t\t\t\t\tmodules[templateId].apply(this, [a,b,c].concat(args));\n \t\t\t\t\t};\n \t\t\t\t}(_m));\n \t\t\t\tbreak;\n \t\t\tcase \"function\":\n \t\t\t\t// Normal module\n \t\t\t\tmodules[moduleId] = _m;\n \t\t\t\tbreak;\n \t\t\tdefault:\n \t\t\t\t// Module is a copy of another module\n \t\t\t\tmodules[moduleId] = modules[_m];\n \t\t\t\tbreak;\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules);\n \t\twhile(callbacks.length)\n \t\t\tcallbacks.shift().call(null, __webpack_require__);\n \t\tif(moreModules[0]) {\n \t\t\tinstalledModules[0] = 0;\n \t\t\treturn __webpack_require__(0);\n \t\t}\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// \"0\" means \"already loaded\"\n \t// Array means \"loading\", array contains callbacks\n \tvar installedChunks = {\n \t\t31:0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId])\n \t\t\treturn installedModules[moduleId].exports;\n\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\texports: {},\n \t\t\tid: moduleId,\n \t\t\tloaded: false\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.loaded = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId, callback) {\n \t\t// \"0\" is the signal for \"already loaded\"\n \t\tif(installedChunks[chunkId] === 0)\n \t\t\treturn callback.call(null, __webpack_require__);\n\n \t\t// an array means \"currently loading\".\n \t\tif(installedChunks[chunkId] !== undefined) {\n \t\t\tinstalledChunks[chunkId].push(callback);\n \t\t} else {\n \t\t\t// start chunk loading\n \t\t\tinstalledChunks[chunkId] = [callback];\n \t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\tvar script = document.createElement('script');\n \t\t\tscript.type = 'text/javascript';\n \t\t\tscript.charset = 'utf-8';\n \t\t\tscript.async = true;\n\n \t\t\tscript.src = __webpack_require__.p + \"chunks/\" + chunkId + \".\" + {\"0\":\"f575c19b056e559584d4\",\"1\":\"c78e30240d3784c22a76\",\"2\":\"c67aa76cc078c193aed5\",\"3\":\"174a03e48d267820919b\",\"4\":\"bfba880427270ef61dfd\",\"5\":\"448ccace1bf3389d9b38\",\"6\":\"037369868acc94a7533f\",\"7\":\"5237c02df1fdd7c2449a\",\"8\":\"60610fd40b95ca119141\",\"9\":\"985935421e62c97a9f86\",\"10\":\"a99bb538cfbadb38dbcb\",\"11\":\"727465d72948bc466d43\",\"12\":\"50d20132d60ff7279de9\",\"13\":\"bef5fdb3e147e94fea99\",\"14\":\"8b85221f000b80696e52\",\"15\":\"10e44b70e118e7ebc13a\",\"16\":\"a43cef89812c95f1b02e\",\"17\":\"b91d28f550dc44bc4979\",\"18\":\"3b5ad23785c7be62ee30\",\"19\":\"4f7a5b71ef006ac268c1\",\"20\":\"727bc4349ebdc499fff7\",\"21\":\"3a20f161cfa3ff59cb67\",\"22\":\"4289d31d931fb184a394\",\"23\":\"32fd0887bdcc0b87a7c5\",\"24\":\"a8d73082a87feb753036\",\"25\":\"334bb014e5afb23064f1\",\"26\":\"0f8affafd27dcc123fc0\",\"27\":\"10a6d497f15faa1ddeee\",\"28\":\"06100ef3e7e642814327\",\"29\":\"4d752ece5790785c5889\",\"30\":\"e97e10c9246818e2b4b2\",\"32\":\"1696bf45d7e680cd3b8a\",\"33\":\"98be721e901eda7ed45c\"}[chunkId] + \".js\";\n \t\t\thead.appendChild(script);\n \t\t}\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n\n\n/** WEBPACK FOOTER **\n ** webpack/bootstrap 42ff70d0bb71049750c0\n **/"],"sourceRoot":""}
@@ -6,14 +6,14 @@
6
6
  _('%(user)s has identified your organization "%(name)s" as an association',
7
7
  user=(
8
8
  '<a href="'|safe
9
- + url_for('api.user', user=badge.created_by, _external=True)
9
+ + badge.created_by.external_url_with_campaign
10
10
  + '">'|safe
11
11
  + badge.created_by.fullname
12
12
  + '</a>'|safe
13
13
  ),
14
14
  name=(
15
15
  '<a href="'|safe
16
- + organization.external_url
16
+ + organization.external_url_with_campaign
17
17
  + '">'|safe
18
18
  + organization.name|string
19
19
  + '</a>'|safe
@@ -25,7 +25,7 @@
25
25
  <td align="center">
26
26
  {{ mail_button(
27
27
  _('See the badge'),
28
- organization.external_url
28
+ organization.external_url_with_campaign
29
29
  ) }}
30
30
  </td>
31
31
  </tr>
@@ -7,5 +7,5 @@
7
7
  ) }}.
8
8
 
9
9
  {{ _('You can see the badge on this page:') }}
10
- {{ organization.external_url }}
11
- {% endblock %}
10
+ {{ organization.external_url_with_campaign }}
11
+ {% endblock %}
@@ -6,14 +6,14 @@
6
6
  _('%(user)s has certified your organization "%(name)s"',
7
7
  user=(
8
8
  '<a href="'|safe
9
- + url_for('api.user', user=badge.created_by, _external=True)
9
+ + badge.created_by.external_url_with_campaign
10
10
  + '">'|safe
11
11
  + badge.created_by.fullname
12
12
  + '</a>'|safe
13
13
  ),
14
14
  name=(
15
15
  '<a href="'|safe
16
- + organization.external_url
16
+ + organization.external_url_with_campaign
17
17
  + '">'|safe
18
18
  + organization.name|string
19
19
  + '</a>'|safe
@@ -25,7 +25,7 @@
25
25
  <td align="center">
26
26
  {{ mail_button(
27
27
  _('See the badge'),
28
- organization.external_url
28
+ organization.external_url_with_campaign
29
29
  ) }}
30
30
  </td>
31
31
  </tr>
@@ -7,5 +7,5 @@
7
7
  ) }}.
8
8
 
9
9
  {{ _('You can see the badge on this page:') }}
10
- {{ organization.external_url }}
10
+ {{ organization.external_url_with_campaign }}
11
11
  {% endblock %}
@@ -6,14 +6,14 @@
6
6
  _('%(user)s has identified your organization "%(name)s" as a company',
7
7
  user=(
8
8
  '<a href="'|safe
9
- + url_for('api.user', user=badge.created_by, _external=True)
9
+ + badge.created_by.external_url_with_campaign
10
10
  + '">'|safe
11
11
  + badge.created_by.fullname
12
12
  + '</a>'|safe
13
13
  ),
14
14
  name=(
15
15
  '<a href="'|safe
16
- + organization.external_url
16
+ + organization.external_url_with_campaign
17
17
  + '">'|safe
18
18
  + organization.name|string
19
19
  + '</a>'|safe
@@ -25,7 +25,7 @@
25
25
  <td align="center">
26
26
  {{ mail_button(
27
27
  _('See the badge'),
28
- organization.external_url
28
+ organization.external_url_with_campaign
29
29
  ) }}
30
30
  </td>
31
31
  </tr>
@@ -7,5 +7,5 @@
7
7
  ) }}.
8
8
 
9
9
  {{ _('You can see the badge on this page:') }}
10
- {{ organization.external_url }}
11
- {% endblock %}
10
+ {{ organization.external_url_with_campaign }}
11
+ {% endblock %}
@@ -6,14 +6,14 @@
6
6
  _('%(user)s has identified your organization "%(name)s" as a local authority',
7
7
  user=(
8
8
  '<a href="'|safe
9
- + url_for('api.user', user=badge.created_by, _external=True)
9
+ + badge.created_by.external_url_with_campaign
10
10
  + '">'|safe
11
11
  + badge.created_by.fullname
12
12
  + '</a>'|safe
13
13
  ),
14
14
  name=(
15
15
  '<a href="'|safe
16
- + organization.external_url
16
+ + organization.external_url_with_campaign
17
17
  + '">'|safe
18
18
  + organization.name|string
19
19
  + '</a>'|safe
@@ -25,7 +25,7 @@
25
25
  <td align="center">
26
26
  {{ mail_button(
27
27
  _('See the badge'),
28
- organization.external_url
28
+ organization.external_url_with_campaign
29
29
  ) }}
30
30
  </td>
31
31
  </tr>
@@ -7,5 +7,5 @@
7
7
  ) }}.
8
8
 
9
9
  {{ _('You can see the badge on this page:') }}
10
- {{ organization.external_url }}
11
- {% endblock %}
10
+ {{ organization.external_url_with_campaign }}
11
+ {% endblock %}
@@ -6,14 +6,14 @@
6
6
  _('%(user)s has identified your organization "%(name)s" as public service',
7
7
  user=(
8
8
  '<a href="'|safe
9
- + url_for('api.user', user=badge.created_by, _external=True)
9
+ + badge.created_by.external_url_with_campaign
10
10
  + '">'|safe
11
11
  + badge.created_by.fullname
12
12
  + '</a>'|safe
13
13
  ),
14
14
  name=(
15
15
  '<a href="'|safe
16
- + organization.external_url
16
+ + organization.external_url_with_campaign
17
17
  + '">'|safe
18
18
  + organization.name|string
19
19
  + '</a>'|safe
@@ -25,7 +25,7 @@
25
25
  <td align="center">
26
26
  {{ mail_button(
27
27
  _('See the badge'),
28
- organization.external_url
28
+ organization.external_url_with_campaign
29
29
  ) }}
30
30
  </td>
31
31
  </tr>
@@ -7,5 +7,5 @@
7
7
  ) }}.
8
8
 
9
9
  {{ _('You can see the badge on this page:') }}
10
- {{ organization.external_url }}
10
+ {{ organization.external_url_with_campaign }}
11
11
  {% endblock %}
@@ -7,14 +7,14 @@
7
7
  type=discussion.subject.verbose_name,
8
8
  user=(
9
9
  '<a href="'|safe
10
- + url_for('api.user', user=message.posted_by, _external=True)
10
+ + message.posted_by.external_url_with_campaign
11
11
  + '">'|safe
12
12
  + message.posted_by.fullname
13
13
  + '</a>'|safe
14
14
  ),
15
15
  subject=(
16
16
  '<a href="'|safe
17
- + discussion.external_url
17
+ + discussion.external_url_with_campaign
18
18
  + '">'|safe
19
19
  + discussion.subject|string
20
20
  + '</a>'|safe
@@ -38,7 +38,7 @@
38
38
  <td align="center">
39
39
  {{ mail_button(
40
40
  _('See the discussion'),
41
- discussion.external_url
41
+ discussion.external_url_with_campaign
42
42
  ) }}
43
43
  </td>
44
44
  </tr>
@@ -12,5 +12,5 @@
12
12
 
13
13
 
14
14
  {{ _('You can see the discussion on this page:') }}
15
- {{ discussion.external_url }}
15
+ {{ discussion.external_url_with_campaign }}
16
16
  {% endblock %}
@@ -23,7 +23,7 @@
23
23
  <td align="center">
24
24
  {{ mail_button(
25
25
  _('Update the dataset and associated resources'),
26
- url_for('admin.index', path='dataset/{id}/'.format(id=dataset.id), _external=True)
26
+ url_for('admin.index', path='dataset/{id}/'.format(id=dataset.id), _external=True, **extras)
27
27
  ) }}
28
28
  </td>
29
29
  </tr>
@@ -11,7 +11,7 @@
11
11
  dataset_frequency=dataset.frequency_str,
12
12
  due_update_days=dataset.outdated.days) }}
13
13
  {{ _('You can update the dataset and associated resources at:') }}
14
- {{ url_for('admin.index', path='dataset/{id}/'.format(id=dataset.id), _external=True) }}
14
+ {{ url_for('admin.index', path='dataset/{id}/'.format(id=dataset.id), _external=True, **extras) }}
15
15
 
16
16
  {% endfor %}
17
17
 
@@ -7,7 +7,7 @@
7
7
  {{ _('Your membership for the organization "%(org)s" has been refused',
8
8
  org=(
9
9
  '<a href="'|safe
10
- + org.url_for(_external=True)
10
+ + org.external_url_with_campaign
11
11
  + '">'|safe
12
12
  + org.name
13
13
  + '</a>'|safe
@@ -8,14 +8,14 @@
8
8
  {{ _('As an administrator of "%(org)s" you are being informed than a new membership request from %(user)s is pending for validation',
9
9
  user=(
10
10
  '<a href="'|safe
11
- + url_for('api.user', user=request.user, _external=True)
11
+ + request.user.external_url_with_campaign
12
12
  + '">'|safe
13
13
  + request.user.fullname
14
14
  + '</a>'|safe
15
15
  ),
16
16
  org=(
17
17
  '<a href="'|safe
18
- + org.url_for(_external=True)
18
+ + org.external_url_with_campaign
19
19
  + '">'|safe
20
20
  + org.name
21
21
  + '</a>'|safe
@@ -38,7 +38,7 @@
38
38
  <td align="center">
39
39
  {{ mail_button(
40
40
  _('See the request'),
41
- url_for('admin.index', path='organization/{id}/'.format(id=org.id), _anchor='membership-requests', _external=True)
41
+ url_for('admin.index', path='organization/{id}/'.format(id=org.id), _anchor='membership-requests', _external=True, **extras)
42
42
  ) }}
43
43
  </td>
44
44
  </tr>
@@ -8,5 +8,5 @@
8
8
 
9
9
 
10
10
  {{ _('You can go on your organization backoffice to accept or refuse the request') }}:
11
- {{ url_for('admin.index', path='organization/{id}/'.format(id=org.id), _anchor='membership-requests', _external=True) }}
11
+ {{ url_for('admin.index', path='organization/{id}/'.format(id=org.id), _anchor='membership-requests', _external=True, **extras) }}
12
12
  {% endblock %}
@@ -7,14 +7,14 @@
7
7
  type=discussion.subject.verbose_name,
8
8
  user=(
9
9
  '<a href="'|safe
10
- + url_for('api.user', user=discussion.user, _external=True)
10
+ + discussion.user.external_url_with_campaign
11
11
  + '">'|safe
12
12
  + discussion.user.fullname
13
13
  + '</a>'|safe
14
14
  ),
15
15
  subject=(
16
16
  '<a href="'|safe
17
- + discussion.external_url
17
+ + discussion.external_url_with_campaign
18
18
  + '">'|safe
19
19
  + discussion.subject|string
20
20
  + '</a>'|safe
@@ -36,7 +36,7 @@
36
36
  <td align="center">
37
37
  {{ mail_button(
38
38
  _('See the discussion'),
39
- discussion.external_url
39
+ discussion.external_url_with_campaign
40
40
  ) }}
41
41
  </td>
42
42
  </tr>
@@ -11,5 +11,5 @@
11
11
  {{ _('Title') }}: {{ discussion.title }}
12
12
 
13
13
  {{ _('You can see the discussion on this page:') }}
14
- {{ discussion.subject.external_url }}
14
+ {{ discussion.subject.external_url_with_campaign }}
15
15
  {% endblock %}
@@ -7,14 +7,14 @@
7
7
  type=discussion.subject.verbose_name,
8
8
  user=(
9
9
  '<a href="'|safe
10
- + url_for('api.user', user=message.posted_by, _external=True)
10
+ + message.posted_by.external_url_with_campaign
11
11
  + '">'|safe
12
12
  + message.posted_by.fullname
13
13
  + '</a>'|safe
14
14
  ),
15
15
  subject=(
16
16
  '<a href="'|safe
17
- + discussion.external_url
17
+ + discussion.external_url_with_campaign
18
18
  + '">'|safe
19
19
  + discussion.subject|string
20
20
  + '</a>'|safe
@@ -37,7 +37,7 @@
37
37
  <td align="center">
38
38
  {{ mail_button(
39
39
  _('See the discussion'),
40
- discussion.external_url
40
+ discussion.external_url_with_campaign
41
41
  ) }}
42
42
  </td>
43
43
  </tr>
@@ -12,5 +12,5 @@
12
12
 
13
13
 
14
14
  {{ _('You can see the discussion on this page:') }}
15
- {{ discussion.external_url }}
15
+ {{ discussion.external_url_with_campaign }}
16
16
  {% endblock %}
@@ -7,7 +7,7 @@
7
7
  {{ _('Congratulations, you are now a member of the organization "%(org)s"',
8
8
  org=(
9
9
  '<a href="'|safe
10
- + org.url_for(_external=True)
10
+ + org.external_url_with_campaign
11
11
  + '">'|safe
12
12
  + org.name
13
13
  + '</a>'|safe
@@ -19,7 +19,7 @@
19
19
  <td align="center">
20
20
  {{ mail_button(
21
21
  _('See the organization page'),
22
- org.url_for(_external=True)
22
+ org.external_url_with_campaign
23
23
  ) }}
24
24
  </td>
25
25
  </tr>
@@ -7,5 +7,5 @@
7
7
 
8
8
 
9
9
  {{ _('You can go on your organization page') }}:
10
- {{ org.url_for(_external=True) }}
10
+ {{ org.external_url_with_campaign }}
11
11
  {% endblock %}
@@ -7,7 +7,7 @@
7
7
  _('A new reuse of your dataset %(dataset)s has been published',
8
8
  dataset=(
9
9
  '<a href="'|safe
10
- + dataset.external_url
10
+ + dataset.external_url_with_campaign
11
11
  + '" style="text-decoration: none;">'|safe
12
12
  + dataset.title
13
13
  + '</a>'|safe
@@ -29,14 +29,14 @@
29
29
  <td align="center">
30
30
  {{ mail_button(
31
31
  _('See the reuse'),
32
- url_for('reuses.show', reuse=reuse.id, _external=True)
32
+ url_for('reuses.show', reuse=reuse.id, _external=True, **extras)
33
33
  ) }}
34
34
  </td>
35
35
  <td align="center">
36
36
  {{ mail_button(
37
37
  _('See on the dataset page'),
38
38
  (
39
- url_for('datasets.show', dataset=dataset.id, _external=True)
39
+ url_for('datasets.show', dataset=dataset.id, _external=True, **extras)
40
40
  + '#reuse-'|safe
41
41
  + reuse.id|string
42
42
  )
@@ -5,7 +5,7 @@
5
5
  reuse=reuse.title, dataset=dataset.name
6
6
  ) }}.
7
7
  {{ _('You can see this new reuse on its own page:') }}
8
- {{ url_for('reuses.show', reuse=reuse.id, _external=True) }}
8
+ {{ url_for('reuses.show', reuse=reuse.id, _external=True, **extras) }}
9
9
  {{ _('Or in the reuse list on you dataset page:')}}
10
- {{ url_for('datasets.show', dataset=dataset.id, _external=True) }}#reuse-{{reuse.id}}
10
+ {{ url_for('datasets.show', dataset=dataset.id, _external=True, **extras) }}#reuse-{{reuse.id}}
11
11
  {% endblock %}
@@ -1,5 +1,5 @@
1
1
  {% macro user_mail_card(user, msg=None) %}
2
- <a href="{{ url_for('api.user', user=user.id, _external=True) }}"
2
+ <a href="{{ user.external_url_with_campaign }}"
3
3
  style="margin: 0;padding: 0;width:100%;">
4
4
  <table height="60" cellpadding="0" cellspacing="0" style="margin: 0;padding: 0;border:1px solid #eee;width:100%;">
5
5
  <tr style="margin: 0;padding: 0;">
udata/tests/test_mail.py CHANGED
@@ -3,8 +3,9 @@ from smtplib import SMTPRecipientsRefused
3
3
 
4
4
  import pytest
5
5
 
6
+ from udata.core.organization.factories import OrganizationFactory
6
7
  from udata.core.user.factories import UserFactory
7
- from udata.mail import mail_sent, send
8
+ from udata.mail import mail, mail_sent, send
8
9
  from udata.tests import DBTestMixin, TestCase
9
10
  from udata.tests.helpers import assert_emit, assert_not_emit
10
11
 
@@ -50,3 +51,62 @@ class MailSendTest(TestCase, DBTestMixin):
50
51
  ]
51
52
  with assert_emit(mail_sent):
52
53
  send("subject", recipients, "base")
54
+
55
+
56
+ @pytest.mark.usefixtures("clean_db")
57
+ @pytest.mark.frontend
58
+ class MailCampaignTest:
59
+ def test_send_mail_campaign_link_new_member(self, app):
60
+ org = OrganizationFactory()
61
+ recipient = UserFactory(email="recipient@udata")
62
+
63
+ app.config["SEND_MAIL"] = True
64
+ app.config["MAIL_CAMPAIGN"] = ""
65
+ with mail.record_messages() as outbox:
66
+ send(
67
+ "subject",
68
+ [recipient],
69
+ "new_member",
70
+ org=org,
71
+ )
72
+ assert len(outbox) == 1
73
+ message = outbox[0]
74
+ assert "mtm_campaign" not in message.body
75
+ assert "mtm_campaign" not in message.html
76
+
77
+ app.config["MAIL_CAMPAIGN"] = "data-gouv-fr"
78
+ with mail.record_messages() as outbox:
79
+ send(
80
+ "subject",
81
+ [recipient],
82
+ "new_member",
83
+ org=org,
84
+ )
85
+ assert len(outbox) == 1
86
+ message = outbox[0]
87
+ assert "mtm_campaign=data-gouv-fr" in message.body
88
+ assert "mtm_campaign=data-gouv-fr" in message.html
89
+
90
+ def test_send_mail_campaign_link_badge_added_company(self, app):
91
+ app.config["SEND_MAIL"] = True
92
+ org = OrganizationFactory()
93
+ org.add_badge("company")
94
+ badge = org.badges[0]
95
+ badge.created_by = UserFactory()
96
+ recipient = UserFactory(email="recipient@udata")
97
+
98
+ app.config["MAIL_CAMPAIGN"] = ""
99
+ with mail.record_messages() as outbox:
100
+ send("subject", [recipient], "badge_added_company", organization=org, badge=badge)
101
+ assert len(outbox) == 1
102
+ message = outbox[0]
103
+ assert "mtm_campaign" not in message.body
104
+ assert "mtm_campaign" not in message.html
105
+
106
+ app.config["MAIL_CAMPAIGN"] = "data-gouv-fr"
107
+ with mail.record_messages() as outbox:
108
+ send("subject", [recipient], "badge_added_company", organization=org, badge=badge)
109
+ assert len(outbox) == 1
110
+ message = outbox[0]
111
+ assert "mtm_campaign=data-gouv-fr" in message.body
112
+ assert "mtm_campaign=data-gouv-fr" in message.html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: udata
3
- Version: 10.0.3.dev32541
3
+ Version: 10.0.3.dev32594
4
4
  Summary: Open data portal
5
5
  Home-page: https://github.com/opendatateam/udata
6
6
  Author: Opendata Team
@@ -140,7 +140,7 @@ It is collectively taken care of by members of the
140
140
 
141
141
  ## Current (in progress)
142
142
 
143
- - Nothing yet
143
+ - Add a matomo "campaign" parameter on links in emails if `MAIL_CAMPAIGN` is configured [#3190](https://github.com/opendatateam/udata/pull/3190)
144
144
 
145
145
  ## 10.0.2 (2024-11-19)
146
146