diff --git a/.env.example b/.env.example
index 79f6f0ff..881d616e 100644
--- a/.env.example
+++ b/.env.example
@@ -32,4 +32,5 @@ DJANGO_LOG_LEVEL=INFO
JOB_MIN_INTERVAL=15
JOB_MAX_INTERVAL=30
COMPOSE_PROJECT_NAME=tribal_wars_planer
-UWSGI_PROCESSES=1
\ No newline at end of file
+UWSGI_PROCESSES=1
+DEBUG_TOOLBAR=1
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index be65e492..761beae7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+# perf
+perf.data
+perf.data.old
# mkdocs
docs/generated/en/*
docs/generated/pl/*
diff --git a/base/static/base.js b/base/static/base.js
index f98eee41..fa689826 100644
--- a/base/static/base.js
+++ b/base/static/base.js
@@ -178,6 +178,9 @@ const menu_toggle = () => {
$("#id_date").addClass("data-picker");
$(".data-picker").datepicker({
format: "yyyy-mm-dd",
+ weekStart: 1,
+ language: getLanguage(),
+ todayHighlight: true,
});
});
};
diff --git a/base/static/min.base.js b/base/static/min.base.js
index 88f1f1ef..f374227d 100644
--- a/base/static/min.base.js
+++ b/base/static/min.base.js
@@ -1 +1 @@
-var bg_color_img_box="rgba(0,0,0,0.9)",allow_hide_scroll_img_box="yes",use_fade_inout_img_box="yes",speed_img_box=.08,z_index_dv_img_box=999,vopa_img_box,idpopup_img_box;const DOCS_RE=/\!\[\]\([a-zA-Z0-9.\/_-]*\)/g,modal=()=>{document.addEventListener("DOMContentLoaded",function(e){$("#form-modal").on("show.bs.modal",function(a){var t=$(a.relatedTarget),i=t.data("attacknumber"),r=t.data("start"),o=parseInt(t.data("off")),n=parseInt(t.data("leftoff")),l=parseInt(t.data("nobleman")),s=parseInt(t.data("leftnobleman")),m=parseInt(t.data("catapult")),c=parseInt(t.data("leftcatapult")),u=t.data("id"),d=$(this),f=o-m*8,p=m,b=n-c*8,h=c,v=f+b,y=p+h;d.find(".modal-title").text(r),d.find("#attack-number").text(i),d.find("#id_weight_id").val(u),d.find("#id_off").val(o),d.find("#id_off_no_catapult").val(f),d.find("#id_off_no_catapult").attr("max",v),d.find("#hint_id_off_no_catapult").text(`0-${v}`),d.find("#id_off_no_catapult").change(function(){var _=parseInt(d.find("#id_catapult").val()),g=parseInt(d.find("#id_off_no_catapult").val());d.find("#id_off").val(g+_*8)}),d.find("#id_catapult").val(p),d.find("#id_catapult").attr("max",y),d.find("#hint_id_catapult").text(`0-${y}`),d.find("#id_catapult").change(function(){var _=parseInt(d.find("#id_catapult").val()),g=parseInt(d.find("#id_off_no_catapult").val());d.find("#id_off").val(g+_*8)}),d.find("#id_nobleman").val(l),d.find("#id_nobleman").attr("max",l+s),d.find("#hint_id_nobleman").text(`0-${l+s}`)}),$(".popoverData").popover(),$(".popoverOption").popover({trigger:"hover"})})},isLocalhost=()=>location.hostname==="localhost"||location.hostname==="127.0.0.1",getLanguage=()=>{const e=location.pathname.split("/");try{return e[1]}catch(a){return console.error(a),"en"}},loadDocsPage=(e,a,t,i=!1)=>{const r=document.getElementById(a),o=`/static/markdown/${getLanguage()}`;localStorage.getItem(t)!==null&&!isLocalhost()?r.innerHTML=marked.parse(localStorage.getItem(t)):fetch(t).then(n=>n.text()).then(n=>{const l=[...n.matchAll(DOCS_RE)];for(const s of l){const m=s[0];let c=m.slice(4,-1);c=`${o}/${c}`;const u=``;n=n.replaceAll(m,u)}return n}).then(n=>{localStorage.getItem(String(e))!=null&&localStorage.removeItem(localStorage.getItem(String(e))),document.getElementById(a).innerHTML=marked.parse(n),isLocalhost()||(localStorage.setItem(t,n),localStorage.setItem(String(e),t))}).then(()=>{const n=new URLSearchParams(location.search);location.hash!==""?setTimeout(()=>{localStorage.setItem(`${e}-scroll-id`,String(document.getElementById(location.hash.slice(1)).offsetTop)),location.search=""},300):i&&wholePageContentScroll(`${e}-scroll-id`)})},wholePageContentScroll=e=>{localStorage.getItem(e)!=null&&$(window).scrollTop(localStorage.getItem(e)),$(window).on("scroll",function(){localStorage.setItem(e,$(window).scrollTop())})},scroll_content_outline=()=>{$(window).on("load",function(){localStorage.getItem("my_app_name_here-quote-scroll")!=null&&$(window).scrollTop(localStorage.getItem("my_app_name_here-quote-scroll")),localStorage.getItem("my_app_name_here-left-scroll")!=null&&$("#leftscroll").scrollTop(localStorage.getItem("my_app_name_here-left-scroll")),$(window).on("scroll",function(){localStorage.setItem("my_app_name_here-quote-scroll",$(window).scrollTop())}),$("#leftscroll").on("scroll",function(){var e=$("#leftscroll").scrollTop();localStorage.setItem("my_app_name_here-left-scroll",e)})})},menu_toggle=()=>{$("#menu-toggle").click(function(e){e.preventDefault(),$("#sidebar-wrapper").toggleClass("toggled")}),$(document).ready(function(){$("#id_date").addClass("data-picker"),$(".data-picker").datepicker({format:"yyyy-mm-dd"})})},prettifyTimeDistance=e=>{e=Math.round(e);const a=Math.floor(e/3600);e%=3600;const t=Math.floor(e/60),i=e%60;let r=a.toString(),o=t.toString(),n=i.toString();return o.length<2&&(o="0"+o),n.length<2&&(n="0"+n),`${r}:${o}:${n}`},calculate_distance=e=>{const a=parseFloat(String(document.getElementById("speed_world").value).replace(",",".")),t=parseFloat(String(document.getElementById("speed_units").value).replace(",","."));if(e.clicked)e.innerHTML=String(e.distance).replace(".",","),e.clicked=!1,e.style.cursor="zoom-in";else{e.distance=parseFloat(e.innerHTML.replace(",","."));let i=e.distance/t/a*30*60,r=e.distance/t/a*35*60;e.innerHTML=`${prettifyTimeDistance(i)} /
${prettifyTimeDistance(r)}`,e.clicked=!0,e.style.cursor="zoom-out"}},activateTooltips=()=>{document.addEventListener("DOMContentLoaded",function(e){$(".popoverData").popover()}),$(function(){$('[data-toggle="tooltip"]').tooltip()})},onPlanerLinkClick=e=>{setTimeout(()=>{const a=document.getElementById("planer-link");a.innerHTML=`${e}`},800)},handleAllFormsetSelect=()=>{document.addEventListener("DOMContentLoaded",function(e){val=$("#id_form-0-status").val(),val==="all"?($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").val(""),$("#id_form-0-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").prop("disabled",!1)),val=$("#id_form-1-status").val(),val==="all"?($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").val(""),$("#id_form-1-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").prop("disabled",!1)),val=$("#id_form-2-status").val(),val==="all"?($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").val(""),$("#id_form-2-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").prop("disabled",!1)),val=$("#id_form-3-status").val(),val==="all"?($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").val(""),$("#id_form-3-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").prop("disabled",!1)),val=$("#id_form-4-status").val(),val==="all"?($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").val(""),$("#id_form-4-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").prop("disabled",!1)),val=$("#id_form-5-status").val(),val==="all"?($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").val(""),$("#id_form-5-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").prop("disabled",!1))}),document.addEventListener("DOMContentLoaded",function(e){$(".time-timepicker").each(function(){$(this).timepicker({minuteStep:1,secondStep:1,showSeconds:!0,showMeridian:!1,defaultTime:!1,icons:{up:"fa fa-angle-up",down:"fa fa-angle-down"}})}),$("#id_form-0-status").change(function(){val=$("#id_form-0-status").val(),val==="all"?($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").val(""),$("#id_form-0-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").prop("disabled",!1)):($("#id_form-0-from_number").prop("disabled",!1),$("#id_form-0-to_number").prop("disabled",!1))}),$("#id_form-1-status").change(function(){val=$("#id_form-1-status").val(),val==="all"?($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").val(""),$("#id_form-1-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").prop("disabled",!1)):($("#id_form-1-from_number").prop("disabled",!1),$("#id_form-1-to_number").prop("disabled",!1))}),$("#id_form-2-status").change(function(){val=$("#id_form-2-status").val(),val==="all"?($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").val(""),$("#id_form-2-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").prop("disabled",!1)):($("#id_form-2-from_number").prop("disabled",!1),$("#id_form-2-to_number").prop("disabled",!1))}),$("#id_form-3-status").change(function(){val=$("#id_form-3-status").val(),val==="all"?($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").val(""),$("#id_form-3-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").prop("disabled",!1)):($("#id_form-3-from_number").prop("disabled",!1),$("#id_form-3-to_number").prop("disabled",!1))}),$("#id_form-4-status").change(function(){val=$("#id_form-4-status").val(),val==="all"?($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").val(""),$("#id_form-4-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").prop("disabled",!1)):($("#id_form-4-from_number").prop("disabled",!1),$("#id_form-4-to_number").prop("disabled",!1))}),$("#id_form-5-status").change(function(){val=$("#id_form-5-status").val(),val==="all"?($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").val(""),$("#id_form-5-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").prop("disabled",!1)):($("#id_form-5-from_number").prop("disabled",!1),$("#id_form-5-to_number").prop("disabled",!1))})})},handleClickButton=(e,a,t,i="",r=!1)=>{const o=document.getElementsByTagName("button"),n=document.getElementsByTagName("a");if(r){for(const l of o)l.disabled=!0;for(const l of n)l.classList.add("disabled-link")}e.disabled=!0,e.innerHTML=` ${a} `;try{document.getElementById(t).submit()}catch(l){if(console.error(l),e.disabled=!1,r){for(const s of o)s.disabled=!1;for(const s of n)s.classList.remove("disabled-link")}}};function getCookie(e){var a=null;if(document.cookie&&document.cookie!="")for(var t=document.cookie.split(";"),i=0;i{const t=parseInt(e),i=parseInt(a),r=String(e)+"-time-"+String(a),o=document.getElementById(r),n=o.innerHTML;o.innerHTML='';const l=await fetch("/api/target-time-update/",{method:"PUT",credentials:"same-origin",body:JSON.stringify({target_id:t,time_id:i}),headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}});if(l.status!==200){o.innerHTML='';const s=o.className;o.className="btn btn-lg btn-danger my-1 py-0 px-1 mr-1",setTimeout(()=>{o.className=s,o.innerHTML=n,o.blur()},2e3)}else{const s=await l.json();if(o.className="btn btn-lg btn-primary my-1 py-0 px-1 mr-1",o.innerHTML=n,o.blur(),s.old!=="none"&&s.old!==s.new){const m=document.getElementById(s.old);m.className="btn btn-lg btn-light my-1 py-0 px-1 mr-1"}}},deleteTarget=async e=>{const a=parseInt(e),t="target-btn-"+String(e),i="target-row-"+String(e),r=document.getElementById(t),o=document.getElementById(i),n=r.innerHTML;r.disabled=!0,r.innerHTML='',(await fetch("/api/target-delete/",{method:"DELETE",credentials:"same-origin",body:JSON.stringify({target_id:a}),headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}})).status!==204?(r.innerHTML='',setTimeout(()=>{r.innerHTML=n,r.blur()},2e3)):o.style.display="none"},handlePlanerMenuVisibilityChange=()=>{document.hidden?tabPlanerMenuHasBeenHidden=!0:tabPlanerMenuHasBeenHidden&&window.location.reload()},changeIsHiddenState=async(e,a)=>{const t=document.getElementById(a),i=t.innerHTML;t.disabled=!0,t.innerHTML='';const r=await fetch("/api/overview-hide-state-update/",{method:"PUT",credentials:"same-origin",body:JSON.stringify({outline_id:e,token:a}),headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}});if(r.status!==200)t.innerHTML='',setTimeout(()=>{t.innerHTML=i,t.blur()},2e3);else{const o=await r.json();t.innerHTML=o.name,t.className=o.class,t.disabled=!1,t.blur()}},changeBuildingsArray=async(e,a)=>{const t=document.getElementById("multi-select-spinner");t.innerHTML='';const i={buildings:a,outline_id:e};await fetch("/api/change-buildings-array/",{method:"PUT",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(i)}).then(r=>{r.status===200?(t.innerHTML='',setTimeout(()=>{t.innerHTML=""},400)):(t.innerHTML=' (Error in connection!)',setTimeout(()=>{t.innerHTML=""},2e3))}).catch(()=>{t.innerHTML=' (Error in connection!)',setTimeout(()=>{t.innerHTML=""},2e3)})},resetUserMessages=async()=>{const e=document.getElementById("reset-svg"),a=document.getElementById("reset-span");await fetch("/api/reset-user-messages/",{method:"PUT",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}}).then(t=>{t.status===200&&(e.style.fill="rgba(0,0,0,.5)",a.style.color="rgba(0,0,0,.5)",a.innerHTML="0")})},codemirrorValidation=(e,a)=>{document.addEventListener("DOMContentLoaded",function(t){$(a).addClass("CodeMirror-Invalid");const r=$(a)[0].CodeMirror,o=JSON.parse(e);Object.entries(o).forEach(([n,l],s)=>{s===0&&r.scrollIntoView(parseInt(l.message)),r.addLineClass(parseInt(l.message),"wrap","line-error")})})},handleButtonClipboardUpdate=(e,a,t,i,r)=>{const o=document.getElementById(a),n=e.innerHTML;setTimeout(()=>{e.blur()},100);try{const l=o.textContent;navigator.clipboard.writeText(l),e.innerHTML=` ${t}`,setTimeout(()=>{e.innerHTML=` ${i}`},1800)}catch(l){e.innerHTML=` ${r} (${l})`,setTimeout(()=>{e.innerHTML=n},5e3)}},copyDataToClipboard=(e,a,t)=>{const i=t?document.getElementById(a).value:document.getElementById(a).textContent;navigator.clipboard.writeText(i),e.blur();const r=e.innerHTML;e.innerHTML='',setTimeout(()=>{e.innerHTML=r},600)},removeOutline=(e,a,t,i)=>{const r=document.getElementById(a),o=document.getElementById(t);e.disabled=!0,e.innerHTML=` ${i}`,r.disabled=!0,o.submit()},imagePopupActivate=()=>{window.onload=function(){var e=document.createElement("div");e.id="img_box",document.getElementsByTagName("body")[0].appendChild(e),idpopup_img_box=document.getElementById("img_box"),idpopup_img_box.style.top=0,idpopup_img_box.style.left=0,idpopup_img_box.style.opacity=0,idpopup_img_box.style.width="100%",idpopup_img_box.style.height="100%",idpopup_img_box.style.display="none",idpopup_img_box.style.position="fixed",idpopup_img_box.style.cursor="pointer",idpopup_img_box.style.textAlign="center",idpopup_img_box.style.zIndex=z_index_dv_img_box,idpopup_img_box.style.backgroundColor=bg_color_img_box}},img_box=e=>{var a=typeof e=="string"?e:e.src;vopa_img_box=0;var t=window.innerHeight,i=window.innerWidth,r,o,n,l=new Image;l.src=a,l.onload=function(){r=l.height,wimg_img_box=l.width,idpopup_img_box.innerHTML="",wimg_img_box>i?idpopup_img_box.getElementsByTagName("img")[0].style.width="90%":r>t&&(idpopup_img_box.getElementsByTagName("img")[0].style.height="90%",r=t*90/100),r=0?(idpopup_img_box.style.opacity=vopa_img_box,vopa_img_box-=speed_img_box):(idpopup_img_box.style.opacity=0,clearInterval(m),idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible",vopa_img_box=0)},10);else idpopup_img_box.style.opacity=0,idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible"},idpopup_img_box.onclick=function(){if(use_fade_inout_img_box=="yes")var s=setInterval(function(){vopa_img_box>=0?(idpopup_img_box.style.opacity=vopa_img_box,vopa_img_box-=speed_img_box):(idpopup_img_box.style.opacity=0,clearInterval(s),idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible",vopa_img_box=0)},10);else idpopup_img_box.style.opacity=0,idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible"}},updateClipboard=e=>{const a=document.getElementById(e).textContent;navigator.clipboard.writeText(a)},updateAfterClick=async(e,a,t)=>{const i=Number.parseFloat(a)/100;let r=0;const o=setInterval(()=>{r+=1,e.innerHTML=t+` ${r}%`,r===99&&clearInterval(o)},i)},createBuildingsOptions=(e,a,t,i,r,o,n,l,s,m,c,u,d,f,p,b)=>[{label:e,value:"headquarters"},{label:a,value:"barracks"},{label:t,value:"stable"},{label:i,value:"workshop"},{label:r,value:"academy"},{label:o,value:"smithy"},{label:n,value:"rally_point"},{label:l,value:"statue"},{label:s,value:"market"},{label:m,value:"timber_camp"},{label:c,value:"clay_pit"},{label:u,value:"iron_mine"},{label:d,value:"farm"},{label:f,value:"warehouse"},{label:p,value:"wall"},{label:b,value:"watchtower"}],changeTextToSent=(e,a)=>{e.innerHTML=`${a}`},fillAndSubmit=e=>{const a=document.getElementById("create-form"),t=document.getElementsByName("target_type")[0];t.value=e,a.submit()},initializePaymentProcess=async e=>{const a=document.getElementById("payment-button");a.disabled=!0;const t=await(await fetch("/api/stripe-key/")).json(),i=Stripe(t.publicKey);a.onclick=()=>{const r=a.innerHTML;a.innerHTML="",fetch("/api/stripe-session/",{method:"POST",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({amount:parseInt(e)})}).then(o=>{if(o.status===200)return o.json();if(o.status===400)a.innerHTML=r,o.json().then(n=>{throw console.error(n),alert(`Something went wrong. Message: ${n.error}`),n.error});else throw a.innerHTML=r,console.error(o),alert("Something went wrong. unknown error"),"unknown error"}).then(o=>(console.log(o),i.redirectToCheckout({sessionId:o.sessionId})))},a.disabled=!1},resetBackgroundBuildingsColors=e=>{document.getElementById("headquarters-"+e).classList.remove("fancy-building-True"),document.getElementById("smithy-"+e).classList.remove("fancy-building-True"),document.getElementById("timber_camp-"+e).classList.remove("fancy-building-True"),document.getElementById("clay_pit-"+e).classList.remove("fancy-building-True"),document.getElementById("farm-"+e).classList.remove("fancy-building-True"),document.getElementById("warehouse-"+e).classList.remove("fancy-building-True")},changeWeightBuildingDirect=async(e,a)=>{const t=e.id,[i,r]=t.split("-");resetBackgroundBuildingsColors(r),e.classList.add("fancy-building-True");const o=document.getElementById("building-name-"+r);o.innerHTML='';const n=await fetch("/api/change-weight-building/",{method:"PUT",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({building:i,outline_id:a,weight_id:r})});if(n.status!==200)o.innerHTML='',setTimeout(()=>{o.innerHTML="Try again"},2e3);else{const l=await n.json();o.innerHTML=`${l.name}`}};
+var bg_color_img_box="rgba(0,0,0,0.9)",allow_hide_scroll_img_box="yes",use_fade_inout_img_box="yes",speed_img_box=.08,z_index_dv_img_box=999,vopa_img_box,idpopup_img_box;const DOCS_RE=/\!\[\]\([a-zA-Z0-9.\/_-]*\)/g,modal=()=>{document.addEventListener("DOMContentLoaded",function(e){$("#form-modal").on("show.bs.modal",function(a){var t=$(a.relatedTarget),i=t.data("attacknumber"),r=t.data("start"),o=parseInt(t.data("off")),n=parseInt(t.data("leftoff")),l=parseInt(t.data("nobleman")),s=parseInt(t.data("leftnobleman")),m=parseInt(t.data("catapult")),c=parseInt(t.data("leftcatapult")),u=t.data("id"),d=$(this),f=o-m*8,p=m,b=n-c*8,y=c,v=f+b,h=p+y;d.find(".modal-title").text(r),d.find("#attack-number").text(i),d.find("#id_weight_id").val(u),d.find("#id_off").val(o),d.find("#id_off_no_catapult").val(f),d.find("#id_off_no_catapult").attr("max",v),d.find("#hint_id_off_no_catapult").text(`0-${v}`),d.find("#id_off_no_catapult").change(function(){var _=parseInt(d.find("#id_catapult").val()),g=parseInt(d.find("#id_off_no_catapult").val());d.find("#id_off").val(g+_*8)}),d.find("#id_catapult").val(p),d.find("#id_catapult").attr("max",h),d.find("#hint_id_catapult").text(`0-${h}`),d.find("#id_catapult").change(function(){var _=parseInt(d.find("#id_catapult").val()),g=parseInt(d.find("#id_off_no_catapult").val());d.find("#id_off").val(g+_*8)}),d.find("#id_nobleman").val(l),d.find("#id_nobleman").attr("max",l+s),d.find("#hint_id_nobleman").text(`0-${l+s}`)}),$(".popoverData").popover(),$(".popoverOption").popover({trigger:"hover"})})},isLocalhost=()=>location.hostname==="localhost"||location.hostname==="127.0.0.1",getLanguage=()=>{const e=location.pathname.split("/");try{return e[1]}catch(a){return console.error(a),"en"}},loadDocsPage=(e,a,t,i=!1)=>{const r=document.getElementById(a),o=`/static/markdown/${getLanguage()}`;localStorage.getItem(t)!==null&&!isLocalhost()?r.innerHTML=marked.parse(localStorage.getItem(t)):fetch(t).then(n=>n.text()).then(n=>{const l=[...n.matchAll(DOCS_RE)];for(const s of l){const m=s[0];let c=m.slice(4,-1);c=`${o}/${c}`;const u=``;n=n.replaceAll(m,u)}return n}).then(n=>{localStorage.getItem(String(e))!=null&&localStorage.removeItem(localStorage.getItem(String(e))),document.getElementById(a).innerHTML=marked.parse(n),isLocalhost()||(localStorage.setItem(t,n),localStorage.setItem(String(e),t))}).then(()=>{const n=new URLSearchParams(location.search);location.hash!==""?setTimeout(()=>{localStorage.setItem(`${e}-scroll-id`,String(document.getElementById(location.hash.slice(1)).offsetTop)),location.search=""},300):i&&wholePageContentScroll(`${e}-scroll-id`)})},wholePageContentScroll=e=>{localStorage.getItem(e)!=null&&$(window).scrollTop(localStorage.getItem(e)),$(window).on("scroll",function(){localStorage.setItem(e,$(window).scrollTop())})},scroll_content_outline=()=>{$(window).on("load",function(){localStorage.getItem("my_app_name_here-quote-scroll")!=null&&$(window).scrollTop(localStorage.getItem("my_app_name_here-quote-scroll")),localStorage.getItem("my_app_name_here-left-scroll")!=null&&$("#leftscroll").scrollTop(localStorage.getItem("my_app_name_here-left-scroll")),$(window).on("scroll",function(){localStorage.setItem("my_app_name_here-quote-scroll",$(window).scrollTop())}),$("#leftscroll").on("scroll",function(){var e=$("#leftscroll").scrollTop();localStorage.setItem("my_app_name_here-left-scroll",e)})})},menu_toggle=()=>{$("#menu-toggle").click(function(e){e.preventDefault(),$("#sidebar-wrapper").toggleClass("toggled")}),$(document).ready(function(){$("#id_date").addClass("data-picker"),$(".data-picker").datepicker({format:"yyyy-mm-dd",weekStart:1,language:getLanguage(),todayHighlight:!0})})},prettifyTimeDistance=e=>{e=Math.round(e);const a=Math.floor(e/3600);e%=3600;const t=Math.floor(e/60),i=e%60;let r=a.toString(),o=t.toString(),n=i.toString();return o.length<2&&(o="0"+o),n.length<2&&(n="0"+n),`${r}:${o}:${n}`},calculate_distance=e=>{const a=parseFloat(String(document.getElementById("speed_world").value).replace(",",".")),t=parseFloat(String(document.getElementById("speed_units").value).replace(",","."));if(e.clicked)e.innerHTML=String(e.distance).replace(".",","),e.clicked=!1,e.style.cursor="zoom-in";else{e.distance=parseFloat(e.innerHTML.replace(",","."));let i=e.distance/t/a*30*60,r=e.distance/t/a*35*60;e.innerHTML=`${prettifyTimeDistance(i)} /
${prettifyTimeDistance(r)}`,e.clicked=!0,e.style.cursor="zoom-out"}},activateTooltips=()=>{document.addEventListener("DOMContentLoaded",function(e){$(".popoverData").popover()}),$(function(){$('[data-toggle="tooltip"]').tooltip()})},onPlanerLinkClick=e=>{setTimeout(()=>{const a=document.getElementById("planer-link");a.innerHTML=`${e}`},800)},handleAllFormsetSelect=()=>{document.addEventListener("DOMContentLoaded",function(e){val=$("#id_form-0-status").val(),val==="all"?($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").val(""),$("#id_form-0-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").prop("disabled",!1)),val=$("#id_form-1-status").val(),val==="all"?($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").val(""),$("#id_form-1-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").prop("disabled",!1)),val=$("#id_form-2-status").val(),val==="all"?($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").val(""),$("#id_form-2-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").prop("disabled",!1)),val=$("#id_form-3-status").val(),val==="all"?($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").val(""),$("#id_form-3-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").prop("disabled",!1)),val=$("#id_form-4-status").val(),val==="all"?($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").val(""),$("#id_form-4-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").prop("disabled",!1)),val=$("#id_form-5-status").val(),val==="all"?($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").val(""),$("#id_form-5-to_number").prop("disabled",!0)):val==="exact"&&($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").prop("disabled",!1))}),document.addEventListener("DOMContentLoaded",function(e){$(".time-timepicker").each(function(){$(this).timepicker({minuteStep:1,secondStep:1,showSeconds:!0,showMeridian:!1,defaultTime:!1,icons:{up:"fa fa-angle-up",down:"fa fa-angle-down"}})}),$("#id_form-0-status").change(function(){val=$("#id_form-0-status").val(),val==="all"?($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").val(""),$("#id_form-0-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-0-from_number").val(""),$("#id_form-0-from_number").prop("disabled",!0),$("#id_form-0-to_number").prop("disabled",!1)):($("#id_form-0-from_number").prop("disabled",!1),$("#id_form-0-to_number").prop("disabled",!1))}),$("#id_form-1-status").change(function(){val=$("#id_form-1-status").val(),val==="all"?($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").val(""),$("#id_form-1-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-1-from_number").val(""),$("#id_form-1-from_number").prop("disabled",!0),$("#id_form-1-to_number").prop("disabled",!1)):($("#id_form-1-from_number").prop("disabled",!1),$("#id_form-1-to_number").prop("disabled",!1))}),$("#id_form-2-status").change(function(){val=$("#id_form-2-status").val(),val==="all"?($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").val(""),$("#id_form-2-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-2-from_number").val(""),$("#id_form-2-from_number").prop("disabled",!0),$("#id_form-2-to_number").prop("disabled",!1)):($("#id_form-2-from_number").prop("disabled",!1),$("#id_form-2-to_number").prop("disabled",!1))}),$("#id_form-3-status").change(function(){val=$("#id_form-3-status").val(),val==="all"?($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").val(""),$("#id_form-3-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-3-from_number").val(""),$("#id_form-3-from_number").prop("disabled",!0),$("#id_form-3-to_number").prop("disabled",!1)):($("#id_form-3-from_number").prop("disabled",!1),$("#id_form-3-to_number").prop("disabled",!1))}),$("#id_form-4-status").change(function(){val=$("#id_form-4-status").val(),val==="all"?($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").val(""),$("#id_form-4-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-4-from_number").val(""),$("#id_form-4-from_number").prop("disabled",!0),$("#id_form-4-to_number").prop("disabled",!1)):($("#id_form-4-from_number").prop("disabled",!1),$("#id_form-4-to_number").prop("disabled",!1))}),$("#id_form-5-status").change(function(){val=$("#id_form-5-status").val(),val==="all"?($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").val(""),$("#id_form-5-to_number").prop("disabled",!0)):val==="exact"?($("#id_form-5-from_number").val(""),$("#id_form-5-from_number").prop("disabled",!0),$("#id_form-5-to_number").prop("disabled",!1)):($("#id_form-5-from_number").prop("disabled",!1),$("#id_form-5-to_number").prop("disabled",!1))})})},handleClickButton=(e,a,t,i="",r=!1)=>{const o=document.getElementsByTagName("button"),n=document.getElementsByTagName("a");if(r){for(const l of o)l.disabled=!0;for(const l of n)l.classList.add("disabled-link")}e.disabled=!0,e.innerHTML=` ${a} `;try{document.getElementById(t).submit()}catch(l){if(console.error(l),e.disabled=!1,r){for(const s of o)s.disabled=!1;for(const s of n)s.classList.remove("disabled-link")}}};function getCookie(e){var a=null;if(document.cookie&&document.cookie!="")for(var t=document.cookie.split(";"),i=0;i{const t=parseInt(e),i=parseInt(a),r=String(e)+"-time-"+String(a),o=document.getElementById(r),n=o.innerHTML;o.innerHTML='';const l=await fetch("/api/target-time-update/",{method:"PUT",credentials:"same-origin",body:JSON.stringify({target_id:t,time_id:i}),headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}});if(l.status!==200){o.innerHTML='';const s=o.className;o.className="btn btn-lg btn-danger my-1 py-0 px-1 mr-1",setTimeout(()=>{o.className=s,o.innerHTML=n,o.blur()},2e3)}else{const s=await l.json();if(o.className="btn btn-lg btn-primary my-1 py-0 px-1 mr-1",o.innerHTML=n,o.blur(),s.old!=="none"&&s.old!==s.new){const m=document.getElementById(s.old);m.className="btn btn-lg btn-light my-1 py-0 px-1 mr-1"}}},deleteTarget=async e=>{const a=parseInt(e),t="target-btn-"+String(e),i="target-row-"+String(e),r=document.getElementById(t),o=document.getElementById(i),n=r.innerHTML;r.disabled=!0,r.innerHTML='',(await fetch("/api/target-delete/",{method:"DELETE",credentials:"same-origin",body:JSON.stringify({target_id:a}),headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}})).status!==204?(r.innerHTML='',setTimeout(()=>{r.innerHTML=n,r.blur()},2e3)):o.style.display="none"},handlePlanerMenuVisibilityChange=()=>{document.hidden?tabPlanerMenuHasBeenHidden=!0:tabPlanerMenuHasBeenHidden&&window.location.reload()},changeIsHiddenState=async(e,a)=>{const t=document.getElementById(a),i=t.innerHTML;t.disabled=!0,t.innerHTML='';const r=await fetch("/api/overview-hide-state-update/",{method:"PUT",credentials:"same-origin",body:JSON.stringify({outline_id:e,token:a}),headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}});if(r.status!==200)t.innerHTML='',setTimeout(()=>{t.innerHTML=i,t.blur()},2e3);else{const o=await r.json();t.innerHTML=o.name,t.className=o.class,t.disabled=!1,t.blur()}},changeBuildingsArray=async(e,a)=>{const t=document.getElementById("multi-select-spinner");t.innerHTML='';const i={buildings:a,outline_id:e};await fetch("/api/change-buildings-array/",{method:"PUT",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify(i)}).then(r=>{r.status===200?(t.innerHTML='',setTimeout(()=>{t.innerHTML=""},400)):(t.innerHTML=' (Error in connection!)',setTimeout(()=>{t.innerHTML=""},2e3))}).catch(()=>{t.innerHTML=' (Error in connection!)',setTimeout(()=>{t.innerHTML=""},2e3)})},resetUserMessages=async()=>{const e=document.getElementById("reset-svg"),a=document.getElementById("reset-span");await fetch("/api/reset-user-messages/",{method:"PUT",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"}}).then(t=>{t.status===200&&(e.style.fill="rgba(0,0,0,.5)",a.style.color="rgba(0,0,0,.5)",a.innerHTML="0")})},codemirrorValidation=(e,a)=>{document.addEventListener("DOMContentLoaded",function(t){$(a).addClass("CodeMirror-Invalid");const r=$(a)[0].CodeMirror,o=JSON.parse(e);Object.entries(o).forEach(([n,l],s)=>{s===0&&r.scrollIntoView(parseInt(l.message)),r.addLineClass(parseInt(l.message),"wrap","line-error")})})},handleButtonClipboardUpdate=(e,a,t,i,r)=>{const o=document.getElementById(a),n=e.innerHTML;setTimeout(()=>{e.blur()},100);try{const l=o.textContent;navigator.clipboard.writeText(l),e.innerHTML=` ${t}`,setTimeout(()=>{e.innerHTML=` ${i}`},1800)}catch(l){e.innerHTML=` ${r} (${l})`,setTimeout(()=>{e.innerHTML=n},5e3)}},copyDataToClipboard=(e,a,t)=>{const i=t?document.getElementById(a).value:document.getElementById(a).textContent;navigator.clipboard.writeText(i),e.blur();const r=e.innerHTML;e.innerHTML='',setTimeout(()=>{e.innerHTML=r},600)},removeOutline=(e,a,t,i)=>{const r=document.getElementById(a),o=document.getElementById(t);e.disabled=!0,e.innerHTML=` ${i}`,r.disabled=!0,o.submit()},imagePopupActivate=()=>{window.onload=function(){var e=document.createElement("div");e.id="img_box",document.getElementsByTagName("body")[0].appendChild(e),idpopup_img_box=document.getElementById("img_box"),idpopup_img_box.style.top=0,idpopup_img_box.style.left=0,idpopup_img_box.style.opacity=0,idpopup_img_box.style.width="100%",idpopup_img_box.style.height="100%",idpopup_img_box.style.display="none",idpopup_img_box.style.position="fixed",idpopup_img_box.style.cursor="pointer",idpopup_img_box.style.textAlign="center",idpopup_img_box.style.zIndex=z_index_dv_img_box,idpopup_img_box.style.backgroundColor=bg_color_img_box}},img_box=e=>{var a=typeof e=="string"?e:e.src;vopa_img_box=0;var t=window.innerHeight,i=window.innerWidth,r,o,n,l=new Image;l.src=a,l.onload=function(){r=l.height,wimg_img_box=l.width,idpopup_img_box.innerHTML="",wimg_img_box>i?idpopup_img_box.getElementsByTagName("img")[0].style.width="90%":r>t&&(idpopup_img_box.getElementsByTagName("img")[0].style.height="90%",r=t*90/100),r=0?(idpopup_img_box.style.opacity=vopa_img_box,vopa_img_box-=speed_img_box):(idpopup_img_box.style.opacity=0,clearInterval(m),idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible",vopa_img_box=0)},10);else idpopup_img_box.style.opacity=0,idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible"},idpopup_img_box.onclick=function(){if(use_fade_inout_img_box=="yes")var s=setInterval(function(){vopa_img_box>=0?(idpopup_img_box.style.opacity=vopa_img_box,vopa_img_box-=speed_img_box):(idpopup_img_box.style.opacity=0,clearInterval(s),idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible",vopa_img_box=0)},10);else idpopup_img_box.style.opacity=0,idpopup_img_box.style.display="none",idpopup_img_box.innerHTML="",document.body.style.overflow="visible"}},updateClipboard=e=>{const a=document.getElementById(e).textContent;navigator.clipboard.writeText(a)},updateAfterClick=async(e,a,t)=>{const i=Number.parseFloat(a)/100;let r=0;const o=setInterval(()=>{r+=1,e.innerHTML=t+` ${r}%`,r===99&&clearInterval(o)},i)},createBuildingsOptions=(e,a,t,i,r,o,n,l,s,m,c,u,d,f,p,b)=>[{label:e,value:"headquarters"},{label:a,value:"barracks"},{label:t,value:"stable"},{label:i,value:"workshop"},{label:r,value:"academy"},{label:o,value:"smithy"},{label:n,value:"rally_point"},{label:l,value:"statue"},{label:s,value:"market"},{label:m,value:"timber_camp"},{label:c,value:"clay_pit"},{label:u,value:"iron_mine"},{label:d,value:"farm"},{label:f,value:"warehouse"},{label:p,value:"wall"},{label:b,value:"watchtower"}],changeTextToSent=(e,a)=>{e.innerHTML=`${a}`},fillAndSubmit=e=>{const a=document.getElementById("create-form"),t=document.getElementsByName("target_type")[0];t.value=e,a.submit()},initializePaymentProcess=async e=>{const a=document.getElementById("payment-button");a.disabled=!0;const t=await(await fetch("/api/stripe-key/")).json(),i=Stripe(t.publicKey);a.onclick=()=>{const r=a.innerHTML;a.innerHTML="",fetch("/api/stripe-session/",{method:"POST",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({amount:parseInt(e)})}).then(o=>{if(o.status===200)return o.json();if(o.status===400)a.innerHTML=r,o.json().then(n=>{throw console.error(n),alert(`Something went wrong. Message: ${n.error}`),n.error});else throw a.innerHTML=r,console.error(o),alert("Something went wrong. unknown error"),"unknown error"}).then(o=>(console.log(o),i.redirectToCheckout({sessionId:o.sessionId})))},a.disabled=!1},resetBackgroundBuildingsColors=e=>{document.getElementById("headquarters-"+e).classList.remove("fancy-building-True"),document.getElementById("smithy-"+e).classList.remove("fancy-building-True"),document.getElementById("timber_camp-"+e).classList.remove("fancy-building-True"),document.getElementById("clay_pit-"+e).classList.remove("fancy-building-True"),document.getElementById("farm-"+e).classList.remove("fancy-building-True"),document.getElementById("warehouse-"+e).classList.remove("fancy-building-True")},changeWeightBuildingDirect=async(e,a)=>{const t=e.id,[i,r]=t.split("-");resetBackgroundBuildingsColors(r),e.classList.add("fancy-building-True");const o=document.getElementById("building-name-"+r);o.innerHTML='';const n=await fetch("/api/change-weight-building/",{method:"PUT",credentials:"same-origin",headers:{"X-CSRFToken":getCookie("csrftoken"),Accept:"application/json","Content-Type":"application/json"},body:JSON.stringify({building:i,outline_id:a,weight_id:r})});if(n.status!==200)o.innerHTML='',setTimeout(()=>{o.innerHTML="Try again"},2e3);else{const l=await n.json();o.innerHTML=`${l.name}`}};
diff --git a/base/templates/base/base.html b/base/templates/base/base.html
index 7c66bcfb..c30a6832 100644
--- a/base/templates/base/base.html
+++ b/base/templates/base/base.html
@@ -358,6 +358,7 @@ {% trans 'Planer in numbers' %}
+
diff --git a/pyproject.toml b/pyproject.toml
index 5203faee..18971af5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -2,7 +2,7 @@
authors = ["rafsaf "]
description = "Tribal Wars Planer django app, professional tool for creating outlines for off-game coordinators."
name = "tribal_wars_planer"
-version = "5.1.4"
+version = "5.2.0"
[tool.poetry.dependencies]
python = ">=3.12,<3.13"
diff --git a/tribal_wars_planer/settings.py b/tribal_wars_planer/settings.py
index e33fd1b7..bbf9e1ac 100644
--- a/tribal_wars_planer/settings.py
+++ b/tribal_wars_planer/settings.py
@@ -12,8 +12,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
# ==============================================================================
-
import os
+import sys
import tomllib
from pathlib import Path
from typing import Any
@@ -36,6 +36,8 @@
else:
DEBUG = False
+TESTING = "pytest" in sys.modules
+DEBUG_TOOLBAR = DEBUG and int(os.environ.get("DEBUG_TOOLBAR", 0)) == 1 and not TESTING
MAIN_DOMAIN = os.environ.get("MAIN_DOMAIN", "localhost")
SUB_DOMAIN = os.environ.get("SUB_DOMAIN", "")
ALLOWED_HOSTS = [MAIN_DOMAIN]
@@ -114,6 +116,10 @@
"tribal_wars_planer.middlewares.PrometheusAfterMiddleware",
]
+if DEBUG_TOOLBAR:
+ MIDDLEWARE.insert(0, "debug_toolbar.middleware.DebugToolbarMiddleware")
+ INSTALLED_APPS.append("debug_toolbar")
+
ROOT_URLCONF = "tribal_wars_planer.urls"
TEMPLATES = [
diff --git a/tribal_wars_planer/test_urls.py b/tribal_wars_planer/test_urls.py
index 5571b7fd..2015f8bc 100644
--- a/tribal_wars_planer/test_urls.py
+++ b/tribal_wars_planer/test_urls.py
@@ -1,5 +1,5 @@
-from tribal_wars_planer.urls import TESTING
+from django.conf import settings
def test_testing_is_true():
- assert TESTING
+ assert settings.TESTING
diff --git a/tribal_wars_planer/urls.py b/tribal_wars_planer/urls.py
index e6e15824..2f02efe2 100644
--- a/tribal_wars_planer/urls.py
+++ b/tribal_wars_planer/urls.py
@@ -29,8 +29,6 @@
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
-import sys
-
from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
@@ -40,8 +38,6 @@
from django_registration.backends.one_step.views import RegistrationView
from django_registration.forms import RegistrationFormUniqueEmail
-TESTING = "pytest" in sys.modules
-
urlpatterns = [
path("api/", include("rest_api.urls")),
]
@@ -74,7 +70,7 @@
if settings.DEBUG:
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # type: ignore
-# if settings.DEBUG and not TESTING:
-# from debug_toolbar.toolbar import debug_toolbar_urls
+if settings.DEBUG_TOOLBAR:
+ from debug_toolbar.toolbar import debug_toolbar_urls
-# urlpatterns += debug_toolbar_urls()
+ urlpatterns += debug_toolbar_urls()
diff --git a/utils/outline_complete.py b/utils/outline_complete.py
index d2e84066..8a780b10 100644
--- a/utils/outline_complete.py
+++ b/utils/outline_complete.py
@@ -95,8 +95,24 @@ def complete_outline_write(outline: Outline, salt: bytes | str | None = None):
fakes = get_targets(outline, True, False)
ruins = get_targets(outline, False, True)
weight_max_lst = list(
- WeightMaximum.objects.select_related("outline").filter(
- outline=outline, too_far_away=False
+ WeightMaximum.objects.select_related("outline")
+ .filter(outline=outline, too_far_away=False)
+ .only(
+ "player",
+ "start",
+ "points",
+ "x_coord",
+ "y_coord",
+ "off_state",
+ "off_left",
+ "catapult_state",
+ "catapult_left",
+ "nobleman_state",
+ "nobleman_left",
+ "fake_limit",
+ "nobles_limit",
+ "first_line",
+ "outline__initial_outline_minimum_noble_troops",
)
)