{"version":3,"file":"cfg_share_links-regNewLink.mjs","sources":["../node_modules/@nextcloud/vue/dist/chunks/NcCounterBubble-CDfRYl8B.mjs","../node_modules/vue-material-design-icons/Lock.vue","../node_modules/vue-material-design-icons/Plus.vue","../src/components/CustomListItem.vue","../src/components/NewLink.vue","../src/reg_new_link.ts"],"sourcesContent":["import '../assets/NcCounterBubble-CI-DxLjL.css';\nimport { getCanonicalLocale } from \"@nextcloud/l10n\";\nimport { n as normalizeComponent } from \"./_plugin-vue2_normalizer-DU4iP6Vu.mjs\";\nconst _sfc_main = {\n  name: \"NcCounterBubble\",\n  props: {\n    type: {\n      type: String,\n      default: \"\",\n      validator(value) {\n        return [\"highlighted\", \"outlined\", \"\"].includes(value);\n      }\n    },\n    /**\n     * Specifies whether the component is used within a component that is\n     * active and therefore has a primary background. Inverts the color of\n     * this component when that is the case.\n     */\n    active: {\n      type: Boolean,\n      default: false\n    },\n    /**\n     * The count to display in the counter bubble.\n     * Alternatively, you can pass any value to the default slot.\n     */\n    count: {\n      type: Number,\n      required: false,\n      default: void 0\n    },\n    /**\n     * Disables humanization to display count or content as it is\n     */\n    raw: {\n      type: Boolean,\n      required: false,\n      default: false\n    }\n  },\n  computed: {\n    counterClassObject() {\n      return {\n        \"counter-bubble__counter--highlighted\": this.type === \"highlighted\",\n        \"counter-bubble__counter--outlined\": this.type === \"outlined\",\n        active: this.active\n      };\n    },\n    humanizedCount() {\n      return this.humanizeCount(this.count);\n    }\n  },\n  methods: {\n    humanizeCount(count) {\n      if (this.raw) {\n        return count.toString();\n      }\n      const formatter = new Intl.NumberFormat(getCanonicalLocale(), {\n        notation: \"compact\",\n        compactDisplay: \"short\"\n      });\n      return formatter.format(count);\n    },\n    /**\n     * Get the humanized count from `count` prop\n     * @return {{ humanized: string, original: string} | undefined}\n     */\n    getHumanizedCount() {\n      if (this.count !== void 0) {\n        return {\n          humanized: this.humanizedCount,\n          original: this.count.toString()\n        };\n      }\n      if (this.raw) {\n        return void 0;\n      }\n      if (this.$slots.default?.length === 1) {\n        const slotContent = this.$slots.default[0].text?.trim();\n        if (slotContent && /^\\d+$/.test(slotContent)) {\n          const count = parseInt(slotContent, 10);\n          return {\n            humanized: this.humanizeCount(count),\n            original: slotContent\n          };\n        }\n      }\n    }\n  },\n  render(h) {\n    const count = this.getHumanizedCount();\n    return h(\"div\", {\n      staticClass: \"counter-bubble__counter\",\n      class: this.counterClassObject,\n      attrs: {\n        // Show original count in title if humanized\n        title: count && count.original !== count.humanized ? count.original : void 0\n      }\n    }, [count?.humanized ?? this.$slots.default]);\n  }\n};\nconst _sfc_render = null;\nconst _sfc_staticRenderFns = null;\nvar __component__ = /* @__PURE__ */ normalizeComponent(\n  _sfc_main,\n  _sfc_render,\n  _sfc_staticRenderFns,\n  false,\n  null,\n  \"f1abaa29\"\n);\nconst NcCounterBubble = __component__.exports;\nexport {\n  NcCounterBubble as N\n};\n","<template>\n  <span v-bind=\"$attrs\"\n        :aria-hidden=\"title ? null : 'true'\"\n        :aria-label=\"title\"\n        class=\"material-design-icon lock-icon\"\n        role=\"img\"\n        @click=\"$emit('click', $event)\">\n    <svg :fill=\"fillColor\"\n         class=\"material-design-icon__svg\"\n         :width=\"size\"\n         :height=\"size\"\n         viewBox=\"0 0 24 24\">\n      <path d=\"M12,17A2,2 0 0,0 14,15C14,13.89 13.1,13 12,13A2,2 0 0,0 10,15A2,2 0 0,0 12,17M18,8A2,2 0 0,1 20,10V20A2,2 0 0,1 18,22H6A2,2 0 0,1 4,20V10C4,8.89 4.9,8 6,8H7V6A5,5 0 0,1 12,1A5,5 0 0,1 17,6V8H18M12,3A3,3 0 0,0 9,6V8H15V6A3,3 0 0,0 12,3Z\">\n        <title v-if=\"title\">{{ title }}</title>\n      </path>\n    </svg>\n  </span>\n</template>\n\n<script>\nexport default {\n  name: \"LockIcon\",\n  emits: ['click'],\n  props: {\n    title: {\n      type: String,\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n}\n</script>","<template>\n  <span v-bind=\"$attrs\"\n        :aria-hidden=\"title ? null : 'true'\"\n        :aria-label=\"title\"\n        class=\"material-design-icon plus-icon\"\n        role=\"img\"\n        @click=\"$emit('click', $event)\">\n    <svg :fill=\"fillColor\"\n         class=\"material-design-icon__svg\"\n         :width=\"size\"\n         :height=\"size\"\n         viewBox=\"0 0 24 24\">\n      <path d=\"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\">\n        <title v-if=\"title\">{{ title }}</title>\n      </path>\n    </svg>\n  </span>\n</template>\n\n<script>\nexport default {\n  name: \"PlusIcon\",\n  emits: ['click'],\n  props: {\n    title: {\n      type: String,\n    },\n    fillColor: {\n      type: String,\n      default: \"currentColor\"\n    },\n    size: {\n      type: Number,\n      default: 24\n    }\n  }\n}\n</script>","<template>\n\t<!-- This wrapper can be either a router link or a `<li>` -->\n\t<nav-element\n\t\tclass=\"list-item__wrapper\"\n\t\t:class=\"{ 'list-item__wrapper--active': active }\"\n\t\tv-bind=\"navElement\">\n\t\t<div\n\t\t\t:id=\"anchorId\"\n\t\t\tref=\"list-item\"\n\t\t\tclass=\"list-item\"\n\t\t\t:aria-label=\"linkAriaLabel\"\n\t\t\t@mouseover=\"handleMouseover\"\n\t\t\t@mouseleave=\"handleMouseleave\"\n\t\t\t@focus=\"handleFocus\"\n\t\t\t@blur=\"handleBlur\"\n\t\t\t@keydown.tab.exact=\"handleTab\"\n\t\t\t@click=\"onClick\"\n\t\t\t@keydown.esc=\"hideActions\">\n\t\t\t<div\n\t\t\t\tclass=\"list-item-content__wrapper\"\n\t\t\t\t:class=\"{ 'list-item-content__wrapper--compact': compact }\">\n\t\t\t\t<!-- @slot This slot is used for the NcAvatar or icon -->\n\t\t\t\t<slot name=\"icon\" />\n\n\t\t\t\t<!-- Main content -->\n\t\t\t\t<div class=\"list-item-content\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"list-item-content__main\"\n\t\t\t\t\t\t:class=\"{ 'list-item-content__main--oneline': oneLine }\">\n\t\t\t\t\t\t<!-- First line, title and details -->\n\t\t\t\t\t\t<div class=\"line-one\">\n\t\t\t\t\t\t\t<span class=\"line-one__title\">\n\t\t\t\t\t\t\t\t{{ title }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span v-if=\"showDetails\" class=\"line-one__details\">\n\t\t\t\t\t\t\t\t{{ details }}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<!-- Second line, subtitle and counter -->\n\t\t\t\t\t\t<div class=\"line-two\" :class=\"{ 'line-one--bold': bold }\">\n\t\t\t\t\t\t\t<span v-if=\"hasSubtitle\" class=\"line-two__subtitle\">\n\t\t\t\t\t\t\t\t<!-- @slot Slot for the second line of the component -->\n\t\t\t\t\t\t\t\t<slot name=\"subtitle\" />\n\t\t\t\t\t\t\t</span>\n\n\t\t\t\t\t\t\t<!-- Counter and indicator -->\n\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\tv-if=\"showAdditionalElements\"\n\t\t\t\t\t\t\t\tclass=\"line-two__additional_elements\">\n\t\t\t\t\t\t\t\t<NcCounterBubble\n\t\t\t\t\t\t\t\t\tv-if=\"counterNumber !== 0\"\n\t\t\t\t\t\t\t\t\tclass=\"line-two__counter\"\n\t\t\t\t\t\t\t\t\t:type=\"counterType\">\n\t\t\t\t\t\t\t\t\t{{ counterNumber }}\n\t\t\t\t\t\t\t\t</NcCounterBubble>\n\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tv-if=\"hasIndicator\"\n\t\t\t\t\t\t\t\t\tclass=\"line-two__indicator\">\n\t\t\t\t\t\t\t\t\t<!-- @slot This slot is used for some indicator in form of icon -->\n\t\t\t\t\t\t\t\t\t<slot name=\"indicator\" />\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<!-- Actions -->\n\t\t\t\t\t<div\n\t\t\t\t\t\tv-show=\"displayActionsOnHoverFocus && !forceDisplayActions\"\n\t\t\t\t\t\tclass=\"list-item-content__actions\"\n\t\t\t\t\t\t@click.prevent.stop=\"\">\n\t\t\t\t\t\t<NcActions\n\t\t\t\t\t\t\tref=\"actions\"\n\t\t\t\t\t\t\tmenu-align=\"right\"\n\t\t\t\t\t\t\t:aria-label=\"actionsAriaLabel\"\n\t\t\t\t\t\t\t@update:open=\"handleActionsUpdateOpen\">\n\t\t\t\t\t\t\t<!-- @slot Provide the actions for the right side quick menu -->\n\t\t\t\t\t\t\t<slot name=\"actions\" />\n\t\t\t\t\t\t</NcActions>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<!-- Actions -->\n\t\t\t\t<div\n\t\t\t\t\tv-show=\"forceDisplayActions\"\n\t\t\t\t\tclass=\"list-item-content__actions\"\n\t\t\t\t\t@click.prevent.stop=\"\">\n\t\t\t\t\t<NcActions\n\t\t\t\t\t\tref=\"actions\"\n\t\t\t\t\t\tmenu-align=\"right\"\n\t\t\t\t\t\t:aria-label=\"actionsAriaLabel\"\n\t\t\t\t\t\t@update:open=\"handleActionsUpdateOpen\">\n\t\t\t\t\t\t<!-- @slot Provide the actions for the right side quick menu -->\n\t\t\t\t\t\t<slot name=\"actions\" />\n\t\t\t\t\t</NcActions>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t<!-- @slot Extra elements below the item -->\n\t\t\t<div v-if=\"$slots.extra\" class=\"list-item__extra\">\n\t\t\t\t<slot name=\"extra\" />\n\t\t\t</div>\n\t\t</div>\n\t</nav-element>\n</template>\n\n<script>\nimport { NcActions, NcCounterBubble } from '@nextcloud/vue'\n\nexport default {\n\tname: 'CustomListItem',\n\tcomponents: {\n\t\tNcActions,\n\t\tNcCounterBubble,\n\t},\n\tprops: {\n\t\t/**\n\t\t * The details text displayed in the upper right part of the component\n\t\t */\n\t\tdetails: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Title (first line of text)\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * Pass in `true` if you want the matching behavior to\n\t\t * be non-inclusive: https://router.vuejs.org/api/#exact\n\t\t */\n\t\texact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * The route for the router link.\n\t\t */\n\t\tto: {\n\t\t\ttype: [String, Object],\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * The value for the external link\n\t\t */\n\t\thref: {\n\t\t\ttype: String,\n\t\t\tdefault: '#',\n\t\t},\n\t\t/**\n\t\t * Id for the `<a>` element\n\t\t */\n\t\tanchorId: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Make subtitle bold\n\t\t */\n\t\tbold: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Show the NcListItem in compact design\n\t\t */\n\t\tcompact: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Toggle the active state of the component\n\t\t */\n\t\tactive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\t/**\n\t\t * Aria label for the wrapper element\n\t\t */\n\t\tlinkAriaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * Aria label for the actions toggle\n\t\t */\n\t\tactionsAriaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t\t/**\n\t\t * If different from 0 this component will display the\n\t\t * NcCounterBubble component\n\t\t */\n\t\tcounterNumber: {\n\t\t\ttype: [Number, String],\n\t\t\tdefault: 0,\n\t\t},\n\t\t/**\n\t\t * Outlined or highlighted state of the counter\n\t\t */\n\t\tcounterType: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['highlighted', 'outlined', ''].indexOf(value) !== -1\n\t\t\t},\n\t\t},\n\t\t/**\n\t\t * To be used only when the elements in the actions menu are very important\n\t\t */\n\t\tforceDisplayActions: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: ['click'],\n\tdata() {\n\t\treturn {\n\t\t\thovered: false,\n\t\t\tfocused: false,\n\t\t\thasActions: false,\n\t\t\thasSubtitle: false,\n\t\t\tdisplayActionsOnHoverFocus: false,\n\t\t\tmenuOpen: false,\n\t\t\thasIndicator: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasDetails() {\n\t\t\treturn this.details !== ''\n\t\t},\n\t\t// This is used to decide which outer element type to use\n\t\t// li or router-link\n\t\tnavElement() {\n\t\t\tif (this.to !== '') {\n\t\t\t\treturn {\n\t\t\t\t\tis: 'router-link',\n\t\t\t\t\ttag: 'li',\n\t\t\t\t\tto: this.to,\n\t\t\t\t\texact: this.exact,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tis: 'li',\n\t\t\t}\n\t\t},\n\t\toneLine() {\n\t\t\treturn !this.hasSubtitle && !this.showDetails\n\t\t},\n\t\tshowAdditionalElements() {\n\t\t\treturn !this.displayActionsOnHoverFocus || this.forceDisplayActions\n\t\t},\n\t\tshowDetails() {\n\t\t\treturn (\n\t\t\t\tthis.hasDetails &&\n\t\t\t\t(!this.displayActionsOnHoverFocus || this.forceDisplayActions)\n\t\t\t)\n\t\t},\n\t},\n\twatch: {\n\t\tmenuOpen(newValue) {\n\t\t\t// A click outside both the menu and the root element hides the actions again\n\t\t\tif (!newValue && !this.hovered) {\n\t\t\t\tthis.displayActionsOnHoverFocus = false\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.checkSlots()\n\t},\n\tupdated() {\n\t\tthis.checkSlots()\n\t},\n\tmethods: {\n\t\t// forward click event\n\t\tonClick(event) {\n\t\t\tthis.$emit('click', event)\n\t\t},\n\t\thandleMouseover() {\n\t\t\tthis.showActions()\n\t\t\tthis.hovered = true\n\t\t},\n\t\tshowActions() {\n\t\t\tif (this.hasActions) {\n\t\t\t\tthis.displayActionsOnHoverFocus = true\n\t\t\t}\n\t\t\tthis.hovered = false\n\t\t},\n\t\thideActions() {\n\t\t\tthis.displayActionsOnHoverFocus = false\n\t\t},\n\t\t/**\n\t\t * Show actions upon focus\n\t\t */\n\t\thandleFocus() {\n\t\t\tthis.focused = true\n\t\t\tthis.showActions()\n\t\t},\n\t\thandleBlur() {\n\t\t\tthis.focused = false\n\t\t},\n\t\t/**\n\t\t * Hide the actions on mouseleave unless the menu is open\n\t\t */\n\t\thandleMouseleave() {\n\t\t\tif (!this.menuOpen) {\n\t\t\t\tthis.displayActionsOnHoverFocus = false\n\t\t\t}\n\t\t\tthis.hovered = false\n\t\t},\n\t\t/**\n\t\t * This method checks if the root element of the component is focused and\n\t\t * if that's the case it focuses the actions button if available\n\t\t *\n\t\t * @param {Event} e the keydown event\n\t\t */\n\t\thandleTab(e) {\n\t\t\tif (this.focused && this.hasActions) {\n\t\t\t\te.preventDefault()\n\t\t\t\tthis.$refs.actions.$refs.menuButton.$el.focus()\n\t\t\t\tthis.focused = false\n\t\t\t} else {\n\t\t\t\tthis.displayActionsOnHoverFocus = false\n\t\t\t\tthis.$refs.actions.$refs.menuButton.$el.blur()\n\t\t\t}\n\t\t},\n\t\thandleActionsUpdateOpen(e) {\n\t\t\tthis.menuOpen = e\n\t\t\tthis.$emit('update:menuOpen', e)\n\t\t},\n\t\t// Check if subtitle and actions slots are populated\n\t\tcheckSlots() {\n\t\t\tif (this.hasActions !== !!this.$slots.actions) {\n\t\t\t\tthis.hasActions = !!this.$slots.actions\n\t\t\t}\n\t\t\tif (this.hasSubtitle !== !!this.$slots.subtitle) {\n\t\t\t\tthis.hasSubtitle = !!this.$slots.subtitle\n\t\t\t}\n\t\t\tif (this.hasIndicator !== !!this.$slots.indicator) {\n\t\t\t\tthis.hasIndicator = !!this.$slots.indicator\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.list-item__wrapper {\n\tposition: relative;\n\twidth: 100%;\n}\n// NcListItem\n.list-item {\n\tdisplay: block;\n\tposition: relative;\n\tflex: 0 0 auto;\n\tjustify-content: flex-start;\n\tpadding: 8px;\n\t// Fix for border-radius being too large for 3-line entries like in Mail\n\t// 44px avatar size / 2 + 8px padding, and 2px for better visual quality\n\tborder-radius: 32px;\n\tmargin: 2px 0;\n\twidth: 100%;\n\ttransition: background-color var(--animation-quick) ease-in-out;\n\tlist-style: none;\n\t&-content__wrapper {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\theight: 48px;\n\t\t&--compact {\n\t\t\theight: 36px;\n\t\t\t.line-one,\n\t\t\t.line-two {\n\t\t\t\tmargin-top: -4px;\n\t\t\t\tmargin-bottom: -4px;\n\t\t\t}\n\t\t}\n\t}\n\t&-content {\n\t\tdisplay: flex;\n\t\tflex: 1 1 auto;\n\t\tjustify-content: space-between;\n\t\tpadding-left: 8px;\n\t\t&__main {\n\t\t\tflex: 1 1 auto;\n\t\t\twidth: 0;\n\t\t\tmargin: auto 0;\n\t\t\t&--oneline {\n\t\t\t\tdisplay: flex;\n\t\t\t}\n\t\t}\n\t\t&__actions {\n\t\t\tflex: 0 0 auto;\n\t\t\talign-self: center;\n\t\t\tjustify-content: center;\n\t\t\tmargin-left: 4px;\n\t\t}\n\t}\n\t&__extra {\n\t\tmargin-top: 4px;\n\t}\n}\n\n.line-one {\n\tdisplay: flex;\n\talign-items: center;\n\tjustify-content: space-between;\n\twhite-space: nowrap;\n\tmargin: 0 auto 0 0;\n\toverflow: hidden;\n\t&__title {\n\t\toverflow: hidden;\n\t\tflex-grow: 1;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-main-text);\n\t\tfont-weight: normal;\n\t}\n\t&__details {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin: 0 8px;\n\t\tfont-weight: normal;\n\t}\n}\n\n.line-two {\n\tdisplay: flex;\n\talign-items: flex-start;\n\tjustify-content: space-between;\n\twhite-space: nowrap;\n\t&--bold {\n\t\tfont-weight: bold;\n\t}\n\t&__subtitle {\n\t\toverflow: hidden;\n\t\tflex-grow: 1;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\tcolor: var(--color-text-maxcontrast);\n\t}\n\t&__additional_elements {\n\t\tmargin: 2px 4px 0 4px;\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t}\n\t&__indicator {\n\t\tmargin: 0 5px;\n\t}\n}\n</style>\n","<template>\n\t<ul v-if=\"canShare\">\n\t\t<CustomListItem\n\t\t\tref=\"newItem\"\n\t\t\t:title=\"t('cfg_share_links', 'Custom public link')\"\n\t\t\t:bold=\"false\"\n\t\t\t:force-display-actions=\"true\">\n\t\t\t<template #icon>\n\t\t\t\t<NcAvatar :is-no-user=\"true\" icon-class=\"avatardiv\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<LinkVariantIcon fill-color=\"white\" :size=\"18\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAvatar>\n\t\t\t</template>\n\t\t\t<template #subtitle>\n\t\t\t\t<NcTextField\n\t\t\t\t\t:value.sync=\"tokenCandidate\"\n\t\t\t\t\t:disabled=\"updating\"\n\t\t\t\t\t:label=\"t('cfg_share_links', 'Enter custom token')\"\n\t\t\t\t\t:helper-text=\"inputInvalidMessage\"\n\t\t\t\t\t:error=\"isInputInvalid\"\n\t\t\t\t\t:success=\"copied\"\n\t\t\t\t\t@keyup.enter=\"createCustomLink\" />\n\t\t\t</template>\n\t\t\t<template #actions>\n\t\t\t\t<NcActionText v-if=\"passwordPending\" icon=\"icon-password\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<LockIcon />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ passwordPrompt }}\n\t\t\t\t</NcActionText>\n\t\t\t\t<NcActionInput\n\t\t\t\t\tv-if=\"passwordPending\"\n\t\t\t\t\t:disabled=\"updating\"\n\t\t\t\t\t:value.sync=\"password\"\n\t\t\t\t\t@submit=\"createCustomLink\">\n\t\t\t\t\t{{ t('cfg_share_links', 'Enter a password') }}\n\t\t\t\t</NcActionInput>\n\t\t\t\t<NcActionButton @click=\"createCustomLink\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<CheckIcon v-if=\"copied\" />\n\t\t\t\t\t\t<PlusIcon v-else />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ copiedTooltip }}\n\t\t\t\t</NcActionButton>\n\t\t\t</template>\n\t\t</CustomListItem>\n\t</ul>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport { t } from '@nextcloud/l10n'\n\nimport { generateUrl } from '@nextcloud/router'\nimport '@nextcloud/dialogs/style.css'\nimport {\n\tNcActionButton,\n\tNcActionInput,\n\tNcActionText,\n\tNcAvatar,\n\tNcTextField,\n} from '@nextcloud/vue'\nimport CheckIcon from 'vue-material-design-icons/Check.vue'\n\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\nimport LockIcon from 'vue-material-design-icons/Lock.vue'\nimport PlusIcon from 'vue-material-design-icons/Plus.vue'\nimport RequestMixin from '../mixins/RequestMixin.ts'\nimport TokenValidation from '../mixins/TokenValidation.ts'\n\nimport CustomListItem from './CustomListItem.vue'\n\nexport default {\n\tname: 'NewLink',\n\n\tcomponents: {\n\t\tNcActionText,\n\t\tNcActionInput,\n\t\tNcActionButton,\n\t\tNcAvatar,\n\t\tCustomListItem,\n\t\tNcTextField,\n\t\tLinkVariantIcon,\n\t\tLockIcon,\n\t\tPlusIcon,\n\t\tCheckIcon,\n\t},\n\n\tmixins: [TokenValidation, RequestMixin],\n\n\tprops: {\n\t\tfileInfo: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => {},\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tupdating: false,\n\t\t\tloading: true,\n\t\t\trequestPending: false,\n\t\t\ttokenCandidate: '',\n\t\t\tcopied: false,\n\t\t\tpasswordPending: false,\n\t\t\tenforcePassword: false,\n\t\t\tpassword: '',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tgetFullPath() {\n\t\t\tif (this.fileInfo) {\n\t\t\t\tif (this.fileInfo.path.endsWith('/')) {\n\t\t\t\t\treturn this.fileInfo.path.concat(this.fileInfo.name)\n\t\t\t\t} else {\n\t\t\t\t\treturn this.fileInfo.path.concat('/', this.fileInfo.name)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn 'None'\n\t\t\t}\n\t\t},\n\t\tisInputInvalid() {\n\t\t\treturn (\n\t\t\t\tthis.tokenCandidate != null &&\n\t\t\t\tthis.tokenCandidate.length > 0 &&\n\t\t\t\t!this.isTokenValid(this.tokenCandidate)\n\t\t\t)\n\t\t},\n\t\tinputInvalidMessage() {\n\t\t\treturn this.isTokenValidString(this.tokenCandidate)\n\t\t},\n\t\tcanShare() {\n\t\t\treturn !!(this.fileInfo.permissions & OC.PERMISSION_SHARE)\n\t\t},\n\t\tcopiedTooltip() {\n\t\t\treturn this.copied\n\t\t\t\t? t('cfg_share_links', 'Link copied')\n\t\t\t\t: t('cfg_share_links', 'Create link')\n\t\t\t// return { content: message, show: this.copied, placement: 'bottom' }\n\t\t},\n\t\tpasswordPrompt() {\n\t\t\treturn this.enforcePassword\n\t\t\t\t? t('cfg_share_links', 'Password protection enforced')\n\t\t\t\t: t('cfg_share_links', 'Enter password (optional)')\n\t\t},\n\t\tisMenuOpened() {\n\t\t\treturn this.$refs.newItem.$refs.actions.opened\n\t\t},\n\t},\n\n\tasync mounted() {\n\t\t// could load something here if needed\n\t\tawait this.fetchTokenConfig()\n\t\tthis.loading = false\n\t},\n\n\tmethods: {\n\t\tt,\n\t\tasync createCustomLink() {\n\t\t\tthis.updating = true\n\t\t\tconst alwaysAskForPassword =\n\t\t\t\tOC.appConfig.core.enableLinkPasswordByDefault\n\t\t\tthis.enforcePassword = OC.appConfig.core.enforcePasswordForPublicLink\n\t\t\tconst token = this.tokenCandidate\n\t\t\tconst password = this.password\n\n\t\t\tif (!this.isTokenValid(token)) {\n\t\t\t\tconst message = this.isTokenValidString(token)\n\t\t\t\tshowError(\n\t\t\t\t\tt(\n\t\t\t\t\t\t'cfg_share_links',\n\t\t\t\t\t\tmessage != null && message.length > 1\n\t\t\t\t\t\t\t? message\n\t\t\t\t\t\t\t: t('cfg_share_links', 'Invalid token'),\n\t\t\t\t\t),\n\t\t\t\t)\n\t\t\t\tthis.updating = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.enforcePassword || alwaysAskForPassword) {\n\t\t\t\tconsole.debug(\n\t\t\t\t\t`CfgShareLinks: EnforcePassword=${this.enforcePassword}, AlwaysAskForPassword=${alwaysAskForPassword}`,\n\t\t\t\t)\n\n\t\t\t\tif (!this.passwordPending || !this.isMenuOpened) {\n\t\t\t\t\t// Open menu with password prompt\n\t\t\t\t\tthis.passwordPending = true\n\t\t\t\t\tthis.$refs.newItem.$refs.actions.openMenu()\n\n\t\t\t\t\tthis.updating = false\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.requestPending) return\n\n\t\t\tthis.requestPending = true\n\t\t\tconst response = await this.createLink(this.getFullPath, token, password)\n\t\t\tthis.requestPending = false\n\t\t\tthis.password = ''\n\n\t\t\tif (response && response.ret === 0) {\n\t\t\t\tthis.passwordPending = false\n\n\t\t\t\tlet resultToken = token\n\t\t\t\tif (response.data && response.data.token) {\n\t\t\t\t\tresultToken = response.data.token\n\t\t\t\t}\n\t\t\t\tconst shareLink =\n\t\t\t\t\twindow.location.protocol +\n\t\t\t\t\t'//' +\n\t\t\t\t\twindow.location.host +\n\t\t\t\t\tgenerateUrl('/s/') +\n\t\t\t\t\tresultToken\n\n\t\t\t\tif (!navigator.clipboard) {\n\t\t\t\t\tthis.fallbackCopyTextToClipboard(shareLink)\n\t\t\t\t} else {\n\t\t\t\t\tawait navigator.clipboard\n\t\t\t\t\t\t.writeText(shareLink)\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tconsole.debug('CfgShareLinks: Link copied')\n\t\t\t\t\t\t\t// Notify that link was copied\n\t\t\t\t\t\t\tthis.copied = true\n\t\t\t\t\t\t\tthis.$refs.newItem.$refs.actions.$el.focus()\n\t\t\t\t\t\t\t// Reset tooltip after 4s\n\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\tthis.copied = false\n\t\t\t\t\t\t\t}, 4000)\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((reason) => {\n\t\t\t\t\t\t\tconsole.debug('CfgShareLinks: Could not copy')\n\t\t\t\t\t\t\tconsole.debug(reason)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tthis.tokenCandidate = ''\n\t\t\t\tthis.refreshSidebar(this.fileInfo)\n\t\t\t}\n\n\t\t\tthis.updating = false\n\t\t},\n\t\tfallbackCopyTextToClipboard(text) {\n\t\t\tconst textArea = document.createElement('textarea')\n\t\t\ttextArea.value = text\n\n\t\t\t// Avoid scrolling to bottom\n\t\t\ttextArea.style.top = '0'\n\t\t\ttextArea.style.left = '0'\n\t\t\ttextArea.style.position = 'fixed'\n\n\t\t\tdocument.body.appendChild(textArea)\n\t\t\ttextArea.focus()\n\t\t\ttextArea.select()\n\n\t\t\ttry {\n\t\t\t\tconst successful = document.execCommand('copy')\n\t\t\t\tconst msg = successful ? 'successful' : 'unsuccessful'\n\t\t\t\tconsole.debug(\n\t\t\t\t\t'CfgShareLinks_Fallback: Copying text command was ' + msg,\n\t\t\t\t)\n\n\t\t\t\t// Notify that link was copied\n\t\t\t\tthis.copied = true\n\t\t\t\tthis.$refs.newItem.$refs.actions.$el.focus()\n\t\t\t\t// Reset tooltip after 4s\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.copied = false\n\t\t\t\t}, 4000)\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('CfgShareLinks_Fallback: Oops, unable to copy', err)\n\t\t\t}\n\n\t\t\tdocument.body.removeChild(textArea)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.avatardiv {\n\tbackground-color: #c40c0c !important;\n}\n</style>\n","import Vue from 'vue'\nimport NewLink from './components/NewLink.vue'\n\n// Vue.prototype.OC = window.OC\nVue.prototype.OCA = window.OCA\n\nconsole.info('CfgShareLinks: NewLink init')\n\n// Add new section\nlet sectionInstance = null\nlet props = null\nconst View = Vue.extend(NewLink)\n\nwindow.addEventListener('DOMContentLoaded', function () {\n\tif (OCA.Sharing && OCA.Sharing.ShareTabSections) {\n\t\tOCA.Sharing.ShareTabSections.registerSection((el, fileInfo) => {\n\t\t\tif (typeof fileInfo !== 'undefined' && typeof el !== 'undefined') {\n\t\t\t\t// if instance exists, just update props\n\t\t\t\tif (\n\t\t\t\t\tsectionInstance &&\n\t\t\t\t\twindow.document.contains(sectionInstance.$el) &&\n\t\t\t\t\tprops\n\t\t\t\t) {\n\t\t\t\t\tprops.fileInfo = fileInfo\n\t\t\t\t} else {\n\t\t\t\t\t// create new instance\n\t\t\t\t\tif (sectionInstance) {\n\t\t\t\t\t\t// if sectionInstance.$el doesn't exist anymore (after changing folder for example)\n\t\t\t\t\t\tsectionInstance.$destroy()\n\t\t\t\t\t}\n\n\t\t\t\t\tsectionInstance = new View({\n\t\t\t\t\t\tprops: { fileInfo },\n\t\t\t\t\t})\n\n\t\t\t\t\tprops = Vue.observable({\n\t\t\t\t\t\t...sectionInstance._props,\n\t\t\t\t\t\t...{ fileInfo },\n\t\t\t\t\t})\n\t\t\t\t\tsectionInstance._props = props\n\n\t\t\t\t\tsectionInstance.$mount(el[0])\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n})\n"],"names":["_sfc_main","value","count","getCanonicalLocale","slotContent","h","_sfc_render","_sfc_staticRenderFns","__component__","normalizeComponent","NcCounterBubble","NcActions","newValue","event","e","NcActionText","NcActionInput","NcActionButton","NcAvatar","CustomListItem","NcTextField","LinkVariantIcon","LockIcon","PlusIcon","CheckIcon","TokenValidation","RequestMixin","t","alwaysAskForPassword","token","password","message","showError","response","resultToken","shareLink","generateUrl","reason","text","textArea","msg","err","Vue","sectionInstance","props","View","NewLink","el","fileInfo"],"mappings":"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","x_google_ignoreList":[0,1,2]}