diff --git a/frontend/__snapshots__/main.test.ts.snap b/frontend/__snapshots__/main.test.ts.snap index 1c69c5e..eebe6e1 100644 --- a/frontend/__snapshots__/main.test.ts.snap +++ b/frontend/__snapshots__/main.test.ts.snap @@ -2,7 +2,7 @@ exports[`mount app 1`] = ` "
Comments (0)
-
0
+
" `; diff --git a/frontend/components/CommentCount.vue b/frontend/components/CommentCount.vue index 21931cb..e1f608b 100644 --- a/frontend/components/CommentCount.vue +++ b/frontend/components/CommentCount.vue @@ -24,7 +24,10 @@ - --> diff --git a/osis_comment/static/osis_comment/osis-comment.umd.min.js b/osis_comment/static/osis_comment/osis-comment.umd.min.js index 77256c3..292968e 100644 --- a/osis_comment/static/osis_comment/osis-comment.umd.min.js +++ b/osis_comment/static/osis_comment/osis-comment.umd.min.js @@ -1,5 +1,5 @@ -(function(a,l){typeof exports=="object"&&typeof module<"u"?l(require("@vue/runtime-dom"),require("vue-i18n"),require("vue")):typeof define=="function"&&define.amd?define(["@vue/runtime-dom","vue-i18n","vue"],l):(a=typeof globalThis<"u"?globalThis:a||self,l(a.Vue,a.VueI18n,a.Vue))})(this,function(a,l,n){"use strict";var se=Object.defineProperty;var le=(a,l,n)=>l in a?se(a,l,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[l]=n;var u=(a,l,n)=>(le(a,typeof l!="symbol"?l+"":l,n),n);const C={thread:{title:e=>{const{normalize:t}=e;return t(["Comments"])},add_comment:e=>{const{normalize:t}=e;return t(["Add"])},previous:e=>{const{normalize:t}=e;return t(["Previous page"])},next:e=>{const{normalize:t}=e;return t(["Next page"])},sort:e=>{const{normalize:t}=e;return t(["sort"])}},entry:{anonymous:e=>{const{normalize:t}=e;return t(["Anonymous"])},authored_date:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["on ",o(r("date"))," at ",o(r("time"))])},edit_comment:e=>{const{normalize:t}=e;return t(["Edit"])},save_comment:e=>{const{normalize:t}=e;return t(["Save"])},delete_comment:e=>{const{normalize:t}=e;return t(["Delete"])},cancel_edit:e=>{const{normalize:t}=e;return t(["Annuler"])},placeholder:e=>{const{normalize:t}=e;return t(["Your comment"])}},error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Error: ",o(r("error"))])},request_error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Request error: ",o(r("error"))])}},$={thread:{title:e=>{const{normalize:t}=e;return t(["Commentaires"])},add_comment:e=>{const{normalize:t}=e;return t(["Ajouter"])},previous:e=>{const{normalize:t}=e;return t(["Page précédente"])},next:e=>{const{normalize:t}=e;return t(["Page suivante"])},sort:e=>{const{normalize:t}=e;return t(["trier"])}},entry:{anonymous:e=>{const{normalize:t}=e;return t(["Anonyme"])},authored_date:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["le ",o(r("date"))," à ",o(r("time"))])},edit_comment:e=>{const{normalize:t}=e;return t(["Modifier"])},save_comment:e=>{const{normalize:t}=e;return t(["Enregistrer"])},delete_comment:e=>{const{normalize:t}=e;return t(["Supprimer"])},cancel_edit:e=>{const{normalize:t}=e;return t(["Annuler"])},placeholder:e=>{const{normalize:t}=e;return t(["Votre commentaire"])}},error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Erreur: ",o(r("error"))])},request_error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Erreur HTTP: ",o(r("error"))])}},S=l.createI18n({locale:document.documentElement.lang||"en",messages:{en:C,fr:$}});class g{constructor({uuid:t,comment:o,author:r,tags:i,extra_data:c,links:d,created_at:s,modified_at:m}){u(this,"uuid");u(this,"comment");u(this,"author");u(this,"tags");u(this,"extra_data");u(this,"links");u(this,"created_at");u(this,"modified_at");this.uuid=t,this.comment=o,this.author=r,this.tags=i,this.extra_data=c,this.links=d,this.created_at=new Date(s),this.modified_at=new Date(m)}}/** +(function(a,l){typeof exports=="object"&&typeof module<"u"?l(require("@vue/runtime-dom"),require("vue-i18n"),require("vue")):typeof define=="function"&&define.amd?define(["@vue/runtime-dom","vue-i18n","vue"],l):(a=typeof globalThis<"u"?globalThis:a||self,l(a.Vue,a.VueI18n,a.Vue))})(this,function(a,l,n){"use strict";var se=Object.defineProperty;var le=(a,l,n)=>l in a?se(a,l,{enumerable:!0,configurable:!0,writable:!0,value:n}):a[l]=n;var u=(a,l,n)=>(le(a,typeof l!="symbol"?l+"":l,n),n);const C={thread:{title:e=>{const{normalize:t}=e;return t(["Comments"])},add_comment:e=>{const{normalize:t}=e;return t(["Add"])},previous:e=>{const{normalize:t}=e;return t(["Previous page"])},next:e=>{const{normalize:t}=e;return t(["Next page"])},sort:e=>{const{normalize:t}=e;return t(["sort"])}},entry:{anonymous:e=>{const{normalize:t}=e;return t(["Anonymous"])},authored_date:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["on ",o(r("date"))," at ",o(r("time"))])},edit_comment:e=>{const{normalize:t}=e;return t(["Edit"])},save_comment:e=>{const{normalize:t}=e;return t(["Save"])},delete_comment:e=>{const{normalize:t}=e;return t(["Delete"])},cancel_edit:e=>{const{normalize:t}=e;return t(["Annuler"])},placeholder:e=>{const{normalize:t}=e;return t(["Your comment"])}},error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Error: ",o(r("error"))])},request_error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Request error: ",o(r("error"))])}},$={thread:{title:e=>{const{normalize:t}=e;return t(["Commentaires"])},add_comment:e=>{const{normalize:t}=e;return t(["Ajouter"])},previous:e=>{const{normalize:t}=e;return t(["Page précédente"])},next:e=>{const{normalize:t}=e;return t(["Page suivante"])},sort:e=>{const{normalize:t}=e;return t(["trier"])}},entry:{anonymous:e=>{const{normalize:t}=e;return t(["Anonyme"])},authored_date:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["le ",o(r("date"))," à ",o(r("time"))])},edit_comment:e=>{const{normalize:t}=e;return t(["Modifier"])},save_comment:e=>{const{normalize:t}=e;return t(["Enregistrer"])},delete_comment:e=>{const{normalize:t}=e;return t(["Supprimer"])},cancel_edit:e=>{const{normalize:t}=e;return t(["Annuler"])},placeholder:e=>{const{normalize:t}=e;return t(["Votre commentaire"])}},error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Erreur: ",o(r("error"))])},request_error:e=>{const{normalize:t,interpolate:o,named:r}=e;return t(["Erreur HTTP: ",o(r("error"))])}},S=l.createI18n({locale:document.documentElement.lang||"en",messages:{en:C,fr:$}});class y{constructor({uuid:t,comment:o,author:r,tags:i,extra_data:c,links:d,created_at:s,modified_at:m}){u(this,"uuid");u(this,"comment");u(this,"author");u(this,"tags");u(this,"extra_data");u(this,"links");u(this,"created_at");u(this,"modified_at");this.uuid=t,this.comment=o,this.author=r,this.tags=i,this.extra_data=c,this.links=d,this.created_at=new Date(s),this.modified_at=new Date(m)}}/** * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md. - */function z(e,t,o){var r=document.head||document.getElementsByTagName("head")[0],i=document.createElement("script");typeof t=="function"&&(o=t,t={}),t=t||{},o=o||function(){},i.type=t.type||"text/javascript",i.charset=t.charset||"utf8",i.async="async"in t?!!t.async:!0,i.src=e,t.attrs&&b(i,t.attrs),t.text&&(i.text=String(t.text));var c="onload"in i?y:T;c(i,o),i.onload||y(i,o),r.appendChild(i)}function b(e,t){for(var o in t)e.setAttribute(o,t[o])}function y(e,t){e.onload=function(){this.onerror=this.onload=null,t(null,e)},e.onerror=function(){this.onerror=this.onload=null,t(new Error("Failed to load "+this.src),e)}}function T(e,t){e.onreadystatechange=function(){this.readyState!="complete"&&this.readyState!="loaded"||(this.onreadystatechange=null,t(null,e))}}var p;function h(e,t){return"CKEDITOR"in window?Promise.resolve(CKEDITOR):typeof e!="string"||e.length<1?Promise.reject(new TypeError("CKEditor URL must be a non-empty string.")):(p||(p=h.scriptLoader(e).then(function(o){return t&&t(o),o})),p)}h.scriptLoader=function(e){return new Promise(function(t,o){z(e,function(r){if(p=void 0,r)return o(r);if(!window.CKEDITOR)return o(new Error("Script loaded from editorUrl doesn't provide CKEDITOR namespace."));t(CKEDITOR)})})};function B(e,t){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r;return function(){clearTimeout(r);for(var i=arguments.length,c=new Array(i),d=0;d["classic","inline"].includes(e)},editorUrl:{type:String,default:"https://cdn.ckeditor.com/4.17.2/standard-all/ckeditor.js"},config:{type:Object,default:()=>{}},tagName:{type:String,default:"textarea"},readOnly:{type:Boolean,default:null},throttle:{type:Number,default:80}},mounted(){h(this.editorUrl,e=>{this.$emit("namespaceloaded",e)}).then(()=>{if(this.$_destroyed)return;const e=this.prepareConfig(),t=this.type==="inline"?"inline":"replace",o=this.$el.firstElementChild;CKEDITOR[t](o,e)})},data(){return{readyEmitted:!1}},beforeDestroy(){this.instance&&this.instance.destroy(),this.$_destroyed=!0},watch:{modelValue(e){this.instance&&this.instance.getData()!==e&&this.instance.setData(e)},readOnly(e){this.instance&&this.instance.setReadOnly(e)}},methods:{prepareConfig(){const e=this.config||{};e.on=e.on||{},e.delayIfDetached===void 0&&(e.delayIfDetached=!0),this.readOnly!==null&&(e.readOnly=this.readOnly);const t=e.on.instanceReady;return e.on.instanceReady=o=>{this.instance=o.editor,this.$nextTick().then(()=>{this.prepareComponentData(),t&&t(o)})},e},prepareComponentData(){const e=this.modelValue;this.instance.fire("lockSnapshot"),this.instance.setData(e,{callback:()=>{this.$_setUpEditorEvents();const t=this.instance.getData();e!==t?(this.readyEmitted||(this.$emit("ready",this.instance),console.log("Emitting Ready"),this.readyEmitted=!0),this.$emit("update:modelValue",t)):this.readyEmitted||(this.$emit("ready",this.instance),console.log("Emitting Ready"),this.readyEmitted=!0),this.instance.fire("unlockSnapshot")}})},$_setUpEditorEvents(){const e=this.instance,t=B(o=>{const r=e.getData();this.modelValue!==r&&this.$emit("update:modelValue",r,o,e)},this.throttle);e.on("change",t),e.on("focus",o=>{this.$emit("focus",o,e)}),e.on("blur",o=>{this.$emit("blur",o,e)})}}},N=n.defineComponent({name:"CommentEditor",components:{ckeditor:V},props:{richTextConfig:{type:Object,default:()=>{}},defaultValue:{type:String,default:""}},emits:["cancel","submit"],data:function(){return{value:this.defaultValue}}}),de="",f=(e,t)=>{const o=e.__vccOpts||e;for(const[r,i]of t)o[r]=i;return o},w=["placeholder"],D={class:"text-right btn-actions"};function O(e,t,o,r,i,c){const d=n.resolveComponent("ckeditor");return n.openBlock(),n.createElementBlock("div",null,[e.richTextConfig?(n.openBlock(),n.createBlock(d,{key:1,modelValue:e.value,"onUpdate:modelValue":t[1]||(t[1]=s=>e.value=s),config:e.richTextConfig},null,8,["modelValue","config"])):n.withDirectives((n.openBlock(),n.createElementBlock("textarea",{key:0,"onUpdate:modelValue":t[0]||(t[0]=s=>e.value=s),class:"form-control",placeholder:e.$t("entry.placeholder")},null,8,w)),[[n.vModelText,e.value]]),n.createElementVNode("div",D,[n.createElementVNode("button",{class:"btn btn-sm btn-primary",onClick:t[2]||(t[2]=s=>e.$emit("submit",e.value))},n.toDisplayString(e.$t("entry.save_comment")),1),n.createElementVNode("button",{class:"btn btn-sm btn-default",onClick:t[3]||(t[3]=s=>e.$emit("cancel"))},n.toDisplayString(e.$t("entry.cancel_edit")),1)])])}const E=f(N,[["render",O]]),A=n.defineComponent({name:"CommentEntry",components:{CommentEditor:E},props:{richTextConfig:{type:Object,default:()=>{}},entry:{type:g,required:!0}},emits:["edit","delete"],data:function(){return{isEditing:!1}}}),ce="",P={class:"panel-body clearfix"},R={class:"comment-authoring"},U={class:"pull-right comment-actions"},q=["title"],j=[n.createElementVNode("i",{class:"fas fa-pencil"},null,-1)],I=["title"],L=[n.createElementVNode("i",{class:"fas fa-times"},null,-1)],M={key:0,class:"comment-content"},F=["innerHTML"],H=["innerHTML"];function K(e,t,o,r,i,c){const d=n.resolveComponent("CommentEditor");return n.openBlock(),n.createElementBlock("div",P,[n.createElementVNode("div",R,[n.createElementVNode("strong",null,n.toDisplayString(e.entry.author||e.$t("entry.anonymous")),1),n.createTextVNode(" "+n.toDisplayString(e.$t("entry.authored_date",{date:e.entry.modified_at.toLocaleDateString(),time:e.entry.modified_at.toLocaleTimeString()})),1)]),e.isEditing?(n.openBlock(),n.createBlock(d,{key:1,"default-value":e.entry.comment,"rich-text-config":e.richTextConfig,onSubmit:t[2]||(t[2]=s=>e.$emit("edit",e.entry.links.edit,s)),onCancel:t[3]||(t[3]=s=>e.isEditing=!1)},null,8,["default-value","rich-text-config"])):(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createElementVNode("div",U,[typeof e.entry.links.edit=="string"?(n.openBlock(),n.createElementBlock("button",{key:0,class:"btn btn-sm btn-primary",title:e.$t("entry.edit_comment"),onClick:t[0]||(t[0]=s=>e.isEditing=!0)},j,8,q)):n.createCommentVNode("",!0),typeof e.entry.links.delete=="string"?(n.openBlock(),n.createElementBlock("button",{key:1,class:"btn btn-sm btn-danger",title:e.$t("entry.delete_comment"),onClick:t[1]||(t[1]=s=>e.$emit("delete",e.entry.links.delete))},L,8,I)):n.createCommentVNode("",!0)]),e.richTextConfig?(n.openBlock(),n.createElementBlock("div",{key:1,class:"comment-content",innerHTML:e.entry.comment},null,8,H)):(n.openBlock(),n.createElementBlock("div",M,[n.createElementVNode("p",{innerHTML:e.entry.comment.replace(/\n/g,"
")},null,8,F)]))],64))])}const J=f(A,[["render",K]]);function X(e){return{all:e=e||new Map,on:function(t,o){var r=e.get(t);r?r.push(o):e.set(t,[o])},off:function(t,o){var r=e.get(t);r&&(o?r.splice(r.indexOf(o)>>>0,1):e.set(t,[]))},emit:function(t,o){var r=e.get(t);r&&r.slice().map(function(i){i(o)}),(r=e.get("*"))&&r.slice().map(function(i){i(t,o)})}}}const k=X(),Y=n.defineComponent({name:"CommentThread",components:{CommentEditor:E,CommentEntry:J},props:{url:{type:String,required:!0},tags:{type:Array,default:()=>[]},headerTitle:{type:String,default:""},pageSize:{type:Number,default:10},defaultSort:{type:String,default:"-modified_at"},panelClass:{type:String,default:"default"},richTextConfig:{type:Object,default:()=>{}}},data(){const e=new URLSearchParams({limit:String(this.pageSize),sort:"-modified_at"});this.tags.length&&e.append("tags",this.tags.join(","));const t=document.querySelector("[name=csrfmiddlewaretoken]");if(!(t instanceof HTMLInputElement))throw new Error("Please include {% csrf_token %} in your page.");return{entries:[],error:"",total:null,createUrl:null,currentUrl:`${this.url}?${e.toString()}`,currentSort:"-modified_at",previousPage:null,nextPage:null,loading:!0,isAdding:!1,csrfToken:t.value}},computed:{isAscendedSort:function(){return this.currentSort==="modified_at"}},mounted(){this.loadEntries()},methods:{async changeSort(){const e=new URL(window.location.origin+this.currentUrl),t=new URLSearchParams(e.search);this.currentSort=this.isAscendedSort?"-modified_at":"modified_at",t.set("sort",this.currentSort),this.currentUrl=`${e.pathname}?${t.toString()}`,await this.loadEntries()},async loadEntries(){const e=await this.doRequest(this.currentUrl,{},!1);e&&(this.createUrl=typeof e.create=="string"?e.create:null,this.previousPage=e.previous,this.nextPage=e.next,this.total=e.count,this.entries=e.results.map(t=>new g(t)))},async createEntry(e){await this.doRequest(this.createUrl,{method:"POST",body:JSON.stringify({comment:e,tags:this.tags})}),this.isAdding=!1},async editEntry(e,t){await this.doRequest(e,{method:"PUT",body:JSON.stringify({comment:t})})},async deleteEntry(e){await this.doRequest(e,{method:"DELETE"})},async doRequest(e,t,o=!0){this.loading=!0,this.error="";try{const r=await fetch(e,{mode:"same-origin",headers:{"Content-Type":"application/json;charset=utf-8","X-CSRFToken":this.csrfToken},...t});if(r.status>=200&&r.status<300)return o&&(await this.loadEntries(),k.emit("REFRESH_COMMENTS_EVENT")),this.loading=!1,r.json();this.error=r.statusText}catch(r){this.error=r.message}this.loading=!1}}}),pe="",G={class:"panel-heading clearfix"},Q={key:0,class:"spinner"},W={key:1,class:"panel-body text-danger"},Z={key:3,class:"panel-body"},v=n.createElementVNode("i",{class:"fas fa-chevron-left"},null,-1),x=n.createElementVNode("i",{class:"fas fa-chevron-right"},null,-1),ee=n.createElementVNode("i",{class:"fas fa-plus"},null,-1);function te(e,t,o,r,i,c){const d=n.resolveComponent("CommentEntry"),s=n.resolveComponent("CommentEditor");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["comment-thread panel",`panel-${e.panelClass}`])},[n.createElementVNode("div",G,[n.createTextVNode(n.toDisplayString(e.headerTitle||e.$t("thread.title"))+" ",1),e.total!=null?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode(" ("+n.toDisplayString(e.total)+") ",1)],64)):n.createCommentVNode("",!0),n.createElementVNode("button",{class:"btn btn-default btn-sm pull-right",onClick:t[0]||(t[0]=m=>e.changeSort())},[n.createTextVNode(n.toDisplayString(e.$t("thread.sort"))+" ",1),n.createElementVNode("i",{class:n.normalizeClass(["fas",e.isAscendedSort?"fa-sort-up":"fa-sort-down"])},null,2)])]),e.loading?(n.openBlock(),n.createElementBlock("span",Q)):e.error?(n.openBlock(),n.createElementBlock("div",W,n.toDisplayString(e.error),1)):(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:2},n.renderList(e.entries,m=>(n.openBlock(),n.createBlock(d,{key:m.uuid,entry:m,"rich-text-config":e.richTextConfig,onEdit:e.editEntry,onDelete:e.deleteEntry},null,8,["entry","rich-text-config","onEdit","onDelete"]))),128)),e.nextPage||e.previousPage||e.createUrl?(n.openBlock(),n.createElementBlock("div",Z,[e.previousPage?(n.openBlock(),n.createElementBlock("button",{key:0,class:"btn btn-sm btn-default",onClick:t[1]||(t[1]=m=>{e.previousPage&&(e.currentUrl=e.previousPage),e.loadEntries()})},[v,n.createTextVNode(" "+n.toDisplayString(e.$t("thread.previous")),1)])):n.createCommentVNode("",!0),e.nextPage?(n.openBlock(),n.createElementBlock("button",{key:1,class:"btn btn-sm btn-default",onClick:t[2]||(t[2]=m=>{e.nextPage&&(e.currentUrl=e.nextPage),e.loadEntries()})},[n.createTextVNode(n.toDisplayString(e.$t("thread.next"))+" ",1),x])):n.createCommentVNode("",!0),e.createUrl?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[e.isAdding?(n.openBlock(),n.createBlock(s,{key:1,"rich-text-config":e.richTextConfig,onSubmit:e.createEntry,onCancel:t[4]||(t[4]=m=>e.isAdding=!e.isAdding)},null,8,["rich-text-config","onSubmit"])):(n.openBlock(),n.createElementBlock("button",{key:0,class:"btn btn-sm btn-primary pull-right",onClick:t[3]||(t[3]=m=>e.isAdding=!e.isAdding)},[ee,n.createTextVNode(" "+n.toDisplayString(e.$t("thread.add_comment")),1)]))],64)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)],2)}const ne=f(Y,[["render",te]]),oe=n.defineComponent({name:"CommentCount",props:{url:{type:String,required:!0}},data:function(){return{value:null,loading:!0,error:""}},mounted(){this.loadCount(),k.on("REFRESH_COMMENTS_EVENT",()=>void this.loadCount())},methods:{async loadCount(){const t=await(await fetch(this.url,{mode:"same-origin",headers:{"Content-Type":"application/json;charset=utf-8"}})).json();this.value=t.count}}}),fe="",re={class:"badge badge-compteur"};function ie(e,t,o,r,i,c){return n.openBlock(),n.createElementBlock("div",re,n.toDisplayString(e.value),1)}const ae=f(oe,[["render",ie]]);function _(){document.querySelectorAll(".comment-viewer:not([data-v-app])").forEach(e=>{const t={url:"",...e.dataset};typeof e.dataset.pageSize<"u"&&(t.pageSize=Number.parseInt(e.dataset.pageSize)),typeof e.dataset.tags<"u"&&(t.tags=e.dataset.tags.split(",")),typeof e.dataset.richTextConfig<"u"&&(t.richTextConfig=JSON.parse(e.dataset.richTextConfig)),a.createApp(ne,t).use(S).mount(e)}),document.querySelectorAll(".comment-count:not([data-v-app])").forEach(e=>{const t={url:"",...e.dataset};a.createApp(ae,t).mount(e)})}_(),new MutationObserver(_).observe(document,{childList:!0,subtree:!0})}); + */function z(e,t,o){var r=document.head||document.getElementsByTagName("head")[0],i=document.createElement("script");typeof t=="function"&&(o=t,t={}),t=t||{},o=o||function(){},i.type=t.type||"text/javascript",i.charset=t.charset||"utf8",i.async="async"in t?!!t.async:!0,i.src=e,t.attrs&&b(i,t.attrs),t.text&&(i.text=String(t.text));var c="onload"in i?g:T;c(i,o),i.onload||g(i,o),r.appendChild(i)}function b(e,t){for(var o in t)e.setAttribute(o,t[o])}function g(e,t){e.onload=function(){this.onerror=this.onload=null,t(null,e)},e.onerror=function(){this.onerror=this.onload=null,t(new Error("Failed to load "+this.src),e)}}function T(e,t){e.onreadystatechange=function(){this.readyState!="complete"&&this.readyState!="loaded"||(this.onreadystatechange=null,t(null,e))}}var p;function h(e,t){return"CKEDITOR"in window?Promise.resolve(CKEDITOR):typeof e!="string"||e.length<1?Promise.reject(new TypeError("CKEditor URL must be a non-empty string.")):(p||(p=h.scriptLoader(e).then(function(o){return t&&t(o),o})),p)}h.scriptLoader=function(e){return new Promise(function(t,o){z(e,function(r){if(p=void 0,r)return o(r);if(!window.CKEDITOR)return o(new Error("Script loaded from editorUrl doesn't provide CKEDITOR namespace."));t(CKEDITOR)})})};function B(e,t){var o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{},r;return function(){clearTimeout(r);for(var i=arguments.length,c=new Array(i),d=0;d["classic","inline"].includes(e)},editorUrl:{type:String,default:"https://cdn.ckeditor.com/4.17.2/standard-all/ckeditor.js"},config:{type:Object,default:()=>{}},tagName:{type:String,default:"textarea"},readOnly:{type:Boolean,default:null},throttle:{type:Number,default:80}},mounted(){h(this.editorUrl,e=>{this.$emit("namespaceloaded",e)}).then(()=>{if(this.$_destroyed)return;const e=this.prepareConfig(),t=this.type==="inline"?"inline":"replace",o=this.$el.firstElementChild;CKEDITOR[t](o,e)})},data(){return{readyEmitted:!1}},beforeDestroy(){this.instance&&this.instance.destroy(),this.$_destroyed=!0},watch:{modelValue(e){this.instance&&this.instance.getData()!==e&&this.instance.setData(e)},readOnly(e){this.instance&&this.instance.setReadOnly(e)}},methods:{prepareConfig(){const e=this.config||{};e.on=e.on||{},e.delayIfDetached===void 0&&(e.delayIfDetached=!0),this.readOnly!==null&&(e.readOnly=this.readOnly);const t=e.on.instanceReady;return e.on.instanceReady=o=>{this.instance=o.editor,this.$nextTick().then(()=>{this.prepareComponentData(),t&&t(o)})},e},prepareComponentData(){const e=this.modelValue;this.instance.fire("lockSnapshot"),this.instance.setData(e,{callback:()=>{this.$_setUpEditorEvents();const t=this.instance.getData();e!==t?(this.readyEmitted||(this.$emit("ready",this.instance),console.log("Emitting Ready"),this.readyEmitted=!0),this.$emit("update:modelValue",t)):this.readyEmitted||(this.$emit("ready",this.instance),console.log("Emitting Ready"),this.readyEmitted=!0),this.instance.fire("unlockSnapshot")}})},$_setUpEditorEvents(){const e=this.instance,t=B(o=>{const r=e.getData();this.modelValue!==r&&this.$emit("update:modelValue",r,o,e)},this.throttle);e.on("change",t),e.on("focus",o=>{this.$emit("focus",o,e)}),e.on("blur",o=>{this.$emit("blur",o,e)})}}},N=n.defineComponent({name:"CommentEditor",components:{ckeditor:V},props:{richTextConfig:{type:Object,default:()=>{}},defaultValue:{type:String,default:""}},emits:["cancel","submit"],data:function(){return{value:this.defaultValue}}}),de="",f=(e,t)=>{const o=e.__vccOpts||e;for(const[r,i]of t)o[r]=i;return o},w=["placeholder"],D={class:"text-right btn-actions"};function O(e,t,o,r,i,c){const d=n.resolveComponent("ckeditor");return n.openBlock(),n.createElementBlock("div",null,[e.richTextConfig?(n.openBlock(),n.createBlock(d,{key:1,modelValue:e.value,"onUpdate:modelValue":t[1]||(t[1]=s=>e.value=s),config:e.richTextConfig},null,8,["modelValue","config"])):n.withDirectives((n.openBlock(),n.createElementBlock("textarea",{key:0,"onUpdate:modelValue":t[0]||(t[0]=s=>e.value=s),class:"form-control",placeholder:e.$t("entry.placeholder")},null,8,w)),[[n.vModelText,e.value]]),n.createElementVNode("div",D,[n.createElementVNode("button",{class:"btn btn-sm btn-primary",onClick:t[2]||(t[2]=s=>e.$emit("submit",e.value))},n.toDisplayString(e.$t("entry.save_comment")),1),n.createElementVNode("button",{class:"btn btn-sm btn-default",onClick:t[3]||(t[3]=s=>e.$emit("cancel"))},n.toDisplayString(e.$t("entry.cancel_edit")),1)])])}const E=f(N,[["render",O]]),A=n.defineComponent({name:"CommentEntry",components:{CommentEditor:E},props:{richTextConfig:{type:Object,default:()=>{}},entry:{type:y,required:!0}},emits:["edit","delete"],data:function(){return{isEditing:!1}}}),ce="",P={class:"panel-body clearfix"},R={class:"comment-authoring"},U={class:"pull-right comment-actions"},q=["title"],j=[n.createElementVNode("i",{class:"fas fa-pencil"},null,-1)],I=["title"],L=[n.createElementVNode("i",{class:"fas fa-times"},null,-1)],M={key:0,class:"comment-content"},F=["innerHTML"],H=["innerHTML"];function K(e,t,o,r,i,c){const d=n.resolveComponent("CommentEditor");return n.openBlock(),n.createElementBlock("div",P,[n.createElementVNode("div",R,[n.createElementVNode("strong",null,n.toDisplayString(e.entry.author||e.$t("entry.anonymous")),1),n.createTextVNode(" "+n.toDisplayString(e.$t("entry.authored_date",{date:e.entry.modified_at.toLocaleDateString(),time:e.entry.modified_at.toLocaleTimeString()})),1)]),e.isEditing?(n.openBlock(),n.createBlock(d,{key:1,"default-value":e.entry.comment,"rich-text-config":e.richTextConfig,onSubmit:t[2]||(t[2]=s=>e.$emit("edit",e.entry.links.edit,s)),onCancel:t[3]||(t[3]=s=>e.isEditing=!1)},null,8,["default-value","rich-text-config"])):(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createElementVNode("div",U,[typeof e.entry.links.edit=="string"?(n.openBlock(),n.createElementBlock("button",{key:0,class:"btn btn-sm btn-primary",title:e.$t("entry.edit_comment"),onClick:t[0]||(t[0]=s=>e.isEditing=!0)},j,8,q)):n.createCommentVNode("",!0),typeof e.entry.links.delete=="string"?(n.openBlock(),n.createElementBlock("button",{key:1,class:"btn btn-sm btn-danger",title:e.$t("entry.delete_comment"),onClick:t[1]||(t[1]=s=>e.$emit("delete",e.entry.links.delete))},L,8,I)):n.createCommentVNode("",!0)]),e.richTextConfig?(n.openBlock(),n.createElementBlock("div",{key:1,class:"comment-content",innerHTML:e.entry.comment},null,8,H)):(n.openBlock(),n.createElementBlock("div",M,[n.createElementVNode("p",{innerHTML:e.entry.comment.replace(/\n/g,"
")},null,8,F)]))],64))])}const J=f(A,[["render",K]]);function X(e){return{all:e=e||new Map,on:function(t,o){var r=e.get(t);r?r.push(o):e.set(t,[o])},off:function(t,o){var r=e.get(t);r&&(o?r.splice(r.indexOf(o)>>>0,1):e.set(t,[]))},emit:function(t,o){var r=e.get(t);r&&r.slice().map(function(i){i(o)}),(r=e.get("*"))&&r.slice().map(function(i){i(t,o)})}}}const k=X(),Y=n.defineComponent({name:"CommentThread",components:{CommentEditor:E,CommentEntry:J},props:{url:{type:String,required:!0},tags:{type:Array,default:()=>[]},headerTitle:{type:String,default:""},pageSize:{type:Number,default:10},defaultSort:{type:String,default:"-modified_at"},panelClass:{type:String,default:"default"},richTextConfig:{type:Object,default:()=>{}}},data(){const e=new URLSearchParams({limit:String(this.pageSize),sort:"-modified_at"});this.tags.length&&e.append("tags",this.tags.join(","));const t=document.querySelector("[name=csrfmiddlewaretoken]");if(!(t instanceof HTMLInputElement))throw new Error("Please include {% csrf_token %} in your page.");return{entries:[],error:"",total:null,createUrl:null,currentUrl:`${this.url}?${e.toString()}`,currentSort:"-modified_at",previousPage:null,nextPage:null,loading:!0,isAdding:!1,csrfToken:t.value}},computed:{isAscendedSort:function(){return this.currentSort==="modified_at"}},mounted(){this.loadEntries()},methods:{async changeSort(){const e=new URL(window.location.origin+this.currentUrl),t=new URLSearchParams(e.search);this.currentSort=this.isAscendedSort?"-modified_at":"modified_at",t.set("sort",this.currentSort),this.currentUrl=`${e.pathname}?${t.toString()}`,await this.loadEntries()},async loadEntries(){const e=await this.doRequest(this.currentUrl,{},!1);e&&(this.createUrl=typeof e.create=="string"?e.create:null,this.previousPage=e.previous,this.nextPage=e.next,this.total=e.count,this.entries=e.results.map(t=>new y(t)))},async createEntry(e){await this.doRequest(this.createUrl,{method:"POST",body:JSON.stringify({comment:e,tags:this.tags})}),this.isAdding=!1},async editEntry(e,t){await this.doRequest(e,{method:"PUT",body:JSON.stringify({comment:t})})},async deleteEntry(e){await this.doRequest(e,{method:"DELETE"})},async doRequest(e,t,o=!0){this.loading=!0,this.error="";try{const r=await fetch(e,{mode:"same-origin",headers:{"Content-Type":"application/json;charset=utf-8","X-CSRFToken":this.csrfToken},...t});if(r.status>=200&&r.status<300)return o&&(await this.loadEntries(),k.emit("REFRESH_COMMENTS_EVENT")),this.loading=!1,r.json();this.error=r.statusText}catch(r){this.error=r.message}this.loading=!1}}}),pe="",G={class:"panel-heading clearfix"},Q={key:0,class:"spinner"},W={key:1,class:"panel-body text-danger"},Z={key:3,class:"panel-body"},v=n.createElementVNode("i",{class:"fas fa-chevron-left"},null,-1),x=n.createElementVNode("i",{class:"fas fa-chevron-right"},null,-1),ee=n.createElementVNode("i",{class:"fas fa-plus"},null,-1);function te(e,t,o,r,i,c){const d=n.resolveComponent("CommentEntry"),s=n.resolveComponent("CommentEditor");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["comment-thread panel",`panel-${e.panelClass}`])},[n.createElementVNode("div",G,[n.createTextVNode(n.toDisplayString(e.headerTitle||e.$t("thread.title"))+" ",1),e.total!=null?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode(" ("+n.toDisplayString(e.total)+") ",1)],64)):n.createCommentVNode("",!0),n.createElementVNode("button",{class:"btn btn-default btn-sm pull-right",onClick:t[0]||(t[0]=m=>e.changeSort())},[n.createTextVNode(n.toDisplayString(e.$t("thread.sort"))+" ",1),n.createElementVNode("i",{class:n.normalizeClass(["fas",e.isAscendedSort?"fa-sort-up":"fa-sort-down"])},null,2)])]),e.loading?(n.openBlock(),n.createElementBlock("span",Q)):e.error?(n.openBlock(),n.createElementBlock("div",W,n.toDisplayString(e.error),1)):(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:2},n.renderList(e.entries,m=>(n.openBlock(),n.createBlock(d,{key:m.uuid,entry:m,"rich-text-config":e.richTextConfig,onEdit:e.editEntry,onDelete:e.deleteEntry},null,8,["entry","rich-text-config","onEdit","onDelete"]))),128)),e.nextPage||e.previousPage||e.createUrl?(n.openBlock(),n.createElementBlock("div",Z,[e.previousPage?(n.openBlock(),n.createElementBlock("button",{key:0,class:"btn btn-sm btn-default",onClick:t[1]||(t[1]=m=>{e.previousPage&&(e.currentUrl=e.previousPage),e.loadEntries()})},[v,n.createTextVNode(" "+n.toDisplayString(e.$t("thread.previous")),1)])):n.createCommentVNode("",!0),e.nextPage?(n.openBlock(),n.createElementBlock("button",{key:1,class:"btn btn-sm btn-default",onClick:t[2]||(t[2]=m=>{e.nextPage&&(e.currentUrl=e.nextPage),e.loadEntries()})},[n.createTextVNode(n.toDisplayString(e.$t("thread.next"))+" ",1),x])):n.createCommentVNode("",!0),e.createUrl?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[e.isAdding?(n.openBlock(),n.createBlock(s,{key:1,"rich-text-config":e.richTextConfig,onSubmit:e.createEntry,onCancel:t[4]||(t[4]=m=>e.isAdding=!e.isAdding)},null,8,["rich-text-config","onSubmit"])):(n.openBlock(),n.createElementBlock("button",{key:0,class:"btn btn-sm btn-primary pull-right",onClick:t[3]||(t[3]=m=>e.isAdding=!e.isAdding)},[ee,n.createTextVNode(" "+n.toDisplayString(e.$t("thread.add_comment")),1)]))],64)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)],2)}const ne=f(Y,[["render",te]]),oe=n.defineComponent({name:"CommentCount",props:{url:{type:String,required:!0}},data:function(){return{value:null,loading:!0,error:""}},mounted(){this.loadCount(),k.on("REFRESH_COMMENTS_EVENT",()=>void this.loadCount())},methods:{async loadCount(){const t=await(await fetch(this.url,{mode:"same-origin",headers:{"Content-Type":"application/json;charset=utf-8"}})).json();this.value=t.count}}}),fe="",re={key:0,class:"badge badge-compteur"};function ie(e,t,o,r,i,c){return e.value!=0?(n.openBlock(),n.createElementBlock("div",re,n.toDisplayString(e.value),1)):n.createCommentVNode("",!0)}const ae=f(oe,[["render",ie]]);function _(){document.querySelectorAll(".comment-viewer:not([data-v-app])").forEach(e=>{const t={url:"",...e.dataset};typeof e.dataset.pageSize<"u"&&(t.pageSize=Number.parseInt(e.dataset.pageSize)),typeof e.dataset.tags<"u"&&(t.tags=e.dataset.tags.split(",")),typeof e.dataset.richTextConfig<"u"&&(t.richTextConfig=JSON.parse(e.dataset.richTextConfig)),a.createApp(ne,t).use(S).mount(e)}),document.querySelectorAll(".comment-count:not([data-v-app])").forEach(e=>{const t={url:"",...e.dataset};a.createApp(ae,t).mount(e)})}_(),new MutationObserver(_).observe(document,{childList:!0,subtree:!0})}); //# sourceMappingURL=osis-comment.umd.min.js.map diff --git a/osis_comment/static/osis_comment/osis-comment.umd.min.js.map b/osis_comment/static/osis_comment/osis-comment.umd.min.js.map index 656662f..d881cc9 100644 --- a/osis_comment/static/osis_comment/osis-comment.umd.min.js.map +++ b/osis_comment/static/osis_comment/osis-comment.umd.min.js.map @@ -1 +1 @@ -{"version":3,"file":"osis-comment.umd.min.js","sources":["../../../frontend/i18n.ts","../../../frontend/types.ts","../../../node_modules/ckeditor4-integrations-common/dist/index.esm.js","../../../frontend/components/ckeditor.js","../../../frontend/components/CommentEditor.vue","../../../frontend/components/CommentEntry.vue","../../../node_modules/mitt/dist/mitt.mjs","../../../frontend/event-bus.ts","../../../frontend/CommentThread.vue","../../../frontend/components/CommentCount.vue","../../../frontend/main.ts"],"sourcesContent":["/*\n *\n * OSIS stands for Open Student Information System. It's an application\n * designed to manage the core business of higher education institutions,\n * such as universities, faculties, institutes and professional schools.\n * The core business involves the administration of students, teachers,\n * courses, programs and so on.\n *\n * Copyright (C) 2015-2021 Université catholique de Louvain (http://www.uclouvain.be)\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * A copy of this license - GNU General Public License - is available\n * at the root of the source code of this program. If not,\n * see http://www.gnu.org/licenses/.\n *\n */\nimport {createI18n} from 'vue-i18n';\nimport en from \"./locales/en\";\nimport fr from \"./locales/fr\";\n\nexport const i18n = createI18n({\n locale: document.documentElement.lang || 'en',\n messages: {\n en,\n fr,\n },\n});\n","import type {CommentLinks, EntryRecord} from \"./interfaces\";\n\nexport class Entry {\n uuid: string;\n comment: string;\n author: string | null;\n tags: string[];\n extra_data: object;\n links: CommentLinks;\n\n created_at: Date;\n modified_at: Date;\n\n constructor(\n {\n uuid,\n comment,\n author,\n tags,\n extra_data,\n links,\n created_at,\n modified_at,\n }: EntryRecord,\n ) {\n this.uuid = uuid;\n this.comment = comment;\n this.author = author;\n this.tags = tags;\n this.extra_data = extra_data;\n this.links = links;\n this.created_at = new Date(created_at);\n this.modified_at = new Date(modified_at);\n }\n}\n","/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nfunction loadScript (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var script = document.createElement('script');\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n opts = opts || {};\n cb = cb || function () {};\n script.type = opts.type || 'text/javascript';\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true;\n script.src = src;\n if (opts.attrs) {\n setAttributes(script, opts.attrs);\n }\n if (opts.text) {\n script.text = String(opts.text);\n }\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd;\n onend(script, cb);\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n head.appendChild(script);\n}\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\nfunction stdOnEnd(script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null;\n cb(null, script);\n };\n script.onerror = function () {\n this.onerror = this.onload = null;\n cb(new Error('Failed to load ' + this.src), script);\n };\n}\nfunction ieOnEnd(script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') {\n return;\n }\n this.onreadystatechange = null;\n cb(null, script);\n };\n}\n\nvar promise;\nfunction getEditorNamespace(editorURL, onNamespaceLoaded) {\n if ('CKEDITOR' in window) {\n return Promise.resolve(CKEDITOR);\n }\n if (typeof editorURL !== 'string' || editorURL.length < 1) {\n return Promise.reject(new TypeError('CKEditor URL must be a non-empty string.'));\n }\n if (!promise) {\n promise = getEditorNamespace.scriptLoader(editorURL).then(function (res) {\n if (onNamespaceLoaded) {\n onNamespaceLoaded(res);\n }\n return res;\n });\n }\n return promise;\n}\ngetEditorNamespace.scriptLoader = function (editorURL) {\n return new Promise(function (scriptResolve, scriptReject) {\n loadScript(editorURL, function (err) {\n promise = undefined;\n if (err) {\n return scriptReject(err);\n } else if (!window.CKEDITOR) {\n return scriptReject(new Error('Script loaded from editorUrl doesn\\'t provide CKEDITOR namespace.'));\n }\n scriptResolve(CKEDITOR);\n });\n });\n};\n\nfunction debounce(fn, delay) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var cancel;\n return function () {\n clearTimeout(cancel);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n cancel = setTimeout(fn.bind.apply(fn, [context].concat(args)), delay);\n };\n}\n\nexport { debounce, getEditorNamespace };\n","/*\n *\n * OSIS stands for Open Student Information System. It's an application\n * designed to manage the core business of higher education institutions,\n * such as universities, faculties, institutes and professional schools.\n * The core business involves the administration of students, teachers,\n * courses, programs and so on.\n *\n * Copyright (C) 2015-2023 Université catholique de Louvain (http://www.uclouvain.be)\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * A copy of this license - GNU General Public License - is available\n * at the root of the source code of this program. If not,\n * see http://www.gnu.org/licenses/.\n *\n */\n\n/* global CKEDITOR */\n\n/**\n * This is taken from https://github.com/mayasabha/ckeditor4-vue3/blob/master/src/ckeditor.js\n * but as https://github.com/mayasabha/ckeditor4-vue3/issues/5\n * tree shaking is broken and the dist package ships with vue, hence we reproduce it in our own code\n */\n\n\nimport { h } from 'vue';\nimport { debounce, getEditorNamespace } from 'ckeditor4-integrations-common';\n\nexport default {\n\tname: 'ckeditor',\n\n\trender() {\n\t\treturn h( 'div', {}, [\n\t\t\th( this.tagName )\n\t\t] );\n\t},\n\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'classic',\n\t\t\tvalidator: type => [ 'classic', 'inline' ].includes( type )\n\t\t},\n\t\teditorUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: 'https://cdn.ckeditor.com/4.17.2/standard-all/ckeditor.js'\n\t\t},\n\t\tconfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {}\n\t\t},\n\t\ttagName: {\n\t\t\ttype: String,\n\t\t\tdefault: 'textarea'\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null // Use null as the default value, so `config.readOnly` can take precedence.\n\t\t},\n\t\tthrottle: {\n\t\t\ttype: Number,\n\t\t\tdefault: 80\n\t\t}\n\t},\n\n\tmounted() {\n\t\tgetEditorNamespace( this.editorUrl, namespace => {\n\t\t\tthis.$emit( 'namespaceloaded', namespace );\n\t\t} ).then( () => {\n\t\t\tif ( this.$_destroyed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst config = this.prepareConfig();\n\t\t\tconst method = this.type === 'inline' ? 'inline' : 'replace';\n\t\t\tconst element = this.$el.firstElementChild;\n\n\t\t\tCKEDITOR[ method ]( element, config );\n\t\t} );\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\treadyEmitted: false,\n\t\t};\n\t},\n\n\tbeforeDestroy() {\n\t\tif ( this.instance ) {\n\t\t\tthis.instance.destroy();\n\t\t}\n\n\t\tthis.$_destroyed = true;\n\t},\n\n\twatch: {\n\t\tmodelValue( val ) {\n\t\t\tif ( this.instance && this.instance.getData() !== val ) {\n\t\t\t\tthis.instance.setData( val );\n\t\t\t}\n\t\t},\n\n\t\treadOnly( val ) {\n\t\t\tif ( this.instance ) {\n\t\t\t\tthis.instance.setReadOnly( val );\n\t\t\t}\n\t\t}\n\t},\n\n\tmethods: {\n\t\tprepareConfig() {\n\t\t\tconst config = this.config || {};\n\t\t\tconfig.on = config.on || {};\n\n\t\t\tif ( config.delayIfDetached === undefined ) {\n\t\t\t\tconfig.delayIfDetached = true;\n\t\t\t}\n\t\t\tif ( this.readOnly !== null ) {\n\t\t\t\tconfig.readOnly = this.readOnly;\n\t\t\t}\n\n\t\t\tconst userInstanceReadyCallback = config.on.instanceReady;\n\n\t\t\tconfig.on.instanceReady = evt => {\n\t\t\t\tthis.instance = evt.editor;\n\n\t\t\t\tthis.$nextTick().then( () => {\n\t\t\t\t\tthis.prepareComponentData();\n\n\t\t\t\t\tif ( userInstanceReadyCallback ) {\n\t\t\t\t\t\tuserInstanceReadyCallback( evt );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\treturn config;\n\t\t},\n\t\tprepareComponentData() {\n\t\t\tconst data = this.modelValue;\n\n\t\t\tthis.instance.fire( 'lockSnapshot' );\n\n\t\t\tthis.instance.setData( data, { callback: () => {\n\t\t\t\tthis.$_setUpEditorEvents();\n\n\t\t\t\tconst newData = this.instance.getData();\n\n\t\t\t\t// Locking the snapshot prevents the 'change' event.\n\t\t\t\t// Trigger it manually to update the bound data.\n\t\t\t\tif ( data !== newData ) {\n\t\t\t\t\t/* this.$on( 'input', () => {\n\t\t\t\t\t\tthis.$emit( 'ready', this.instance );\n\t\t\t\t\t} ); */\n\t\t\t\t\tif (!this.readyEmitted) {\n\t\t\t\t\t\tthis.$emit( 'ready', this.instance );\n\t\t\t\t\t\tconsole.log('Emitting Ready');\n\t\t\t\t\t\tthis.readyEmitted = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.$emit( 'update:modelValue', newData );\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.readyEmitted) {\n\t\t\t\t\t\tthis.$emit( 'ready', this.instance );\n\t\t\t\t\t\tconsole.log('Emitting Ready');\n\t\t\t\t\t\tthis.readyEmitted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.instance.fire( 'unlockSnapshot' );\n\t\t\t} } );\n\t\t},\n\t\t$_setUpEditorEvents() {\n\t\t\tconst editor = this.instance;\n\n\t\t\tconst onChange = debounce( evt => {\n\t\t\t\tconst data = editor.getData();\n\n\t\t\t\t// Editor#change event might be fired without an actual data change.\n\t\t\t\tif ( this.modelValue !== data ) {\n\t\t\t\t\t// The compatibility with the v-model and general Vue.js concept of input–like components.\n\t\t\t\t\tthis.$emit( 'update:modelValue', data, evt, editor );\n\t\t\t\t}\n\t\t\t}, this.throttle );\n\n\t\t\teditor.on( 'change', onChange );\n\n\t\t\teditor.on( 'focus', evt => {\n\t\t\t\tthis.$emit( 'focus', evt, editor );\n\t\t\t} );\n\n\t\t\teditor.on( 'blur', evt => {\n\t\t\t\tthis.$emit( 'blur', evt, editor );\n\t\t\t} );\n\t\t}\n\t}\n};\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n","import mitt from 'mitt';\n\nconst EventBus = mitt();\n\nexport default EventBus;\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","/*\n *\n * OSIS stands for Open Student Information System. It's an application\n * designed to manage the core business of higher education institutions,\n * such as universities, faculties, institutes and professional schools.\n * The core business involves the administration of students, teachers,\n * courses, programs and so on.\n *\n * Copyright (C) 2015-2021 Université catholique de Louvain (http://www.uclouvain.be)\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * A copy of this license - GNU General Public License - is available\n * at the root of the source code of this program. If not,\n * see http://www.gnu.org/licenses/.\n *\n */\nimport {createApp} from '@vue/runtime-dom'; // not importing from 'vue' so it can be spied on\nimport {i18n} from './i18n';\nimport CommentThread from './CommentThread.vue';\nimport CommentCount from \"./components/CommentCount.vue\";\n\ninterface Props extends Record {\n url: string,\n headerTitle?: string,\n defaultSort?: string,\n panelClass?: string,\n richTextConfig?: object,\n pageSize?: number,\n tags?: string[],\n}\n\nfunction initCommentComponents() {\n\n document.querySelectorAll('.comment-viewer:not([data-v-app])').forEach((elem) => {\n const props: Props = {url: \"\", ...elem.dataset};\n if (typeof elem.dataset.pageSize !== 'undefined') {\n props.pageSize = Number.parseInt(elem.dataset.pageSize);\n }\n if (typeof elem.dataset.tags !== 'undefined') {\n props.tags = elem.dataset.tags.split(',');\n }\n if (typeof elem.dataset.richTextConfig !== 'undefined') {\n props.richTextConfig = JSON.parse(elem.dataset.richTextConfig) as object;\n }\n createApp(CommentThread, props).use(i18n).mount(elem);\n });\n\n document.querySelectorAll('.comment-count:not([data-v-app])').forEach((elem) => {\n const props: Props = {url: \"\", ...elem.dataset};\n createApp(CommentCount, props).mount(elem);\n });\n}\n\n// Initialize at first load\ninitCommentComponents();\n\n// Initialize later if nodes are added dynamically\nconst observer = new MutationObserver(initCommentComponents);\nobserver.observe(document, {childList: true, subtree: true});\n"],"names":["i18n","createI18n","en","fr","Entry","uuid","comment","author","tags","extra_data","links","created_at","modified_at","__publicField","loadScript","src","opts","cb","head","script","setAttributes","onend","stdOnEnd","ieOnEnd","attrs","attr","promise","getEditorNamespace","editorURL","onNamespaceLoaded","res","scriptResolve","scriptReject","err","debounce","fn","delay","context","cancel","_len","args","_key","component","h","type","namespace","config","method","element","val","userInstanceReadyCallback","evt","data","newData","editor","onChange","_sfc_main$3","defineComponent","_resolveComponent","_openBlock","_createElementBlock","_ctx","_createBlock","_component_ckeditor","_cache","$event","_withDirectives","_hoisted_1","_vModelText","_createElementVNode","_hoisted_2","_toDisplayString","_sfc_main$2","CommentEditor","_hoisted_3","_hoisted_10","_createTextVNode","_component_CommentEditor","value","_Fragment","_hoisted_6","_hoisted_4","_createCommentVNode","_hoisted_12","_hoisted_11","mitt","n","e","i","EventBus","_sfc_main$1","CommentEntry","params","url","r","refresh","response","_normalizeClass","_renderList","entry","_component_CommentEntry","_sfc_main","initCommentComponents","elem","props","createApp","CommentThread","CommentCount"],"mappings":"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","x_google_ignoreList":[2,6]} \ No newline at end of file +{"version":3,"file":"osis-comment.umd.min.js","sources":["../../../frontend/i18n.ts","../../../frontend/types.ts","../../../node_modules/ckeditor4-integrations-common/dist/index.esm.js","../../../frontend/components/ckeditor.js","../../../frontend/components/CommentEditor.vue","../../../frontend/components/CommentEntry.vue","../../../node_modules/mitt/dist/mitt.mjs","../../../frontend/event-bus.ts","../../../frontend/CommentThread.vue","../../../frontend/components/CommentCount.vue","../../../frontend/main.ts"],"sourcesContent":["/*\n *\n * OSIS stands for Open Student Information System. It's an application\n * designed to manage the core business of higher education institutions,\n * such as universities, faculties, institutes and professional schools.\n * The core business involves the administration of students, teachers,\n * courses, programs and so on.\n *\n * Copyright (C) 2015-2021 Université catholique de Louvain (http://www.uclouvain.be)\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * A copy of this license - GNU General Public License - is available\n * at the root of the source code of this program. If not,\n * see http://www.gnu.org/licenses/.\n *\n */\nimport {createI18n} from 'vue-i18n';\nimport en from \"./locales/en\";\nimport fr from \"./locales/fr\";\n\nexport const i18n = createI18n({\n locale: document.documentElement.lang || 'en',\n messages: {\n en,\n fr,\n },\n});\n","import type {CommentLinks, EntryRecord} from \"./interfaces\";\n\nexport class Entry {\n uuid: string;\n comment: string;\n author: string | null;\n tags: string[];\n extra_data: object;\n links: CommentLinks;\n\n created_at: Date;\n modified_at: Date;\n\n constructor(\n {\n uuid,\n comment,\n author,\n tags,\n extra_data,\n links,\n created_at,\n modified_at,\n }: EntryRecord,\n ) {\n this.uuid = uuid;\n this.comment = comment;\n this.author = author;\n this.tags = tags;\n this.extra_data = extra_data;\n this.links = links;\n this.created_at = new Date(created_at);\n this.modified_at = new Date(modified_at);\n }\n}\n","/**\n * @license Copyright (c) 2003-2021, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md.\n */\nfunction loadScript (src, opts, cb) {\n var head = document.head || document.getElementsByTagName('head')[0];\n var script = document.createElement('script');\n if (typeof opts === 'function') {\n cb = opts;\n opts = {};\n }\n opts = opts || {};\n cb = cb || function () {};\n script.type = opts.type || 'text/javascript';\n script.charset = opts.charset || 'utf8';\n script.async = 'async' in opts ? !!opts.async : true;\n script.src = src;\n if (opts.attrs) {\n setAttributes(script, opts.attrs);\n }\n if (opts.text) {\n script.text = String(opts.text);\n }\n var onend = 'onload' in script ? stdOnEnd : ieOnEnd;\n onend(script, cb);\n if (!script.onload) {\n stdOnEnd(script, cb);\n }\n head.appendChild(script);\n}\nfunction setAttributes(script, attrs) {\n for (var attr in attrs) {\n script.setAttribute(attr, attrs[attr]);\n }\n}\nfunction stdOnEnd(script, cb) {\n script.onload = function () {\n this.onerror = this.onload = null;\n cb(null, script);\n };\n script.onerror = function () {\n this.onerror = this.onload = null;\n cb(new Error('Failed to load ' + this.src), script);\n };\n}\nfunction ieOnEnd(script, cb) {\n script.onreadystatechange = function () {\n if (this.readyState != 'complete' && this.readyState != 'loaded') {\n return;\n }\n this.onreadystatechange = null;\n cb(null, script);\n };\n}\n\nvar promise;\nfunction getEditorNamespace(editorURL, onNamespaceLoaded) {\n if ('CKEDITOR' in window) {\n return Promise.resolve(CKEDITOR);\n }\n if (typeof editorURL !== 'string' || editorURL.length < 1) {\n return Promise.reject(new TypeError('CKEditor URL must be a non-empty string.'));\n }\n if (!promise) {\n promise = getEditorNamespace.scriptLoader(editorURL).then(function (res) {\n if (onNamespaceLoaded) {\n onNamespaceLoaded(res);\n }\n return res;\n });\n }\n return promise;\n}\ngetEditorNamespace.scriptLoader = function (editorURL) {\n return new Promise(function (scriptResolve, scriptReject) {\n loadScript(editorURL, function (err) {\n promise = undefined;\n if (err) {\n return scriptReject(err);\n } else if (!window.CKEDITOR) {\n return scriptReject(new Error('Script loaded from editorUrl doesn\\'t provide CKEDITOR namespace.'));\n }\n scriptResolve(CKEDITOR);\n });\n });\n};\n\nfunction debounce(fn, delay) {\n var context = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var cancel;\n return function () {\n clearTimeout(cancel);\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n cancel = setTimeout(fn.bind.apply(fn, [context].concat(args)), delay);\n };\n}\n\nexport { debounce, getEditorNamespace };\n","/*\n *\n * OSIS stands for Open Student Information System. It's an application\n * designed to manage the core business of higher education institutions,\n * such as universities, faculties, institutes and professional schools.\n * The core business involves the administration of students, teachers,\n * courses, programs and so on.\n *\n * Copyright (C) 2015-2023 Université catholique de Louvain (http://www.uclouvain.be)\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * A copy of this license - GNU General Public License - is available\n * at the root of the source code of this program. If not,\n * see http://www.gnu.org/licenses/.\n *\n */\n\n/* global CKEDITOR */\n\n/**\n * This is taken from https://github.com/mayasabha/ckeditor4-vue3/blob/master/src/ckeditor.js\n * but as https://github.com/mayasabha/ckeditor4-vue3/issues/5\n * tree shaking is broken and the dist package ships with vue, hence we reproduce it in our own code\n */\n\n\nimport { h } from 'vue';\nimport { debounce, getEditorNamespace } from 'ckeditor4-integrations-common';\n\nexport default {\n\tname: 'ckeditor',\n\n\trender() {\n\t\treturn h( 'div', {}, [\n\t\t\th( this.tagName )\n\t\t] );\n\t},\n\n\tprops: {\n\t\tmodelValue: {\n\t\t\ttype: String,\n\t\t\tdefault: ''\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tdefault: 'classic',\n\t\t\tvalidator: type => [ 'classic', 'inline' ].includes( type )\n\t\t},\n\t\teditorUrl: {\n\t\t\ttype: String,\n\t\t\tdefault: 'https://cdn.ckeditor.com/4.17.2/standard-all/ckeditor.js'\n\t\t},\n\t\tconfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {}\n\t\t},\n\t\ttagName: {\n\t\t\ttype: String,\n\t\t\tdefault: 'textarea'\n\t\t},\n\t\treadOnly: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null // Use null as the default value, so `config.readOnly` can take precedence.\n\t\t},\n\t\tthrottle: {\n\t\t\ttype: Number,\n\t\t\tdefault: 80\n\t\t}\n\t},\n\n\tmounted() {\n\t\tgetEditorNamespace( this.editorUrl, namespace => {\n\t\t\tthis.$emit( 'namespaceloaded', namespace );\n\t\t} ).then( () => {\n\t\t\tif ( this.$_destroyed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst config = this.prepareConfig();\n\t\t\tconst method = this.type === 'inline' ? 'inline' : 'replace';\n\t\t\tconst element = this.$el.firstElementChild;\n\n\t\t\tCKEDITOR[ method ]( element, config );\n\t\t} );\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\treadyEmitted: false,\n\t\t};\n\t},\n\n\tbeforeDestroy() {\n\t\tif ( this.instance ) {\n\t\t\tthis.instance.destroy();\n\t\t}\n\n\t\tthis.$_destroyed = true;\n\t},\n\n\twatch: {\n\t\tmodelValue( val ) {\n\t\t\tif ( this.instance && this.instance.getData() !== val ) {\n\t\t\t\tthis.instance.setData( val );\n\t\t\t}\n\t\t},\n\n\t\treadOnly( val ) {\n\t\t\tif ( this.instance ) {\n\t\t\t\tthis.instance.setReadOnly( val );\n\t\t\t}\n\t\t}\n\t},\n\n\tmethods: {\n\t\tprepareConfig() {\n\t\t\tconst config = this.config || {};\n\t\t\tconfig.on = config.on || {};\n\n\t\t\tif ( config.delayIfDetached === undefined ) {\n\t\t\t\tconfig.delayIfDetached = true;\n\t\t\t}\n\t\t\tif ( this.readOnly !== null ) {\n\t\t\t\tconfig.readOnly = this.readOnly;\n\t\t\t}\n\n\t\t\tconst userInstanceReadyCallback = config.on.instanceReady;\n\n\t\t\tconfig.on.instanceReady = evt => {\n\t\t\t\tthis.instance = evt.editor;\n\n\t\t\t\tthis.$nextTick().then( () => {\n\t\t\t\t\tthis.prepareComponentData();\n\n\t\t\t\t\tif ( userInstanceReadyCallback ) {\n\t\t\t\t\t\tuserInstanceReadyCallback( evt );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\treturn config;\n\t\t},\n\t\tprepareComponentData() {\n\t\t\tconst data = this.modelValue;\n\n\t\t\tthis.instance.fire( 'lockSnapshot' );\n\n\t\t\tthis.instance.setData( data, { callback: () => {\n\t\t\t\tthis.$_setUpEditorEvents();\n\n\t\t\t\tconst newData = this.instance.getData();\n\n\t\t\t\t// Locking the snapshot prevents the 'change' event.\n\t\t\t\t// Trigger it manually to update the bound data.\n\t\t\t\tif ( data !== newData ) {\n\t\t\t\t\t/* this.$on( 'input', () => {\n\t\t\t\t\t\tthis.$emit( 'ready', this.instance );\n\t\t\t\t\t} ); */\n\t\t\t\t\tif (!this.readyEmitted) {\n\t\t\t\t\t\tthis.$emit( 'ready', this.instance );\n\t\t\t\t\t\tconsole.log('Emitting Ready');\n\t\t\t\t\t\tthis.readyEmitted = true;\n\t\t\t\t\t}\n\t\t\t\t\tthis.$emit( 'update:modelValue', newData );\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.readyEmitted) {\n\t\t\t\t\t\tthis.$emit( 'ready', this.instance );\n\t\t\t\t\t\tconsole.log('Emitting Ready');\n\t\t\t\t\t\tthis.readyEmitted = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.instance.fire( 'unlockSnapshot' );\n\t\t\t} } );\n\t\t},\n\t\t$_setUpEditorEvents() {\n\t\t\tconst editor = this.instance;\n\n\t\t\tconst onChange = debounce( evt => {\n\t\t\t\tconst data = editor.getData();\n\n\t\t\t\t// Editor#change event might be fired without an actual data change.\n\t\t\t\tif ( this.modelValue !== data ) {\n\t\t\t\t\t// The compatibility with the v-model and general Vue.js concept of input–like components.\n\t\t\t\t\tthis.$emit( 'update:modelValue', data, evt, editor );\n\t\t\t\t}\n\t\t\t}, this.throttle );\n\n\t\t\teditor.on( 'change', onChange );\n\n\t\t\teditor.on( 'focus', evt => {\n\t\t\t\tthis.$emit( 'focus', evt, editor );\n\t\t\t} );\n\n\t\t\teditor.on( 'blur', evt => {\n\t\t\t\tthis.$emit( 'blur', evt, editor );\n\t\t\t} );\n\t\t}\n\t}\n};\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","export default function(n){return{all:n=n||new Map,on:function(t,e){var i=n.get(t);i?i.push(e):n.set(t,[e])},off:function(t,e){var i=n.get(t);i&&(e?i.splice(i.indexOf(e)>>>0,1):n.set(t,[]))},emit:function(t,e){var i=n.get(t);i&&i.slice().map(function(n){n(e)}),(i=n.get(\"*\"))&&i.slice().map(function(n){n(t,e)})}}}\n//# sourceMappingURL=mitt.mjs.map\n","import mitt from 'mitt';\n\nconst EventBus = mitt();\n\nexport default EventBus;\n\n","\n\n\n\n\n\n\n","\n\n\n\n\n\n\n","/*\n *\n * OSIS stands for Open Student Information System. It's an application\n * designed to manage the core business of higher education institutions,\n * such as universities, faculties, institutes and professional schools.\n * The core business involves the administration of students, teachers,\n * courses, programs and so on.\n *\n * Copyright (C) 2015-2021 Université catholique de Louvain (http://www.uclouvain.be)\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 3 of the License, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * A copy of this license - GNU General Public License - is available\n * at the root of the source code of this program. If not,\n * see http://www.gnu.org/licenses/.\n *\n */\nimport {createApp} from '@vue/runtime-dom'; // not importing from 'vue' so it can be spied on\nimport {i18n} from './i18n';\nimport CommentThread from './CommentThread.vue';\nimport CommentCount from \"./components/CommentCount.vue\";\n\ninterface Props extends Record {\n url: string,\n headerTitle?: string,\n defaultSort?: string,\n panelClass?: string,\n richTextConfig?: object,\n pageSize?: number,\n tags?: string[],\n}\n\nfunction initCommentComponents() {\n\n document.querySelectorAll('.comment-viewer:not([data-v-app])').forEach((elem) => {\n const props: Props = {url: \"\", ...elem.dataset};\n if (typeof elem.dataset.pageSize !== 'undefined') {\n props.pageSize = Number.parseInt(elem.dataset.pageSize);\n }\n if (typeof elem.dataset.tags !== 'undefined') {\n props.tags = elem.dataset.tags.split(',');\n }\n if (typeof elem.dataset.richTextConfig !== 'undefined') {\n props.richTextConfig = JSON.parse(elem.dataset.richTextConfig) as object;\n }\n createApp(CommentThread, props).use(i18n).mount(elem);\n });\n\n document.querySelectorAll('.comment-count:not([data-v-app])').forEach((elem) => {\n const props: Props = {url: \"\", ...elem.dataset};\n createApp(CommentCount, props).mount(elem);\n });\n}\n\n// Initialize at first load\ninitCommentComponents();\n\n// Initialize later if nodes are added dynamically\nconst observer = new MutationObserver(initCommentComponents);\nobserver.observe(document, {childList: true, subtree: true});\n"],"names":["i18n","createI18n","en","fr","Entry","uuid","comment","author","tags","extra_data","links","created_at","modified_at","__publicField","loadScript","src","opts","cb","head","script","setAttributes","onend","stdOnEnd","ieOnEnd","attrs","attr","promise","getEditorNamespace","editorURL","onNamespaceLoaded","res","scriptResolve","scriptReject","err","debounce","fn","delay","context","cancel","_len","args","_key","component","h","type","namespace","config","method","element","val","userInstanceReadyCallback","evt","data","newData","editor","onChange","_sfc_main$3","defineComponent","_resolveComponent","_openBlock","_createElementBlock","_ctx","_createBlock","_component_ckeditor","_cache","$event","_withDirectives","_hoisted_1","_vModelText","_createElementVNode","_hoisted_2","_toDisplayString","_sfc_main$2","CommentEditor","_hoisted_3","_hoisted_10","_createTextVNode","_component_CommentEditor","value","_Fragment","_hoisted_6","_hoisted_4","_createCommentVNode","_hoisted_12","_hoisted_11","mitt","n","e","i","EventBus","_sfc_main$1","CommentEntry","params","url","r","refresh","response","_normalizeClass","_renderList","entry","_component_CommentEntry","_sfc_main","_sfc_render","$props","$setup","$data","$options","initCommentComponents","elem","props","createApp","CommentThread","CommentCount"],"mappings":"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","x_google_ignoreList":[2,6]} \ No newline at end of file