mirror of
https://github.com/d0zingcat/NotionNext.git
synced 2026-05-14 07:26:52 +00:00
Merge remote-tracking branch 'origin/feat/notion-page-link-convert' into release/4.5.2
This commit is contained in:
40
lib/notion/mapPageUrl.js
Normal file
40
lib/notion/mapPageUrl.js
Normal file
@@ -0,0 +1,40 @@
|
||||
import { uuidToId } from 'notion-utils'
|
||||
import { checkStrIsNotionId, getLastPartOfUrl, isBrowser } from '../utils'
|
||||
|
||||
/**
|
||||
* 处理页面内连接跳转:
|
||||
* 1. 若是本站域名,则在当前窗口打开、不开新窗口
|
||||
* 2. 若是Notion笔记中的内链,尝试转换成博客中现有的文章地址
|
||||
*/
|
||||
export const mapPageUrl = allPages => {
|
||||
if (isBrowser) {
|
||||
const currentURL = window.location.origin + window.location.pathname
|
||||
const allAnchorTags = document.getElementsByTagName('a') // 或者使用 document.querySelectorAll('a') 获取 NodeList
|
||||
for (const anchorTag of allAnchorTags) {
|
||||
// 检查url
|
||||
if (anchorTag?.href) {
|
||||
// 如果url是一个Notion_id,尝试匹配成博客的文章内链
|
||||
const slug = getLastPartOfUrl(anchorTag.href)
|
||||
if (checkStrIsNotionId(slug)) {
|
||||
const slugPage = allPages?.find(page => uuidToId(page.id) === slug)
|
||||
if (slugPage) {
|
||||
anchorTag.href = slugPage?.href
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (anchorTag?.target === '_blank') {
|
||||
const hrefWithoutQueryHash = anchorTag.href.split('?')[0].split('#')[0]
|
||||
const hrefWithRelativeHash =
|
||||
currentURL.split('#')[0] + anchorTag.href.split('#')[1]
|
||||
|
||||
if (
|
||||
currentURL === hrefWithoutQueryHash ||
|
||||
currentURL === hrefWithRelativeHash
|
||||
) {
|
||||
anchorTag.target = '_self'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,6 +93,35 @@ export function checkContainHttp(str) {
|
||||
}
|
||||
}
|
||||
|
||||
// 检查一个字符串是否notionid : 32位,仅由数字英文构成
|
||||
export function checkStrIsNotionId(str) {
|
||||
if (!str) {
|
||||
return false
|
||||
}
|
||||
// 使用正则表达式进行匹配
|
||||
const regex = /^[a-zA-Z0-9]{32}$/
|
||||
return regex.test(str)
|
||||
}
|
||||
|
||||
// 截取url中最后一个 / 后面的内容
|
||||
export function getLastPartOfUrl(url) {
|
||||
if (!url) {
|
||||
return ''
|
||||
}
|
||||
// 找到最后一个斜杠的位置
|
||||
const lastSlashIndex = url.lastIndexOf('/')
|
||||
|
||||
// 如果找不到斜杠,则返回整个字符串
|
||||
if (lastSlashIndex === -1) {
|
||||
return url
|
||||
}
|
||||
|
||||
// 截取最后一个斜杠后面的内容
|
||||
const lastPart = url.substring(lastSlashIndex + 1)
|
||||
|
||||
return lastPart
|
||||
}
|
||||
|
||||
/**
|
||||
* 加载外部资源
|
||||
* @param url 地址 例如 https://xx.com/xx.js
|
||||
|
||||
Reference in New Issue
Block a user