You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
nextcloud/dist/comments-comments-app.js.map

1 line
87 KiB
XML

{"version":3,"file":"comments-comments-app.js?v=78e61024d65cea11029b","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/comments/src/components/Moment.vue","webpack:///nextcloud/apps/comments/src/components/Moment.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/comments/src/components/Moment.vue?9b20","webpack://nextcloud/./apps/comments/src/components/Moment.vue?135d","webpack:///nextcloud/apps/comments/src/utils/davUtils.js","webpack:///nextcloud/apps/comments/src/utils/decodeHtmlEntities.js","webpack:///nextcloud/apps/comments/src/services/DavClient.js","webpack:///nextcloud/apps/comments/src/mixins/CommentMixin.js","webpack:///nextcloud/apps/comments/src/services/EditComment.js","webpack:///nextcloud/apps/comments/src/services/DeleteComment.js","webpack:///nextcloud/apps/comments/src/services/NewComment.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/comments/src/components/Comment.vue","webpack://nextcloud/./apps/comments/src/components/Comment.vue?9d61","webpack://nextcloud/./apps/comments/src/components/Comment.vue?7f26","webpack://nextcloud/./apps/comments/src/components/Comment.vue?d1f7","webpack:///nextcloud/apps/comments/src/services/GetComments.ts","webpack:///nextcloud/apps/comments/src/views/Comments.vue","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/comments/src/utils/cancelableRequest.js","webpack://nextcloud/./apps/comments/src/views/Comments.vue?75d6","webpack://nextcloud/./apps/comments/src/views/Comments.vue?f45b","webpack://nextcloud/./apps/comments/src/views/Comments.vue?0e41","webpack:///nextcloud/apps/comments/src/services/CommentsInstance.js","webpack:///nextcloud/apps/comments/src/comments-app.js","webpack:///nextcloud/apps/comments/src/components/Comment.vue?vue&type=style&index=0&id=13a1afc1&prod&lang=scss&scoped=true&","webpack:///nextcloud/apps/comments/src/views/Comments.vue?vue&type=style&index=0&id=9e9ed272&prod&lang=scss&scoped=true&","webpack:///nextcloud/node_modules/moment/locale|sync|/^\\.\\/.*$","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/runtime/nonce","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","<!-- TODO: Move to vue components -->\n\n<template>\n\t<span class=\"live-relative-timestamp\" :data-timestamp=\"timestamp * 1000\" :title=\"title\">{{ formatted }}</span>\n</template>\n\n<script>\nimport moment from '@nextcloud/moment'\n\nexport default {\n\tname: 'Moment',\n\tprops: {\n\t\ttimestamp: {\n\t\t\ttype: Number,\n\t\t\trequired: true,\n\t\t},\n\t\tformat: {\n\t\t\ttype: String,\n\t\t\tdefault: 'LLL',\n\t\t},\n\t},\n\tcomputed: {\n\t\ttitle() {\n\t\t\treturn moment.unix(this.timestamp).format(this.format)\n\t\t},\n\t\tformatted() {\n\t\t\treturn moment.unix(this.timestamp).fromNow()\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Moment.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Moment.vue?vue&type=template&id=57999be6&\"\nimport script from \"./Moment.vue?vue&type=script&lang=js&\"\nexport * from \"./Moment.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('span',{staticClass:\"live-relative-timestamp\",attrs:{\"data-timestamp\":_vm.timestamp * 1000,\"title\":_vm.title}},[_vm._v(_vm._s(_vm.formatted))])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { generateRemoteUrl } from '@nextcloud/router'\n\nconst getRootPath = function() {\n\treturn generateRemoteUrl('dav/comments')\n}\n\nexport { getRootPath }\n","/**\n * @copyright Copyright (c) 2021 Christopher Ng <chrng8@gmail.com>\n *\n * @author Christopher Ng <chrng8@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * @param {any} value -\n * @param {any} passes -\n */\nexport function decodeHtmlEntities(value, passes = 1) {\n\tconst parser = new DOMParser()\n\tlet decoded = value\n\tfor (let i = 0; i < passes; i++) {\n\t\tdecoded = parser.parseFromString(decoded, 'text/html').documentElement.textContent\n\t}\n\treturn decoded\n}\n","/**\n * @copyright Copyright (c) 2021 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { createClient } from 'webdav'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { getRequestToken } from '@nextcloud/auth'\n\n// init webdav client\nconst client = createClient(getRootPath(), {\n\theaders: {\n\t\t// Add this so the server knows it is an request from the browser\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t// Inject user auth\n\t\trequesttoken: getRequestToken() ?? '',\n\t},\n})\n\nexport default client\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport NewComment from '../services/NewComment.js'\nimport DeleteComment from '../services/DeleteComment.js'\nimport EditComment from '../services/EditComment.js'\nimport { showError, showUndo, TOAST_UNDO_TIMEOUT } from '@nextcloud/dialogs'\n\nexport default {\n\tprops: {\n\t\tid: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\tressourceId: {\n\t\t\ttype: [String, Number],\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdeleted: false,\n\t\t\tediting: false,\n\t\t\tloading: false,\n\t\t}\n\t},\n\n\tmethods: {\n\t\t// EDITION\n\t\tonEdit() {\n\t\t\tthis.editing = true\n\t\t},\n\t\tonEditCancel() {\n\t\t\tthis.editing = false\n\t\t\t// Restore original value\n\t\t\tthis.updateLocalMessage(this.message)\n\t\t},\n\t\tasync onEditComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tawait EditComment(this.commentsType, this.ressourceId, this.id, message)\n\t\t\t\tthis.logger.debug('Comment edited', { commentsType: this.commentsType, ressourceId: this.ressourceId, id: this.id, message })\n\t\t\t\tthis.$emit('update:message', message)\n\t\t\t\tthis.editing = false\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to edit the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t// DELETION\n\t\tonDeleteWithUndo() {\n\t\t\tthis.deleted = true\n\t\t\tconst timeOutDelete = setTimeout(this.onDelete, TOAST_UNDO_TIMEOUT)\n\t\t\tshowUndo(t('comments', 'Comment deleted'), () => {\n\t\t\t\tclearTimeout(timeOutDelete)\n\t\t\t\tthis.deleted = false\n\t\t\t})\n\t\t},\n\t\tasync onDelete() {\n\t\t\ttry {\n\t\t\t\tawait DeleteComment(this.commentsType, this.ressourceId, this.id)\n\t\t\t\tthis.logger.debug('Comment deleted', { commentsType: this.commentsType, ressourceId: this.ressourceId, id: this.id })\n\t\t\t\tthis.$emit('delete', this.id)\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to delete the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t\tthis.deleted = false\n\t\t\t}\n\t\t},\n\n\t\t// CREATION\n\t\tasync onNewComment(message) {\n\t\t\tthis.loading = true\n\t\t\ttry {\n\t\t\t\tconst newComment = await NewComment(this.commentsType, this.ressourceId, message)\n\t\t\t\tthis.logger.debug('New comment posted', { commentsType: this.commentsType, ressourceId: this.ressourceId, newComment })\n\t\t\t\tthis.$emit('new', newComment)\n\n\t\t\t\t// Clear old content\n\t\t\t\tthis.$emit('update:message', '')\n\t\t\t\tthis.localMessage = ''\n\t\t\t} catch (error) {\n\t\t\t\tshowError(t('comments', 'An error occurred while trying to create the comment'))\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Edit an existing comment\n *\n * @param {string} commentsType the ressource type\n * @param {number} ressourceId the ressource ID\n * @param {number} commentId the comment iD\n * @param {string} message the message content\n */\nexport default async function(commentsType, ressourceId, commentId, message) {\n\tconst commentPath = ['', commentsType, ressourceId, commentId].join('/')\n\n\treturn await client.customRequest(commentPath, Object.assign({\n\t\tmethod: 'PROPPATCH',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<d:propertyupdate\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\">\n\t\t\t<d:set>\n\t\t\t\t<d:prop>\n\t\t\t\t\t<oc:message>${message}</oc:message>\n\t\t\t\t</d:prop>\n\t\t\t</d:set>\n\t\t\t</d:propertyupdate>`,\n\t}))\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport client from './DavClient.js'\n\n/**\n * Delete a comment\n *\n * @param {string} commentsType the ressource type\n * @param {number} ressourceId the ressource ID\n * @param {number} commentId the comment iD\n */\nexport default async function(commentsType, ressourceId, commentId) {\n\tconst commentPath = ['', commentsType, ressourceId, commentId].join('/')\n\n\t// Fetch newly created comment data\n\tawait client.deleteFile(commentPath)\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getRootPath } from '../utils/davUtils.js'\nimport { decodeHtmlEntities } from '../utils/decodeHtmlEntities.js'\nimport axios from '@nextcloud/axios'\nimport client from './DavClient.js'\n\n/**\n * Retrieve the comments list\n *\n * @param {string} commentsType the ressource type\n * @param {number} ressourceId the ressource ID\n * @param {string} message the message\n * @return {object} the new comment\n */\nexport default async function(commentsType, ressourceId, message) {\n\tconst ressourcePath = ['', commentsType, ressourceId].join('/')\n\n\tconst response = await axios.post(getRootPath() + ressourcePath, {\n\t\tactorDisplayName: getCurrentUser().displayName,\n\t\tactorId: getCurrentUser().uid,\n\t\tactorType: 'users',\n\t\tcreationDateTime: (new Date()).toUTCString(),\n\t\tmessage,\n\t\tobjectType: 'files',\n\t\tverb: 'comment',\n\t})\n\n\t// Retrieve comment id from ressource location\n\tconst commentId = parseInt(response.headers['content-location'].split('/').pop())\n\tconst commentPath = ressourcePath + '/' + commentId\n\n\t// Fetch newly created comment data\n\tconst comment = await client.stat(commentPath, {\n\t\tdetails: true,\n\t})\n\n\tconst props = comment.data.props\n\t// Decode twice to handle potentially double-encoded entities\n\t// FIXME Remove this once https://github.com/nextcloud/server/issues/29306\n\t// is resolved\n\tprops.actorDisplayName = decodeHtmlEntities(props.actorDisplayName, 2)\n\tprops.message = decodeHtmlEntities(props.message, 2)\n\n\treturn comment.data\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (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 Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<component :is=\"tag\"\n\t\tv-show=\"!deleted\"\n\t\t:class=\"{'comment--loading': loading}\"\n\t\tclass=\"comment\">\n\t\t<!-- Comment header toolbar -->\n\t\t<div class=\"comment__side\">\n\t\t\t<!-- Author -->\n\t\t\t<NcAvatar class=\"comment__avatar\"\n\t\t\t\t:display-name=\"actorDisplayName\"\n\t\t\t\t:user=\"actorId\"\n\t\t\t\t:size=\"32\" />\n\t\t</div>\n\t\t<div class=\"comment__body\">\n\t\t\t<div class=\"comment__header\">\n\t\t\t\t<span class=\"comment__author\">{{ actorDisplayName }}</span>\n\n\t\t\t\t<!-- Comment actions,\n\t\t\t\t\tshow if we have a message id and current user is author -->\n\t\t\t\t<NcActions v-if=\"isOwnComment && id && !loading\" class=\"comment__actions\">\n\t\t\t\t\t<template v-if=\"!editing\">\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t\t\t@click=\"onEdit\">\n\t\t\t\t\t\t\t{{ t('comments', 'Edit comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionSeparator />\n\t\t\t\t\t\t<NcActionButton :close-after-click=\"true\"\n\t\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t\t@click=\"onDeleteWithUndo\">\n\t\t\t\t\t\t\t{{ t('comments', 'Delete comment') }}\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</template>\n\n\t\t\t\t\t<NcActionButton v-else\n\t\t\t\t\t\ticon=\"icon-close\"\n\t\t\t\t\t\t@click=\"onEditCancel\">\n\t\t\t\t\t\t{{ t('comments', 'Cancel edit') }}\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\n\t\t\t\t<!-- Show loading if we're editing or deleting, not on new ones -->\n\t\t\t\t<div v-if=\"id && loading\" class=\"comment_loading icon-loading-small\" />\n\n\t\t\t\t<!-- Relative time to the comment creation -->\n\t\t\t\t<Moment v-else-if=\"creationDateTime\" class=\"comment__timestamp\" :timestamp=\"timestamp\" />\n\t\t\t</div>\n\n\t\t\t<!-- Message editor -->\n\t\t\t<div v-if=\"editor || editing\" class=\"comment__editor \">\n\t\t\t\t<NcRichContenteditable ref=\"editor\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:contenteditable=\"!loading\"\n\t\t\t\t\t:value=\"localMessage\"\n\t\t\t\t\t:user-data=\"userData\"\n\t\t\t\t\t@update:value=\"updateLocalMessage\"\n\t\t\t\t\t@submit=\"onSubmit\" />\n\t\t\t\t<NcButton class=\"comment__submit\"\n\t\t\t\t\ttype=\"tertiary-no-background\"\n\t\t\t\t\tnative-type=\"submit\"\n\t\t\t\t\t:aria-label=\"t('comments', 'Post comment')\"\n\t\t\t\t\t:disabled=\"isEmptyMessage\"\n\t\t\t\t\t@click=\"onSubmit\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<span v-if=\"loading\" class=\"icon-loading-small\" />\n\t\t\t\t\t\t<ArrowRight v-else :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcButton>\n\t\t\t</div>\n\n\t\t\t<!-- Message content -->\n\t\t\t<!-- The html is escaped and sanitized before rendering -->\n\t\t\t<!-- eslint-disable-next-line vue/no-v-html-->\n\t\t\t<div v-else\n\t\t\t\t:class=\"{'comment__message--expanded': expanded}\"\n\t\t\t\tclass=\"comment__message\"\n\t\t\t\t@click=\"onExpand\"\n\t\t\t\tv-html=\"renderedContent\" />\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { getCurrentUser } from '@nextcloud/auth'\nimport moment from '@nextcloud/moment'\n\nimport NcActionButton from '@nextcloud/vue/dist/Components/NcActionButton.js'\nimport NcActions from '@nextcloud/vue/dist/Components/NcActions.js'\nimport NcActionSeparator from '@nextcloud/vue/dist/Components/NcActionSeparator.js'\nimport NcAvatar from '@nextcloud/vue/dist/Components/NcAvatar.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport NcRichContenteditable from '@nextcloud/vue/dist/Components/NcRichContenteditable.js'\nimport RichEditorMixin from '@nextcloud/vue/dist/Mixins/richEditor.js'\nimport ArrowRight from 'vue-material-design-icons/ArrowRight.vue'\n\nimport Moment from './Moment.vue'\nimport CommentMixin from '../mixins/CommentMixin.js'\n\nexport default {\n\tname: 'Comment',\n\n\tcomponents: {\n\t\tNcActionButton,\n\t\tNcActions,\n\t\tNcActionSeparator,\n\t\tArrowRight,\n\t\tNcAvatar,\n\t\tNcButton,\n\t\tMoment,\n\t\tNcRichContenteditable,\n\t},\n\tmixins: [RichEditorMixin, CommentMixin],\n\n\tinheritAttrs: false,\n\n\tprops: {\n\t\tactorDisplayName: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tactorId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tcreationDateTime: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Force the editor display\n\t\t */\n\t\teditor: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Provide the autocompletion data\n\t\t */\n\t\tautoComplete: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\n\t\ttag: {\n\t\t\ttype: String,\n\t\t\tdefault: 'div',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\texpanded: false,\n\t\t\t// Only change data locally and update the original\n\t\t\t// parent data when the request is sent and resolved\n\t\t\tlocalMessage: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\n\t\t/**\n\t\t * Is the current user the author of this comment\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\tisOwnComment() {\n\t\t\treturn getCurrentUser().uid === this.actorId\n\t\t},\n\n\t\t/**\n\t\t * Rendered content as html string\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\trenderedContent() {\n\t\t\tif (this.isEmptyMessage) {\n\t\t\t\treturn ''\n\t\t\t}\n\t\t\treturn this.renderContent(this.localMessage)\n\t\t},\n\n\t\tisEmptyMessage() {\n\t\t\treturn !this.localMessage || this.localMessage.trim() === ''\n\t\t},\n\n\t\ttimestamp() {\n\t\t\t// seconds, not milliseconds\n\t\t\treturn parseInt(moment(this.creationDateTime).format('x'), 10) / 1000\n\t\t},\n\t},\n\n\twatch: {\n\t\t// If the data change, update the local value\n\t\tmessage(message) {\n\t\t\tthis.updateLocalMessage(message)\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\t// Init localMessage\n\t\tthis.updateLocalMessage(this.message)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Update local Message on outer change\n\t\t *\n\t\t * @param {string} message the message to set\n\t\t */\n\t\tupdateLocalMessage(message) {\n\t\t\tthis.localMessage = message.toString()\n\t\t},\n\n\t\t/**\n\t\t * Dispatch message between edit and create\n\t\t */\n\t\tonSubmit() {\n\t\t\t// Do not submit if message is empty\n\t\t\tif (this.localMessage.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.editor) {\n\t\t\t\tthis.onNewComment(this.localMessage.trim())\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t// Focus the editor again\n\t\t\t\t\tthis.$refs.editor.$el.focus()\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.onEditComment(this.localMessage.trim())\n\t\t},\n\n\t\tonExpand() {\n\t\t\tthis.expanded = true\n\t\t},\n\t},\n\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use \"sass:math\";\n\n$comment-padding: 10px;\n\n.comment {\n\tdisplay: flex;\n\tgap: 16px;\n\tposition: relative;\n\tpadding: 5px $comment-padding;\n\n\t&__side {\n\t\tdisplay: flex;\n\t\talign-items: flex-start;\n\t\tpadding-top: 16px;\n\t}\n\n\t&__body {\n\t\tdisplay: flex;\n\t\tflex-grow: 1;\n\t\tflex-direction: column;\n\t}\n\n\t&__header {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tmin-height: 44px;\n\t}\n\n\t&__actions {\n\t\tmargin-left: $comment-padding !important;\n\t}\n\n\t&__author {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&_loading,\n\t&__timestamp {\n\t\tmargin-left: auto;\n\t\ttext-align: right;\n\t\twhite-space: nowrap;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\n\t&__submit {\n\t\tposition: absolute !important;\n\t\tright: 0;\n\t\tbottom: 0;\n\t\t// Align with input border\n\t\tmargin: 1px;\n\t}\n\n\t&__message {\n\t\twhite-space: pre-wrap;\n\t\tword-break: break-word;\n\t\tmax-height: 70px;\n\t\toverflow: hidden;\n\t\tmargin-top: -6px;\n\t\t&--expanded {\n\t\t\tmax-height: none;\n\t\t\toverflow: visible;\n\t\t}\n\t}\n}\n\n.rich-contenteditable__input {\n\tmin-height: 44px;\n\tmargin: 0;\n\tpadding: $comment-padding;\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=13a1afc1&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comment.vue?vue&type=style&index=0&id=13a1afc1&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comment.vue?vue&type=template&id=13a1afc1&scoped=true&\"\nimport script from \"./Comment.vue?vue&type=script&lang=js&\"\nexport * from \"./Comment.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Comment.vue?vue&type=style&index=0&id=13a1afc1&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13a1afc1\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c(_vm.tag,{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.deleted),expression:\"!deleted\"}],tag:\"component\",staticClass:\"comment\",class:{'comment--loading': _vm.loading}},[_c('div',{staticClass:\"comment__side\"},[_c('NcAvatar',{staticClass:\"comment__avatar\",attrs:{\"display-name\":_vm.actorDisplayName,\"user\":_vm.actorId,\"size\":32}})],1),_vm._v(\" \"),_c('div',{staticClass:\"comment__body\"},[_c('div',{staticClass:\"comment__header\"},[_c('span',{staticClass:\"comment__author\"},[_vm._v(_vm._s(_vm.actorDisplayName))]),_vm._v(\" \"),(_vm.isOwnComment && _vm.id && !_vm.loading)?_c('NcActions',{staticClass:\"comment__actions\"},[(!_vm.editing)?[_c('NcActionButton',{attrs:{\"close-after-click\":true,\"icon\":\"icon-rename\"},on:{\"click\":_vm.onEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Edit comment'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('NcActionSeparator'),_vm._v(\" \"),_c('NcActionButton',{attrs:{\"close-after-click\":true,\"icon\":\"icon-delete\"},on:{\"click\":_vm.onDeleteWithUndo}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Delete comment'))+\"\\n\\t\\t\\t\\t\\t\")])]:_c('NcActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":_vm.onEditCancel}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Cancel edit'))+\"\\n\\t\\t\\t\\t\")])],2):_vm._e(),_vm._v(\" \"),(_vm.id && _vm.loading)?_c('div',{staticClass:\"comment_loading icon-loading-small\"}):(_vm.creationDateTime)?_c('Moment',{staticClass:\"comment__timestamp\",attrs:{\"timestamp\":_vm.timestamp}}):_vm._e()],1),_vm._v(\" \"),(_vm.editor || _vm.editing)?_c('div',{staticClass:\"comment__editor\"},[_c('NcRichContenteditable',{ref:\"editor\",attrs:{\"auto-complete\":_vm.autoComplete,\"contenteditable\":!_vm.loading,\"value\":_vm.localMessage,\"user-data\":_vm.userData},on:{\"update:value\":_vm.updateLocalMessage,\"submit\":_vm.onSubmit}}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comment__submit\",attrs:{\"type\":\"tertiary-no-background\",\"native-type\":\"submit\",\"aria-label\":_vm.t('comments', 'Post comment'),\"disabled\":_vm.isEmptyMessage},on:{\"click\":_vm.onSubmit},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [(_vm.loading)?_c('span',{staticClass:\"icon-loading-small\"}):_c('ArrowRight',{attrs:{\"size\":20}})]},proxy:true}],null,false,2357784758)})],1):_c('div',{staticClass:\"comment__message\",class:{'comment__message--expanded': _vm.expanded},domProps:{\"innerHTML\":_vm._s(_vm.renderedContent)},on:{\"click\":_vm.onExpand}})])])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { parseXML, type DAVResult, type FileStat } from 'webdav'\n\n// https://github.com/perry-mitchell/webdav-client/issues/339\nimport { processResponsePayload } from '../../../../node_modules/webdav/dist/node/response.js'\nimport { prepareFileFromProps } from '../../../../node_modules/webdav/dist/node/tools/dav.js'\nimport client from './DavClient.js'\n\nexport const DEFAULT_LIMIT = 20\n\n/**\n * Retrieve the comments list\n *\n * @param {object} data destructuring object\n * @param {string} data.commentsType the ressource type\n * @param {number} data.ressourceId the ressource ID\n * @param {object} [options] optional options for axios\n * @param {number} [options.offset] the pagination offset\n * @return {object[]} the comments list\n */\nexport const getComments = async function({ commentsType, ressourceId }, options: { offset: number }) {\n\tconst ressourcePath = ['', commentsType, ressourceId].join('/')\n\n\tconst response = await client.customRequest(ressourcePath, Object.assign({\n\t\tmethod: 'REPORT',\n\t\tdata: `<?xml version=\"1.0\"?>\n\t\t\t<oc:filter-comments\n\t\t\t\txmlns:d=\"DAV:\"\n\t\t\t\txmlns:oc=\"http://owncloud.org/ns\"\n\t\t\t\txmlns:nc=\"http://nextcloud.org/ns\"\n\t\t\t\txmlns:ocs=\"http://open-collaboration-services.org/ns\">\n\t\t\t\t<oc:limit>${DEFAULT_LIMIT}</oc:limit>\n\t\t\t\t<oc:offset>${options.offset || 0}</oc:offset>\n\t\t\t</oc:filter-comments>`,\n\t}, options))\n\n\tconst responseData = await response.text()\n\tconst result = await parseXML(responseData)\n\tconst stat = getDirectoryFiles(result, true)\n\treturn processResponsePayload(response, stat, true)\n}\n\n// https://github.com/perry-mitchell/webdav-client/blob/8d9694613c978ce7404e26a401c39a41f125f87f/source/operations/directoryContents.ts\nconst getDirectoryFiles = function(\n\tresult: DAVResult,\n\tisDetailed = false,\n): Array<FileStat> {\n\t// Extract the response items (directory contents)\n\tconst {\n\t\tmultistatus: { response: responseItems },\n\t} = result\n\n\t// Map all items to a consistent output structure (results)\n\treturn responseItems.map(item => {\n\t\t// Each item should contain a stat object\n\t\tconst {\n\t\t\tpropstat: { prop: props },\n\t\t} = item\n\n\t\treturn prepareFileFromProps(props, props.id.toString(), isDetailed)\n\t})\n}\n","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Richard Steinmetz <richard@steinmetz.cloud>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (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 Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"comments\" :class=\"{ 'icon-loading': isFirstLoading }\">\n\t\t<!-- Editor -->\n\t\t<Comment v-bind=\"editorData\"\n\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t:user-data=\"userData\"\n\t\t\t:editor=\"true\"\n\t\t\t:ressource-id=\"ressourceId\"\n\t\t\tclass=\"comments__writer\"\n\t\t\t@new=\"onNewComment\" />\n\n\t\t<template v-if=\"!isFirstLoading\">\n\t\t\t<NcEmptyContent v-if=\"!hasComments && done\"\n\t\t\t\tclass=\"comments__empty\"\n\t\t\t\t:title=\"t('comments', 'No comments yet, start the conversation!')\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MessageReplyTextIcon />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t\t<ul v-else>\n\t\t\t\t<!-- Comments -->\n\t\t\t\t<Comment v-for=\"comment in comments\"\n\t\t\t\t\t:key=\"comment.props.id\"\n\t\t\t\t\ttag=\"li\"\n\t\t\t\t\tv-bind=\"comment.props\"\n\t\t\t\t\t:auto-complete=\"autoComplete\"\n\t\t\t\t\t:message.sync=\"comment.props.message\"\n\t\t\t\t\t:ressource-id=\"ressourceId\"\n\t\t\t\t\t:user-data=\"genMentionsData(comment.props.mentions)\"\n\t\t\t\t\tclass=\"comments__list\"\n\t\t\t\t\t@delete=\"onDelete\" />\n\t\t\t</ul>\n\n\t\t\t<!-- Loading more message -->\n\t\t\t<div v-if=\"loading && !isFirstLoading\" class=\"comments__info icon-loading\" />\n\n\t\t\t<div v-else-if=\"hasComments && done\" class=\"comments__info\">\n\t\t\t\t{{ t('comments', 'No more messages') }}\n\t\t\t</div>\n\n\t\t\t<!-- Error message -->\n\t\t\t<template v-else-if=\"error\">\n\t\t\t\t<NcEmptyContent class=\"comments__error\" :title=\"error\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertCircleOutlineIcon />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t\t<NcButton class=\"comments__retry\" @click=\"getComments\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<RefreshIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ t('comments', 'Retry') }}\n\t\t\t\t</NcButton>\n\t\t\t</template>\n\t\t</template>\n\t</div>\n</template>\n\n<script>\nimport { generateOcsUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport axios from '@nextcloud/axios'\nimport VTooltip from 'v-tooltip'\nimport Vue from 'vue'\n\nimport NcEmptyContent from '@nextcloud/vue/dist/Components/NcEmptyContent.js'\nimport NcButton from '@nextcloud/vue/dist/Components/NcButton.js'\nimport RefreshIcon from 'vue-material-design-icons/Refresh.vue'\nimport MessageReplyTextIcon from 'vue-material-design-icons/MessageReplyText.vue'\nimport AlertCircleOutlineIcon from 'vue-material-design-icons/AlertCircleOutline.vue'\n\nimport Comment from '../components/Comment.vue'\nimport { getComments, DEFAULT_LIMIT } from '../services/GetComments.ts'\nimport cancelableRequest from '../utils/cancelableRequest.js'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'Comments',\n\n\tcomponents: {\n\t\t// Avatar,\n\t\tComment,\n\t\tNcEmptyContent,\n\t\tNcButton,\n\t\tRefreshIcon,\n\t\tMessageReplyTextIcon,\n\t\tAlertCircleOutlineIcon,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\terror: '',\n\t\t\tloading: false,\n\t\t\tdone: false,\n\n\t\t\tressourceId: null,\n\t\t\toffset: 0,\n\t\t\tcomments: [],\n\n\t\t\tcancelRequest: () => {},\n\n\t\t\teditorData: {\n\t\t\t\tactorDisplayName: getCurrentUser().displayName,\n\t\t\t\tactorId: getCurrentUser().uid,\n\t\t\t\tkey: 'editor',\n\t\t\t},\n\n\t\t\tComment,\n\t\t\tuserData: {},\n\t\t}\n\t},\n\n\tcomputed: {\n\t\thasComments() {\n\t\t\treturn this.comments.length > 0\n\t\t},\n\t\tisFirstLoading() {\n\t\t\treturn this.loading && this.offset === 0\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Update current ressourceId and fetch new data\n\t\t *\n\t\t * @param {number} ressourceId the current ressourceId (fileId...)\n\t\t */\n\t\tasync update(ressourceId) {\n\t\t\tthis.ressourceId = ressourceId\n\t\t\tthis.resetState()\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Ran when the bottom of the tab is reached\n\t\t */\n\t\tonScrollBottomReached() {\n\t\t\t/**\n\t\t\t * Do not fetch more if we:\n\t\t\t * - are showing an error\n\t\t\t * - already fetched everything\n\t\t\t * - are currently loading\n\t\t\t */\n\t\t\tif (this.error || this.done || this.loading) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.getComments()\n\t\t},\n\n\t\t/**\n\t\t * Make sure we have all mentions as Array of objects\n\t\t *\n\t\t * @param {Array} mentions the mentions list\n\t\t * @return {Object<string, object>}\n\t\t */\n\t\tgenMentionsData(mentions) {\n\t\t\tObject.values(mentions)\n\t\t\t\t.flat()\n\t\t\t\t.forEach(mention => {\n\t\t\t\t\tthis.userData[mention.mentionId] = {\n\t\t\t\t\t\t// TODO: support groups\n\t\t\t\t\t\ticon: 'icon-user',\n\t\t\t\t\t\tid: mention.mentionId,\n\t\t\t\t\t\tlabel: mention.mentionDisplayName,\n\t\t\t\t\t\tsource: 'users',\n\t\t\t\t\t\tprimary: getCurrentUser().uid === mention.mentionId,\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\treturn this.userData\n\t\t},\n\n\t\t/**\n\t\t * Get the existing shares infos\n\t\t */\n\t\tasync getComments() {\n\t\t\t// Cancel any ongoing request\n\t\t\tthis.cancelRequest('cancel')\n\n\t\t\ttry {\n\t\t\t\tthis.loading = true\n\t\t\t\tthis.error = ''\n\n\t\t\t\t// Init cancellable request\n\t\t\t\tconst { request, abort } = cancelableRequest(getComments)\n\t\t\t\tthis.cancelRequest = abort\n\n\t\t\t\t// Fetch comments\n\t\t\t\tconst { data: comments } = await request({\n\t\t\t\t\tcommentsType: this.commentsType,\n\t\t\t\t\tressourceId: this.ressourceId,\n\t\t\t\t}, { offset: this.offset }) || { data: [] }\n\n\t\t\t\tthis.logger.debug(`Processed ${comments.length} comments`, { comments })\n\n\t\t\t\t// We received less than the requested amount,\n\t\t\t\t// we're done fetching comments\n\t\t\t\tif (comments.length < DEFAULT_LIMIT) {\n\t\t\t\t\tthis.done = true\n\t\t\t\t}\n\n\t\t\t\t// Insert results\n\t\t\t\tthis.comments.push(...comments)\n\n\t\t\t\t// Increase offset for next fetch\n\t\t\t\tthis.offset += DEFAULT_LIMIT\n\t\t\t} catch (error) {\n\t\t\t\tif (error.message === 'cancel') {\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.error = t('comments', 'Unable to load the comments list')\n\t\t\t\tconsole.error('Error loading the comments list', error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Autocomplete @mentions\n\t\t *\n\t\t * @param {string} search the query\n\t\t * @param {Function} callback the callback to process the results with\n\t\t */\n\t\tasync autoComplete(search, callback) {\n\t\t\tconst results = await axios.get(generateOcsUrl('core/autocomplete/get'), {\n\t\t\t\tparams: {\n\t\t\t\t\tsearch,\n\t\t\t\t\titemType: 'files',\n\t\t\t\t\titemId: this.ressourceId,\n\t\t\t\t\tsorter: 'commenters|share-recipients',\n\t\t\t\t\tlimit: loadState('comments', 'maxAutoCompleteResults'),\n\t\t\t\t},\n\t\t\t})\n\t\t\t// Save user data so it can be used by the editor to replace mentions\n\t\t\tresults.data.ocs.data.forEach(user => { this.userData[user.id] = user })\n\t\t\treturn callback(Object.values(this.userData))\n\t\t},\n\n\t\t/**\n\t\t * Add newly created comment to the list\n\t\t *\n\t\t * @param {object} comment the new comment\n\t\t */\n\t\tonNewComment(comment) {\n\t\t\tthis.comments.unshift(comment)\n\t\t},\n\n\t\t/**\n\t\t * Remove deleted comment from the list\n\t\t *\n\t\t * @param {number} id the deleted comment\n\t\t */\n\t\tonDelete(id) {\n\t\t\tconst index = this.comments.findIndex(comment => comment.props.id === id)\n\t\t\tif (index > -1) {\n\t\t\t\tthis.comments.splice(index, 1)\n\t\t\t} else {\n\t\t\t\tconsole.error('Could not find the deleted comment in the list', id)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Reset the current view to its default state\n\t\t */\n\t\tresetState() {\n\t\t\tthis.error = ''\n\t\t\tthis.loading = false\n\t\t\tthis.done = false\n\t\t\tthis.offset = 0\n\t\t\tthis.comments = []\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.comments {\n\t// Do not add emptycontent top margin\n\t&__empty,\n\t&__error {\n\t\tmargin-top: 0 !important;\n\t}\n\n\t&__retry {\n\t\tmargin: 0 auto;\n\t}\n\n\t&__info {\n\t\theight: 60px;\n\t\tcolor: var(--color-text-maxcontrast);\n\t\ttext-align: center;\n\t\tline-height: 60px;\n\t}\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=script&lang=js&\"","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n/**\n * Creates a cancelable axios 'request object'.\n *\n * @param {Function} request the axios promise request\n * @return {object}\n */\nconst cancelableRequest = function(request) {\n\tconst controller = new AbortController()\n\tconst signal = controller.signal\n\n\t/**\n\t * Execute the request\n\t *\n\t * @param {string} url the url to send the request to\n\t * @param {object} [options] optional config for the request\n\t */\n\tconst fetch = async function(url, options) {\n\t\tconst response = await request(\n\t\t\turl,\n\t\t\tObject.assign({ signal }, options)\n\t\t)\n\t\treturn response\n\t}\n\n\treturn {\n\t\trequest: fetch,\n\t\tabort: () => controller.abort(),\n\t}\n}\n\nexport default cancelableRequest\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=9e9ed272&prod&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Comments.vue?vue&type=style&index=0&id=9e9ed272&prod&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Comments.vue?vue&type=template&id=9e9ed272&scoped=true&\"\nimport script from \"./Comments.vue?vue&type=script&lang=js&\"\nexport * from \"./Comments.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Comments.vue?vue&type=style&index=0&id=9e9ed272&prod&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9e9ed272\",\n null\n \n)\n\nexport default component.exports","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('div',{staticClass:\"comments\",class:{ 'icon-loading': _vm.isFirstLoading }},[_c('Comment',_vm._b({staticClass:\"comments__writer\",attrs:{\"auto-complete\":_vm.autoComplete,\"user-data\":_vm.userData,\"editor\":true,\"ressource-id\":_vm.ressourceId},on:{\"new\":_vm.onNewComment}},'Comment',_vm.editorData,false)),_vm._v(\" \"),(!_vm.isFirstLoading)?[(!_vm.hasComments && _vm.done)?_c('NcEmptyContent',{staticClass:\"comments__empty\",attrs:{\"title\":_vm.t('comments', 'No comments yet, start the conversation!')},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('MessageReplyTextIcon')]},proxy:true}],null,false,1033639148)}):_c('ul',_vm._l((_vm.comments),function(comment){return _c('Comment',_vm._b({key:comment.props.id,staticClass:\"comments__list\",attrs:{\"tag\":\"li\",\"auto-complete\":_vm.autoComplete,\"message\":comment.props.message,\"ressource-id\":_vm.ressourceId,\"user-data\":_vm.genMentionsData(comment.props.mentions)},on:{\"update:message\":function($event){return _vm.$set(comment.props, \"message\", $event)},\"delete\":_vm.onDelete}},'Comment',comment.props,false))}),1),_vm._v(\" \"),(_vm.loading && !_vm.isFirstLoading)?_c('div',{staticClass:\"comments__info icon-loading\"}):(_vm.hasComments && _vm.done)?_c('div',{staticClass:\"comments__info\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('comments', 'No more messages'))+\"\\n\\t\\t\")]):(_vm.error)?[_c('NcEmptyContent',{staticClass:\"comments__error\",attrs:{\"title\":_vm.error},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('AlertCircleOutlineIcon')]},proxy:true}],null,false,66050004)}),_vm._v(\" \"),_c('NcButton',{staticClass:\"comments__retry\",on:{\"click\":_vm.getComments},scopedSlots:_vm._u([{key:\"icon\",fn:function(){return [_c('RefreshIcon')]},proxy:true}],null,false,3924573781)},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('comments', 'Retry'))+\"\\n\\t\\t\\t\")])]:_vm._e()]:_vm._e()],2)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { getLoggerBuilder } from '@nextcloud/logger'\nimport { translate as t, translatePlural as n } from '@nextcloud/l10n'\nimport CommentsApp from '../views/Comments.vue'\nimport Vue from 'vue'\n\nconst logger = getLoggerBuilder()\n\t.setApp('comments')\n\t.detectUser()\n\t.build()\n\n// Add translates functions\nVue.mixin({\n\tdata() {\n\t\treturn {\n\t\t\tlogger,\n\t\t}\n\t},\n\tmethods: {\n\t\tt,\n\t\tn,\n\t},\n})\n\nexport default class CommentInstance {\n\n\t/**\n\t * Initialize a new Comments instance for the desired type\n\t *\n\t * @param {string} commentsType the comments endpoint type\n\t * @param {object} options the vue options (propsData, parent, el...)\n\t */\n\tconstructor(commentsType = 'files', options) {\n\t\t// Add comments type as a global mixin\n\t\tVue.mixin({\n\t\t\tdata() {\n\t\t\t\treturn {\n\t\t\t\t\tcommentsType,\n\t\t\t\t}\n\t\t\t},\n\t\t})\n\n\t\t// Init Comments component\n\t\tconst View = Vue.extend(CommentsApp)\n\t\treturn new View(options)\n\t}\n\n}\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (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 Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport CommentsInstance from './services/CommentsInstance.js'\n\n// Init Comments\nif (window.OCA && !window.OCA.Comments) {\n\tObject.assign(window.OCA, { Comments: {} })\n}\n\n// Init Comments App view\nObject.assign(window.OCA.Comments, { View: CommentsInstance })\nconsole.debug('OCA.Comments.View initialized')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".comment[data-v-13a1afc1]{display:flex;gap:16px;position:relative;padding:5px 10px}.comment__side[data-v-13a1afc1]{display:flex;align-items:flex-start;padding-top:16px}.comment__body[data-v-13a1afc1]{display:flex;flex-grow:1;flex-direction:column}.comment__header[data-v-13a1afc1]{display:flex;align-items:center;min-height:44px}.comment__actions[data-v-13a1afc1]{margin-left:10px !important}.comment__author[data-v-13a1afc1]{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:var(--color-text-maxcontrast)}.comment_loading[data-v-13a1afc1],.comment__timestamp[data-v-13a1afc1]{margin-left:auto;text-align:right;white-space:nowrap;color:var(--color-text-maxcontrast)}.comment__submit[data-v-13a1afc1]{position:absolute !important;right:0;bottom:0;margin:1px}.comment__message[data-v-13a1afc1]{white-space:pre-wrap;word-break:break-word;max-height:70px;overflow:hidden;margin-top:-6px}.comment__message--expanded[data-v-13a1afc1]{max-height:none;overflow:visible}.rich-contenteditable__input[data-v-13a1afc1]{min-height:44px;margin:0;padding:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/components/Comment.vue\"],\"names\":[],\"mappings\":\"AAKA,0BACC,YAAA,CACA,QAAA,CACA,iBAAA,CACA,gBAAA,CAEA,gCACC,YAAA,CACA,sBAAA,CACA,gBAAA,CAGD,gCACC,YAAA,CACA,WAAA,CACA,qBAAA,CAGD,kCACC,YAAA,CACA,kBAAA,CACA,eAAA,CAGD,mCACC,2BAAA,CAGD,kCACC,eAAA,CACA,kBAAA,CACA,sBAAA,CACA,mCAAA,CAGD,uEAEC,gBAAA,CACA,gBAAA,CACA,kBAAA,CACA,mCAAA,CAGD,kCACC,4BAAA,CACA,OAAA,CACA,QAAA,CAEA,UAAA,CAGD,mCACC,oBAAA,CACA,qBAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CACA,6CACC,eAAA,CACA,gBAAA,CAKH,8CACC,eAAA,CACA,QAAA,CACA,YArEiB\",\"sourcesContent\":[\"\\n@use \\\"sass:math\\\";\\n\\n$comment-padding: 10px;\\n\\n.comment {\\n\\tdisplay: flex;\\n\\tgap: 16px;\\n\\tposition: relative;\\n\\tpadding: 5px $comment-padding;\\n\\n\\t&__side {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: flex-start;\\n\\t\\tpadding-top: 16px;\\n\\t}\\n\\n\\t&__body {\\n\\t\\tdisplay: flex;\\n\\t\\tflex-grow: 1;\\n\\t\\tflex-direction: column;\\n\\t}\\n\\n\\t&__header {\\n\\t\\tdisplay: flex;\\n\\t\\talign-items: center;\\n\\t\\tmin-height: 44px;\\n\\t}\\n\\n\\t&__actions {\\n\\t\\tmargin-left: $comment-padding !important;\\n\\t}\\n\\n\\t&__author {\\n\\t\\toverflow: hidden;\\n\\t\\twhite-space: nowrap;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&_loading,\\n\\t&__timestamp {\\n\\t\\tmargin-left: auto;\\n\\t\\ttext-align: right;\\n\\t\\twhite-space: nowrap;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t}\\n\\n\\t&__submit {\\n\\t\\tposition: absolute !important;\\n\\t\\tright: 0;\\n\\t\\tbottom: 0;\\n\\t\\t// Align with input border\\n\\t\\tmargin: 1px;\\n\\t}\\n\\n\\t&__message {\\n\\t\\twhite-space: pre-wrap;\\n\\t\\tword-break: break-word;\\n\\t\\tmax-height: 70px;\\n\\t\\toverflow: hidden;\\n\\t\\tmargin-top: -6px;\\n\\t\\t&--expanded {\\n\\t\\t\\tmax-height: none;\\n\\t\\t\\toverflow: visible;\\n\\t\\t}\\n\\t}\\n}\\n\\n.rich-contenteditable__input {\\n\\tmin-height: 44px;\\n\\tmargin: 0;\\n\\tpadding: $comment-padding;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".comments__empty[data-v-9e9ed272],.comments__error[data-v-9e9ed272]{margin-top:0 !important}.comments__retry[data-v-9e9ed272]{margin:0 auto}.comments__info[data-v-9e9ed272]{height:60px;color:var(--color-text-maxcontrast);text-align:center;line-height:60px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/comments/src/views/Comments.vue\"],\"names\":[],\"mappings\":\"AAGC,oEAEC,uBAAA,CAGD,kCACC,aAAA,CAGD,iCACC,WAAA,CACA,mCAAA,CACA,iBAAA,CACA,gBAAA\",\"sourcesContent\":[\"\\n.comments {\\n\\t// Do not add emptycontent top margin\\n\\t&__empty,\\n\\t&__error {\\n\\t\\tmargin-top: 0 !important;\\n\\t}\\n\\n\\t&__retry {\\n\\t\\tmargin: 0 auto;\\n\\t}\\n\\n\\t&__info {\\n\\t\\theight: 60px;\\n\\t\\tcolor: var(--color-text-maxcontrast);\\n\\t\\ttext-align: center;\\n\\t\\tline-height: 60px;\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 6335;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t6335: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","__webpack_require__.nc = undefined;","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [7874], () => (__webpack_require__(43075)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","name","props","timestamp","type","required","format","default","computed","title","formatted","_vm","this","_c","_self","staticClass","attrs","_v","_s","getRootPath","generateRemoteUrl","decodeHtmlEntities","value","passes","parser","DOMParser","decoded","i","parseFromString","documentElement","textContent","createClient","headers","requesttoken","getRequestToken","id","Number","message","String","ressourceId","data","deleted","editing","loading","methods","onEdit","onEditCancel","updateLocalMessage","async","commentsType","commentId","commentPath","join","client","Object","assign","method","EditComment","logger","debug","$emit","error","showError","t","console","onDeleteWithUndo","timeOutDelete","setTimeout","onDelete","TOAST_UNDO_TIMEOUT","showUndo","clearTimeout","DeleteComment","newComment","ressourcePath","response","axios","actorDisplayName","getCurrentUser","displayName","actorId","uid","actorType","creationDateTime","Date","toUTCString","objectType","verb","parseInt","split","pop","comment","details","NewComment","localMessage","components","NcActionButton","NcActions","NcActionSeparator","ArrowRight","NcAvatar","NcButton","Moment","NcRichContenteditable","mixins","inheritAttrs","editor","autoComplete","tag","expanded","isOwnComment","renderedContent","isEmptyMessage","watch","beforeMount","onSubmit","onExpand","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","directives","rawName","expression","class","on","_e","ref","userData","scopedSlots","_u","key","fn","proxy","domProps","getComments","offset","responseData","text","result","parseXML","stat","getDirectoryFiles","processResponsePayload","isDetailed","multistatus","responseItems","map","item","propstat","prop","prepareFileFromProps","toString","Vue","Comment","NcEmptyContent","RefreshIcon","MessageReplyTextIcon","AlertCircleOutlineIcon","done","comments","cancelRequest","editorData","hasComments","isFirstLoading","onScrollBottomReached","genMentionsData","flat","forEach","icon","label","source","primary","request","abort","controller","AbortController","signal","url","params","search","itemType","itemId","sorter","limit","results","onNewComment","resetState","_b","_l","mentions","$event","$set","getLoggerBuilder","setApp","detectUser","build","n","window","OCA","Comments","View","constructor","CommentsApp","___CSS_LOADER_EXPORT___","push","module","webpackContext","req","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","resolve","exports","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","O","chunkIds","priority","notFulfilled","Infinity","length","fulfilled","j","every","splice","r","getter","__esModule","d","a","definition","defineProperty","enumerable","get","g","globalThis","Function","obj","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","b","document","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","bind","nc","__webpack_exports__"],"sourceRoot":""}