(self.webpackChunknodebb=self.webpackChunknodebb||[]).push([[1091,34271,36159,46379,49897,52185,62441,74566,88189,92332,98463,99127],{12236:(A,S,r)=>{"use strict";var g,h;g=[r(49897),r(29930)],h=function(m,y){const a={};a.init=function(t,e){const o=t.find(".draft-icon"),n=t.attr("data-uuid");function s(){$(`[component="composer"][data-uuid="${n}"]`).length&&(e.save_id||(e.save_id=utils.generateSaveId(app.user.uid)),a.addToDraftList("available",e.save_id),a.addToDraftList("open",e.save_id),l(t,o,e))}t.on("keyup","textarea, input.handle, input.title",utils.debounce(s,1e3)),t.on("click",'input[type="checkbox"]',utils.debounce(s,1e3)),t.on("click",'[component="category/list"] [data-cid]',utils.debounce(s,1e3)),t.on("itemAdded",".tags",utils.debounce(s,1e3)),t.on("thumb.uploaded",s),o.on("animationend",function(){$(this).toggleClass("active",!1)}),$(window).on("unload",function(){const i=a.getList("open");i.length&&i.forEach(f=>a.removeFromDraftList("open",f))}),a.migrateGuest(),a.migrateThumbs(...arguments)};function E(t){return parseInt(t,10)>0?localStorage:sessionStorage}a.get=function(t){if(!t)return null;const e=t.split(":")[1],o=E(e);try{const n=o.getItem(t),s=JSON.parse(n)||null;if(!s)throw new Error(`can't parse draft json for ${t}`);return s.save_id=t,s.timestamp&&(s.timestampISO=utils.toISOString(s.timestamp)),$(window).trigger("action:composer.drafts.get",{save_id:t,draft:s,storage:o}),s}catch{return console.warn(`[composer/drafts] Could not get draft ${t}, removing`),a.removeFromDraftList("available"),a.removeFromDraftList("open"),null}};function l(t,e,o){if(c(app.user.uid?"localStorage":"sessionStorage")&&o&&o.save_id&&t.length){const n=t.find("input.title"),s=n&&n.length&&n.val(),i=t.find("textarea").val(),f=E(app.user.uid);if(i.length||s&&s.length){const d={save_id:o.save_id,action:o.action,text:i,uuid:t.attr("data-uuid"),timestamp:Date.now()};if(o.action==="topics.post"){const b=t.find("input.tags").val();d.tags=b,d.title=s,d.cid=o.cid}else o.action==="posts.reply"?(d.title=o.title,d.tid=o.tid,d.toPid=o.toPid):o.action==="posts.edit"&&(d.pid=o.pid,d.title=s||o.title);app.user.uid||(d.handle=t.find("input.handle").val()),f.setItem(o.save_id,JSON.stringify(d)),$(window).trigger("action:composer.drafts.save",{storage:f,postData:o,postContainer:t}),e.toggleClass("active",!0)}else a.removeDraft(o.save_id)}}a.removeDraft=function(t){if(!t)return;a.removeFromDraftList("available",t),a.removeFromDraftList("open",t);const e=t.split(":")[1],o=E(e);o.removeItem(t),$(window).trigger("action:composer.drafts.remove",{storage:o,save_id:t})},a.getList=function(t){try{const e=localStorage.getItem(`drafts:${t}`);return JSON.parse(e)||[]}catch{return console.warn("[composer/drafts] Could not read list of available drafts"),[]}},a.addToDraftList=function(t,e){if(!c(app.user.uid?"localStorage":"sessionStorage")||!e)return;const o=a.getList(t);o.includes(e)||(o.push(e),localStorage.setItem("drafts:"+t,JSON.stringify(o)))},a.removeFromDraftList=function(t,e){if(!c(app.user.uid?"localStorage":"sessionStorage")||!e)return;const o=a.getList(t);o.includes(e)&&(o.splice(o.indexOf(e),1),localStorage.setItem("drafts:"+t,JSON.stringify(o)))},a.migrateGuest=function(){if(c("localStorage")&&app.user.uid){const t=/^composer:\d+:\d$/,e=Object.keys(sessionStorage).filter(function(s){return t.test(s)}),o=new Set([]),n=e.map(function(s){const i=s.split(":");return i[1]=app.user.uid,o.add(i.join(":")),i.join(":")});return e.forEach(function(s,i){localStorage.setItem(n[i],sessionStorage.getItem(s)),sessionStorage.removeItem(s)}),o.forEach(function(s){a.addToDraftList("available",s)}),o}},a.migrateThumbs=function(t,e){if(!app.uid)return;const o=t.attr("data-uuid"),n=a.get(e.save_id);n&&n.uuid&&m.put(`/topics/${n.uuid}/thumbs`,{tid:o}).then(()=>{Promise.all([r.e(20056),r.e(23662),r.e(65285),r.e(40559),r.e(449),r.e(5785),r.e(36159)]).then(function(){var s=[r(71431)];(function(i){i.updateThumbCount(o,t)}).apply(null,s)}).catch(r.oe)})},a.listAvailable=function(){return a.getList("available").map(a.get).filter(Boolean)},a.getAvailableCount=function(){return a.listAvailable().length},a.open=function(t){if(!t)return;const e=a.get(t);u(t,e)},a.loadOpen=function(){if(ajaxify.data.template.login||ajaxify.data.template.register||config.hasOwnProperty("openDraftsOnPageLoad")&&!config.openDraftsOnPageLoad)return;const t=a.getList("available"),e=a.getList("open");t.length&&t.forEach(function(o){if(!o||e.includes(o))return;const n=a.get(o);if(!n||!n.text&&!n.title){a.removeFromDraftList("available",o),a.removeFromDraftList("open",o);return}u(o,n)})};function u(t,e){const n=t.split(":")[1];parseInt(app.user.uid,10)===parseInt(n,10)&&Promise.all([r.e(20056),r.e(23662),r.e(65285),r.e(40559),r.e(449),r.e(5785),r.e(36159)]).then(function(){var s=[r(71431)];(function(i){e.action==="topics.post"?i.newTopic({save_id:e.save_id,cid:e.cid,handle:app.user&&app.user.uid?void 0:utils.escapeHTML(e.handle),title:utils.escapeHTML(e.title),body:e.text,tags:String(e.tags||"").split(",")}):e.action==="posts.reply"?m.get("/topics/"+e.tid,{},function(f,d){if(f)return y.error(f);i.newReply({save_id:e.save_id,tid:e.tid,toPid:e.toPid,title:d.title,body:e.text})}):e.action==="posts.edit"&&i.editPost({save_id:e.save_id,pid:e.pid,title:e.title?utils.escapeHTML(e.title):void 0,body:e.text})}).apply(null,s)}).catch(r.oe)}function c(t){var e;try{e=window[t];var o="__storage_test__";return e.setItem(o,o),e.removeItem(o),!0}catch(n){return n instanceof DOMException&&(n.code===22||n.code===1014||n.name==="QuotaExceededError"||n.name==="NS_ERROR_DOM_QUOTA_REACHED")&&e&&e.length!==0}}return a}.apply(S,g),h!==void 0&&(A.exports=h)},24187:(A,S,r)=>{"use strict";var g,h;g=[r(64061)],h=function(){const m={};m.show=function(l,u){const c=l.hasOwnProperty("fileSize")&&l.fileSize!==void 0?parseInt(l.fileSize,10):!1;app.parseAndTranslate("modals/upload-file",{showHelp:l.hasOwnProperty("showHelp")&&l.showHelp!==void 0?l.showHelp:!0,fileSize:c,title:l.title||"[[global:upload-file]]",description:l.description||"",button:l.button||"[[global:upload]]",accept:l.accept?l.accept.replace(/,/g,", "):""},function(t){t.modal("show"),t.on("hidden.bs.modal",function(){t.remove()});const e=t.find("#uploadForm");e.attr("action",l.route),e.find("#params").val(JSON.stringify(l.params)),t.find("#fileUploadSubmitBtn").on("click",function(){$(this).addClass("disabled"),e.submit()}),e.submit(function(){return y(t,c,u),!1})})},m.hideAlerts=function(l){$(l).find("#alert-status, #alert-success, #alert-error, #upload-progress-box").addClass("hide")};function y(l,u,c){a(l,"status","[[uploads:uploading-file]]"),l.find("#upload-progress-bar").css("width","0%"),l.find("#upload-progress-box").show().removeClass("hide");const t=l.find("#fileInput");if(!t.val())return a(l,"error","[[uploads:select-file-to-upload]]");if(!E(t[0],u))return a(l,"error","[[error:file-too-big, "+u+"]]");m.ajaxSubmit(l,c)}function a(l,u,c){m.hideAlerts(l),u==="error"&&l.find("#fileUploadSubmitBtn").removeClass("disabled"),c=c.replace(/&#44/g,","),l.find("#alert-"+u).translateText(c).removeClass("hide")}m.ajaxSubmit=function(l,u){l.find("#uploadForm").ajaxSubmit({headers:{"x-csrf-token":config.csrf_token},error:function(t){t=p(t),a(l,"error",t.responseJSON?.status?.message||t.responseJSON?.error||`[[error:upload-error-fallback, ${t.status} ${t.statusText}]]`)},uploadProgress:function(t,e,o,n){l.find("#upload-progress-bar").css("width",n+"%")},success:function(t){let e=p(t);t.hasOwnProperty("response")&&t.hasOwnProperty("status")&&t.status.code==="ok"&&(e=t.response.images),u(e[0].url),a(l,"success","[[uploads:upload-success]]"),setTimeout(function(){m.hideAlerts(l),l.modal("hide")},750)}})};function p(l){if(typeof l=="string")try{return JSON.parse(l)}catch{return{error:"[[error:parse-error]]"}}return l}function E(l,u){return window.FileReader&&u?l.files[0].size<=u*1e3:!0}return m}.apply(S,g),h!==void 0&&(A.exports=h)},36159:(A,S,r)=>{"use strict";var g,h;g=[r(49897),r(40027),r(29930),r(24187),r(81335),r(17459),r(65285)],h=function(m,y,a,p,E,l){const u={};return u.get=c=>m.get(`/topics/${c}/thumbs`,{thumbsOnly:1}),u.getByPid=c=>m.get(`/posts/${encodeURIComponent(c)}`,{}).then(t=>u.get(t.tid)),u.delete=(c,t)=>m.del(`/topics/${c}/thumbs`,{path:t}),u.deleteAll=c=>{u.get(c).then(t=>{Promise.all(t.map(e=>u.delete(c,e.url)))})},u.upload=c=>new Promise(t=>{p.show({title:"[[topic:composer.thumb-title]]",method:"put",route:config.relative_path+`/api/v3/topics/${c}/thumbs`},function(e){t(e)})}),u.modal={},u.modal.open=function(c){const{id:t,pid:e}=c;let{modal:o}=c,n;return new Promise(s=>{Promise.all([u.get(t),e?u.getByPid(e):[]]).then(i=>new Promise(f=>{const d=i.reduce((b,v)=>b.concat(v));n=d.length,f(d)})).then(i=>E.render("modals/topic-thumbs",{thumbs:i})).then(i=>{o?l.translate(i,function(f){o.find(".bootbox-body").html(f),u.modal.handleSort({modal:o,numThumbs:n})}):(o=y.dialog({title:"[[modules:thumbs.modal.title]]",message:i,onEscape:!0,backdrop:!0,buttons:{add:{label:' [[modules:thumbs.modal.add]]',className:"btn-success",callback:()=>(u.upload(t).then(()=>{u.modal.open({...c,modal:o}),Promise.all([r.e(20056),r.e(40559),r.e(449),r.e(5785),r.e(52185)]).then(function(){var f=[r(71431)];(d=>{d.updateThumbCount(t,$(`[component="composer"][data-uuid="${t}"]`)),s()}).apply(null,f)}).catch(r.oe)}),!1)},close:{label:"[[global:close]]",className:"btn-primary"}}}),u.modal.handleDelete({...c,modal:o}),u.modal.handleSort({modal:o,numThumbs:n}))})})},u.modal.handleDelete=c=>{const t=c.modal.get(0),{id:e}=c;t.addEventListener("click",o=>{o.target.closest('button[data-action="remove"]')&&y.confirm("[[modules:thumbs.modal.confirm-remove]]",n=>{if(!n)return;const s=o.target.closest("[data-id]").getAttribute("data-id"),i=o.target.closest("[data-path]").getAttribute("data-path");m.del(`/topics/${s}/thumbs`,{path:i}).then(()=>{u.modal.open(c),Promise.all([r.e(20056),r.e(40559),r.e(449),r.e(5785),r.e(52185)]).then(function(){var f=[r(71431)];(d=>{d.updateThumbCount(e,$(`[component="composer"][data-uuid="${e}"]`))}).apply(null,f)}).catch(r.oe)}).catch(a.error)})})},u.modal.handleSort=({modal:c,numThumbs:t})=>{if(t>1){const e=c.find(".topic-thumbs-modal");e.sortable({items:"[data-id]"}),e.on("sortupdate",u.modal.handleSortChange)}},u.modal.handleSortChange=(c,t)=>{const e=t.item.get(0).parentNode.querySelectorAll("[data-id]");Array.from(e).forEach((o,n)=>{const s=o.getAttribute("data-id");let i=o.getAttribute("data-path");i=i.replace(new RegExp(`^${config.upload_url}`),""),m.put(`/topics/${s}/thumbs/order`,{path:i,order:n}).catch(a.error)})},u}.apply(S,g),h!==void 0&&(A.exports=h)},49897:(A,S,r)=>{"use strict";r.r(S),r.d(S,{del:()=>o,get:()=>l,head:()=>u,patch:()=>t,post:()=>c,put:()=>e});var g=r(91749),h=r.n(g),m=r(40027),y=r.n(m);const a=config.relative_path+"/api/v3";async function p(n,s){if(n.url=n.url.startsWith("/api")?config.relative_path+n.url:a+n.url,typeof s=="function"){E(n).then(i=>s(null,i),i=>s(i));return}try{return await E(n)}catch(i){if(i.message==="A valid login session was not found. Please log in and try again."){const{url:f}=await(0,g.fire)("filter:admin.reauth",{url:"login"});return(0,m.confirm)("[[error:api.reauth-required]]",d=>{d&&ajaxify.go(f)})}throw i}}async function E(n){const{url:s}=n;delete n.url,n.data&&!(n.data instanceof FormData)&&(n.data=JSON.stringify(n.data||{}),n.headers["content-type"]="application/json; charset=utf-8"),{options:n}=await(0,g.fire)("filter:api.options",{options:n}),n.data&&(n.body=n.data,delete n.data);const i=await fetch(s,n),{headers:f}=i;if(f.get("x-redirect"))return E({url:f.get("x-redirect"),...n});const d=f.get("content-type"),b=d&&d.startsWith("application/json");let v;if(n.method!=="HEAD"&&(b?v=await i.json():v=await i.text()),!i.ok)throw v?new Error(b?v.status.message:v):new Error(i.statusText);return b&&v&&v.hasOwnProperty("status")&&v.hasOwnProperty("response")?v.response:v}function l(n,s,i){return p({url:n+(s&&Object.keys(s).length?"?"+$.param(s):"")},i)}function u(n,s,i){return p({url:n+(s&&Object.keys(s).length?"?"+$.param(s):""),method:"HEAD"},i)}function c(n,s,i){return p({url:n,method:"POST",data:s,headers:{"x-csrf-token":config.csrf_token}},i)}function t(n,s,i){return p({url:n,method:"PATCH",data:s,headers:{"x-csrf-token":config.csrf_token}},i)}function e(n,s,i){return p({url:n,method:"PUT",data:s,headers:{"x-csrf-token":config.csrf_token}},i)}function o(n,s,i){return p({url:n,method:"DELETE",data:s,headers:{"x-csrf-token":config.csrf_token}},i)}},74566:(A,S,r)=>{A.exports=r(12236)}}]);