{"version":3,"file":"autolink-BAgL31EZ.cjs","sources":["../../src/components/NcRichText/helpers.js","../../src/components/NcRichText/autolink.js"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\n/**\n * Regex pattern to match links to be resolved by the link-reference provider\n *\n * @type {RegExp}\n */\nexport const URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * Regex pattern to identify strings as links and then making them clickable\n *\n * @type {RegExp}\n */\nexport const URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { URL_PATTERN_AUTOLINK } from './helpers.js'\n\nimport { visit, SKIP } from 'unist-util-visit'\nimport { u } from 'unist-builder'\nimport { getBaseUrl, getRootUrl } from '@nextcloud/router'\n\nconst NcLink = {\n\tname: 'NcLink',\n\tprops: {\n\t\thref: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n\trender(h) {\n\t\treturn h('a', {\n\t\t\tattrs: {\n\t\t\t\thref: this.href,\n\t\t\t\trel: 'noopener noreferrer',\n\t\t\t\ttarget: '_blank',\n\t\t\t\tclass: 'rich-text--external-link',\n\t\t\t},\n\t\t}, [this.href.trim()])\n\t},\n}\n\nexport const remarkAutolink = function({ autolink, useMarkdown, useExtendedMarkdown }) {\n\treturn function(tree) {\n\t\t// remark-gfm has its own autolink parser which can not be disabled\n\t\t// and thus a local one is not needed\n\t\tif (useExtendedMarkdown || !useMarkdown || !autolink) {\n\t\t\treturn\n\t\t}\n\n\t\tvisit(tree, (node) => node.type === 'text', (node, index, parent) => {\n\t\t\tlet parsed = parseUrl(node.value)\n\t\t\tparsed = parsed.map((n) => {\n\t\t\t\tif (typeof n === 'string') {\n\t\t\t\t\treturn u('text', n)\n\t\t\t\t}\n\n\t\t\t\treturn u('link', {\n\t\t\t\t\turl: n.props.href,\n\t\t\t\t}, [u('text', n.props.href)])\n\t\t\t}).filter((x) => x)\n\n\t\t\tparent.children.splice(index, 1, ...parsed.flat())\n\t\t\treturn [SKIP, index + parsed.flat().length]\n\t\t})\n\t}\n}\n\nexport const parseUrl = (text) => {\n\tlet match = URL_PATTERN_AUTOLINK.exec(text)\n\tconst list = []\n\tlet start = 0\n\twhile (match !== null) {\n\t\tlet href = match[2]\n\t\tlet textAfter\n\t\tlet textBefore = text.substring(start, match.index + match[1].length)\n\t\tif (href[0] === ' ') {\n\t\t\ttextBefore += href[0]\n\t\t\thref = href.substring(1).trim()\n\t\t}\n\t\tconst lastChar = href[(href.length - 1)]\n\t\tif (lastChar === '.' || lastChar === ',' || lastChar === ';' || (match[0][0] === '(' && lastChar === ')')) {\n\t\t\thref = href.substring(0, href.length - 1)\n\t\t\ttextAfter = lastChar\n\t\t}\n\t\tlist.push(textBefore)\n\t\tlist.push({ component: NcLink, props: { href } })\n\t\tif (textAfter) {\n\t\t\tlist.push(textAfter)\n\t\t}\n\t\tstart = match.index + match[0].length\n\t\tmatch = URL_PATTERN_AUTOLINK.exec(text)\n\t}\n\tlist.push(text.substring(start))\n\tconst joinedText = list.map((item) => typeof item === 'string' ? item : item.props.href).join('')\n\tif (text === joinedText) {\n\t\treturn list\n\t}\n\tconsole.error('Failed to reassemble the chunked text: ' + text)\n\treturn text\n}\n\n/**\n * Try to get path for router link from an absolute or relative URL.\n *\n * @param {import('vue-router').default} router - VueRouter instance of the router link\n * @param {string} url - absolute URL to parse\n * @return {string|null} a path that can be used in the router link or null if this URL doesn't match this router config\n * @example http://cloud.ltd/nextcloud/index.php/apps/files/favorites?fileid=2#fragment => /files/favorites?fileid=2#fragment\n */\nexport const getRoute = (router, url) => {\n\t/**\n\t * http://cloud.ltd /nextcloud /index.php /apps/files /favorites?fileid=2#fragment\n\t * |_____origin____|___________router-base____________| |\n\t * |__________base____________| |______________relative-url______________|\n\t * | |___root___|_optional_|__app-base__|_________router-path_______|\n\t */\n\n\tconst removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str\n\tconst removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str)\n\n\t// Router is not defined in the app => not an app route\n\tif (!router) {\n\t\treturn null\n\t}\n\n\tconst isAbsoluteURL = /^https?:\\/\\//.test(url)\n\n\t// URL is a \"mailto:\", \"tel:\" or any custom app protocol link\n\tconst isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url)\n\tif (!isAbsoluteURL && isNonHttpLink) {\n\t\treturn null\n\t}\n\n\t// URL is not a link to this Nextcloud server instance => not an app route\n\tif (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n\t\treturn null\n\t}\n\n\tif (!isAbsoluteURL && !url.startsWith('/')) {\n\t\t// Relative URL without a leading slash are not allowed\n\t\t// VueRouter handles such urls according to the URL RFC,\n\t\t// for example, being on /call/abc page, link \"def\" is resolved as \"/call/def\" relative to \"/call/\".\n\t\t// We don't want to support such links,\n\t\t// so relative URL MUST start with a slash.\n\t\treturn null\n\t}\n\n\t// URL relative to the instance root\n\tconst relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), '/index.php') : url\n\n\t// Router base relative to the instance root (app-base above)\n\tconst relativeRouterBase = removePrefixes(router.history.base, getRootUrl(), '/index.php')\n\n\t// Root route may have an empty '' path, fallback to '/'\n\tconst potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || '/'\n\n\t// Check if there is actually matching route in the router for this path\n\tconst route = router.resolve(potentialRouterPath).route\n\n\tif (!route.matched.length) {\n\t\treturn null\n\t}\n\n\treturn route.fullPath\n}\n"],"names":["visit","u","SKIP","router","getBaseUrl","getRootUrl"],"mappings":"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"}