{"version":3,"sources":["webpack:///./src/components/course_tree/node_detail/AnnouncementNodeDetail.vue?4569","webpack:///./src/components/course_tree/node_detail/AnnouncementNodeDetail.vue","webpack:///./src/components/course_tree/node_detail/AnnouncementNodeDetail.vue?960b","webpack:///./src/components/course_tree/CourseTreeNodeCommentSection.vue?65e2","webpack:///./src/components/course_tree/CourseTreeNodeCommentSection.vue","webpack:///./src/components/course_tree/CourseTreeNodeCommentSection.vue?bf64"],"names":["_hoisted_1","key","class","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","style","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","render","_ctx","_cache","$props","$setup","$data","$options","_component_SlotSkeleton","_component_Btn","_component_router_link","_component_Timestamp","_component_CopyToClipboard","_component_ProcessedTextFragment","_component_CourseTreeNode","_component_CourseTreeNodeCommentSection","firstLoading","to","name","params","courseId","default","size","variant","$t","_","node","state","AnnouncementNodeState","DRAFT","PUBLISHED","creator","full_name","value","created","canEdit","onClick","onEdit","outline","tooltip","permalink","body","loadingChildren","children","child","id","onDeleteNode","$event","$emit","loadingComments","nodeId","mixins","props","type","Object","required","Array","emits","this","fromFirstPage","data","methods","computed","components","Timestamp","ProcessedTextFragment","Btn","SlotSkeleton","CourseTreeNode","CopyToClipboard","CourseTreeNodeCommentSection","__exports__","_component_Message","_component_MessageEditor","comments","length","shownComments","expanded","comment","user","canDelete","message","onDeleteMessage","onDelete","posting","postingComment","onSendMessage","onAddComment","resolveFn","rejectFn","String","Boolean","mainStore","createCourseTreeNodeComment","commentId","confirm","deleteCourseNodeComment","hasPrivileges","MANAGE_MATERIAL","getCommentsByNodeId","slice","MessageEditor","Message"],"mappings":"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","file":"js/chunk-59fbf0fa.ea228c4a.js","sourcesContent":["import { resolveComponent as _resolveComponent, createVNode as _createVNode, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, withCtx as _withCtx, normalizeClass as _normalizeClass, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, mergeProps as _mergeProps } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"mt-6\"\n}\nconst _hoisted_2 = {\n key: 1,\n class: \"mt-2\"\n}\nconst _hoisted_3 = { class: \"mb-4\" }\nconst _hoisted_4 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"material-icons-outlined\" }, \"chevron_left\", -1)\nconst _hoisted_5 = { class: \"flex flex-start md:items-center\" }\nconst _hoisted_6 = { class: \"flex md:flex-row flex-col md:space-x-2 md:mt-0 mt-1 w-full\" }\nconst _hoisted_7 = { class: \"flex flex-col\" }\nconst _hoisted_8 = {\n style: {\"line-height\":\"1.1\"},\n class: \"mb-0 hidden md:block\"\n}\nconst _hoisted_9 = {\n style: {\"line-height\":\"1.1\"},\n class: \"mb-0 md:hidden\"\n}\nconst _hoisted_10 = { class: \"flex space-x-2 ml-0.5\" }\nconst _hoisted_11 = {\n key: 0,\n class: \"text-sm\"\n}\nconst _hoisted_12 = {\n key: 1,\n class: \"text-muted text-sm\"\n}\nconst _hoisted_13 = { class: \"ml-auto flex items-center\" }\nconst _hoisted_14 = /*#__PURE__*/_createElementVNode(\"span\", { class: \"text-xl material-icons\" }, \" edit \", -1)\nconst _hoisted_15 = { class: \"mx-2 md:mx-4\" }\nconst _hoisted_16 = { class: \"mt-8\" }\nconst _hoisted_17 = { class: \"mt-12\" }\nconst _hoisted_18 = { key: 0 }\nconst _hoisted_19 = { class: \"grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-6\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_SlotSkeleton = _resolveComponent(\"SlotSkeleton\")!\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_router_link = _resolveComponent(\"router-link\")!\n const _component_Timestamp = _resolveComponent(\"Timestamp\")!\n const _component_CopyToClipboard = _resolveComponent(\"CopyToClipboard\")!\n const _component_ProcessedTextFragment = _resolveComponent(\"ProcessedTextFragment\")!\n const _component_CourseTreeNode = _resolveComponent(\"CourseTreeNode\")!\n const _component_CourseTreeNodeCommentSection = _resolveComponent(\"CourseTreeNodeCommentSection\")!\n\n return (_ctx.firstLoading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton, { class: \"mb-4 mt-2\" }),\n _createVNode(_component_SlotSkeleton)\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _createElementVNode(\"div\", _hoisted_3, [\n _createVNode(_component_router_link, {\n to: { name: 'CourseTreeDispatcher', params: { courseId: _ctx.courseId } }\n }, {\n default: _withCtx(() => [\n _createVNode(_component_Btn, {\n size: 'xs',\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _hoisted_4,\n _createTextVNode(\" \" + _toDisplayString(_ctx.$t(\"course_tree.back_to_tree\")), 1)\n ]),\n _: 1\n })\n ]),\n _: 1\n }, 8, [\"to\"])\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n _createElementVNode(\"div\", {\n style: {\"min-width\":\"3.5rem\",\"max-width\":\"3.5rem\"},\n class: _normalizeClass([\"flex rounded-full w-14 h-14 mr-3\", {\n\t\t\t\t\t'bg-gray-200': _ctx.node.state === _ctx.AnnouncementNodeState.DRAFT,\n\t\t\t\t\t'bg-primary bg-opacity-15': _ctx.node.state === _ctx.AnnouncementNodeState.PUBLISHED,\n\t\t\t\t}])\n }, [\n _createElementVNode(\"span\", {\n style: {\"font-size\":\"40px !important\"},\n class: _normalizeClass([\"m-auto material-icons-outlined\", {\n\t\t\t\t\t\t'text-gray-500': _ctx.node.state === _ctx.AnnouncementNodeState.DRAFT,\n\t\t\t\t\t\t'text-primary': _ctx.node.state === _ctx.AnnouncementNodeState.PUBLISHED,\n\t\t\t\t\t}])\n }, \"campaign\", 2)\n ], 2),\n _createElementVNode(\"div\", _hoisted_6, [\n _createElementVNode(\"div\", _hoisted_7, [\n _createElementVNode(\"h1\", _hoisted_8, _toDisplayString(_ctx.$t(\"course_tree.announcement_title\")), 1),\n _createElementVNode(\"h3\", _hoisted_9, _toDisplayString(_ctx.$t(\"course_tree.announcement_title\")), 1),\n _createElementVNode(\"div\", _hoisted_10, [\n (_ctx.node.creator)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_11, _toDisplayString(_ctx.node.creator.full_name), 1))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_Timestamp, {\n \"date-only\": true,\n class: \"text-sm text-muted\",\n value: _ctx.node.created\n }, null, 8, [\"value\"]),\n (_ctx.node.state === _ctx.AnnouncementNodeState.DRAFT)\n ? (_openBlock(), _createElementBlock(\"p\", _hoisted_12, _toDisplayString(_ctx.$t(\"course_tree.draft\")), 1))\n : _createCommentVNode(\"\", true)\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_13, [\n (_ctx.canEdit)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 0,\n onClick: _ctx.onEdit,\n variant: 'icon',\n outline: true,\n class: \"icon-btn-primary hover:opacity-100 transition-opacity duration-100 ease opacity-50\",\n tooltip: _ctx.$t('misc.edit')\n }, {\n default: _withCtx(() => [\n _hoisted_14\n ]),\n _: 1\n }, 8, [\"onClick\", \"tooltip\"]))\n : _createCommentVNode(\"\", true),\n _createVNode(_component_CopyToClipboard, {\n class: \"hover:opacity-100 transition-opacity duration-100 ease opacity-50\",\n \"icon-only\": true,\n tooltip: _ctx.$t('exercise_solution.share'),\n value: _ctx.permalink\n }, null, 8, [\"tooltip\", \"value\"])\n ])\n ])\n ]),\n _createElementVNode(\"div\", _hoisted_15, [\n _createElementVNode(\"div\", _hoisted_16, [\n _createVNode(_component_ProcessedTextFragment, {\n value: _ctx.node.body\n }, null, 8, [\"value\"])\n ]),\n _createElementVNode(\"div\", _hoisted_17, [\n (_ctx.loadingChildren)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_18, [\n _createVNode(_component_SlotSkeleton),\n _createVNode(_component_SlotSkeleton)\n ]))\n : _createCommentVNode(\"\", true),\n _createElementVNode(\"div\", _hoisted_19, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.children, (child) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: \"\",\n key: child.id\n }, [\n _createVNode(_component_CourseTreeNode, _mergeProps(_ctx.$props, {\n node: child,\n onDeleteNode: _cache[0] || (_cache[0] = ($event: any) => (_ctx.$emit('deleteNode', $event)))\n }), null, 16, [\"node\"])\n ]))\n }), 128))\n ])\n ]),\n _createVNode(_component_CourseTreeNodeCommentSection, {\n loadingComments: _ctx.loadingComments,\n class: \"mt-8\",\n nodeId: _ctx.node.id\n }, null, 8, [\"loadingComments\", \"nodeId\"])\n ])\n ]))\n}","\nimport Btn from \"@/components/ui/Btn.vue\";\nimport CopyToClipboard from \"@/components/ui/CopyToClipboard.vue\";\nimport Dialog from \"@/components/ui/Dialog.vue\";\nimport ProcessedTextFragment from \"@/components/ui/ProcessedTextFragment.vue\";\nimport SlotSkeleton from \"@/components/ui/skeletons/SlotSkeleton.vue\";\nimport Timestamp from \"@/components/ui/Timestamp.vue\";\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { courseIdMixin, loadingMixin, nodeMixin } from \"@/mixins\";\nimport {\n\tCourseTreeNode as ICourseTreeNode,\n\tFileNode,\n\tAnnouncementNode,\n\tAnnouncementNodeState,\n} from \"@/models\";\nimport { defineComponent, PropType } from \"@vue/runtime-core\";\nimport CourseTreeNodeCommentSection from \"../CourseTreeNodeCommentSection.vue\";\nimport CourseTreeNode from \"../node/CourseTreeNode.vue\";\nimport { nodeEmits, nodeProps } from \"../shared\";\nexport default defineComponent({\n\tname: \"AnnouncementNodeDetail\",\n\tmixins: [loadingMixin, nodeMixin, courseIdMixin],\n\tprops: {\n\t\tnode: {\n\t\t\ttype: Object as PropType,\n\t\t\trequired: true,\n\t\t},\n\t\tchildren: {\n\t\t\ttype: Array as PropType,\n\t\t\tdefault: () => [],\n\t\t},\n\t\t...nodeProps,\n\t},\n\temits: {\n\t\t...nodeEmits,\n\t},\n\tcreated() {\n\t\t// TODO possibly extract shared logic\n\t\tthis.$emit(\"loadChildren\", { node: this.node, fromFirstPage: true });\n\t\tthis.$emit(\"loadComments\", this.node);\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tAnnouncementNodeState,\n\t\t};\n\t},\n\tmethods: {\n\t\tonEdit() {\n\t\t\tthis.$emit(\"editNode\", this.node);\n\t\t},\n\t},\n\tcomputed: {},\n\tcomponents: {\n\t\tTimestamp,\n\t\tProcessedTextFragment,\n\t\tBtn,\n\t\tSlotSkeleton,\n\t\tCourseTreeNode,\n\t\tCopyToClipboard,\n\t\tCourseTreeNodeCommentSection,\n\t},\n});\n","import { render } from \"./AnnouncementNodeDetail.vue?vue&type=template&id=4ed7cb7e&ts=true\"\nimport script from \"./AnnouncementNodeDetail.vue?vue&type=script&lang=ts\"\nexport * from \"./AnnouncementNodeDetail.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__","import { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, createElementVNode as _createElementVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, createBlock as _createBlock, renderList as _renderList, Fragment as _Fragment, normalizeClass as _normalizeClass, createVNode as _createVNode } from \"vue\"\n\nconst _hoisted_1 = { class: \"flex items-center space-x-2\" }\nconst _hoisted_2 = {\n key: 0,\n class: \"material-icons-outlined text-muted\",\n style: {\"margin-bottom\":\"-1px\",\"font-size\":\"22px !important\"}\n}\nconst _hoisted_3 = { key: 1 }\nconst _hoisted_4 = { class: \"text-base\" }\nconst _hoisted_5 = { class: \"w-full\" }\n\nexport function render(_ctx: any,_cache: any,$props: any,$setup: any,$data: any,$options: any) {\n const _component_Btn = _resolveComponent(\"Btn\")!\n const _component_Message = _resolveComponent(\"Message\")!\n const _component_MessageEditor = _resolveComponent(\"MessageEditor\")!\n\n return (_openBlock(), _createElementBlock(\"div\", null, [\n _createElementVNode(\"div\", _hoisted_1, [\n (_ctx.comments.length > 0)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_2, \"question_answer\"))\n : _createCommentVNode(\"\", true),\n (_ctx.comments.length > 0)\n ? (_openBlock(), _createElementBlock(\"h4\", _hoisted_3, _toDisplayString(_ctx.comments.length) + \" \" + _toDisplayString(_ctx.comments.length === 1\n\t\t\t\t\t\t? _ctx.$t(\"course_tree.node_comment_title\")\n\t\t\t\t\t\t: _ctx.$t(\"course_tree.node_comments_title\")), 1))\n : _createCommentVNode(\"\", true),\n (_ctx.shownComments.length < _ctx.comments.length || _ctx.expanded)\n ? (_openBlock(), _createBlock(_component_Btn, {\n key: 2,\n style: {\"margin-bottom\":\"-1px\"},\n onClick: _cache[0] || (_cache[0] = ($event: any) => (_ctx.expanded = !_ctx.expanded)),\n size: 'xs',\n variant: 'primary-borderless'\n }, {\n default: _withCtx(() => [\n _createElementVNode(\"span\", _hoisted_4, _toDisplayString(_ctx.expanded ? _ctx.$t(\"misc.show_recent\") : _ctx.$t(\"misc.show_all\")), 1)\n ]),\n _: 1\n }))\n : _createCommentVNode(\"\", true)\n ]),\n _createElementVNode(\"div\", _hoisted_5, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.shownComments, (comment) => {\n return (_openBlock(), _createBlock(_component_Message, {\n key: comment.id,\n user: comment.user,\n canDelete: _ctx.canDelete(comment),\n message: comment.comment,\n class: _normalizeClass(comment.created),\n onDeleteMessage: ($event: any) => (_ctx.onDelete(comment.id))\n }, null, 8, [\"user\", \"canDelete\", \"message\", \"class\", \"onDeleteMessage\"]))\n }), 128))\n ]),\n _createVNode(_component_MessageEditor, {\n posting: _ctx.postingComment,\n onSendMessage: _cache[1] || (_cache[1] = ($event: any) => (_ctx.onAddComment($event.message, $event.resolveFn, $event.rejectFn)))\n }, null, 8, [\"posting\"])\n ]))\n}","\nimport { getTranslatedString as _ } from \"@/i18n\";\nimport { courseIdMixin, coursePrivilegeMixin, loadingMixin } from \"@/mixins\";\nimport { CoursePrivilege, getBlankCourseTreeNodeComment, NodeComment } from \"@/models\";\nimport { useMainStore } from \"@/stores/mainStore\";\nimport { useMetaStore } from \"@/stores/metaStore\";\nimport { getCurrentUserId, setErrorNotification } from \"@/utils\";\nimport { defineComponent } from \"@vue/runtime-core\";\nimport { mapStores } from \"pinia\";\nimport Message from \"../messaging/Message.vue\";\nimport MessageEditor from \"../messaging/MessageEditor.vue\";\nimport Btn from \"../ui/Btn.vue\";\nexport default defineComponent({\n\tname: \"CourseTreeNodeCommentSection\",\n\tmixins: [courseIdMixin, loadingMixin, coursePrivilegeMixin],\n\tprops: {\n\t\tnodeId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tloadingComments: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tpostingComment: false,\n\t\t\texpanded: false,\n\t\t};\n\t},\n\tmethods: {\n\t\tasync onAddComment(message: string, resolveFn: () => void, rejectFn: () => void) {\n\t\t\tthis.postingComment = true;\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.createCourseTreeNodeComment({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: this.nodeId,\n\t\t\t\t\tcomment: getBlankCourseTreeNodeComment(message),\n\t\t\t\t});\n\t\t\t\tresolveFn();\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t\trejectFn();\n\t\t\t} finally {\n\t\t\t\tthis.postingComment = false;\n\t\t\t}\n\t\t},\n\t\tasync onDelete(commentId: string) {\n\t\t\tif (!confirm(_(\"course_tree.confirm_delete_comment\"))) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.mainStore.deleteCourseNodeComment({\n\t\t\t\t\tcourseId: this.courseId,\n\t\t\t\t\tnodeId: this.nodeId,\n\t\t\t\t\tcommentId,\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\tsetErrorNotification(e);\n\t\t\t}\n\t\t},\n\t\tcanDelete(comment: NodeComment) {\n\t\t\treturn (\n\t\t\t\tthis.hasPrivileges([CoursePrivilege.MANAGE_MATERIAL]) ||\n\t\t\t\tcomment.user.id == getCurrentUserId()\n\t\t\t);\n\t\t},\n\t},\n\tcomputed: {\n\t\t...mapStores(useMainStore, useMetaStore),\n\t\tcomments() {\n\t\t\treturn this.mainStore.getCommentsByNodeId(this.nodeId);\n\t\t},\n\t\tshownComments() {\n\t\t\treturn this.comments.length <= 2 || this.expanded\n\t\t\t\t? this.comments\n\t\t\t\t: this.comments.slice(-2);\n\t\t},\n\t},\n\tcomponents: { Btn, MessageEditor, Message },\n});\n","import { render } from \"./CourseTreeNodeCommentSection.vue?vue&type=template&id=65f97c64&ts=true\"\nimport script from \"./CourseTreeNodeCommentSection.vue?vue&type=script&lang=ts\"\nexport * from \"./CourseTreeNodeCommentSection.vue?vue&type=script&lang=ts\"\n\nimport exportComponent from \"/tmp/build/node_modules/vue-loader-v16/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['render',render]])\n\nexport default __exports__"],"sourceRoot":""}