diff --git a/2/index.html b/2/index.html index 00e2f6f..069cf1a 100644 --- a/2/index.html +++ b/2/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
从memos的webhook开始
2024-06-18
这篇文章介绍了如何利用memos的webhook功能从v0.18版本开始,通过复制Typecho主题icefox的CSS布局,创建一个基于memos的单页面,类微信朋友圈。文章详细说明了使用BASH、宝塔WEBHOOK和PHP获取memos的JSON数据的方法,并展示了如何部署webhook镜像和配置webhook以实现自动更新memos.json文件。此外,还提供了演示链接供参考。
779 字
|
4 分钟
利用 Github Actions 自动部署 Hexo 博客
这篇文章介绍了如何使用Github Actions实现CI/CD工作流,包括自动化测试、打包和部署等操作。文章详细说明了在已有hexo博客、github账户和项目的基础上,如何创建.github/workflows/main.yml文件,并设置Personal access tokens以实现hexo项目main分支更新时自动更新gh-pages分支的功能。
331 字
|
2 分钟
在fly.io部署Alist
2024-01-27
这篇文章介绍了如何在Windows系统上安装FLYCTL工具,并详细说明了初始化、创建应用、设置参数、编辑配置文件、部署应用以及获取管理员密码的步骤。文章通过图文结合的方式,展示了每一步的操作流程,并提供了一个演示链接以供参考。
188 字
|
1 分钟
使用Docker快速部署mastodon实例
2023-10-30
这篇文章介绍了如何使用Docker快速部署Mastodon实例的详细步骤,包括创建目录、拉取镜像、修改Docker Compose配置文件、初始化PostgreSQL数据库、配置Mastodon、运行引导、写入配置文件、启动Mastodon、文件夹赋权和创建管理员账户等。
272 字
|
1 分钟
快速部署misskey实例
2023-10-11
这篇文章介绍了如何在纯净的Ubuntu系统上使用一键脚本安装和更新Misskey,推荐配置为双核心四线程。文章详细说明了更新脚本的步骤,以及如何使用Docker Compose进行部署,包括环境准备、Git克隆仓库、编辑配置文件、构建镜像、启动容器和设置反向代理的步骤。
308 字
|
2 分钟
Mariadb创建数据库、用户及授权
2023-10-06
这篇文章介绍了在测试SForum程序中涉及的数据库操作流程,包括安装MARIADB服务器、初始化数据库、连接数据库、创建数据库和本地访问账户、创建用户并设置参数(如用户名、访问方式和密码)、分配权限(包括所有权限和部分权限)以及授权操作权限。
245 字
|
1 分钟
测试xiuno2Sforum中遇到的各种问题
2023-10-06
这篇文章介绍了如何将XiunoBBS数据转换为SForum的过程,使用的是SForum v2.2.2版本。文章详细描述了测试环境配置,包括Ubuntu 22.0.4、PHP8.0、MariaDB10.6、Composer、Redis和Nginx或Apache的安装与配置。此外,还涉及了PHP扩展ZIPARCHIVE的安装问题解决,以及通过Composer安装Medoo类库,创建和导入MariaDB数据库,安装Redis和Nginx,最后完成SForum v2.2.2的安装步骤。
392 字
|
2 分钟
centos在yum时出现Determining fastest mirrors
2023-10-05
这篇文章介绍了两个关于Yum使用中的问题及其解决方法。第一个问题是yum makecache时卡在Determining fastest mirrors,解决方法是禁用fastestmirror插件,通过修改/etc/yum/pluginconf.d/fastestmirror.conf和/etc/yum.conf文件实现。第二个问题是无法访问ELRepo镜像列表,解决方法是更新ELRepo软件仓库镜像,通过替换/etc/yum.repos.d/elrepo.repo文件中的mirrorlist地址来实现。
183 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
从memos的webhook开始
2024-06-18
这篇文章介绍了如何利用memos的webhook功能从v0.18版本开始,通过复制Typecho主题icefox的CSS布局,创建一个基于memos的单页面,类微信朋友圈。文章详细说明了使用BASH、宝塔WEBHOOK和PHP获取memos的JSON数据的方法,并展示了如何部署webhook镜像和配置webhook以实现自动更新memos.json文件。此外,还提供了演示链接供参考。
779 字
|
4 分钟
利用 Github Actions 自动部署 Hexo 博客
这篇文章介绍了如何使用Github Actions实现CI/CD工作流,包括自动化测试、打包和部署等操作。文章详细说明了在已有hexo博客、github账户和项目的基础上,如何创建.github/workflows/main.yml文件,并设置Personal access tokens以实现hexo项目main分支更新时自动更新gh-pages分支的功能。
331 字
|
2 分钟
在fly.io部署Alist
2024-01-27
这篇文章介绍了如何在Windows系统上安装FLYCTL工具,并详细说明了初始化、创建应用、设置参数、编辑配置文件、部署应用以及获取管理员密码的步骤。文章通过图文结合的方式,展示了每一步的操作流程,并提供了一个演示链接以供参考。
188 字
|
1 分钟
使用Docker快速部署mastodon实例
2023-10-30
这篇文章介绍了如何使用Docker快速部署Mastodon实例的详细步骤,包括创建目录、拉取镜像、修改Docker Compose配置文件、初始化PostgreSQL数据库、配置Mastodon、运行引导、写入配置文件、启动Mastodon、文件夹赋权和创建管理员账户等。
272 字
|
1 分钟
快速部署misskey实例
2023-10-11
这篇文章介绍了如何在纯净的Ubuntu系统上使用一键脚本安装和更新Misskey,推荐配置为双核心四线程。文章详细说明了更新脚本的步骤,以及如何使用Docker Compose进行部署,包括环境准备、Git克隆仓库、编辑配置文件、构建镜像、启动容器和设置反向代理的步骤。
308 字
|
2 分钟
Mariadb创建数据库、用户及授权
2023-10-06
这篇文章介绍了在测试SForum程序中涉及的数据库操作流程,包括安装MARIADB服务器、初始化数据库、连接数据库、创建数据库和本地访问账户、创建用户并设置参数(如用户名、访问方式和密码)、分配权限(包括所有权限和部分权限)以及授权操作权限。
245 字
|
1 分钟
测试xiuno2Sforum中遇到的各种问题
2023-10-06
这篇文章介绍了如何将XiunoBBS数据转换为SForum的过程,使用的是SForum v2.2.2版本。文章详细描述了测试环境配置,包括Ubuntu 22.0.4、PHP8.0、MariaDB10.6、Composer、Redis和Nginx或Apache的安装与配置。此外,还涉及了PHP扩展ZIPARCHIVE的安装问题解决,以及通过Composer安装Medoo类库,创建和导入MariaDB数据库,安装Redis和Nginx,最后完成SForum v2.2.2的安装步骤。
392 字
|
2 分钟
centos在yum时出现Determining fastest mirrors
2023-10-05
这篇文章介绍了两个关于Yum使用中的问题及其解决方法。第一个问题是yum makecache时卡在Determining fastest mirrors,解决方法是禁用fastestmirror插件,通过修改/etc/yum/pluginconf.d/fastestmirror.conf和/etc/yum.conf文件实现。第二个问题是无法访问ELRepo镜像列表,解决方法是更新ELRepo软件仓库镜像,通过替换/etc/yum.repos.d/elrepo.repo文件中的mirrorlist地址来实现。
183 字
|
1 分钟
\ No newline at end of file diff --git a/3/index.html b/3/index.html index 7e6a82d..b7166a8 100644 --- a/3/index.html +++ b/3/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
Docker部署Activity-Relay服务
2023-10-03
这篇文章介绍了在CentOS 7.9环境下部署一个项目的过程,包括安装必要的软件(如git、openssl、nginx、docker和docker-compose),从仓库拉取代码,编辑配置文件,生成RSA证书,构建并运行Docker镜像,查看容器状态,以及停止服务的步骤。同时还提到了Ubuntu和CentOS在生成证书时的不同命令,以及权限设置和Nginx配置的相关参考。
250 字
|
1 分钟
NEC M700黑苹果OC0.9.4引导
2023-10-01
这篇文章介绍了如何在NEC M700笔记本上安装黑苹果,使用OpenCore 0.9.4引导。文章详细列出了笔记本的硬件配置,包括CPU、主板、内存、硬盘、无线网卡、有线网卡和声卡。此外,还提到了安装前的准备工作,如使用U盘、解锁CFG LOCK工具、ami BIOS提取工具和OCAT。具体步骤包括在Windows系统下提取BIOS文件,并通过UEFI TOOL打开并查找cfg lock项。
106 字
|
1 分钟
在fly.io部署Gotosocial
这篇文章介绍了如何安装和配置GoToSocial,一个轻量级的ActivityPub联邦社交网络程序。文章详细说明了注册Fly.io和Cloudflare账户的步骤,安装FLYCTL的方法,以及如何在不同操作系统上进行操作。此外,还涵盖了创建应用、储存卷、编辑配置文件、部署应用、创建用户和管理员账户的具体步骤,并提供了演示链接和下载数据库的方法。
490 字
|
2 分钟
在fly.io部署artalk评论系统
2023-08-15
这篇文章介绍了如何在Fly.io平台上使用其提供的免费服务,包括安装flyctl命令行工具、创建应用、分配1G硬盘空间以及编辑FLY.TOML文件来设置管理员账号和重启服务的步骤。Fly.io提供三个256MB内存的服务器和总3G硬盘空间,但需要绑定信用卡以防止滥用。
191 字
|
1 分钟
如何在Fly.io部署Memos
2023-08-15
这篇文章介绍了如何在FLY.IO上部署memos应用,并使用Backblaze B2云存储进行数据库备份。文章详细说明了注册FLY.IO和Backblaze B2的步骤,安装flyctl工具,创建和配置FLY.TOML文件,添加持久卷和密钥,最后进行应用部署。此外,还提供了演示地址和绑定域名的示例。
263 字
|
1 分钟
使用 Docker 构建 Pleroma 实例
这篇文章介绍了如何使用Docker构建Pleroma实例,Pleroma是一个基于ActivityPub协议的去中心化社区程序。文章详细说明了在宝塔面板中安装Docker、获取DOCKER-COMPOSE.YML模板、修改配置文件、启动容器、添加反向代理、创建管理员账户以及修改文件夹权限的步骤。此外,还提到了如果使用S3协议的对象存储则无需修改文件夹权限,并提供了一个演示地址。
459 字
|
2 分钟
用Memos API实现hexo博客的动态说说页面
2023-06-13
这篇文章介绍了如何修改Memos/index.md文件的内容,并提到代码来源于网络。
121 字
|
1 分钟
2023国内注册ChatGPT的方法
这篇文章介绍了国内用户如何注册和使用ChatGPT的方法。首先,用户需要有一个非中国大陆的网络环境和一个可以接收短信验证码的手机号码。接着,通过OpenAI官网进行账号注册,包括邮箱验证和手机号码验证。文章还提到了如果无法直接注册,可以通过搭建梯子或使用第三方接码平台来解决。最后,注册完成后,用户可以登录ChatGPT官网开始使用。
1192 字
|
6 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
Docker部署Activity-Relay服务
2023-10-03
这篇文章介绍了在CentOS 7.9环境下部署一个项目的过程,包括安装必要的软件(如git、openssl、nginx、docker和docker-compose),从仓库拉取代码,编辑配置文件,生成RSA证书,构建并运行Docker镜像,查看容器状态,以及停止服务的步骤。同时还提到了Ubuntu和CentOS在生成证书时的不同命令,以及权限设置和Nginx配置的相关参考。
250 字
|
1 分钟
NEC M700黑苹果OC0.9.4引导
2023-10-01
这篇文章介绍了如何在NEC M700笔记本上安装黑苹果,使用OpenCore 0.9.4引导。文章详细列出了笔记本的硬件配置,包括CPU、主板、内存、硬盘、无线网卡、有线网卡和声卡。此外,还提到了安装前的准备工作,如使用U盘、解锁CFG LOCK工具、ami BIOS提取工具和OCAT。具体步骤包括在Windows系统下提取BIOS文件,并通过UEFI TOOL打开并查找cfg lock项。
106 字
|
1 分钟
在fly.io部署Gotosocial
这篇文章介绍了如何安装和配置GoToSocial,一个轻量级的ActivityPub联邦社交网络程序。文章详细说明了注册Fly.io和Cloudflare账户的步骤,安装FLYCTL的方法,以及如何在不同操作系统上进行操作。此外,还涵盖了创建应用、储存卷、编辑配置文件、部署应用、创建用户和管理员账户的具体步骤,并提供了演示链接和下载数据库的方法。
490 字
|
2 分钟
在fly.io部署artalk评论系统
2023-08-15
这篇文章介绍了如何在Fly.io平台上使用其提供的免费服务,包括安装flyctl命令行工具、创建应用、分配1G硬盘空间以及编辑FLY.TOML文件来设置管理员账号和重启服务的步骤。Fly.io提供三个256MB内存的服务器和总3G硬盘空间,但需要绑定信用卡以防止滥用。
191 字
|
1 分钟
如何在Fly.io部署Memos
2023-08-15
这篇文章介绍了如何在FLY.IO上部署memos应用,并使用Backblaze B2云存储进行数据库备份。文章详细说明了注册FLY.IO和Backblaze B2的步骤,安装flyctl工具,创建和配置FLY.TOML文件,添加持久卷和密钥,最后进行应用部署。此外,还提供了演示地址和绑定域名的示例。
263 字
|
1 分钟
使用 Docker 构建 Pleroma 实例
这篇文章介绍了如何使用Docker构建Pleroma实例,Pleroma是一个基于ActivityPub协议的去中心化社区程序。文章详细说明了在宝塔面板中安装Docker、获取DOCKER-COMPOSE.YML模板、修改配置文件、启动容器、添加反向代理、创建管理员账户以及修改文件夹权限的步骤。此外,还提到了如果使用S3协议的对象存储则无需修改文件夹权限,并提供了一个演示地址。
459 字
|
2 分钟
用Memos API实现hexo博客的动态说说页面
2023-06-13
这篇文章介绍了如何修改Memos/index.md文件的内容,并提到代码来源于网络。
121 字
|
1 分钟
2023国内注册ChatGPT的方法
这篇文章介绍了国内用户如何注册和使用ChatGPT的方法。首先,用户需要有一个非中国大陆的网络环境和一个可以接收短信验证码的手机号码。接着,通过OpenAI官网进行账号注册,包括邮箱验证和手机号码验证。文章还提到了如果无法直接注册,可以通过搭建梯子或使用第三方接码平台来解决。最后,注册完成后,用户可以登录ChatGPT官网开始使用。
1192 字
|
6 分钟
\ No newline at end of file diff --git a/4/index.html b/4/index.html index bd2da8e..402d21a 100644 --- a/4/index.html +++ b/4/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
Qv2ray客户端及内核下载
2023-04-07
这篇文章介绍了Qv2ray,一个第三方图形化桌面客户端,基于V2ray官方内核,支持多种代理协议如vmess、SS、SSR、Trojan等,并可通过插件扩展功能。文章还提供了Qv2ray客户端和V2ray内核的下载链接。
154 字
|
1 分钟
42个虚拟信用卡开卡渠道
这篇文章介绍了如何通过调整饮食习惯来改善睡眠质量。文章首先指出睡眠问题在现代社会中的普遍性,然后详细讨论了食物对睡眠的影响,包括哪些食物有助于促进睡眠,如富含色氨酸的食物和全谷物,以及应避免的食物,如含咖啡因和糖分高的食品。此外,文章还提到了饮食时间的重要性,建议晚餐不宜过晚或过饱。整体上,文章提供了实用的饮食建议,帮助读者通过调整饮食来获得更好的睡眠。
1871 字
|
9 分钟
centos7安装后没有网络
2022-11-29
这篇文章介绍了如何以root账号登录系统,使用ip addr命令查看网络参数,并打开eth0网卡的配置文件。文章还指导了如何将NOBOOT参数从no修改为yes,以及通过重启网络或服务器来应用这些更改。
51 字
|
1 分钟
macOS与Windows双系统时间不同步的解决办法
2022-11-15
这篇文章介绍了在Windows系统中,通过右键点击开始菜单并选择“终端(管理员)”来执行某些操作的方法,并建议重启电脑以应用更改。
35 字
|
1 分钟
VK23黑苹果OpenCore0.8.5引导macOS12.6.1
2022-11-08
这篇文章介绍了将网卡更换为DW1560的过程,并提供了相关的截图链接。文章还列出了更换网卡后设备正常工作的各项功能,包括显卡、声卡、有线网卡、无线网卡、摄像头、读卡器、蓝牙和隔空投送。
53 字
|
1 分钟
华硕b150m-et m2+rx560黑苹果oc0.8.5引导
2022-10-21
这篇文章介绍了作者的电脑配置,包括CPU、主板、内存、硬盘、显卡、网卡、电源和机箱等硬件信息。文章还提到了机箱的散热问题,以及通过BIOS设置优化系统性能的具体步骤,如关闭CSM兼容性、VT-D等。此外,文章还分享了已成功驱动的硬件列表,如声卡、网卡、显卡等,并提供了引导下载的链接。
133 字
|
1 分钟
office2016 Mac 版本下载安装及破解激活
2022-10-14
这篇文章提供了Microsoft Office 2016 for Mac的安装包下载地址和一个激活工具的百度网盘链接及密码。安装包地址为http://officecdn.microsoft.com/sg/C1297A47-86C4-4C1F-97FA-950631F94777/OfficeMac/Microsoft_Office_2016_15.29.16120900_Installer.pkg,激活工具链接为https://pan.baidu.com/s/1ragcr1M,密码是rcb2。
22 字
|
1 分钟
Typecho插件CommentsByQQ修改版
这篇文章介绍了作者基于Typecho插件CommentsByQQ的修改版本,旨在通过QQ机器人接收评论通知。由于原插件的QQ机器人已失效,作者自行搭建了一个基于go-http的QQ机器人,并提供了使用方法和下载地址。
113 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
Qv2ray客户端及内核下载
2023-04-07
这篇文章介绍了Qv2ray,一个第三方图形化桌面客户端,基于V2ray官方内核,支持多种代理协议如vmess、SS、SSR、Trojan等,并可通过插件扩展功能。文章还提供了Qv2ray客户端和V2ray内核的下载链接。
154 字
|
1 分钟
42个虚拟信用卡开卡渠道
这篇文章介绍了如何通过调整饮食习惯来改善睡眠质量。文章首先指出睡眠问题在现代社会中的普遍性,然后详细讨论了食物对睡眠的影响,包括哪些食物有助于促进睡眠,如富含色氨酸的食物和全谷物,以及应避免的食物,如含咖啡因和糖分高的食品。此外,文章还提到了饮食时间的重要性,建议晚餐不宜过晚或过饱。整体上,文章提供了实用的饮食建议,帮助读者通过调整饮食来获得更好的睡眠。
1871 字
|
9 分钟
centos7安装后没有网络
2022-11-29
这篇文章介绍了如何以root账号登录系统,使用ip addr命令查看网络参数,并打开eth0网卡的配置文件。文章还指导了如何将NOBOOT参数从no修改为yes,以及通过重启网络或服务器来应用这些更改。
51 字
|
1 分钟
macOS与Windows双系统时间不同步的解决办法
2022-11-15
这篇文章介绍了在Windows系统中,通过右键点击开始菜单并选择“终端(管理员)”来执行某些操作的方法,并建议重启电脑以应用更改。
35 字
|
1 分钟
VK23黑苹果OpenCore0.8.5引导macOS12.6.1
2022-11-08
这篇文章介绍了将网卡更换为DW1560的过程,并提供了相关的截图链接。文章还列出了更换网卡后设备正常工作的各项功能,包括显卡、声卡、有线网卡、无线网卡、摄像头、读卡器、蓝牙和隔空投送。
53 字
|
1 分钟
华硕b150m-et m2+rx560黑苹果oc0.8.5引导
2022-10-21
这篇文章介绍了作者的电脑配置,包括CPU、主板、内存、硬盘、显卡、网卡、电源和机箱等硬件信息。文章还提到了机箱的散热问题,以及通过BIOS设置优化系统性能的具体步骤,如关闭CSM兼容性、VT-D等。此外,文章还分享了已成功驱动的硬件列表,如声卡、网卡、显卡等,并提供了引导下载的链接。
133 字
|
1 分钟
office2016 Mac 版本下载安装及破解激活
2022-10-14
这篇文章提供了Microsoft Office 2016 for Mac的安装包下载地址和一个激活工具的百度网盘链接及密码。安装包地址为http://officecdn.microsoft.com/sg/C1297A47-86C4-4C1F-97FA-950631F94777/OfficeMac/Microsoft_Office_2016_15.29.16120900_Installer.pkg,激活工具链接为https://pan.baidu.com/s/1ragcr1M,密码是rcb2。
22 字
|
1 分钟
Typecho插件CommentsByQQ修改版
这篇文章介绍了作者基于Typecho插件CommentsByQQ的修改版本,旨在通过QQ机器人接收评论通知。由于原插件的QQ机器人已失效,作者自行搭建了一个基于go-http的QQ机器人,并提供了使用方法和下载地址。
113 字
|
1 分钟
\ No newline at end of file diff --git a/5/index.html b/5/index.html index aff1fad..2b2caca 100644 --- a/5/index.html +++ b/5/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
centos7 ssh连接慢的解决方法
2022-08-12
这篇文章介绍了在Linux系统中修改SSH配置文件的步骤,包括取消注释并修改UseDNS选项为no,以及将GSSAPIAuthentication选项也改为no,最后保存并退出编辑器,重启系统以应用更改。
35 字
|
1 分钟
Linux下本地安装包命令
2022-07-27
这篇文章介绍了在CENTOS系统下如何安装RPM安装包,以及在UBUNTU系统下如何安装DEB安装包。文章可能详细说明了安装步骤和命令,帮助用户在不同Linux发行版上进行软件包的安装。
28 字
|
1 分钟
黑苹果固态避坑指南
这篇文章介绍了多个型号的固态硬盘(SSD)与macOS的兼容性问题,包括三星、镁光、爱国者等品牌的特定型号在安装和运行macOS时可能遇到的问题。文章还提到了一些型号需要升级固件或使用特定的kext文件来解决兼容性问题,以及关于TRIM支持的详细信息,包括哪些型号完全支持或不完全支持TRIM功能。此外,文章还列出了一些能够正常安装和运行macOS的SSD型号。
636 字
|
3 分钟
2023年黑苹果amd免驱显卡购买推荐
这篇文章介绍了不同系列的AMD显卡及其在各个macOS版本中的支持情况。包括NAVI 20系列、NAVI 10系列、VEGA 20系列、VEGA 10系列、Polaris架构系列、R7/R9系列、HD 8000系列和HD 7000系列显卡,以及它们在特定操作系统版本下的兼容性和可能需要的特殊启动参数。
332 字
|
2 分钟
NEC VK22 黑苹果opencore引导
这篇文章介绍了如何在安装黑苹果前解锁CFGLock,以及使用NVME固态硬盘的优化方法。通过将U盘格式化为FAT32并复制OC引导文件,设置U盘为第一启动项,可以提升读写速度且不需修改BIOS。文章还提到了笔记本黑苹果安装中的难点,如注入EDID,并分享了已驱动的硬件列表和EFI文件下载链接。
192 字
|
1 分钟
记一次亿储SSD固态掉盘修复(重新开卡)
这篇文章介绍了老孙在闲鱼购买了一块二手SSD并尝试安装黑苹果系统,但遇到硬盘识别问题。通过拆解硬盘、短接主控、使用开卡软件等步骤,最终成功修复了固态硬盘的问题。文章还提供了所需物料清单、操作步骤和相关教程链接。
378 字
|
2 分钟
Cloud Torrent for centos一键安装
这篇文章介绍了如何安装和使用Cloud Torrent,一个支持BT和磁力链接下载、离线下载及边下边播的工具。文章详细说明了系统需求、脚本版本、特点、安装步骤、使用说明以及注意事项。Cloud Torrent通过Web UI提供可视化界面,支持搜索磁力链接,但主要针对国外资源。文章还提到了使用该工具时可能遇到的网络问题和版权风险。
863 字
|
4 分钟
Vi编辑器的基本使用方法
2016-11-16
这篇文章介绍了如何通过优化网站内容和结构来提高搜索引擎排名,包括关键词研究、内容创作、内部链接策略和外部链接建设等方法。文章还提到了SEO工具的使用和持续监控网站表现的重要性,以确保长期的成功。
2295 字
|
11 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
centos7 ssh连接慢的解决方法
2022-08-12
这篇文章介绍了在Linux系统中修改SSH配置文件的步骤,包括取消注释并修改UseDNS选项为no,以及将GSSAPIAuthentication选项也改为no,最后保存并退出编辑器,重启系统以应用更改。
35 字
|
1 分钟
Linux下本地安装包命令
2022-07-27
这篇文章介绍了在CENTOS系统下如何安装RPM安装包,以及在UBUNTU系统下如何安装DEB安装包。文章可能详细说明了安装步骤和命令,帮助用户在不同Linux发行版上进行软件包的安装。
28 字
|
1 分钟
黑苹果固态避坑指南
这篇文章介绍了多个型号的固态硬盘(SSD)与macOS的兼容性问题,包括三星、镁光、爱国者等品牌的特定型号在安装和运行macOS时可能遇到的问题。文章还提到了一些型号需要升级固件或使用特定的kext文件来解决兼容性问题,以及关于TRIM支持的详细信息,包括哪些型号完全支持或不完全支持TRIM功能。此外,文章还列出了一些能够正常安装和运行macOS的SSD型号。
636 字
|
3 分钟
2023年黑苹果amd免驱显卡购买推荐
这篇文章介绍了不同系列的AMD显卡及其在各个macOS版本中的支持情况。包括NAVI 20系列、NAVI 10系列、VEGA 20系列、VEGA 10系列、Polaris架构系列、R7/R9系列、HD 8000系列和HD 7000系列显卡,以及它们在特定操作系统版本下的兼容性和可能需要的特殊启动参数。
332 字
|
2 分钟
NEC VK22 黑苹果opencore引导
这篇文章介绍了如何在安装黑苹果前解锁CFGLock,以及使用NVME固态硬盘的优化方法。通过将U盘格式化为FAT32并复制OC引导文件,设置U盘为第一启动项,可以提升读写速度且不需修改BIOS。文章还提到了笔记本黑苹果安装中的难点,如注入EDID,并分享了已驱动的硬件列表和EFI文件下载链接。
192 字
|
1 分钟
记一次亿储SSD固态掉盘修复(重新开卡)
这篇文章介绍了老孙在闲鱼购买了一块二手SSD并尝试安装黑苹果系统,但遇到硬盘识别问题。通过拆解硬盘、短接主控、使用开卡软件等步骤,最终成功修复了固态硬盘的问题。文章还提供了所需物料清单、操作步骤和相关教程链接。
378 字
|
2 分钟
Cloud Torrent for centos一键安装
这篇文章介绍了如何安装和使用Cloud Torrent,一个支持BT和磁力链接下载、离线下载及边下边播的工具。文章详细说明了系统需求、脚本版本、特点、安装步骤、使用说明以及注意事项。Cloud Torrent通过Web UI提供可视化界面,支持搜索磁力链接,但主要针对国外资源。文章还提到了使用该工具时可能遇到的网络问题和版权风险。
863 字
|
4 分钟
Vi编辑器的基本使用方法
2016-11-16
这篇文章介绍了如何通过优化网站内容和结构来提高搜索引擎排名,包括关键词研究、内容创作、内部链接策略和外部链接建设等方法。文章还提到了SEO工具的使用和持续监控网站表现的重要性,以确保长期的成功。
2295 字
|
11 分钟
\ No newline at end of file diff --git a/6/index.html b/6/index.html index 378aa22..6d831b5 100644 --- a/6/index.html +++ b/6/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
阿里悟空服务下线
这篇文章介绍了阿里悟空服务在2016年10月31日下线的情况,以及基于该服务的phpwind移动版也随之结束。文章提到phpwind和discuz这两大社区论坛程序已经停止更新维护,暗示了社区论坛可能的衰落趋势。同时,文章探讨了个人草根站长未来可能不复存在的可能性,主要是因为网站开发和维护成本对非IT人员来说过高。
188 字
|
1 分钟
CentOS系统时间和时区查看以及修改的方法
2016-11-14
这篇文章介绍了如何在CentOS系统中修改时间和时区。首先,文章说明了如何查看当前系统时间,并提供了具体的命令来设置新的日期和时间(例如,将日期设定为2013年3月4日,时间设定为上午10:38)。接着,文章讲解了如何查看和修改系统的时区,特别是如何将时区设置为亚洲/上海,并确认覆盖操作。最后,文章指导用户如何验证新的时区和时间设置是否正确。
120 字
|
1 分钟
\ No newline at end of file +平淡生活 - 退休前的牛马生活
阿里悟空服务下线
这篇文章介绍了阿里悟空服务在2016年10月31日下线的情况,以及基于该服务的phpwind移动版也随之结束。文章提到phpwind和discuz这两大社区论坛程序已经停止更新维护,暗示了社区论坛可能的衰落趋势。同时,文章探讨了个人草根站长未来可能不复存在的可能性,主要是因为网站开发和维护成本对非IT人员来说过高。
188 字
|
1 分钟
CentOS系统时间和时区查看以及修改的方法
2016-11-14
这篇文章介绍了如何在CentOS系统中修改时间和时区。首先,文章说明了如何查看当前系统时间,并提供了具体的命令来设置新的日期和时间(例如,将日期设定为2013年3月4日,时间设定为上午10:38)。接着,文章讲解了如何查看和修改系统的时区,特别是如何将时区设置为亚洲/上海,并确认覆盖操作。最后,文章指导用户如何验证新的时区和时间设置是否正确。
120 字
|
1 分钟
\ No newline at end of file diff --git a/_astro/hoisted.3pVf8PZu.js b/_astro/hoisted.3pVf8PZu.js new file mode 100644 index 0000000..b36483b --- /dev/null +++ b/_astro/hoisted.3pVf8PZu.js @@ -0,0 +1 @@ +import{_ as Jn}from"./preload-helper.BiBI96sQ.js";import{b as Qn,c as to,s as eo,g as so}from"./setting-utils.H_x_02w0.js";import{p as no,u as oo}from"./url-utils.Co0GbPFH.js";import"https://artalk.loliko.cn/dist/Artalk.js";import"./zh_TW.Cn8XYgkS.js";const je=new MutationObserver(Js);function Js(){je.disconnect();let t=Array.from(document.querySelectorAll("pre"));for(let e of t){if("DIV"===e.parentElement?.nodeName&&e.parentElement?.classList.contains("code-block"))continue;let t=document.createElement("div");t.className="relative code-block";let s=document.createElement("button");s.className="copy-btn btn-regular-dark absolute active:scale-90 h-8 w-8 top-2 right-2 opacity-75 text-sm p-1.5 rounded-lg transition-all ease-in-out",e.setAttribute("tabindex","0"),e.parentNode&&e.parentNode.insertBefore(t,e);let n,i='',o='';s.innerHTML=`
${i} ${o}
\n `,t.appendChild(e),t.appendChild(s),s.addEventListener("click",(async()=>{n&&clearTimeout(n);let t=e?.querySelector("code")?.innerText;void 0!==t&&(await navigator.clipboard.writeText(t),s.classList.add("success"),n=setTimeout((()=>{s.classList.remove("success")}),1e3))}))}je.observe(document.body,{childList:!0,subtree:!0})}function Jt(t,e,s){const n=document.createElement(e);return t&&(n.className=t),s&&s.appendChild(n),n}function io(t,e,s){let n=`translate3d(${t}px,0px,0)`;return void 0!==s&&(n+=` scale3d(${s},${s},1)`),n}function Ke(t,e,s){t.style.width="number"==typeof e?`${e}px`:e,t.style.height="number"==typeof s?`${s}px`:s}je.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",Js);const vt={IDLE:"idle",LOADING:"loading",LOADED:"loaded",ERROR:"error"};function co(t){return"button"in t&&1===t.button||t.ctrlKey||t.metaKey||t.altKey||t.shiftKey}function Qt(t,e,s=document){let n=[];if(t instanceof Element)n=[t];else if(t instanceof NodeList||Array.isArray(t))n=Array.from(t);else{const i="string"==typeof t?t:e;i&&(n=Array.from(s.querySelectorAll(i)))}return n}function ro(t){return"function"==typeof t&&t.prototype&&t.prototype.goTo}function Is(){return!(!navigator.vendor||!navigator.vendor.match(/apple/i))}class lo{constructor(t,e){this.type=t,this.defaultPrevented=!1,e&&Object.assign(this,e)}preventDefault(){this.defaultPrevented=!0}}class ao{constructor(){this._listeners={},this._filters={},this.pswp=void 0,this.options=void 0}addFilter(t,e,s=100){var n,i,o;this._filters[t]||(this._filters[t]=[]),null===(n=this._filters[t])||void 0===n||n.push({fn:e,priority:s}),null===(i=this._filters[t])||void 0===i||i.sort(((t,e)=>t.priority-e.priority)),null===(o=this.pswp)||void 0===o||o.addFilter(t,e,s)}removeFilter(t,e){this._filters[t]&&(this._filters[t]=this._filters[t].filter((t=>t.fn!==e))),this.pswp&&this.pswp.removeFilter(t,e)}applyFilters(t,...e){var s;return null===(s=this._filters[t])||void 0===s||s.forEach((t=>{e[0]=t.fn.apply(this,e)})),e[0]}on(t,e){var s,n;this._listeners[t]||(this._listeners[t]=[]),null===(s=this._listeners[t])||void 0===s||s.push(e),null===(n=this.pswp)||void 0===n||n.on(t,e)}off(t,e){var s;this._listeners[t]&&(this._listeners[t]=this._listeners[t].filter((t=>e!==t))),null===(s=this.pswp)||void 0===s||s.off(t,e)}dispatch(t,e){var s;if(this.pswp)return this.pswp.dispatch(t,e);const n=new lo(t,e);return null===(s=this._listeners[t])||void 0===s||s.forEach((t=>{t.call(this,n)})),n}}class ho{constructor(t,e){if(this.element=Jt("pswp__img pswp__img--placeholder",t?"img":"div",e),t){const e=this.element;e.decoding="async",e.alt="",e.src=t,e.setAttribute("role","presentation")}this.element.setAttribute("aria-hidden","true")}setDisplayedSize(t,e){this.element&&("IMG"===this.element.tagName?(Ke(this.element,250,"auto"),this.element.style.transformOrigin="0 0",this.element.style.transform=io(0,0,t/250)):Ke(this.element,t,e))}destroy(){var t;null!==(t=this.element)&&void 0!==t&&t.parentNode&&this.element.remove(),this.element=null}}class uo{constructor(t,e,s){this.instance=e,this.data=t,this.index=s,this.element=void 0,this.placeholder=void 0,this.slide=void 0,this.displayedImageWidth=0,this.displayedImageHeight=0,this.width=Number(this.data.w)||Number(this.data.width)||0,this.height=Number(this.data.h)||Number(this.data.height)||0,this.isAttached=!1,this.hasSlide=!1,this.isDecoding=!1,this.state=vt.IDLE,this.data.type?this.type=this.data.type:this.data.src?this.type="image":this.type="html",this.instance.dispatch("contentInit",{content:this})}removePlaceholder(){this.placeholder&&!this.keepPlaceholder()&&setTimeout((()=>{this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0)}),1e3)}load(t,e){if(this.slide&&this.usePlaceholder())if(this.placeholder){const t=this.placeholder.element;t&&!t.parentElement&&this.slide.container.prepend(t)}else{const t=this.instance.applyFilters("placeholderSrc",!(!this.data.msrc||!this.slide.isFirstSlide)&&this.data.msrc,this);this.placeholder=new ho(t,this.slide.container)}this.element&&!e||this.instance.dispatch("contentLoad",{content:this,isLazy:t}).defaultPrevented||(this.isImageContent()?(this.element=Jt("pswp__img","img"),this.displayedImageWidth&&this.loadImage(t)):(this.element=Jt("pswp__content","div"),this.element.innerHTML=this.data.html||""),e&&this.slide&&this.slide.updateContentSize(!0))}loadImage(t){var e,s;if(!this.isImageContent()||!this.element||this.instance.dispatch("contentLoadImage",{content:this,isLazy:t}).defaultPrevented)return;const n=this.element;this.updateSrcsetSizes(),this.data.srcset&&(n.srcset=this.data.srcset),n.src=null!==(e=this.data.src)&&void 0!==e?e:"",n.alt=null!==(s=this.data.alt)&&void 0!==s?s:"",this.state=vt.LOADING,n.complete?this.onLoaded():(n.onload=()=>{this.onLoaded()},n.onerror=()=>{this.onError()})}setSlide(t){this.slide=t,this.hasSlide=!0,this.instance=t.pswp}onLoaded(){this.state=vt.LOADED,this.slide&&this.element&&(this.instance.dispatch("loadComplete",{slide:this.slide,content:this}),this.slide.isActive&&this.slide.heavyAppended&&!this.element.parentNode&&(this.append(),this.slide.updateContentSize(!0)),(this.state===vt.LOADED||this.state===vt.ERROR)&&this.removePlaceholder())}onError(){this.state=vt.ERROR,this.slide&&(this.displayError(),this.instance.dispatch("loadComplete",{slide:this.slide,isError:!0,content:this}),this.instance.dispatch("loadError",{slide:this.slide,content:this}))}isLoading(){return this.instance.applyFilters("isContentLoading",this.state===vt.LOADING,this)}isError(){return this.state===vt.ERROR}isImageContent(){return"image"===this.type}setDisplayedSize(t,e){if(this.element&&(this.placeholder&&this.placeholder.setDisplayedSize(t,e),!this.instance.dispatch("contentResize",{content:this,width:t,height:e}).defaultPrevented&&(Ke(this.element,t,e),this.isImageContent()&&!this.isError()))){const s=!this.displayedImageWidth&&t;this.displayedImageWidth=t,this.displayedImageHeight=e,s?this.loadImage(!1):this.updateSrcsetSizes(),this.slide&&this.instance.dispatch("imageSizeChange",{slide:this.slide,width:t,height:e,content:this})}}isZoomable(){return this.instance.applyFilters("isContentZoomable",this.isImageContent()&&this.state!==vt.ERROR,this)}updateSrcsetSizes(){if(!this.isImageContent()||!this.element||!this.data.srcset)return;const t=this.element,e=this.instance.applyFilters("srcsetSizesWidth",this.displayedImageWidth,this);(!t.dataset.largestUsedSize||e>parseInt(t.dataset.largestUsedSize,10))&&(t.sizes=e+"px",t.dataset.largestUsedSize=String(e))}usePlaceholder(){return this.instance.applyFilters("useContentPlaceholder",this.isImageContent(),this)}lazyLoad(){this.instance.dispatch("contentLazyLoad",{content:this}).defaultPrevented||this.load(!0)}keepPlaceholder(){return this.instance.applyFilters("isKeepingPlaceholder",this.isLoading(),this)}destroy(){this.hasSlide=!1,this.slide=void 0,!this.instance.dispatch("contentDestroy",{content:this}).defaultPrevented&&(this.remove(),this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0),this.isImageContent()&&this.element&&(this.element.onload=null,this.element.onerror=null,this.element=void 0))}displayError(){if(this.slide){var t,e;let s=Jt("pswp__error-msg","div");s.innerText=null!==(t=null===(e=this.instance.options)||void 0===e?void 0:e.errorMsg)&&void 0!==t?t:"",s=this.instance.applyFilters("contentErrorElement",s,this),this.element=Jt("pswp__content pswp__error-msg-container","div"),this.element.appendChild(s),this.slide.container.innerText="",this.slide.container.appendChild(this.element),this.slide.updateContentSize(!0),this.removePlaceholder()}}append(){if(this.isAttached||!this.element)return;if(this.isAttached=!0,this.state===vt.ERROR)return void this.displayError();if(this.instance.dispatch("contentAppend",{content:this}).defaultPrevented)return;const t="decode"in this.element;this.isImageContent()?t&&this.slide&&(!this.slide.isActive||Is())?(this.isDecoding=!0,this.element.decode().catch((()=>{})).finally((()=>{this.isDecoding=!1,this.appendImage()}))):this.appendImage():this.slide&&!this.element.parentNode&&this.slide.container.appendChild(this.element)}activate(){this.instance.dispatch("contentActivate",{content:this}).defaultPrevented||!this.slide||(this.isImageContent()&&this.isDecoding&&!Is()?this.appendImage():this.isError()&&this.load(!1,!0),this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","false"))}deactivate(){this.instance.dispatch("contentDeactivate",{content:this}),this.slide&&this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","true")}remove(){this.isAttached=!1,!this.instance.dispatch("contentRemove",{content:this}).defaultPrevented&&(this.element&&this.element.parentNode&&this.element.remove(),this.placeholder&&this.placeholder.element&&this.placeholder.element.remove())}appendImage(){this.isAttached&&(this.instance.dispatch("contentAppendImage",{content:this}).defaultPrevented||(this.slide&&this.element&&!this.element.parentNode&&this.slide.container.appendChild(this.element),(this.state===vt.LOADED||this.state===vt.ERROR)&&this.removePlaceholder()))}}function po(t,e){if(t.getViewportSizeFn){const s=t.getViewportSizeFn(t,e);if(s)return s}return{x:document.documentElement.clientWidth,y:window.innerHeight}}function fe(t,e,s,n,i){let o=0;if(e.paddingFn)o=e.paddingFn(s,n,i)[t];else if(e.padding)o=e.padding[t];else{const s="padding"+t[0].toUpperCase()+t.slice(1);e[s]&&(o=e[s])}return Number(o)||0}function fo(t,e,s,n){return{x:e.x-fe("left",t,e,s,n)-fe("right",t,e,s,n),y:e.y-fe("top",t,e,s,n)-fe("bottom",t,e,s,n)}}const Ts=4e3;class mo{constructor(t,e,s,n){this.pswp=n,this.options=t,this.itemData=e,this.index=s,this.panAreaSize=null,this.elementSize=null,this.fit=1,this.fill=1,this.vFill=1,this.initial=1,this.secondary=1,this.max=1,this.min=1}update(t,e,s){const n={x:t,y:e};this.elementSize=n,this.panAreaSize=s;const i=s.x/n.x,o=s.y/n.y;this.fit=Math.min(1,io?i:o),this.vFill=Math.min(1,o),this.initial=this._getInitial(),this.secondary=this._getSecondary(),this.max=Math.max(this.initial,this.secondary,this._getMax()),this.min=Math.min(this.fit,this.initial,this.secondary),this.pswp&&this.pswp.dispatch("zoomLevelsUpdate",{zoomLevels:this,slideData:this.itemData})}_parseZoomLevelOption(t){const e=t+"ZoomLevel",s=this.options[e];if(s)return"function"==typeof s?s(this):"fill"===s?this.fill:"fit"===s?this.fit:Number(s)}_getSecondary(){let t=this._parseZoomLevelOption("secondary");return t||(t=Math.min(1,3*this.fit),this.elementSize&&t*this.elementSize.x>Ts&&(t=Ts/this.elementSize.x),t)}_getInitial(){return this._parseZoomLevelOption("initial")||this.fit}_getMax(){return this._parseZoomLevelOption("max")||Math.max(1,4*this.fit)}}function Qs(t,e,s){const n=e.createContentFromData(t,s);let i;const{options:o}=e;if(o){let r;i=new mo(o,t,-1),r=e.pswp?e.pswp.viewportSize:po(o,e);const l=fo(o,r,t,s);i.update(n.width,n.height,l)}return n.lazyLoad(),i&&n.setDisplayedSize(Math.ceil(n.width*i.initial),Math.ceil(n.height*i.initial)),n}function go(t,e){const s=e.getItemData(t);if(!e.dispatch("lazyLoadSlide",{index:t,itemData:s}).defaultPrevented)return Qs(s,e,t)}class yo extends ao{getNumItems(){var t;let e=0;const s=null===(t=this.options)||void 0===t?void 0:t.dataSource;s&&"length"in s?e=s.length:s&&"gallery"in s&&(s.items||(s.items=this._getGalleryDOMElements(s.gallery)),s.items&&(e=s.items.length));const n=this.dispatch("numItems",{dataSource:s,numItems:e});return this.applyFilters("numItems",n.numItems,s)}createContentFromData(t,e){return new uo(t,this,e)}getItemData(t){var e;const s=null===(e=this.options)||void 0===e?void 0:e.dataSource;let n={};Array.isArray(s)?n=s[t]:s&&"gallery"in s&&(s.items||(s.items=this._getGalleryDOMElements(s.gallery)),n=s.items[t]);let i=n;i instanceof Element&&(i=this._domElementToItemData(i));const o=this.dispatch("itemData",{itemData:i||{},index:t});return this.applyFilters("itemData",o.itemData,t)}_getGalleryDOMElements(t){var e,s;return null!==(e=this.options)&&void 0!==e&&e.children||null!==(s=this.options)&&void 0!==s&&s.childSelector?Qt(this.options.children,this.options.childSelector,t)||[]:[t]}_domElementToItemData(t){const e={element:t},s="A"===t.tagName?t:t.querySelector("a");if(s){e.src=s.dataset.pswpSrc||s.href,s.dataset.pswpSrcset&&(e.srcset=s.dataset.pswpSrcset),e.width=s.dataset.pswpWidth?parseInt(s.dataset.pswpWidth,10):0,e.height=s.dataset.pswpHeight?parseInt(s.dataset.pswpHeight,10):0,e.w=e.width,e.h=e.height,s.dataset.pswpType&&(e.type=s.dataset.pswpType);const i=t.querySelector("img");var n;if(i)e.msrc=i.currentSrc||i.src,e.alt=null!==(n=i.getAttribute("alt"))&&void 0!==n?n:"";(s.dataset.pswpCropped||s.dataset.cropped)&&(e.thumbCropped=!0)}return this.applyFilters("domItemData",e,t,s)}lazyLoadData(t,e){return Qs(t,this,e)}}class vo extends yo{constructor(t){super(),this.options=t||{},this._uid=0,this.shouldOpen=!1,this._preloadedContent=void 0,this.onThumbnailsClick=this.onThumbnailsClick.bind(this)}init(){Qt(this.options.gallery,this.options.gallerySelector).forEach((t=>{t.addEventListener("click",this.onThumbnailsClick,!1)}))}onThumbnailsClick(t){if(co(t)||window.pswp)return;let e={x:t.clientX,y:t.clientY};!e.x&&!e.y&&(e=null);let s=this.getClickedIndex(t);s=this.applyFilters("clickedIndex",s,t,this);const n={gallery:t.currentTarget};s>=0&&(t.preventDefault(),this.loadAndOpen(s,n,e))}getClickedIndex(t){if(this.options.getClickedIndexFn)return this.options.getClickedIndexFn.call(this,t);const e=t.target,s=Qt(this.options.children,this.options.childSelector,t.currentTarget).findIndex((t=>t===e||t.contains(e)));return-1!==s?s:this.options.children||this.options.childSelector?-1:0}loadAndOpen(t,e,s){if(window.pswp||!this.options)return!1;if(!e&&this.options.gallery&&this.options.children){const t=Qt(this.options.gallery);t[0]&&(e={gallery:t[0]})}return this.options.index=t,this.options.initialPointerPos=s,this.shouldOpen=!0,this.preload(t,e),!0}preload(t,e){const{options:s}=this;e&&(s.dataSource=e);const n=[],i=typeof s.pswpModule;if(ro(s.pswpModule))n.push(Promise.resolve(s.pswpModule));else{if("string"===i)throw new Error("pswpModule as string is no longer supported");if("function"!==i)throw new Error("pswpModule is not valid");n.push(s.pswpModule())}"function"==typeof s.openPromise&&n.push(s.openPromise()),!1!==s.preloadFirstSlide&&t>=0&&(this._preloadedContent=go(t,this));const o=++this._uid;Promise.all(n).then((t=>{if(this.shouldOpen){const e=t[0];this._openPhotoswipe(e,o)}}))}_openPhotoswipe(t,e){if(e!==this._uid&&this.shouldOpen||(this.shouldOpen=!1,window.pswp))return;const s="object"==typeof t?new t.default(this.options):new t(this.options);this.pswp=s,window.pswp=s,Object.keys(this._listeners).forEach((t=>{var e;null===(e=this._listeners[t])||void 0===e||e.forEach((e=>{s.on(t,e)}))})),Object.keys(this._filters).forEach((t=>{var e;null===(e=this._filters[t])||void 0===e||e.forEach((e=>{s.addFilter(t,e.fn,e.priority)}))})),this._preloadedContent&&(s.contentLoader.addToCache(this._preloadedContent),this._preloadedContent=void 0),s.on("destroy",(()=>{this.pswp=void 0,delete window.pswp})),s.init()}destroy(){var t;null===(t=this.pswp)||void 0===t||t.destroy(),this.shouldOpen=!1,this._listeners={},Qt(this.options.gallery,this.options.gallerySelector).forEach((t=>{t.removeEventListener("click",this.onThumbnailsClick,!1)}))}}let te,wo=Jn((()=>import("./photoswipe.esm.CKijkUPa.js")),[]);function As(){te=new vo({gallery:".custom-md img, #post-cover img",pswpModule:()=>wo,closeSVG:'',zoomSVG:'',padding:{top:20,bottom:20,left:20,right:20},wheelToZoom:!0,arrowPrev:!1,arrowNext:!1,imageClickAction:"close",tapAction:"close",doubleTapAction:"zoom"}),te.addFilter("domItemData",((t,e)=>(e instanceof HTMLImageElement&&(t.src=e.src,t.w=Number(e.naturalWidth||window.innerWidth),t.h=Number(e.naturalHeight||window.innerHeight),t.msrc=e.src),t))),te.init()}const $s=()=>{te||As(),window.swup.hooks.on("page:view",(()=>{As()})),window.swup.hooks.on("content:replace",(()=>{te?.destroy?.()}),{before:!0})};window.swup?$s():document.addEventListener("swup:enable",$s);const pt=(t,e)=>{const{o:s,i:n,u:i}=t;let o,r=s;const l=(t,e)=>{const s=r,l=t,a=e||(n?!n(s,l):s!==l);return(a||i)&&(r=l,o=s),[r,a,o]};return[e?t=>l(e(r,o),t):l,t=>[r,!!t,o]]},bo=typeof window<"u"&&typeof HTMLElement<"u"&&!!window.document,ut=bo?window:{},tn=Math.max,So=Math.min,Ge=Math.round,Se=Math.abs,Ds=Math.sign,en=ut.cancelAnimationFrame,ds=ut.requestAnimationFrame,xe=ut.setTimeout,Xe=ut.clearTimeout,Te=t=>typeof ut[t]<"u"?ut[t]:void 0,xo=Te("MutationObserver"),ks=Te("IntersectionObserver"),Ee=Te("ResizeObserver"),ye=Te("ScrollTimeline"),hs=t=>void 0===t,Ae=t=>null===t,Ct=t=>"number"==typeof t,oe=t=>"string"==typeof t,us=t=>"boolean"==typeof t,wt=t=>"function"==typeof t,_t=t=>Array.isArray(t),Ce=t=>"object"==typeof t&&!_t(t)&&!Ae(t),ps=t=>{const e=!!t&&t.length,s=Ct(e)&&e>-1&&e%1==0;return!!(_t(t)||!wt(t)&&s)&&(!(e>0&&Ce(t))||e-1 in t)},_e=t=>!!t&&t.constructor===Object,Le=t=>t instanceof HTMLElement,$e=t=>t instanceof Element;function K(t,e){if(ps(t))for(let s=0;se(t[s],s,t)));return t}const sn=(t,e)=>t.indexOf(e)>=0,ee=(t,e)=>t.concat(e),tt=(t,e,s)=>(!oe(e)&&ps(e)?Array.prototype.push.apply(t,e):t.push(e),t),Mt=t=>Array.from(t||[]),fs=t=>_t(t)?t:!oe(t)&&ps(t)?Mt(t):[t],Ye=t=>!!t&&!t.length,Je=t=>Mt(new Set(t)),gt=(t,e,s)=>{K(t,(t=>!t||t.apply(void 0,e||[]))),!s&&(t.length=0)},nn="paddingTop",on="paddingRight",cn="paddingLeft",rn="paddingBottom",ln="marginLeft",an="marginRight",dn="marginBottom",hn="overflowX",un="overflowY",De="width",ke="height",$t="visible",Ht="hidden",Zt="scroll",Eo=t=>{const e=String(t||"");return e?e[0].toUpperCase()+e.slice(1):""},Me=(t,e,s,n)=>{if(t&&e){let n=!0;return K(s,(s=>{t[s]!==e[s]&&(n=!1)})),n}return!1},pn=(t,e)=>Me(t,e,["w","h"]),ve=(t,e)=>Me(t,e,["x","y"]),Co=(t,e)=>Me(t,e,["t","r","b","l"]),zt=()=>{},A=(t,...e)=>t.bind(0,...e),Ft=t=>{let e;const s=t?xe:ds,n=t?Xe:en;return[i=>{n(e),e=s((()=>i()),wt(t)?t():t)},()=>n(e)]},Qe=(t,e)=>{const{_:s,v:n,p:i,S:o}=e||{};let r,l,a,c,d=zt;const h=function(e){d(),Xe(r),c=r=l=void 0,d=zt,t.apply(this,e)},p=t=>o&&l?o(l,t):t,u=()=>{d!==zt&&h(p(a)||a)},m=function(){const t=Mt(arguments),e=wt(s)?s():s;if(Ct(e)&&e>=0){const s=wt(n)?n():n,o=Ct(s)&&s>=0,m=e>0?xe:ds,y=e>0?Xe:en,f=p(t)||t,g=h.bind(0,f);let v;d(),i&&!c?(g(),c=!0,v=m((()=>c=void 0),e)):(v=m(g,e),o&&!r&&(r=xe(u,s))),d=()=>y(v),l=a=f}else h(t)};return m.m=u,m},fn=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),bt=t=>t?Object.keys(t):[],W=(t,e,s,n,i,o,r)=>{const l=[e,s,n,i,o,r];return("object"!=typeof t||Ae(t))&&!wt(t)&&(t={}),K(l,(e=>{K(e,((s,n)=>{const i=e[n];if(t===i)return!0;const o=_t(i);if(i&&_e(i)){const e=t[n];let s=e;o&&!_t(e)?s=[]:!o&&!_e(e)&&(s={}),t[n]=W(s,i)}else t[n]=o?i.slice():i}))})),t},mn=(t,e)=>K(W({},t),((t,e,s)=>{void 0===t?delete s[e]:t&&_e(t)&&(s[e]=mn(t))})),ms=t=>!bt(t).length,gn=(t,e,s)=>tn(t,So(e,s)),Rt=t=>Je((_t(t)?t:(t||"").split(" ")).filter((t=>t))),gs=(t,e)=>t&&t.getAttribute(e),Ms=(t,e)=>t&&t.hasAttribute(e),Ot=(t,e,s)=>{K(Rt(e),(e=>{t&&t.setAttribute(e,String(s||""))}))},xt=(t,e)=>{K(Rt(e),(e=>t&&t.removeAttribute(e)))},Pe=(t,e)=>{const s=Rt(gs(t,e)),n=A(Ot,t,e),i=(t,e)=>{const n=new Set(s);return K(Rt(t),(t=>{n[e](t)})),Mt(n).join(" ")};return{O:t=>n(i(t,"delete")),$:t=>n(i(t,"add")),C:t=>{const e=Rt(t);return e.reduce(((t,e)=>t&&s.includes(e)),e.length>0)}}},yn=(t,e,s)=>(Pe(t,e).O(s),A(ys,t,e,s)),ys=(t,e,s)=>(Pe(t,e).$(s),A(yn,t,e,s)),Oe=(t,e,s,n)=>(n?ys:yn)(t,e,s),vs=(t,e,s)=>Pe(t,e).C(s),vn=t=>Pe(t,"class"),wn=(t,e)=>{vn(t).O(e)},ws=(t,e)=>(vn(t).$(e),A(wn,t,e)),bn=(t,e)=>{const s=e?$e(e)&&e:document;return s?Mt(s.querySelectorAll(t)):[]},_o=(t,e)=>{const s=e?$e(e)&&e:document;return s&&s.querySelector(t)},ts=(t,e)=>$e(t)&&t.matches(e),Sn=t=>ts(t,"body"),es=t=>t?Mt(t.childNodes):[],se=t=>t&&t.parentElement,Nt=(t,e)=>$e(t)&&t.closest(e),ss=t=>document.activeElement,Lo=(t,e,s)=>{const n=Nt(t,e),i=t&&_o(s,n),o=Nt(i,e)===n;return!(!n||!i)&&(n===t||i===t||o&&Nt(Nt(t,s),e)!==n)},Wt=t=>{K(fs(t),(t=>{const e=se(t);t&&e&&e.removeChild(t)}))},ft=(t,e)=>A(Wt,t&&e&&K(fs(e),(e=>{e&&t.appendChild(e)}))),Bt=t=>{const e=document.createElement("div");return Ot(e,"class",t),e},xn=t=>{const e=Bt();return e.innerHTML=t.trim(),K(es(e),(t=>Wt(t)))},Ps=(t,e)=>t.getPropertyValue(e)||t[e]||"",En=t=>{const e=t||0;return isFinite(e)?e:0},me=t=>En(parseFloat(t||"")),ns=t=>Math.round(1e4*t)/1e4,Cn=t=>`${ns(En(t))}px`;function ne(t,e){t&&e&&K(e,((e,s)=>{try{const n=t.style,i=Ae(e)||us(e)?"":Ct(e)?Cn(e):e;0===s.indexOf("--")?n.setProperty(s,i):n[s]=i}catch{}}))}function Tt(t,e,s){const n=oe(e);let i=n?"":{};if(t){const o=ut.getComputedStyle(t,s)||t.style;i=n?Ps(o,e):Mt(e).reduce(((t,e)=>(t[e]=Ps(o,e),t)),i)}return i}const Hs=(t,e,s)=>{const n=e?`${e}-`:"",i=s?`-${s}`:"",o=`${n}top${i}`,r=`${n}right${i}`,l=`${n}bottom${i}`,a=`${n}left${i}`,c=Tt(t,[o,r,l,a]);return{t:me(c[o]),r:me(c[r]),b:me(c[l]),l:me(c[a])}},Oo=(t,e)=>"translate"+(Ce(t)?`(${t.x},${t.y})`:`Y(${t})`),Io=t=>!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length),To={w:0,h:0},He=(t,e)=>e?{w:e[`${t}Width`],h:e[`${t}Height`]}:To,Ao=t=>He("inner",t||ut),Vt=A(He,"offset"),_n=A(He,"client"),Ie=A(He,"scroll"),bs=t=>{const e=parseFloat(Tt(t,De))||0,s=parseFloat(Tt(t,ke))||0;return{w:e-Ge(e),h:s-Ge(s)}},Be=t=>t.getBoundingClientRect(),$o=t=>!!t&&Io(t),os=t=>!(!t||!t[ke]&&!t[De]),Ln=(t,e)=>{const s=os(t);return!os(e)&&s},zs=(t,e,s,n)=>{K(Rt(e),(e=>{t&&t.removeEventListener(e,s,n)}))},Y=(t,e,s,n)=>{var i;const o=null==(i=n&&n.H)||i,r=n&&n.I||!1,l=n&&n.A||!1,a={passive:o,capture:r};return A(gt,Rt(e).map((e=>{const n=l?i=>{zs(t,e,n,r),s&&s(i)}:s;return t&&t.addEventListener(e,n,a),A(zs,t,e,n,r)})))},On=t=>t.stopPropagation(),is=t=>t.preventDefault(),In=t=>On(t)||is(t),Et=(t,e)=>{const{x:s,y:n}=Ct(e)?{x:e,y:e}:e||{};Ct(s)&&(t.scrollLeft=s),Ct(n)&&(t.scrollTop=n)},mt=t=>({x:t.scrollLeft,y:t.scrollTop}),Tn=()=>({D:{x:0,y:0},M:{x:0,y:0}}),Do=(t,e)=>{const{D:s,M:n}=t,{w:i,h:o}=e,r=(t,e,s)=>{let n=Ds(t)*s,i=Ds(e)*s;if(n===i){const s=Se(t),o=Se(e);i=s>o?0:i,n=s{const s=(t,e)=>0===t&&t<=e;return{x:s(t.x,e.x),y:s(t.y,e.y)}},qs=({D:t,M:e},s)=>{const n=(t,e,s)=>gn(0,1,(t-s)/(t-e)||0);return{x:n(t.x,e.x,s.x),y:n(t.y,e.y,s.y)}},cs=t=>{t&&t.focus&&t.focus({preventScroll:!0})},Fs=(t,e)=>{K(fs(e),t)},rs=t=>{const e=new Map,s=(t,s)=>{if(t){const n=e.get(t);Fs((t=>{n&&n[t?"delete":"clear"](t)}),s)}else e.forEach((t=>{t.clear()})),e.clear()},n=(t,i)=>{if(oe(t)){const n=e.get(t)||new Set;return e.set(t,n),Fs((t=>{wt(t)&&n.add(t)}),i),A(s,t,i)}us(i)&&i&&s();const o=bt(t),r=[];return K(o,(e=>{const s=t[e];s&&tt(r,n(e,s))})),A(gt,r)};return n(t||{}),[n,s,(t,s)=>{K(Mt(e.get(t)),(t=>{s&&!Ye(s)?t.apply(0,s):t()}))}]},Ns=t=>JSON.stringify(t,((t,e)=>{if(wt(e))throw 0;return e})),Bs=(t,e)=>t?`${e}`.split(".").reduce(((t,e)=>t&&fn(t,e)?t[e]:void 0),t):void 0,ko={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},An=(t,e)=>{const s={};return K(ee(bt(e),bt(t)),(n=>{const i=t[n],o=e[n];if(Ce(i)&&Ce(o))W(s[n]={},An(i,o)),ms(s[n])&&delete s[n];else if(fn(e,n)&&o!==i){let t=!0;if(_t(i)||_t(o))try{Ns(i)===Ns(o)&&(t=!1)}catch{}t&&(s[n]=o)}})),s},Vs=(t,e,s)=>n=>[Bs(t,n),s||void 0!==Bs(e,n)],jt="data-overlayscrollbars",we="os-environment",ge=`${we}-scrollbar-hidden`,Ve=`${jt}-initialize`,be="noClipping",Zs=`${jt}-body`,Dt=jt,Mo="host",It=`${jt}-viewport`,Po=hn,Ho=un,zo="arrange",$n="measuring",Ro="scrolling",Dn="scrollbarHidden",qo="noContent",ls=`${jt}-padding`,Ws=`${jt}-content`,Ss="os-size-observer",Fo=`${Ss}-appear`,No=`${Ss}-listener`,Bo="os-trinsic-observer",Vo="os-theme-none",yt="os-scrollbar",Zo=`${yt}-rtl`,Wo=`${yt}-horizontal`,Uo=`${yt}-vertical`,kn=`${yt}-track`,xs=`${yt}-handle`,jo=`${yt}-visible`,Ko=`${yt}-cornerless`,Us=`${yt}-interaction`,js=`${yt}-unusable`,as=`${yt}-auto-hide`,Ks=`${as}-hidden`,Gs=`${yt}-wheel`,Go=`${kn}-interactive`,Xo=`${xs}-interactive`;let Mn;const Yo=()=>Mn,Jo=t=>{Mn=t};let Ze;const Qo=()=>{const t=(t,e,s)=>{ft(document.body,t),ft(document.body,t);const n=_n(t),i=Vt(t),o=bs(e);return s&&Wt(t),{x:i.h-n.h+o.h,y:i.w-n.w+o.w}},e=xn(`
`)[0],s=e.firstChild,n=e.lastChild,i=Yo();i&&(n.nonce=i);const[o,,r]=rs(),[l,a]=pt({o:t(e,s),i:ve},A(t,e,s,!0)),[c]=a(),d=(t=>{let e=!1;const s=ws(t,ge);try{e="none"===Tt(t,"scrollbar-width")||"none"===Tt(t,"display","::-webkit-scrollbar")}catch{}return s(),e})(e),h={x:0===c.x,y:0===c.y},p={elements:{host:null,padding:!d,viewport:t=>d&&Sn(t)&&t,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},u=W({},ko),m=A(W,{},u),y=A(W,{},p),f={T:c,k:h,R:d,V:!!ye,L:A(o,"r"),U:y,P:t=>W(p,t)&&y(),N:m,q:t=>W(u,t)&&m(),B:W({},p),F:W({},u)};if(xt(e,"style"),Wt(e),Y(ut,"resize",(()=>{r("r",[])})),wt(ut.matchMedia)&&!d&&(!h.x||!h.y)){const t=e=>{const s=ut.matchMedia(`(resolution: ${ut.devicePixelRatio}dppx)`);Y(s,"change",(()=>{e(),t(e)}),{A:!0})};t((()=>{const[t,e]=l();W(f.T,t),r("r",[e])}))}return f},Lt=()=>(Ze||(Ze=Qo()),Ze),Pn=(t,e)=>wt(e)?e.apply(0,t):e,ti=(t,e,s,n)=>{const i=hs(n)?s:n;return Pn(t,i)||e.apply(0,t)},Hn=(t,e,s,n)=>{const i=hs(n)?s:n,o=Pn(t,i);return!!o&&(Le(o)?o:e.apply(0,t))},ei=(t,e)=>{const{nativeScrollbarsOverlaid:s,body:n}=e||{},{k:i,R:o,U:r}=Lt(),{nativeScrollbarsOverlaid:l,body:a}=r().cancel,c=s??l,d=hs(n)?a:n,h=(i.x||i.y)&&c,p=t&&(Ae(d)?!o:d);return!!h||!!p},Es=new WeakMap,si=(t,e)=>{Es.set(t,e)},ni=t=>{Es.delete(t)},zn=t=>Es.get(t),oi=(t,e,s)=>{let n=!1;const i=!!s&&new WeakMap,o=o=>{if(i&&s){K(s.map((e=>{const[s,n]=e||[];return[n&&s?(o||bn)(s,t):[],n]})),(s=>K(s[0],(o=>{const r=s[1],l=i.get(o)||[];if(t.contains(o)&&r){const t=Y(o,r,(s=>{n?(t(),i.delete(o)):e(s)}));i.set(o,tt(l,t))}else gt(l),i.delete(o)}))))}};return o(),[()=>{n=!0},o]},Xs=(t,e,s,n)=>{let i=!1;const{j:o,X:r,Y:l,W:a,J:c,G:d}=n||{},h=Qe((()=>i&&s(!0)),{_:33,v:99}),[p,u]=oi(t,h,l),m=r||[],y=ee(o||[],m),f=(i,o)=>{if(!Ye(o)){const r=c||zt,l=d||zt,h=[],p=[];let y=!1,f=!1;if(K(o,(s=>{const{attributeName:i,target:o,type:c,oldValue:d,addedNodes:u,removedNodes:g}=s,v="attributes"===c,w="childList"===c,b=t===o,x=v&&i,E=x&&gs(o,i||""),A=oe(E)?E:null,L=x&&d!==A,S=sn(m,i)&&L;if(e&&(w||!b)){const e=v&&L,c=e&&a&&ts(o,a),p=(c?!r(o,i,d,A):!v||e)&&!l(s,!!c,t,n);K(u,(t=>tt(h,t))),K(g,(t=>tt(h,t))),f=f||p}!e&&b&&L&&!r(o,i,d,A)&&(tt(p,i),y=y||S)})),u((t=>Je(h).reduce(((e,s)=>(tt(e,bn(t,s)),ts(s,t)?tt(e,s):e)),[]))),e)return!i&&f&&s(!1),[!1];if(!Ye(p)||y){const t=[Je(p),y];return!i&&s.apply(0,t),t}}},g=new xo(A(f,!1));return[()=>(g.observe(t,{attributes:!0,attributeOldValue:!0,attributeFilter:y,subtree:e,childList:e,characterData:e}),i=!0,()=>{i&&(p(),g.disconnect(),i=!1)}),()=>{if(i)return h.m(),f(!0,g.takeRecords())}]},Rn={},qn={},ii=t=>{K(t,(t=>K(t,((e,s)=>{Rn[s]=t[s]}))))},Fn=(t,e,s)=>bt(t).map((n=>{const{static:i,instance:o}=t[n],[r,l,a]=s||[],c=s?o:i;if(c){const t=s?c(r,l,e):c(e);return(a||qn)[n]=t}})),ie=t=>qn[t],ci="__osOptionsValidationPlugin",ri="__osSizeObserverPlugin",li=(t,e)=>{const{k:s}=e,[n,i]=t("showNativeOverlaidScrollbars");return[n&&s.x&&s.y,i]},Ut=t=>0===t.indexOf($t),ai=(t,e)=>{const s=(t,e,s,n)=>{const i=t===$t?Ht:t.replace(`${$t}-`,""),o=Ut(t),r=Ut(s);return e||n?o&&r?$t:o?e&&n?i:e?$t:Ht:e?i:r&&n?$t:Ht:Ht},n={x:s(e.x,t.x,e.y,t.y),y:s(e.y,t.y,e.x,t.x)};return{K:n,Z:{x:n.x===Zt,y:n.y===Zt}}},Nn="__osScrollbarsHidingPlugin",di="__osClickScrollPlugin",Bn=(t,e,s)=>{const{dt:n}=s||{},i=ie(ri),[o]=pt({o:!1,u:!0});return()=>{const s=[],r=xn(`
`)[0],l=r.firstChild,a=t=>{let s=!1,n=!1;if(t instanceof ResizeObserverEntry){const[e,,i]=o(t.contentRect),r=os(e);n=Ln(e,i),s=!n&&!r}else n=!0===t;s||e({ft:!0,dt:n})};if(Ee){const t=new Ee((t=>a(t.pop())));t.observe(l),tt(s,(()=>{t.disconnect()}))}else{if(!i)return zt;{const[t,e]=i(l,a,n);tt(s,ee([ws(r,Fo),Y(r,"animationstart",t)],e))}}return A(gt,tt(s,ft(t,r)))}},hi=(t,e)=>{let s;const n=Bt(Bo),[i]=pt({o:!1}),o=(t,s)=>{if(t){const n=i((t=>0===t.h||t.isIntersecting||t.intersectionRatio>0)(t)),[,o]=n;return o&&!s&&e(n)&&[n]}},r=(t,e)=>o(e.pop(),t);return[()=>{const e=[];if(ks)s=new ks(A(r,!1),{root:t}),s.observe(n),tt(e,(()=>{s.disconnect()}));else{const t=()=>{const t=Vt(n);o(t)};tt(e,Bn(n,t)()),t()}return A(gt,tt(e,ft(t,n)))},()=>s&&r(!0,s.takeRecords())]},ui=(t,e,s,n)=>{let i,o,r,l,a,c;const d=`[${Dt}]`,h=`[${It}]`,p=["id","class","style","open","wrap","cols","rows"],{vt:u,ht:m,ot:y,gt:f,bt:g,nt:v,wt:w,yt:b,St:x,Ot:E}=t,A=t=>"rtl"===Tt(t,"direction"),L={$t:!1,ct:A(u)},S=Lt(),I=ie(Nn),[C]=pt({i:pn,o:{w:0,h:0}},(()=>{const n=I&&I.tt(t,e,L,S,s).ut,i=!(w&&v)&&vs(m,Dt,be),o=!v&&b(zo),r=o&&mt(f),l=r&&E(),a=x($n,i),c=o&&n&&n()[0],d=Ie(y),h=bs(y);return c&&c(),Et(f,r),l&&l(),i&&a(),{w:d.w+h.w,h:d.h+h.h}})),_=Qe(n,{_:()=>i,v:()=>o,S(t,e){const[s]=t,[n]=e;return[ee(bt(s),bt(n)).reduce(((t,e)=>(t[e]=s[e]||n[e],t)),{})]}}),D=t=>{const e=A(u);W(t,{Ct:c!==e}),W(L,{ct:e}),c=e},T=(t,e)=>{const[s,i]=t,o={xt:i};return W(L,{$t:s}),!e&&n(o),o},k=({ft:t,dt:e})=>{const s=t&&!e||!S.R?n:_,i={ft:t||e,dt:e};D(i),s(i)},O=(t,e)=>{const[,s]=C(),i={Ht:s};return D(i),s&&!e&&(t?n:_)(i),i},$=(t,e,s)=>{const n={Et:e};return D(n),e&&!s&&_(n),n},[M,z]=g?hi(m,T):[],H=!v&&Bn(m,k,{dt:!0}),[R,P]=Xs(m,!1,$,{X:p,j:p}),q=v&&Ee&&new Ee((t=>{const e=t[t.length-1].contentRect;k({ft:!0,dt:Ln(e,a)}),a=e})),F=Qe((()=>{const[,t]=C();n({Ht:t})}),{_:222,p:!0});return[()=>{q&&q.observe(m);const t=H&&H(),e=M&&M(),s=R(),n=S.L((t=>{t?_({zt:t}):F()}));return()=>{q&&q.disconnect(),t&&t(),e&&e(),l&&l(),s(),n()}},({It:t,At:e,Dt:s})=>{const n={},[a]=t("update.ignoreMutation"),[c,u]=t("update.attributes"),[m,f]=t("update.elementEvents"),[w,b]=t("update.debounce"),x=e||s;if(f||u){r&&r(),l&&l();const[t,e]=Xs(g||y,!0,O,{j:ee(p,c||[]),Y:m,W:d,G:(t,e)=>{const{target:s,attributeName:n}=t;return!(e||!n||v)&&Lo(s,d,h)||!!Nt(s,`.${yt}`)||!!(t=>wt(a)&&a(t))(t)}});l=t(),r=e}if(b)if(_.m(),_t(w)){const t=w[0],e=w[1];i=Ct(t)&&t,o=Ct(e)&&e}else Ct(w)?(i=w,o=!1):(i=!1,o=!1);if(x){const t=P(),e=z&&z(),s=r&&r();t&&W(n,$(t[0],t[1],x)),e&&W(n,T(e[0],x)),s&&W(n,O(s[0],x))}return D(n),n},L]},pi=(t,e,s,n)=>{const i="--os-viewport-percent",o="--os-scroll-percent",r="--os-scroll-direction",{U:l}=Lt(),{scrollbars:a}=l(),{slot:c}=a,{vt:d,ht:h,ot:p,Mt:u,gt:m,wt:y,nt:f}=e,{scrollbars:g}=u?{}:t,{slot:v}=g||{},w=[],b=[],x=[],E=Hn([d,h,p],(()=>f&&y?d:h),c,v),L=t=>{if(ye){const e=new ye({source:m,axis:t});return{kt:t=>{const s=t.Tt.animate({clear:["left"],[o]:[0,1]},{timeline:e});return()=>s.cancel()}}}},S={x:L("x"),y:L("y")},I=(t,e,s)=>{const n=s?ws:wn;K(t,(t=>{n(t.Tt,e)}))},C=(t,e)=>{K(t,(t=>{const[s,n]=e(t);ne(s,n)}))},_=(t,e,s)=>{const n=us(s),i=!n||!s;(!n||s)&&I(b,t,e),i&&I(x,t,e)},D=t=>{const e=t?"x":"y",s=Bt(`${yt} ${t?Wo:Uo}`),i=Bt(kn),o=Bt(xs),r={Tt:s,Ut:i,Pt:o},l=S[e];return tt(t?b:x,r),tt(w,[ft(s,i),ft(i,o),A(Wt,s),l&&l.kt(r),n(r,_,t)]),r},T=A(D,!0),k=A(D,!1);return T(),k(),[{Nt:()=>{const t=(()=>{const{Rt:t,Vt:e}=s,n=(t,e)=>gn(0,1,t/(t+e)||0);return{x:n(e.x,t.x),y:n(e.y,t.y)}})(),e=t=>e=>[e.Tt,{[i]:ns(t)+""}];C(b,e(t.x)),C(x,e(t.y))},qt:()=>{if(!ye){const{Lt:t}=s,e=qs(t,mt(m)),n=t=>e=>[e.Tt,{[o]:ns(t)+""}];C(b,n(e.x)),C(x,n(e.y))}},Bt:()=>{const{Lt:t}=s,e=Rs(t),n=t=>e=>[e.Tt,{[r]:t?"0":"1"}];C(b,n(e.x)),C(x,n(e.y))},Ft:()=>{if(f&&!y){const{Rt:t,Lt:e}=s,n=Rs(e),i=qs(e,mt(m)),o=e=>{const{Tt:s}=e,o=se(s)===p&&s,r=(t,e,s)=>{const n=e*t;return Cn(s?n:-n)};return[o,o&&{transform:Oo({x:r(i.x,t.x,n.x),y:r(i.y,t.y,n.y)})}]};C(b,o),C(x,o)}},jt:_,Xt:{Yt:b,Wt:T,Jt:A(C,b)},Gt:{Yt:x,Wt:k,Jt:A(C,x)}},()=>(ft(E,b[0].Tt),ft(E,x[0].Tt),A(gt,w))]},fi=(t,e,s,n)=>(i,o,r)=>{const{ht:l,ot:a,nt:c,gt:d,Kt:h,Ot:p}=e,{Tt:u,Ut:m,Pt:y}=i,[f,g]=Ft(333),[v,w]=Ft(444),b=t=>{wt(d.scrollBy)&&d.scrollBy({behavior:"smooth",left:t.x,top:t.y})};let x=!0;return A(gt,[Y(y,"pointermove pointerleave",n),Y(u,"pointerenter",(()=>{o(Us,!0)})),Y(u,"pointerleave pointercancel",(()=>{o(Us,!1)})),!c&&Y(u,"mousedown",(()=>{const t=ss();(Ms(t,It)||Ms(t,Dt)||t===document.body)&&xe(A(cs,a),25)})),Y(u,"wheel",(t=>{const{deltaX:e,deltaY:s,deltaMode:n}=t;x&&0===n&&se(u)===l&&b({x:e,y:s}),x=!1,o(Gs,!0),f((()=>{x=!0,o(Gs)})),is(t)}),{H:!1,I:!0}),Y(u,"pointerdown",A(Y,h,"click",In,{A:!0,I:!0,H:!1}),{I:!0}),(()=>{const e="pointerup pointercancel lostpointercapture",n="client"+(r?"X":"Y"),i=r?De:ke,o=r?"left":"top",l=r?"w":"h",a=r?"x":"y",c=[];return Y(m,"pointerdown",(r=>{const u=Nt(r.target,`.${xs}`)===y,f=u?y:m,g=t.scrollbars,x=g[u?"dragScroll":"clickScroll"],{button:E,isPrimary:L,pointerType:S}=r,{pointers:I}=g;if(0===E&&L&&x&&(I||[]).includes(S)){gt(c),w();const t=!u&&(r.shiftKey||"instant"===x),g=A(Be,y),E=A(Be,m),L=(t,e)=>(t||g())[o]-(e||E())[o],S=Ge(Be(d)[i])/Vt(d)[l]||1,I=((t,e)=>n=>{const{Rt:i}=s,o=Vt(m)[l]-Vt(y)[l],r=e*n/o*i[a];Et(d,{[a]:t+r})})(mt(d)[a],1/S),C=r[n],_=g(),D=E(),T=_[i],k=L(_,D)+T/2,O=C-D[o],$=u?0:O-k,M=t=>{gt(H),f.releasePointerCapture(t.pointerId)},W=u||t,z=p(),H=[Y(h,e,M),Y(h,"selectstart",(t=>is(t)),{H:!1}),Y(m,e,M),W&&Y(m,"pointermove",(t=>I($+(t[n]-C)))),W&&(()=>{const t=mt(d);z();const e=mt(d),s={x:e.x-t.x,y:e.y-t.y};(Se(s.x)>3||Se(s.y)>3)&&(p(),Et(d,t),b(s),v(z))})];if(f.setPointerCapture(r.pointerId),t)I($);else if(!u){const t=ie(di);if(t){const e=t(I,$,T,(t=>{t?z():tt(H,z)}));tt(H,e),tt(c,A(e,!0))}}}}))})(),g,w])},mi=(t,e,s,n,i,o)=>{let r,l,a,c,d,h=zt,p=0;const u=t=>"mouse"===t.pointerType,[m,y]=Ft(),[f,g]=Ft(100),[v,w]=Ft(100),[b,x]=Ft((()=>p)),[E,L]=pi(t,i,n,fi(e,i,n,(t=>u(t)&&M()))),{ht:S,Qt:I,wt:C}=i,{jt:_,Nt:D,qt:T,Bt:k,Ft:O}=E,$=(t,e)=>{if(x(),t)_(Ks);else{const t=A(_,Ks,!0);p>0&&!e?b(t):t()}},M=()=>{(a?!r:!c)&&($(!0),f((()=>{$(!1)})))},W=t=>{_(as,t,!0),_(as,t,!1)},z=t=>{u(t)&&(r=a,a&&$(!0))},H=[x,g,w,y,()=>h(),Y(S,"pointerover",z,{A:!0}),Y(S,"pointerenter",z),Y(S,"pointerleave",(t=>{u(t)&&(r=!1,a&&$(!1))})),Y(S,"pointermove",(t=>{u(t)&&l&&M()})),Y(I,"scroll",(t=>{m((()=>{T(),M()})),o(t),O()}))];return[()=>A(gt,tt(H,L())),({It:t,Dt:e,Zt:i,tn:o})=>{const{nn:r,sn:u,en:m,cn:y}=o||{},{Ct:f,dt:g}=i||{},{ct:w}=s,{k:b}=Lt(),{K:x,rn:E}=n,[L,S]=t("showNativeOverlaidScrollbars"),[M,z]=t("scrollbars.theme"),[H,R]=t("scrollbars.visibility"),[P,q]=t("scrollbars.autoHide"),[F,N]=t("scrollbars.autoHideSuspend"),[K]=t("scrollbars.autoHideDelay"),[B,Z]=t("scrollbars.dragScroll"),[j,V]=t("scrollbars.clickScroll"),[U,G]=t("overflow"),Q=g&&!e,J=E.x||E.y,X=r||u||y||f||e,tt=m||R||G,et=L&&b.x&&b.y,st=(t,e,s)=>{const n=t.includes(Zt)&&(H===$t||"auto"===H&&e===Zt);return _(jo,n,s),n};if(p=K,Q&&(F&&J?(W(!1),h(),v((()=>{h=Y(I,"scroll",A(W,!0),{A:!0})}))):W(!0)),S&&_(Vo,et),z&&(_(d),_(M,!0),d=M),N&&!F&&W(!0),q&&(l="move"===P,a="leave"===P,c="never"===P,$(c,!0)),Z&&_(Xo,B),V&&_(Go,!!j),tt){const t=st(U.x,x.x,!0),e=st(U.y,x.y,!1);_(Ko,!(t&&e))}X&&(T(),D(),O(),y&&k(),_(js,!E.x,!0),_(js,!E.y,!1),_(Zo,w&&!C))},{},E]},gi=t=>{const e=Lt(),{U:s,R:n}=e,{elements:i}=s(),{padding:o,viewport:r,content:l}=i,a=Le(t),c=a?{}:t,{elements:d}=c,{padding:h,viewport:p,content:u}=d||{},m=a?t:c.target,y=Sn(m),f=m.ownerDocument,g=f.documentElement,v=()=>f.defaultView||ut,w=A(ti,[m]),b=A(Hn,[m]),x=A(Bt,""),E=A(w,x,r),L=A(b,x,l),S=E(p),I=S===m,C=I&&y,_=!I&&L(u),D=!I&&S===_,T=C?g:S,k=C?T:m,O=!I&&b(x,o,h),$=!D&&_,M=[$,T,O,k].map((t=>Le(t)&&!se(t)&&t)),W=t=>t&&sn(M,t),z=!W(T)&&(t=>{const e=Vt(t),s=Ie(t),n=Tt(t,hn),i=Tt(t,un);return s.w-e.w>0&&!Ut(n)||s.h-e.h>0&&!Ut(i)})(T)?T:m,H=C?g:T,R={vt:m,ht:k,ot:T,ln:O,bt:$,gt:H,Qt:C?f:T,an:y?g:z,Kt:f,wt:y,Mt:a,nt:I,un:v,yt:t=>vs(T,It,t),St:(t,e)=>Oe(T,It,t,e),Ot:()=>Oe(H,It,Ro,!0)},{vt:P,ht:q,ln:F,ot:N,bt:K}=R,B=[()=>{xt(q,[Dt,Ve]),xt(P,Ve),y&&xt(g,[Ve,Dt])}];let Z=es([K,N,F,q,P].find((t=>t&&!W(t))));const j=C?P:K||N,V=A(gt,B);return[R,()=>{const t=v(),e=ss(),s=t=>{ft(se(t),es(t)),Wt(t)},i=t=>Y(t,"focusin focusout focus blur",In,{I:!0,H:!1}),o="tabindex",r=gs(N,o),l=i(e);return Ot(q,Dt,I?"":Mo),Ot(F,ls,""),Ot(N,It,""),Ot(K,Ws,""),I||(Ot(N,o,r||"-1"),y&&Ot(g,Zs,"")),ft(j,Z),ft(q,F),ft(F||q,!I&&N),ft(N,K),tt(B,[l,()=>{const t=ss(),e=W(N),n=e&&t===N?P:t,l=i(n);xt(F,ls),xt(K,Ws),xt(N,It),y&&xt(g,Zs),r?Ot(N,o,r):xt(N,o),W(K)&&s(K),e&&s(N),W(F)&&s(F),cs(n),l()}]),n&&!I&&(ys(N,It,Dn),tt(B,A(xt,N,It))),cs(!I&&y&&e===P&&t.top===t?N:e),l(),Z=0,V},V]},yi=({bt:t})=>({Zt:e,_n:s,Dt:n})=>{const{xt:i}=e||{},{$t:o}=s;t&&(i||n)&&ne(t,{[ke]:o&&"100%"})},vi=({ht:t,ln:e,ot:s,nt:n},i)=>{const[o,r]=pt({i:Co,o:Hs()},A(Hs,t,"padding",""));return({It:t,Zt:l,_n:a,Dt:c})=>{let[d,h]=r(c);const{R:p}=Lt(),{ft:u,Ht:m,Ct:y}=l||{},{ct:f}=a,[g,v]=t("paddingAbsolute");(u||h||c||m)&&([d,h]=o(c));const w=!n&&(v||y||h);if(w){const t=!g||!e&&!p,n=d.r+d.l,o=d.t+d.b,r={[an]:t&&!f?-n:0,[dn]:t?-o:0,[ln]:t&&f?-n:0,top:t?-d.t:0,right:t?f?-d.r:"auto":0,left:t?f?"auto":-d.l:0,[De]:t&&`calc(100% + ${n}px)`},l={[nn]:t?d.t:0,[on]:t?d.r:0,[rn]:t?d.b:0,[cn]:t?d.l:0};ne(e||s,r),ne(s,l),W(i,{ln:d,dn:!t,rt:e?l:W({},r,l)})}return{fn:w}}},wi=(t,e)=>{const s=Lt(),{ht:n,ln:i,ot:o,nt:r,Qt:l,gt:a,wt:c,St:d,un:h}=t,{R:p}=s,u=c&&r,m=A(tn,0),y={display:()=>!1,direction:t=>"ltr"!==t,flexDirection:t=>t.endsWith("-reverse"),writingMode:t=>"horizontal-tb"!==t},f=bt(y),g={i:pn,o:{w:0,h:0}},v={i:ve,o:{}},w=t=>{d($n,!u&&t)},[b,x]=pt(g,A(bs,o)),[E,L]=pt(g,A(Ie,o)),[S,I]=pt(g),[C]=pt(v),[_,D]=pt(g),[T]=pt(v),[k]=pt({i:(t,e)=>Me(t,e,f),o:{}},(()=>$o(o)?Tt(o,f):{})),[O,$]=pt({i:(t,e)=>ve(t.D,e.D)&&ve(t.M,e.M),o:Tn()}),M=ie(Nn),z=(t,e)=>`${e?Po:Ho}${Eo(t)}`;return({It:r,Zt:c,_n:g,Dt:v},{fn:A})=>{const{ft:H,Ht:R,Ct:P,dt:q,zt:F}=c||{},N=M&&M.tt(t,e,g,s,r),{it:K,ut:B,_t:Z}=N||{},[j,V]=li(r,s),[U,G]=r("overflow"),Q=Ut(U.x),J=Ut(U.y);let X=x(v),tt=L(v),et=I(v),st=D(v);V&&p&&d(Dn,!j);{vs(n,Dt,be)&&w(!0);const[t]=B?B():[],[e]=X=b(v),[s]=tt=E(v),i=_n(o),r=u&&Ao(h()),l={w:m(s.w+e.w),h:m(s.h+e.h)},a={w:m((r?r.w:i.w+m(i.w-s.w))+e.w),h:m((r?r.h:i.h+m(i.h-s.h))+e.h)};t&&t(),st=_(a),et=S(((t,e)=>{const s=ut.devicePixelRatio%1!=0?1:0,n={w:m(t.w-e.w),h:m(t.h-e.h)};return{w:n.w>s?n.w:0,h:n.h>s?n.h:0}})(l,a),v)}const[nt,it]=st,[ot,rt]=et,[lt,at]=tt,[ct,dt]=X,[ht,pt]=C({x:ot.w>0,y:ot.h>0}),yt=Q&&J&&(ht.x||ht.y)||Q&&ht.x&&!ht.y||J&&ht.y&&!ht.x,ft=A||P||F||dt||at||it||rt||G||V||!0,gt=ai(ht,U),[vt,wt]=T(gt.K),[xt,At]=k(v),Lt=P||q||At||pt||v,[St,It]=Lt?O((t=>{if(!f.some((e=>{const s=t[e];return s&&y[e](s)})))return{D:{x:0,y:0},M:{x:1,y:1}};w(!0);const e=mt(a),s=d(qo,!0),n=Y(l,Zt,(t=>{const s=mt(a);t.isTrusted&&s.x===e.x&&s.y===e.y&&On(t)}),{I:!0,A:!0});Et(a,{x:0,y:0}),s();const i=mt(a),o=Ie(a);Et(a,{x:o.w,y:o.h});const r=mt(a);Et(a,{x:r.x-i.x<1&&-o.w,y:r.y-i.y<1&&-o.h});const c=mt(a);return Et(a,e),ds((()=>n())),{D:i,M:c}})(xt),v):$();return ft&&(wt&&(t=>{const e=t=>[$t,Ht,Zt].map((e=>z(e,t))),s=e(!0).concat(e()).join(" ");d(s),d(bt(t).map((e=>z(t[e],"x"===e))).join(" "),!0)})(gt.K),Z&&K&&ne(o,Z(gt,g,K(gt,lt,ct)))),w(!1),Oe(n,Dt,be,yt),Oe(i,ls,be,yt),W(e,{K:vt,Vt:{x:nt.w,y:nt.h},Rt:{x:ot.w,y:ot.h},rn:ht,Lt:Do(St,ot)}),{en:wt,nn:it,sn:rt,cn:It||rt,vn:Lt}}},bi=t=>{const[e,s,n]=gi(t),i={ln:{t:0,r:0,b:0,l:0},dn:!1,rt:{[an]:0,[dn]:0,[ln]:0,[nn]:0,[on]:0,[rn]:0,[cn]:0},Vt:{x:0,y:0},Rt:{x:0,y:0},K:{x:Ht,y:Ht},rn:{x:!1,y:!1},Lt:Tn()},{vt:o,gt:r,nt:l,Ot:a}=e,{R:c,k:d}=Lt(),h=!c&&(d.x||d.y),p=[yi(e),vi(e,i),wi(e,i)];return[s,t=>{const e={},s=h&&mt(r),n=s&&a();return K(p,(s=>{W(e,s(t,e)||{})})),Et(r,s),n&&n(),!l&&Et(o,0),e},i,e,n]},Si=(t,e,s,n,i)=>{let o=!1;const r=Vs(e,{}),[l,a,c,d,h]=bi(t),[p,u,m]=ui(d,c,r,(t=>{w({},t)})),[y,f,,g]=mi(t,e,m,c,d,i),v=t=>bt(t).some((e=>!!t[e])),w=(t,i)=>{if(s())return!1;const{pn:r,Dt:l,At:c,hn:d}=t,h=r||{},p=!!l||!o,y={It:Vs(e,h,p),pn:h,Dt:p};if(d)return f(y),!1;const g=i||u(W({},y,{At:c})),w=a(W({},y,{_n:m,Zt:g}));f(W({},y,{Zt:g,tn:w}));const b=v(g),x=v(w),E=b||x||!ms(h)||p;return o=!0,E&&n(t,{Zt:g,tn:w}),E};return[()=>{const{an:t,gt:e,Ot:s}=d,n=mt(t),i=[p(),l(),y()],o=s();return Et(e,n),o(),A(gt,i)},w,()=>({gn:m,bn:c}),{wn:d,yn:g},h]},kt=(t,e,s)=>{const{N:n}=Lt(),i=Le(t),o=i?t:t.target,r=zn(o);if(e&&!r){let r=!1;const l=[],a={},c=t=>{const e=mn(t),s=ie(ci);return s?s(e,!0):e},d=W({},n(),c(e)),[h,p,u]=rs(),[m,y,f]=rs(s),g=(t,e)=>{f(t,e),u(t,e)},[v,w,b,x,E]=Si(t,d,(()=>r),(({pn:t,Dt:e},{Zt:s,tn:n})=>{const{ft:i,Ct:o,xt:r,Ht:l,Et:a,dt:c}=s,{nn:d,sn:h,en:p,cn:u}=n;g("updated",[S,{updateHints:{sizeChanged:!!i,directionChanged:!!o,heightIntrinsicChanged:!!r,overflowEdgeChanged:!!d,overflowAmountChanged:!!h,overflowStyleChanged:!!p,scrollCoordinatesChanged:!!u,contentMutation:!!l,hostMutation:!!a,appear:!!c},changedOptions:t||{},force:!!e}])}),(t=>g("scroll",[S,t]))),L=t=>{ni(o),gt(l),r=!0,g("destroyed",[S,t]),p(),y()},S={options(t,e){if(t){const s=e?n():{},i=An(d,W(s,c(t)));ms(i)||(W(d,i),w({pn:i}))}return W({},d)},on:m,off:(t,e)=>{t&&e&&y(t,e)},state(){const{gn:t,bn:e}=b(),{ct:s}=t,{Vt:n,Rt:i,K:o,rn:l,ln:a,dn:c,Lt:d}=e;return W({},{overflowEdge:n,overflowAmount:i,overflowStyle:o,hasOverflow:l,scrollCoordinates:{start:d.D,end:d.M},padding:a,paddingAbsolute:c,directionRTL:s,destroyed:r})},elements(){const{vt:t,ht:e,ln:s,ot:n,bt:i,gt:o,Qt:r}=x.wn,{Xt:l,Gt:a}=x.yn,c=t=>{const{Pt:e,Ut:s,Tt:n}=t;return{scrollbar:n,track:s,handle:e}},d=t=>{const{Yt:e,Wt:s}=t,n=c(e[0]);return W({},n,{clone:()=>{const t=c(s());return w({hn:!0}),t}})};return W({},{target:t,host:e,padding:s||n,viewport:n,content:i||n,scrollOffsetElement:o,scrollEventElement:r,scrollbarHorizontal:d(l),scrollbarVertical:d(a)})},update:t=>w({Dt:t,At:!0}),destroy:A(L,!1),plugin:t=>a[bt(t)[0]]};return tt(l,[E]),si(o,S),Fn(Rn,kt,[S,h,a]),ei(x.wn.wt,!i&&t.cancel)?(L(!0),S):(tt(l,v()),g("initialized",[S]),S.update(),S)}return r};kt.plugin=t=>{const e=_t(t),s=e?t:[t],n=s.map((t=>Fn(t,kt)[0]));return ii(s),e?n:n[0]},kt.valid=t=>{const e=t&&t.elements,s=wt(e)&&e();return _e(s)&&!!zn(s.target)},kt.env=()=>{const{T:t,k:e,R:s,V:n,B:i,F:o,U:r,P:l,N:a,q:c}=Lt();return W({},{scrollbarsSize:t,scrollbarsOverlaid:e,scrollbarsHiding:s,scrollTimeline:n,staticDefaultInitialization:i,staticDefaultOptions:o,getDefaultInitialization:r,setDefaultInitialization:l,getDefaultOptions:a,setDefaultOptions:c})},kt.nonce=Jo;const Vn=!!document.getElementById("banner-wrapper");function Cs(t,e){document.addEventListener("click",(s=>{let n=document.getElementById(t),i=s.target;if(i instanceof Node){for(let t of e){let e=document.getElementById(t);if(e==i||e?.contains(i))return}n.classList.add("float-panel-closed")}}))}function xi(){const t=Qn();to(t)}function Ei(){eo(so())}function Zn(){const t=document.querySelector("body");t&&(kt({target:t,cancel:{nativeScrollbarsOverlaid:!0}},{scrollbars:{theme:"scrollbar-base scrollbar-auto py-1",autoHide:"move",autoHideDelay:500,autoHideSuspend:!1}}),document.querySelectorAll("pre").forEach((t=>{kt(t,{scrollbars:{theme:"scrollbar-base scrollbar-dark px-2",autoHide:"leave",autoHideDelay:500,autoHideSuspend:!1}})})))}function Ci(){const t=document.getElementById("banner");t?t.classList.remove("opacity-0","scale-105"):console.error("Failed to find the banner element")}function Wn(){xi(),Ei(),Zn(),Ci()}Cs("display-setting",["display-setting","display-settings-switch"]),Cs("nav-menu-panel",["nav-menu-panel","nav-menu-switch"]),Cs("search-panel",["search-panel","search-bar","search-switch"]),Wn(),document.addEventListener("astro:after-swap",Wn);const Ys=()=>{window.swup.hooks.on("link:click",(()=>{if(document.documentElement.style.setProperty("--content-delay","0ms"),!Vn)return;let t=.3*window.innerHeight-72-16,e=document.getElementById("navbar-wrapper");!e||!document.body.classList.contains("lg:is-home")||(document.body.scrollTop>=t||document.documentElement.scrollTop>=t)&&e.classList.add("navbar-hidden")})),window.swup.hooks.on("content:replace",Zn),window.swup.hooks.on("visit:start",(t=>{const e=document.querySelector("body");no(t.to.url,oo("/"))?e.classList.add("lg:is-home"):e.classList.remove("lg:is-home");const s=document.getElementById("page-height-extend");s&&s.classList.remove("hidden")})),window.swup.hooks.on("page:view",(()=>{const t=document.getElementById("page-height-extend");t&&t.classList.remove("hidden")})),window.swup.hooks.on("visit:end",(t=>{const e=document.getElementById("page-height-extend");e&&e.classList.add("hidden")}))};window?.swup?.hooks?Ys():document.addEventListener("swup:enable",Ys);let We=document.getElementById("back-to-top-btn"),Ue=document.getElementById("navbar-wrapper");function _i(){if(We&&(document.body.scrollTop>600||document.documentElement.scrollTop>600?We.classList.remove("hide"):We.classList.add("hide")),Vn&&Ue){let t=.3*window.innerHeight-72-16;document.body.classList.contains("lg:is-home")&&window.innerWidth>=1024&&(t=.6*window.innerHeight-72-16),document.body.scrollTop>=t||document.documentElement.scrollTop>=t?Ue.classList.add("navbar-hidden"):Ue.classList.remove("navbar-hidden")}}function Li(){"dark"===localStorage.theme?(document.documentElement.classList.remove("dark"),localStorage.theme="light"):(document.documentElement.classList.add("dark"),localStorage.theme="dark")}function Un(){let t=document.getElementById("scheme-switch");t&&t.addEventListener("click",(function(){Li()}));let e=document.getElementById("display-settings-switch");e&&e.addEventListener("click",(function(){let t=document.getElementById("display-setting");t&&t.classList.toggle("float-panel-closed")}));let s=document.getElementById("nav-menu-switch");s&&s.addEventListener("click",(function(){let t=document.getElementById("nav-menu-panel");t&&t.classList.toggle("float-panel-closed")}))}window.onscroll=_i,Un(),document.addEventListener("astro:after-swap",(()=>{Un()}),{once:!1}),document.addEventListener("astro:before-swap",(()=>{Artalk.init({el:"#Comments",server:{server:server},site:{site:site}})})),document.addEventListener("astro:before-swap",(()=>{Artalk.init({el:"#Comments",server:{server:server},site:{site:site}})}));class Oi extends HTMLElement{constructor(){if(super(),"true"!==this.dataset.isCollapsed)return;const t=this.dataset.id,e=this.querySelector(".expand-btn"),s=this.querySelector(`#${t}`);e.addEventListener("click",(()=>{s.classList.remove("collapsed"),e.classList.add("hidden")}))}}customElements.define("widget-layout",Oi); \ No newline at end of file diff --git a/_astro/hoisted.DVQr8V09.js b/_astro/hoisted.DVQr8V09.js deleted file mode 100644 index 02962fc..0000000 --- a/_astro/hoisted.DVQr8V09.js +++ /dev/null @@ -1 +0,0 @@ -import{_ as kr}from"./preload-helper.BiBI96sQ.js";import{b as wr,c as br,s as $r,g as xr}from"./setting-utils.H_x_02w0.js";import{p as Cr,u as Sr}from"./url-utils.Co0GbPFH.js";import"./zh_TW.Cn8XYgkS.js";const In=new MutationObserver(Ti);function Ti(){In.disconnect();let e=Array.from(document.querySelectorAll("pre"));for(let t of e){if("DIV"===t.parentElement?.nodeName&&t.parentElement?.classList.contains("code-block"))continue;let e=document.createElement("div");e.className="relative code-block";let n=document.createElement("button");n.className="copy-btn btn-regular-dark absolute active:scale-90 h-8 w-8 top-2 right-2 opacity-75 text-sm p-1.5 rounded-lg transition-all ease-in-out",t.setAttribute("tabindex","0"),t.parentNode&&t.parentNode.insertBefore(e,t);let s,i='',o='';n.innerHTML=`
${i} ${o}
\n `,e.appendChild(t),e.appendChild(n),n.addEventListener("click",(async()=>{s&&clearTimeout(s);let e=t?.querySelector("code")?.innerText;void 0!==e&&(await navigator.clipboard.writeText(e),n.classList.add("success"),s=setTimeout((()=>{n.classList.remove("success")}),1e3))}))}In.observe(document.body,{childList:!0,subtree:!0})}In.observe(document.body,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",Ti);var Er=Object.defineProperty,Tr=Object.defineProperties,Lr=Object.getOwnPropertyDescriptors,Vt=Object.getOwnPropertySymbols,Li=Object.prototype.hasOwnProperty,Ai=Object.prototype.propertyIsEnumerable,Mn=(e,t,n)=>t in e?Er(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,y=(e,t)=>{for(var n in t||(t={}))Li.call(t,n)&&Mn(e,n,t[n]);if(Vt)for(var n of Vt(t))Ai.call(t,n)&&Mn(e,n,t[n]);return e},Fe=(e,t)=>Tr(e,Lr(t)),Ar=(e,t)=>{var n={};for(var s in e)Li.call(e,s)&&t.indexOf(s)<0&&(n[s]=e[s]);if(null!=e&&Vt)for(var s of Vt(e))t.indexOf(s)<0&&Ai.call(e,s)&&(n[s]=e[s]);return n},h=(e,t,n)=>Mn(e,"symbol"!=typeof t?t+"":t,n),G=(e,t,n)=>new Promise(((s,i)=>{var o=e=>{try{a(n.next(e))}catch(e){i(e)}},r=e=>{try{a(n.throw(e))}catch(e){i(e)}},a=e=>e.done?s(e.value):Promise.resolve(e.value).then(o,r);a((n=n.apply(e,t)).next())}));class _r{constructor(e={}){h(this,"baseUrl","/api/v2"),h(this,"securityData",null),h(this,"securityWorker"),h(this,"abortControllers",new Map),h(this,"customFetch",((...e)=>fetch(...e))),h(this,"baseApiParams",{credentials:"same-origin",headers:{},redirect:"follow",referrerPolicy:"no-referrer"}),h(this,"setSecurityData",(e=>{this.securityData=e})),h(this,"contentFormatters",{"application/json":e=>null===e||"object"!=typeof e&&"string"!=typeof e?e:JSON.stringify(e),"text/plain":e=>null!==e&&"string"!=typeof e?JSON.stringify(e):e,"multipart/form-data":e=>Object.keys(e||{}).reduce(((t,n)=>{const s=e[n];return t.append(n,s instanceof Blob?s:"object"==typeof s&&null!==s?JSON.stringify(s):`${s}`),t}),new FormData),"application/x-www-form-urlencoded":e=>this.toQueryString(e)}),h(this,"createAbortSignal",(e=>{if(this.abortControllers.has(e)){const t=this.abortControllers.get(e);return t?t.signal:void 0}const t=new AbortController;return this.abortControllers.set(e,t),t.signal})),h(this,"abortRequest",(e=>{const t=this.abortControllers.get(e);t&&(t.abort(),this.abortControllers.delete(e))})),h(this,"request",(e=>G(this,null,(function*(){var t=e,{body:n,secure:s,path:i,type:o,query:r,format:a,baseUrl:l,cancelToken:c}=t,h=Ar(t,["body","secure","path","type","query","format","baseUrl","cancelToken"]);const d=("boolean"==typeof s?s:this.baseApiParams.secure)&&this.securityWorker&&(yield this.securityWorker(this.securityData))||{},u=this.mergeRequestParams(h,d),p=r&&this.toQueryString(r),m=this.contentFormatters[o||"application/json"],g=a||u.format;return this.customFetch(`${l||this.baseUrl||""}${i}${p?`?${p}`:""}`,Fe(y({},u),{headers:y(y({},u.headers||{}),o&&"multipart/form-data"!==o?{"Content-Type":o}:{}),signal:(c?this.createAbortSignal(c):u.signal)||null,body:typeof n>"u"||null===n?null:m(n)})).then((e=>G(this,null,(function*(){const t=e.clone();t.data=null,t.error=null;const n=g?yield e[g]().then((e=>(t.ok?t.data=e:t.error=e,t))).catch((e=>(t.error=e,t))):t;if(c&&this.abortControllers.delete(c),!e.ok)throw n;return n}))))})))),Object.assign(this,e)}encodeQueryParam(e,t){return`${encodeURIComponent(e)}=${encodeURIComponent("number"==typeof t?t:`${t}`)}`}addQueryParam(e,t){return this.encodeQueryParam(t,e[t])}addArrayQueryParam(e,t){return e[t].map((e=>this.encodeQueryParam(t,e))).join("&")}toQueryString(e){const t=e||{};return Object.keys(t).filter((e=>typeof t[e]<"u")).map((e=>Array.isArray(t[e])?this.addArrayQueryParam(t,e):this.addQueryParam(t,e))).join("&")}addQueryParams(e){const t=this.toQueryString(e);return t?`?${t}`:""}mergeRequestParams(e,t){return Fe(y(y(y({},this.baseApiParams),e),t||{}),{headers:y(y(y({},this.baseApiParams.headers||{}),e.headers||{}),t&&t.headers||{})})}}let Pr=class extends _r{constructor(){super(...arguments),h(this,"auth",{loginByEmail:(e,t={})=>this.request(y({path:"/auth/email/login",method:"POST",body:e,type:"application/json",format:"json"},t)),registerByEmail:(e,t={})=>this.request(y({path:"/auth/email/register",method:"POST",body:e,type:"application/json",format:"json"},t)),sendVerifyEmail:(e,t={})=>this.request(y({path:"/auth/email/send",method:"POST",body:e,type:"application/json",format:"json"},t)),checkDataMerge:(e={})=>this.request(y({path:"/auth/merge",method:"GET",secure:!0,format:"json"},e)),applyDataMerge:(e,t={})=>this.request(y({path:"/auth/merge",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t))}),h(this,"cache",{flushCache:(e={})=>this.request(y({path:"/cache/flush",method:"POST",secure:!0,format:"json"},e)),warmUpCache:(e={})=>this.request(y({path:"/cache/warm_up",method:"POST",secure:!0,format:"json"},e))}),h(this,"captcha",{getCaptcha:(e={})=>this.request(y({path:"/captcha",method:"GET",format:"json"},e)),getCaptchaStatus:(e={})=>this.request(y({path:"/captcha/status",method:"GET",format:"json"},e)),verifyCaptcha:(e,t={})=>this.request(y({path:"/captcha/verify",method:"POST",body:e,type:"application/json",format:"json"},t))}),h(this,"comments",{getComments:(e,t={})=>this.request(y({path:"/comments",method:"GET",query:e,secure:!0,type:"application/json",format:"json"},t)),createComment:(e,t={})=>this.request(y({path:"/comments",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t)),getComment:(e,t={})=>this.request(y({path:`/comments/${e}`,method:"GET",type:"application/json",format:"json"},t)),updateComment:(e,t,n={})=>this.request(y({path:`/comments/${e}`,method:"PUT",body:t,secure:!0,type:"application/json",format:"json"},n)),deleteComment:(e,t={})=>this.request(y({path:`/comments/${e}`,method:"DELETE",secure:!0,format:"json"},t))}),h(this,"conf",{conf:(e={})=>this.request(y({path:"/conf",method:"GET",format:"json"},e)),getSocialLoginProviders:(e={})=>this.request(y({path:"/conf/auth/providers",method:"GET",format:"json"},e)),getDomain:(e,t={})=>this.request(y({path:"/conf/domain",method:"GET",query:e,format:"json"},t))}),h(this,"notifies",{getNotifies:(e,t={})=>this.request(y({path:"/notifies",method:"GET",query:e,type:"application/json",format:"json"},t)),markAllNotifyRead:(e,t={})=>this.request(y({path:"/notifies/read",method:"POST",body:e,type:"application/json",format:"json"},t)),markNotifyRead:(e,t,n={})=>this.request(y({path:`/notifies/${e}/${t}`,method:"POST",format:"json"},n))}),h(this,"pages",{getPages:(e,t={})=>this.request(y({path:"/pages",method:"GET",query:e,secure:!0,type:"application/json",format:"json"},t)),fetchAllPages:(e,t={})=>this.request(y({path:"/pages/fetch",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t)),getPageFetchStatus:(e={})=>this.request(y({path:"/pages/fetch/status",method:"GET",secure:!0,format:"json"},e)),logPv:(e,t={})=>this.request(y({path:"/pages/pv",method:"POST",body:e,type:"application/json",format:"json"},t)),updatePage:(e,t,n={})=>this.request(y({path:`/pages/${e}`,method:"PUT",body:t,secure:!0,type:"application/json",format:"json"},n)),deletePage:(e,t={})=>this.request(y({path:`/pages/${e}`,method:"DELETE",secure:!0,format:"json"},t)),fetchPage:(e,t={})=>this.request(y({path:`/pages/${e}/fetch`,method:"POST",secure:!0,type:"application/json",format:"json"},t))}),h(this,"sendEmail",{sendEmail:(e,t={})=>this.request(y({path:"/send_email",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t))}),h(this,"settings",{getSettings:(e={})=>this.request(y({path:"/settings",method:"GET",secure:!0,format:"json"},e)),applySettings:(e,t={})=>this.request(y({path:"/settings",method:"PUT",body:e,secure:!0,type:"application/json",format:"json"},t)),getSettingsTemplate:(e,t={})=>this.request(y({path:`/settings/template/${e}`,method:"GET",secure:!0,format:"json"},t))}),h(this,"sites",{getSites:(e={})=>this.request(y({path:"/sites",method:"GET",secure:!0,format:"json"},e)),createSite:(e,t={})=>this.request(y({path:"/sites",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t)),updateSite:(e,t,n={})=>this.request(y({path:`/sites/${e}`,method:"PUT",body:t,secure:!0,type:"application/json",format:"json"},n)),deleteSite:(e,t={})=>this.request(y({path:`/sites/${e}`,method:"DELETE",secure:!0,format:"json"},t))}),h(this,"stats",{getStats:(e,t,n={})=>this.request(y({path:`/stats/${e}`,method:"GET",query:t,type:"application/json",format:"json"},n))}),h(this,"transfer",{exportArtrans:(e={})=>this.request(y({path:"/transfer/export",method:"GET",secure:!0,format:"json"},e)),importArtrans:(e,t={})=>this.request(y({path:"/transfer/import",method:"POST",body:e,secure:!0,type:"application/json"},t)),uploadArtrans:(e,t={})=>this.request(y({path:"/transfer/upload",method:"POST",body:e,secure:!0,type:"multipart/form-data",format:"json"},t))}),h(this,"upload",{upload:(e,t={})=>this.request(y({path:"/upload",method:"POST",body:e,secure:!0,type:"multipart/form-data",format:"json"},t))}),h(this,"user",{getUser:(e,t={})=>this.request(y({path:"/user",method:"GET",query:e,secure:!0,format:"json"},t)),updateProfile:(e,t={})=>this.request(y({path:"/user",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t)),login:(e,t={})=>this.request(y({path:"/user/access_token",method:"POST",body:e,type:"application/json",format:"json"},t)),getUserStatus:(e,t={})=>this.request(y({path:"/user/status",method:"GET",query:e,secure:!0,format:"json"},t))}),h(this,"users",{createUser:(e,t={})=>this.request(y({path:"/users",method:"POST",body:e,secure:!0,type:"application/json",format:"json"},t)),updateUser:(e,t,n={})=>this.request(y({path:`/users/${e}`,method:"PUT",body:t,secure:!0,type:"application/json",format:"json"},n)),deleteUser:(e,t={})=>this.request(y({path:`/users/${e}`,method:"DELETE",secure:!0,format:"json"},t)),getUsers:(e,t,n={})=>this.request(y({path:`/users/${e}`,method:"GET",query:t,secure:!0,type:"application/json",format:"json"},n))}),h(this,"version",{getVersion:(e={})=>this.request(y({path:"/version",method:"GET",format:"json"},e))}),h(this,"votes",{syncVotes:(e={})=>this.request(y({path:"/votes/sync",method:"POST",secure:!0,format:"json"},e)),vote:(e,t,n,s={})=>this.request(y({path:`/votes/${e}/${t}`,method:"POST",body:n,type:"application/json",format:"json"},s))})}};const _i=(e,t,n)=>G(void 0,null,(function*(){const s=e.getApiToken&&e.getApiToken(),i=new Headers(y({Authorization:s?`Bearer ${s}`:""},n?.headers));i.get("Authorization")||i.delete("Authorization");const o=yield fetch(t,Fe(y({},n),{headers:i}));if(!o.ok){const s=(yield o.json().catch((()=>{})))||{};let i=!1;if(e.handlers&&(yield e.handlers.get().reduce(((e,t)=>G(void 0,null,(function*(){yield e,!0===s[t.action]&&(yield t.handler(s),i=!0)}))),Promise.resolve())),i)return _i(e,t,n);throw Mr(o.status,s)}return o}));class Ir extends Error{constructor(){super(...arguments),h(this,"code",0),h(this,"message","fetch error"),h(this,"data")}}function Mr(e,t){const n=new Ir;return n.message=t.msg||t.message||"fetch error",n.code=e,n.data=t,console.error(n),n}function Or(){const e=[];return{add:(t,n)=>{e.push({action:t,handler:n})},remove:t=>{const n=e.findIndex((e=>e.action===t));-1!==n&&e.splice(n,1)},get:()=>e}}class Pi extends Pr{constructor(e){super({baseUrl:e.baseURL,customFetch:(t,n)=>_i(e,t,n)}),h(this,"_opts"),this._opts=e}getUserFields(){const e=this._opts.userInfo;if(e?.name&&e?.email)return{name:e.name,email:e.email}}}function as(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}let tt=as();function Ii(e){tt=e}const Mi=/[&<>"']/,Rr=new RegExp(Mi.source,"g"),Oi=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Dr=new RegExp(Oi.source,"g"),Br={"&":"&","<":"<",">":">",'"':""","'":"'"},Us=e=>Br[e];function $e(e,t){if(t){if(Mi.test(e))return e.replace(Rr,Us)}else if(Oi.test(e))return e.replace(Dr,Us);return e}const qr=/(^|[^\[])\^/g;function te(e,t){let n="string"==typeof e?e:e.source;t=t||"";const s={replace:(e,t)=>{let i="string"==typeof t?t:t.source;return i=i.replace(qr,"$1"),n=n.replace(e,i),s},getRegex:()=>new RegExp(n,t)};return s}function Fs(e){try{e=encodeURI(e).replace(/%25/g,"%")}catch{return null}return e}const wt={exec:()=>null};function zs(e,t){const n=e.replace(/\|/g,((e,t,n)=>{let s=!1,i=t;for(;--i>=0&&"\\"===n[i];)s=!s;return s?"|":" |"})).split(/ \|/);let s=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length{const t=e.match(/^\s+/);if(null===t)return e;const[n]=t;return n.length>=s.length?e.slice(s.length):e})).join("\n")}class Gt{constructor(e){h(this,"options"),h(this,"rules"),h(this,"lexer"),this.options=e||tt}space(e){const t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){const t=this.rules.block.code.exec(e);if(t){const e=t[0].replace(/^(?: {1,4}| {0,3}\t)/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?e:gt(e,"\n")}}}fences(e){const t=this.rules.block.fences.exec(e);if(t){const e=t[0],n=Fr(e,t[3]||"");return{type:"code",raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):t[2],text:n}}}heading(e){const t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){const t=gt(e,"#");(this.options.pedantic||!t||/ $/.test(t))&&(e=t.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){const t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:gt(t[0],"\n")}}blockquote(e){const t=this.rules.block.blockquote.exec(e);if(t){let e=gt(t[0],"\n").split("\n"),n="",s="";const i=[];for(;e.length>0;){let t=!1;const o=[];let r;for(r=0;r/.test(e[r]))o.push(e[r]),t=!0;else{if(t)break;o.push(e[r])}e=e.slice(r);const a=o.join("\n"),l=a.replace(/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,"\n $1").replace(/^ {0,3}>[ \t]?/gm,"");n=n?`${n}\n${a}`:a,s=s?`${s}\n${l}`:l;const c=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(l,i,!0),this.lexer.state.top=c,0===e.length)break;const h=i[i.length-1];if("code"===h?.type)break;if("blockquote"===h?.type){const t=h,o=t.raw+"\n"+e.join("\n"),r=this.blockquote(o);i[i.length-1]=r,n=n.substring(0,n.length-t.raw.length)+r.raw,s=s.substring(0,s.length-t.text.length)+r.text;break}if("list"!==h?.type);else{const t=h,o=t.raw+"\n"+e.join("\n"),r=this.list(o);i[i.length-1]=r,n=n.substring(0,n.length-h.raw.length)+r.raw,s=s.substring(0,s.length-t.raw.length)+r.raw,e=o.substring(i[i.length-1].raw.length).split("\n")}}return{type:"blockquote",raw:n,tokens:i,text:s}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim();const s=n.length>1,i={type:"list",raw:"",ordered:s,start:s?+n.slice(0,-1):"",loose:!1,items:[]};n=s?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=s?n:"[*+-]");const o=new RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`);let r=!1;for(;e;){let n=!1,s="",a="";if(!(t=o.exec(e))||this.rules.block.hr.test(e))break;s=t[0],e=e.substring(s.length);let l=t[2].split("\n",1)[0].replace(/^\t+/,(e=>" ".repeat(3*e.length))),c=e.split("\n",1)[0],h=!l.trim(),d=0;if(this.options.pedantic?(d=2,a=l.trimStart()):h?d=t[1].length+1:(d=t[2].search(/[^ ]/),d=d>4?1:d,a=l.slice(d),d+=t[1].length),h&&/^[ \t]*$/.test(c)&&(s+=c+"\n",e=e.substring(c.length+1),n=!0),!n){const t=new RegExp(`^ {0,${Math.min(3,d-1)}}(?:[*+-]|\\d{1,9}[.)])((?:[ \t][^\\n]*)?(?:\\n|$))`),n=new RegExp(`^ {0,${Math.min(3,d-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`),i=new RegExp(`^ {0,${Math.min(3,d-1)}}(?:\`\`\`|~~~)`),o=new RegExp(`^ {0,${Math.min(3,d-1)}}#`),r=new RegExp(`^ {0,${Math.min(3,d-1)}}<[a-z].*>`,"i");for(;e;){const u=e.split("\n",1)[0];let p;if(c=u,this.options.pedantic?(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," "),p=c):p=c.replace(/\t/g," "),i.test(c)||o.test(c)||r.test(c)||t.test(c)||n.test(c))break;if(p.search(/[^ ]/)>=d||!c.trim())a+="\n"+p.slice(d);else{if(h||l.replace(/\t/g," ").search(/[^ ]/)>=4||i.test(l)||o.test(l)||n.test(l))break;a+="\n"+c}!h&&!c.trim()&&(h=!0),s+=u+"\n",e=e.substring(u.length+1),l=p.slice(d)}}i.loose||(r?i.loose=!0:/\n[ \t]*\n[ \t]*$/.test(s)&&(r=!0));let u,p=null;this.options.gfm&&(p=/^\[[ xX]\] /.exec(a),p&&(u="[ ] "!==p[0],a=a.replace(/^\[[ xX]\] +/,""))),i.items.push({type:"list_item",raw:s,task:!!p,checked:u,loose:!1,text:a,tokens:[]}),i.raw+=s}i.items[i.items.length-1].raw=i.items[i.items.length-1].raw.trimEnd(),i.items[i.items.length-1].text=i.items[i.items.length-1].text.trimEnd(),i.raw=i.raw.trimEnd();for(let e=0;e"space"===e.type)),n=t.length>0&&t.some((e=>/\n.*\n/.test(e.raw)));i.loose=n}if(i.loose)for(let e=0;e$/,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",s=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):t[3];return{type:"def",tag:e,raw:t[0],href:n,title:s}}}table(e){const t=this.rules.block.table.exec(e);if(!t||!/[:|]/.test(t[2]))return;const n=zs(t[1]),s=t[2].replace(/^\||\| *$/g,"").split("|"),i=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[],o={type:"table",raw:t[0],header:[],align:[],rows:[]};if(n.length===s.length){for(const e of s)/^ *-+: *$/.test(e)?o.align.push("right"):/^ *:-+: *$/.test(e)?o.align.push("center"):/^ *:-+ *$/.test(e)?o.align.push("left"):o.align.push(null);for(let e=0;e({text:e,tokens:this.lexer.inline(e),header:!1,align:o.align[t]}))));return o}}lheading(e){const t=this.rules.block.lheading.exec(e);if(t)return{type:"heading",raw:t[0],depth:"="===t[2].charAt(0)?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){const t=this.rules.block.paragraph.exec(e);if(t){const e="\n"===t[1].charAt(t[1].length-1)?t[1].slice(0,-1):t[1];return{type:"paragraph",raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){const t=this.rules.block.text.exec(e);if(t)return{type:"text",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){const t=this.rules.inline.escape.exec(e);if(t)return{type:"escape",raw:t[0],text:$e(t[1])}}tag(e){const t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){const t=this.rules.inline.link.exec(e);if(t){const e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;const t=gt(e.slice(0,-1),"\\");if((e.length-t.length)%2==0)return}else{const e=Ur(t[2],"()");if(e>-1){const n=(0===t[0].indexOf("!")?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=""}}let n=t[2],s="";if(this.options.pedantic){const e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],s=e[3])}else s=t[3]?t[3].slice(1,-1):"";return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),Hs(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:s&&s.replace(this.rules.inline.anyPunctuation,"$1")},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){const e=t[(n[2]||n[1]).replace(/\s+/g," ").toLowerCase()];if(!e){const e=n[0].charAt(0);return{type:"text",raw:e,text:e}}return Hs(n,e,n[0],this.lexer)}}emStrong(e,t,n=""){let s=this.rules.inline.emStrongLDelim.exec(e);if(!(!s||s[3]&&n.match(/[\p{L}\p{N}]/u))&&(!s[1]&&!s[2]||!n||this.rules.inline.punctuation.exec(n))){const n=[...s[0]].length-1;let i,o,r=n,a=0;const l="*"===s[0][0]?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);null!=(s=l.exec(t));){if(i=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!i)continue;if(o=[...i].length,s[3]||s[4]){r+=o;continue}if((s[5]||s[6])&&n%3&&!((n+o)%3)){a+=o;continue}if(r-=o,r>0)continue;o=Math.min(o,o+r+a);const t=[...s[0]][0].length,l=e.slice(0,n+s.index+t+o);if(Math.min(n,o)%2){const e=l.slice(1,-1);return{type:"em",raw:l,text:e,tokens:this.lexer.inlineTokens(e)}}const c=l.slice(2,-2);return{type:"strong",raw:l,text:c,tokens:this.lexer.inlineTokens(c)}}}}codespan(e){const t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g," ");const n=/[^ ]/.test(e),s=/^ /.test(e)&&/ $/.test(e);return n&&s&&(e=e.substring(1,e.length-1)),e=$e(e,!0),{type:"codespan",raw:t[0],text:e}}}br(e){const t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){const t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){const t=this.rules.inline.autolink.exec(e);if(t){let e,n;return"@"===t[2]?(e=$e(t[1]),n="mailto:"+e):(e=$e(t[1]),n=e),{type:"link",raw:t[0],text:e,href:n,tokens:[{type:"text",raw:e,text:e}]}}}url(e){var t,n;let s;if(s=this.rules.inline.url.exec(e)){let e,i;if("@"===s[2])e=$e(s[0]),i="mailto:"+e;else{let o;do{o=s[0],s[0]=null!=(n=null==(t=this.rules.inline._backpedal.exec(s[0]))?void 0:t[0])?n:""}while(o!==s[0]);e=$e(s[0]),i="www."===s[1]?"http://"+s[0]:s[0]}return{type:"link",raw:s[0],text:e,href:i,tokens:[{type:"text",raw:e,text:e}]}}}inlineText(e){const t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:$e(t[0]),{type:"text",raw:t[0],text:e}}}}const zr=/^(?:[ \t]*(?:\n|$))+/,Hr=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,Nr=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Et=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,jr=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Ri=/(?:[*+-]|\d{1,9}[.)])/,Di=te(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,Ri).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).getRegex(),ls=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Wr=/^[^\n]+/,cs=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Vr=te(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",cs).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Gr=te(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Ri).getRegex(),ln="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",ds=/|$))/,Kr=te("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ \t]*)+\\n|$))","i").replace("comment",ds).replace("tag",ln).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Bi=te(ls).replace("hr",Et).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ln).getRegex(),Zr=te(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",Bi).getRegex(),hs={blockquote:Zr,code:Hr,def:Vr,fences:Nr,heading:jr,hr:Et,html:Kr,lheading:Di,list:Gr,newline:zr,paragraph:Bi,table:wt,text:Wr},Ns=te("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Et).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3}\t)[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ln).getRegex(),Qr=Fe(y({},hs),{table:Ns,paragraph:te(ls).replace("hr",Et).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",Ns).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ln).getRegex()}),Yr=Fe(y({},hs),{html:te("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",ds).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:wt,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:te(ls).replace("hr",Et).replace("heading"," *#{1,6} *[^\n]").replace("lheading",Di).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()}),qi=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Xr=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Ui=/^( {2,}|\\)\n(?!\s*$)/,Jr=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\]*?>/g,na=te(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,"u").replace(/punct/g,Tt).getRegex(),sa=te("^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])","gu").replace(/punct/g,Tt).getRegex(),ia=te("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])","gu").replace(/punct/g,Tt).getRegex(),oa=te(/\\([punct])/,"gu").replace(/punct/g,Tt).getRegex(),ra=te(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),aa=te(ds).replace("(?:--\x3e|$)","--\x3e").getRegex(),la=te("^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^").replace("comment",aa).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Kt=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,ca=te(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace("label",Kt).replace("href",/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Fi=te(/^!?\[(label)\]\[(ref)\]/).replace("label",Kt).replace("ref",cs).getRegex(),zi=te(/^!?\[(ref)\](?:\[\])?/).replace("ref",cs).getRegex(),da=te("reflink|nolink(?!\\()","g").replace("reflink",Fi).replace("nolink",zi).getRegex(),us={_backpedal:wt,anyPunctuation:oa,autolink:ra,blockSkip:ta,br:Ui,code:Xr,del:wt,emStrongLDelim:na,emStrongRDelimAst:sa,emStrongRDelimUnd:ia,escape:qi,link:ca,nolink:zi,punctuation:ea,reflink:Fi,reflinkSearch:da,tag:la,text:Jr,url:wt},ha=Fe(y({},us),{link:te(/^!?\[(label)\]\((.*?)\)/).replace("label",Kt).getRegex(),reflink:te(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Kt).getRegex()}),On=Fe(y({},us),{escape:te(qi).replace("])","~|])").getRegex(),url:te(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,"i").replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\!!(s=n.call({lexer:this},e,t))&&(e=e.substring(s.raw.length),t.push(s),!0))))){if(s=this.tokenizer.space(e)){e=e.substring(s.raw.length),1===s.raw.length&&t.length>0?t[t.length-1].raw+="\n":t.push(s);continue}if(s=this.tokenizer.code(e)){e=e.substring(s.raw.length),i=t[t.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?t.push(s):(i.raw+="\n"+s.raw,i.text+="\n"+s.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);continue}if(s=this.tokenizer.fences(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.heading(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.hr(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.blockquote(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.list(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.html(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.def(e)){e=e.substring(s.raw.length),i=t[t.length-1],!i||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[s.tag]||(this.tokens.links[s.tag]={href:s.href,title:s.title}):(i.raw+="\n"+s.raw,i.text+="\n"+s.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);continue}if(s=this.tokenizer.table(e)){e=e.substring(s.raw.length),t.push(s);continue}if(s=this.tokenizer.lheading(e)){e=e.substring(s.raw.length),t.push(s);continue}if(o=e,this.options.extensions&&this.options.extensions.startBlock){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startBlock.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(o=e.substring(0,t+1))}if(this.state.top&&(s=this.tokenizer.paragraph(o))){i=t[t.length-1],n&&"paragraph"===i?.type?(i.raw+="\n"+s.raw,i.text+="\n"+s.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(s),n=o.length!==e.length,e=e.substring(s.raw.length);continue}if(s=this.tokenizer.text(e)){e=e.substring(s.raw.length),i=t[t.length-1],i&&"text"===i.type?(i.raw+="\n"+s.raw,i.text+="\n"+s.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(s);continue}if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,s,i,o,r,a,l=e;if(this.tokens.links){const e=Object.keys(this.tokens.links);if(e.length>0)for(;null!=(o=this.tokenizer.rules.inline.reflinkSearch.exec(l));)e.includes(o[0].slice(o[0].lastIndexOf("[")+1,-1))&&(l=l.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(o=this.tokenizer.rules.inline.blockSkip.exec(l));)l=l.slice(0,o.index)+"["+"a".repeat(o[0].length-2)+"]"+l.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(o=this.tokenizer.rules.inline.anyPunctuation.exec(l));)l=l.slice(0,o.index)+"++"+l.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(r||(a=""),r=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((s=>!!(n=s.call({lexer:this},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0))))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),s=t[t.length-1],s&&"text"===n.type&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);continue}if(n=this.tokenizer.emStrong(e,l,a)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),t.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),t.push(n);continue}if(i=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0;const n=e.slice(1);let s;this.options.extensions.startInline.forEach((e=>{s=e.call({lexer:this},n),"number"==typeof s&&s>=0&&(t=Math.min(t,s))})),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(i)){e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(a=n.raw.slice(-1)),r=!0,s=t[t.length-1],s&&"text"===s.type?(s.raw+=n.raw,s.text+=n.text):t.push(n);continue}if(e){const t="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(t);break}throw new Error(t)}}return t}}class Zt{constructor(e){h(this,"options"),h(this,"parser"),this.options=e||tt}space(e){return""}code({text:e,lang:t,escaped:n}){var s;const i=null==(s=(t||"").match(/^\S*/))?void 0:s[0],o=e.replace(/\n$/,"")+"\n";return i?'
'+(n?o:$e(o,!0))+"
\n":"
"+(n?o:$e(o,!0))+"
\n"}blockquote({tokens:e}){return`
\n${this.parser.parse(e)}
\n`}html({text:e}){return e}heading({tokens:e,depth:t}){return`${this.parser.parseInline(e)}\n`}hr(e){return"
\n"}list(e){const t=e.ordered,n=e.start;let s="";for(let t=0;t\n"+s+"\n"}listitem(e){let t="";if(e.task){const n=this.checkbox({checked:!!e.checked});e.loose?e.tokens.length>0&&"paragraph"===e.tokens[0].type?(e.tokens[0].text=n+" "+e.tokens[0].text,e.tokens[0].tokens&&e.tokens[0].tokens.length>0&&"text"===e.tokens[0].tokens[0].type&&(e.tokens[0].tokens[0].text=n+" "+e.tokens[0].tokens[0].text)):e.tokens.unshift({type:"text",raw:n+" ",text:n+" "}):t+=n+" "}return t+=this.parser.parse(e.tokens,!!e.loose),`
  • ${t}
  • \n`}checkbox({checked:e}){return"'}paragraph({tokens:e}){return`

    ${this.parser.parseInline(e)}

    \n`}table(e){let t="",n="";for(let t=0;t${s}`),"\n\n"+t+"\n"+s+"
    \n"}tablerow({text:e}){return`\n${e}\n`}tablecell(e){const t=this.parser.parseInline(e.tokens),n=e.header?"th":"td";return(e.align?`<${n} align="${e.align}">`:`<${n}>`)+t+`\n`}strong({tokens:e}){return`${this.parser.parseInline(e)}`}em({tokens:e}){return`${this.parser.parseInline(e)}`}codespan({text:e}){return`${e}`}br(e){return"
    "}del({tokens:e}){return`${this.parser.parseInline(e)}`}link({href:e,title:t,tokens:n}){const s=this.parser.parseInline(n),i=Fs(e);if(null===i)return s;let o='
    ",o}image({href:e,title:t,text:n}){const s=Fs(e);if(null===s)return n;let i=`${n}{const s=e[n].flat(1/0);i=i.concat(this.walkTokens(s,t))})):e.tokens&&(i=i.concat(this.walkTokens(e.tokens,t)))}}return i}use(...e){const t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach((e=>{const n=y({},e);if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach((e=>{if(!e.name)throw new Error("extension name required");if("renderer"in e){const n=t.renderers[e.name];t.renderers[e.name]=n?function(...t){let s=e.renderer.apply(this,t);return!1===s&&(s=n.apply(this,t)),s}:e.renderer}if("tokenizer"in e){if(!e.level||"block"!==e.level&&"inline"!==e.level)throw new Error("extension level must be 'block' or 'inline'");const n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&("block"===e.level?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:"inline"===e.level&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}"childTokens"in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)})),n.extensions=t),e.renderer){const t=this.defaults.renderer||new Zt(this.defaults);for(const n in e.renderer){if(!(n in t))throw new Error(`renderer '${n}' does not exist`);if(["options","parser"].includes(n))continue;const s=n,i=e.renderer[s],o=t[s];t[s]=(...e)=>{let n=i.apply(t,e);return!1===n&&(n=o.apply(t,e)),n||""}}n.renderer=t}if(e.tokenizer){const t=this.defaults.tokenizer||new Gt(this.defaults);for(const n in e.tokenizer){if(!(n in t))throw new Error(`tokenizer '${n}' does not exist`);if(["options","rules","lexer"].includes(n))continue;const s=n,i=e.tokenizer[s],o=t[s];t[s]=(...e)=>{let n=i.apply(t,e);return!1===n&&(n=o.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){const t=this.defaults.hooks||new bt;for(const n in e.hooks){if(!(n in t))throw new Error(`hook '${n}' does not exist`);if(["options","block"].includes(n))continue;const s=n,i=e.hooks[s],o=t[s];bt.passThroughHooks.has(n)?t[s]=e=>{if(this.defaults.async)return Promise.resolve(i.call(t,e)).then((e=>o.call(t,e)));const n=i.call(t,e);return o.call(t,n)}:t[s]=(...e)=>{let n=i.apply(t,e);return!1===n&&(n=o.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){const t=this.defaults.walkTokens,s=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(s.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults=y(y({},this.defaults),n)})),this}setOptions(e){return this.defaults=y(y({},this.defaults),e),this}lexer(e,t){return Le.lex(e,t??this.defaults)}parser(e,t){return Ae.parse(e,t??this.defaults)}parseMarkdown(e){return(t,n)=>{const s=y({},n),i=y(y({},this.defaults),s),o=this.onError(!!i.silent,!!i.async);if(!0===this.defaults.async&&!1===s.async)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof t>"u"||null===t)return o(new Error("marked(): input parameter is undefined or null"));if("string"!=typeof t)return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(t)+", string expected"));i.hooks&&(i.hooks.options=i,i.hooks.block=e);const r=i.hooks?i.hooks.provideLexer():e?Le.lex:Le.lexInline,a=i.hooks?i.hooks.provideParser():e?Ae.parse:Ae.parseInline;if(i.async)return Promise.resolve(i.hooks?i.hooks.preprocess(t):t).then((e=>r(e,i))).then((e=>i.hooks?i.hooks.processAllTokens(e):e)).then((e=>i.walkTokens?Promise.all(this.walkTokens(e,i.walkTokens)).then((()=>e)):e)).then((e=>a(e,i))).then((e=>i.hooks?i.hooks.postprocess(e):e)).catch(o);try{i.hooks&&(t=i.hooks.preprocess(t));let e=r(t,i);i.hooks&&(e=i.hooks.processAllTokens(e)),i.walkTokens&&this.walkTokens(e,i.walkTokens);let n=a(e,i);return i.hooks&&(n=i.hooks.postprocess(n)),n}catch(e){return o(e)}}}onError(e,t){return n=>{if(n.message+="\nPlease report this to https://github.com/markedjs/marked.",e){const e="

    An error occurred:

    "+$e(n.message+"",!0)+"
    ";return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}}const Je=new Rn;function J(e,t){return Je.parse(e,t)}J.options=J.setOptions=function(e){return Je.setOptions(e),J.defaults=Je.defaults,Ii(J.defaults),J},J.getDefaults=as,J.defaults=tt,J.use=function(...e){return Je.use(...e),J.defaults=Je.defaults,Ii(J.defaults),J},J.walkTokens=function(e,t){return Je.walkTokens(e,t)},J.parseInline=Je.parseInline,J.Parser=Ae,J.parser=Ae.parse,J.Renderer=Zt,J.TextRenderer=ps,J.Lexer=Le,J.lexer=Le.lex,J.Tokenizer=Gt,J.Hooks=bt,J.parse=J,J.options,J.setOptions,J.use,J.walkTokens,J.parseInline,Ae.parse,Le.lex;var pa=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Hi(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var fa={"&":"&","<":"<",">":">",'"':""","'":"'"},ma={"&":"&","<":"<",">":">",""":'"',"'":"'"},ga=/(&|<|>|"|')/g,ya=/[&<>"']/g;function va(e){return fa[e]}function ka(e){return ma[e]}function Dn(e){return null==e?"":String(e).replace(ya,va)}function Bn(e){return null==e?"":String(e).replace(ga,ka)}Dn.options=Bn.options={};var Ni={encode:Dn,escape:Dn,decode:Bn,unescape:Bn,version:"1.0.0-browser"};function ji(e){for(var t,n,s=Array.prototype.slice.call(arguments,1);s.length;)for(n in t=s.shift())t.hasOwnProperty(n)&&("[object Object]"===Object.prototype.toString.call(e[n])?e[n]=ji(e[n],t[n]):e[n]=t[n]);return e}var wa=ji,Wi=function(e){return"string"==typeof e?e.toLowerCase():e};function ba(e){return e.reduce($a,{})}function $a(e,t){return e[t]=!0,e}var Vi=ba,xa=Vi,Ca=["background","base","cite","href","longdesc","src","usemap"],Sa={uris:xa(Ca)},Ea=Vi,Ta=["area","br","col","hr","img","wbr","input","base","basefont","link","meta"],Gi={voids:Ea(Ta)},La=Ni,js=Wi,Aa=Gi,_a=/^<\s*([\w:-]+)((?:\s+[\w:-]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)\s*>/,Pa=/^<\s*\/\s*([\w:-]+)[^>]*>/,Ia=/([\w:-]+)(?:\s*=\s*(?:(?:"((?:[^"])*)")|(?:'((?:[^'])*)')|([^>\s]+)))?/g,Ma=/^=0&&(t.comment&&t.comment(e.substring(4,s)),e=e.substring(s+3),n=!1)}():Oa.test(e)?r(Pa,l):Ma.test(e)&&r(_a,a),function(){if(n){var s,i=e.indexOf("<");i>=0?(s=e.substring(0,i),e=e.substring(i)):(s=e,e=""),t.chars&&t.chars(s)}}();var s=e===i;i=e,s&&(e="")}function r(t,s){var i=e.match(t);i&&(e=e.substring(i[0].length),i[0].replace(t,s),n=!1)}function a(e,n,i,o){var r={},a=js(n),l=Aa.voids[a]||!!o;i.replace(Ia,(function(e,t,n,s,i){r[t]=void 0===n&&void 0===s&&void 0===i?void 0:La.decode(n||s||i||"")})),l||s.push(a),t.start&&t.start(a,r,l)}function l(e,n){var i,o=0,r=js(n);if(r)for(o=s.length-1;o>=0&&s[o]!==r;o--);if(o>=0){for(i=s.length-1;i>=o;i--)t.end&&t.end(s[i]);s.length=o}}l()}var Ba=Da,qa=Ni,$n=Wi,Ua=Sa,Fa=Gi;function za(e,t){var n,s=t||{};return r(),{start:function(e,t,r){var a=$n(e);if(n.ignoring)return void o(a);if(-1===(s.allowedTags||[]).indexOf(a))return void o(a);if(s.filter&&!s.filter({tag:a,attrs:t}))return void o(a);i("<"),i(a),Object.keys(t).forEach((function(e){var n,o=t[e],r=(s.allowedClasses||{})[a]||[],l=(s.allowedAttributes||{})[a]||[],c=$n(e);n="class"===c&&-1===l.indexOf(c)?(o=o.split(" ").filter((function(e){return r&&-1!==r.indexOf(e)})).join(" ").trim()).length:-1!==l.indexOf(c)&&(!0!==Ua.uris[c]||function(e){var t=e[0];if("#"===t||"/"===t)return!0;var n=e.indexOf(":");if(-1===n)return!0;var i=e.indexOf("?");if(-1!==i&&n>i)return!0;var o=e.indexOf("#");return-1!==o&&n>o||s.allowedSchemes.some(r);function r(t){return 0===e.indexOf(t+":")}}(o)),n&&(i(" "),i(e),"string"==typeof o&&(i('="'),i(qa.encode(o)),i('"')))})),i(r?"/>":">")},end:function(e){var t=$n(e);-1!==(s.allowedTags||[]).indexOf(t)&&!1===n.ignoring?(i("")):function(e){n.ignoring===e&&--n.depth<=0&&r()}(t)},chars:function(e){!1===n.ignoring&&i(s.transformText?s.transformText(e):e)}};function i(t){e.push(t)}function o(e){Fa.voids[e]||(!1===n.ignoring?n={ignoring:e,depth:1}:n.ignoring===e&&n.depth++)}function r(){n={ignoring:!1,depth:0}}}var Ha=za,Na={allowedAttributes:{a:["href","name","target","title","aria-label"],iframe:["allowfullscreen","frameborder","src"],img:["src","alt","title","aria-label"]},allowedClasses:{},allowedSchemes:["http","https","mailto"],allowedTags:["a","abbr","article","b","blockquote","br","caption","code","del","details","div","em","h1","h2","h3","h4","h5","h6","hr","i","img","ins","kbd","li","main","mark","ol","p","pre","section","span","strike","strong","sub","summary","sup","table","tbody","td","th","thead","tr","u","ul"],filter:null},ja=Na,Wa=wa,Va=Ba,Ga=Ha,Ki=ja;function Zi(e,t,n){var s=[],i=!0===n?t:Wa({},Ki,t),o=Ga(s,i);return Va(e,o),s.join("")}Zi.defaults=Ki;var Ka=Zi;const Za=Hi(Ka),Qa={allowedClasses:{},allowedSchemes:["http","https","mailto","data"],allowedTags:["a","abbr","article","b","blockquote","br","caption","code","del","details","div","em","h1","h2","h3","h4","h5","h6","hr","i","img","ins","kbd","li","main","mark","ol","p","pre","section","span","strike","strong","sub","summary","sup","table","tbody","td","th","thead","tr","u","ul"],allowedAttributes:{"*":["title","accesskey"],a:["href","name","target","aria-label","rel"],img:["src","alt","title","atk-emoticon","aria-label","data-src","class","loading"],code:["class"],span:["class","style"]},filter:e=>([["code",/^hljs\W+language-(.*)$/],["span",/^(hljs-.*)$/],["img",/^lazyload$/]].forEach((([t,n])=>{e.tag===t&&e.attrs.class&&!n.test(e.attrs.class)&&delete e.attrs.class})),"span"===e.tag&&e.attrs.style&&!/^color:(\W+)?#[0-9a-f]{3,6};?$/i.test(e.attrs.style)&&delete e.attrs.style,!0)};function Qi(e){return Za(e,Qa)}var Yi={exports:{}};Yi.exports=function(){function e(e,t){return e(t={exports:{}},t.exports),t.exports}var t=e((function(e){var t=e.exports=function(){return new RegExp("(?:"+t.line().source+")|(?:"+t.block().source+")","gm")};t.line=function(){return/(?:^|\s)\/\/(.+?)$/gm},t.block=function(){return/\/\*([\S\s]*?)\*\//gm}})),n=["23AC69","91C132","F19726","E8552D","1AAB8E","E1147F","2980C1","1BA1E6","9FA0A0","F19726","E30B20","E30B20","A3338B"],s=function(e,s){void 0===s&&(s={});var o=s.colors;void 0===o&&(o=n);var r=0,a={},l=new RegExp("("+/[\u4E00-\u9FFF\u3400-\u4dbf\uf900-\ufaff\u3040-\u309f\uac00-\ud7af\u0400-\u04FF]+|\w+/.source+"|"+/'+t+"";return r=++r%o.length,l}))};function i(e){return''+e+""}return s}();var Ya=Yi.exports;const Xa=Hi(Ya);function Xi(e){return Xa(e)}function Ja(e){const t=new J.Renderer;return t.link=el(t,t.link),t.code=tl(),t.image=nl(t,t.image,e),t}const el=(e,t)=>n=>{const s=(e=>{try{return new URL(e).origin}catch{return""}})(n.href)===window.location.origin;return t.call(e,n).replace(/^
    ({lang:e,text:t})=>{const n=e||"plaintext";let s=t;return window.hljs?n&&window.hljs.getLanguage(n)&&(s=window.hljs.highlight(n,t).value):s=Xi(t),`
    \n${s.replace(/&/g,"&")}\n
    `},nl=(e,t,{imgLazyLoad:n})=>s=>{const i=t.call(e,s);return n?"native"===n||!0===n?i.replace(/^`
    ${Xi(t)}
    `)).replace(/!\[(.*?)\]\((.*?)\)/g,((e,t,n)=>`${t}`)).replace(/\[(.*?)\]\((.*?)\)/g,((e,t,n)=>`
    ${t}`)).replace(/\n/g,"
    ")}function ms(...e){const t=e=>e&&"object"==typeof e&&e.constructor===Object;return e.reduce(((e,n)=>(Object.keys(n??{}).forEach((s=>{if("__proto__"===s||"constructor"===s||"prototype"===s)return;const i=e[s],o=n[s];Array.isArray(i)&&Array.isArray(o)?e[s]=i.concat(...o):t(i)&&t(o)?e[s]=ms(i,o):e[s]=o})),e)),{})}class al{constructor(e){h(this,"loading",!1),h(this,"listLastFetch"),h(this,"comments",[]),h(this,"notifies",[]),h(this,"page"),this.events=e}getLoading(){return this.loading}setLoading(e){this.loading=e}getListLastFetch(){return this.listLastFetch}setListLastFetch(e){this.listLastFetch=e}getComments(){return this.comments}fetchComments(e){this.events.trigger("list-fetch",e)}findComment(e){return this.comments.find((t=>t.id===e))}clearComments(){this.comments=[],this.events.trigger("list-loaded",this.comments)}loadComments(e){this.events.trigger("list-load",e),this.comments.push(...e),this.events.trigger("list-loaded",this.comments)}insertComment(e){this.comments.push(e),this.events.trigger("comment-inserted",e),this.events.trigger("list-loaded",this.comments)}updateComment(e){this.comments=this.comments.map((t=>t.id===e.id?e:t)),this.events.trigger("comment-updated",e),this.events.trigger("list-loaded",this.comments)}deleteComment(e){const t=this.comments.find((t=>t.id===e));if(!t)throw new Error(`Comment ${e} not found`);this.comments=this.comments.filter((t=>t.id!==e)),this.events.trigger("comment-deleted",t),this.events.trigger("list-loaded",this.comments)}getNotifies(){return this.notifies}updateNotifies(e){this.notifies=e,this.events.trigger("notifies-updated",this.notifies)}getPage(){return this.page}updatePage(e){this.page=e,this.events.trigger("page-loaded",e)}}function P(e=""){const t=document.createElement("div");return t.innerHTML=e.trim(),t.firstElementChild||t}function ll(e){return parseFloat(getComputedStyle(e,null).height.replace("px",""))||0}function gs(e){const t=document.createElement("div");return t.innerText=e,t.innerHTML}function no(e){const t=RegExp(`[?&]${e}=([^&]*)`).exec(window.location.search);return t&&decodeURIComponent(t[1].replace(/\+/g," "))}function cl(e,t){const n=e=>{const t=e.getBoundingClientRect(),n=window.pageXOffset||document.documentElement.scrollLeft,s=window.pageYOffset||document.documentElement.scrollTop;return{top:t.top+s,left:t.left+n}},s=n(e);if(!t)return s;const i=n(t);return{top:s.top-i.top,left:s.left-i.left}}function xn(e,t){let n=e.toString();for(;n.lengthe){try{const n=e.getTime(),s=(new Date).getTime()-n,i=Math.floor(s/864e5);if(0===i){const e=s%864e5,n=Math.floor(e/36e5);if(0===n){const n=e%36e5,s=Math.floor(n/6e4);if(0===s){const e=n%6e4,s=Math.round(e/1e3);return s<10?t("now"):`${s} ${t("seconds")}`}return`${s} ${t("minutes")}`}return`${n} ${t("hours")}`}return i<0?t("now"):i<8?`${i} ${t("days")}`:dl(e)}catch(e){return console.error(e)," - "}}function hl(e){return`${e.mirror.replace(/\/$/,"")}/${e.emailHash}?${e.params.replace(/^\?/,"")}`}function ul(e,t){const n=e.split("."),s=t.split(".");for(let e=0;e<3;e++){const t=Number(n[e]),i=Number(s[e]);if(t>i)return 1;if(i>t)return-1;if(!Number.isNaN(t)&&Number.isNaN(i))return 1;if(Number.isNaN(t)&&!Number.isNaN(i))return-1}return 0}function pl(){return G(this,null,(function*(){const e=navigator.userAgent;if(!navigator.userAgentData||!navigator.userAgentData.getHighEntropyValues)return e;const t=navigator.userAgentData;let n=null;try{n=yield t.getHighEntropyValues(["platformVersion"])}catch(t){return console.error(t),e}const s=Number(n.platformVersion.split(".")[0]);return"Windows"===t.platform&&s>=13?e.replace(/Windows NT 10.0/,"Windows NT 11.0"):"macOS"===t.platform&&s>=11?e.replace(/(Mac OS X \d+_\d+_\d+|Mac OS X)/,`Mac OS X ${n.platformVersion.replace(/\./g,"_")}`):e}))}function ys(e){let t;try{t=new URL(e)}catch{return!1}return"http:"===t.protocol||"https:"===t.protocol}function io(e){return fl(e.base,e.path)}function fl(e,t){return`${e.replace(/\/$/,"")}/${t.replace(/^\//,"")}`}const Ws={placeholder:"Leave a comment",noComment:"No Comment",send:"Send",signIn:"Sign in",signUp:"Sign up",save:"Save",nick:"Nickname",email:"Email",link:"Website",emoticon:"Emoji",preview:"Preview",uploadImage:"Upload Image",uploadFail:"Upload Failed",commentFail:"Failed to comment",restoredMsg:"Content has been restored",onlyAdminCanReply:"Only admin can reply",uploadLoginMsg:"Please fill in your name and email to upload",counter:"{count} Comments",sortLatest:"Latest",sortOldest:"Oldest",sortBest:"Best",sortAuthor:"Author",openComment:"Open Comment",closeComment:"Close Comment",listLoadFailMsg:"Failed to load comments",listRetry:"Retry",loadMore:"Load More",admin:"Admin",reply:"Reply",voteUp:"Up",voteDown:"Down",voteFail:"Vote Failed",readMore:"Read More",actionConfirm:"Confirm",collapse:"Collapse",collapsed:"Collapsed",collapsedMsg:"This comment has been collapsed",expand:"Expand",approved:"Approved",pending:"Pending",pendingMsg:"Pending, visible only to commenter.",edit:"Edit",editCancel:"Cancel Edit",delete:"Delete",deleteConfirm:"Confirm",pin:"Pin",unpin:"Unpin",seconds:"seconds ago",minutes:"minutes ago",hours:"hours ago",days:"days ago",now:"just now",adminCheck:"Enter admin password:",captchaCheck:"Enter the CAPTCHA to continue:",confirm:"Confirm",cancel:"Cancel",msgCenter:"Messages",ctrlCenter:"Dashboard",userProfile:"Profile",noAccountPrompt:"Don't have an account?",haveAccountPrompt:"Already have an account?",forgetPassword:"Forget Password",resetPassword:"Reset Password",changePassword:"Change Password",confirmPassword:"Confirm Password",passwordMismatch:"Passwords do not match",verificationCode:"Verification Code",verifySend:"Send Code",verifyResend:"Resend",waitSeconds:"Wait {seconds}s",emailVerified:"Email has been verified",password:"Password",username:"Username",nextStep:"Next Step",skipVerify:"Skip verification",logoutConfirm:"Are you sure to logout?",accountMergeNotice:"Your email has multiple accounts with different id.",accountMergeSelectOne:"Please select one you want to merge all the data into it.",accountMergeConfirm:"All data will be merged into one account, the id is {id}.",dismiss:"Dismiss",merge:"Merge",frontend:"Frontend",backend:"Backend",loading:"Loading",loadFail:"Load Failed",editing:"Editing",editFail:"Edit Failed",deleting:"Deleting",deleteFail:"Delete Failed",reqGot:"Request got",reqAborted:"Request timed out or terminated unexpectedly",updateMsg:"Please update Artalk {name} to get the best experience!",currentVersion:"Current Version",ignore:"Ignore",open:"Open",openName:"Open {name}"},ml={placeholder:"键入内容...",noComment:"「此时无声胜有声」",send:"发送",signIn:"登录",signUp:"注册",save:"保存",nick:"昵称",email:"邮箱",link:"网址",emoticon:"表情",preview:"预览",uploadImage:"上传图片",uploadFail:"上传失败",commentFail:"评论失败",restoredMsg:"内容已自动恢复",onlyAdminCanReply:"仅管理员可评论",uploadLoginMsg:"填入你的名字邮箱才能上传哦",counter:"{count} 条评论",sortLatest:"最新",sortOldest:"最早",sortBest:"最热",sortAuthor:"作者",openComment:"打开评论",closeComment:"关闭评论",listLoadFailMsg:"无法获取评论列表数据",listRetry:"点击重新获取",loadMore:"加载更多",admin:"管理员",reply:"回复",voteUp:"赞同",voteDown:"反对",voteFail:"投票失败",readMore:"阅读更多",actionConfirm:"确认操作",collapse:"折叠",collapsed:"已折叠",collapsedMsg:"该评论已被系统或管理员折叠",expand:"展开",approved:"已审",pending:"待审",pendingMsg:"审核中,仅本人可见。",edit:"编辑",editCancel:"取消编辑",delete:"删除",deleteConfirm:"确认删除",pin:"置顶",unpin:"取消置顶",seconds:"秒前",minutes:"分钟前",hours:"小时前",days:"天前",now:"刚刚",adminCheck:"键入密码来验证管理员身份:",captchaCheck:"键入验证码继续:",confirm:"确认",cancel:"取消",msgCenter:"通知中心",ctrlCenter:"控制中心",userProfile:"个人资料",noAccountPrompt:"没有账号?",haveAccountPrompt:"已有账号?",forgetPassword:"忘记密码",resetPassword:"重置密码",changePassword:"修改密码",confirmPassword:"确认密码",passwordMismatch:"两次输入的密码不一致",verificationCode:"验证码",verifySend:"发送验证码",verifyResend:"重新发送",waitSeconds:"等待 {seconds}秒",emailVerified:"邮箱已验证",password:"密码",username:"用户名",nextStep:"下一步",skipVerify:"跳过验证",logoutConfirm:"确定要退出登录吗?",accountMergeNotice:"您的电子邮件下有多个不同 ID 的账户。",accountMergeSelectOne:"请选择将所有数据合并到其中的一个。",accountMergeConfirm:"所有数据将合并到 ID 为 {id} 的账户中。",dismiss:"忽略",merge:"合并",frontend:"前端",backend:"后端",loading:"加载中",loadFail:"加载失败",editing:"修改中",editFail:"修改失败",deleting:"删除中",deleteFail:"删除失败",reqGot:"请求响应",reqAborted:"请求超时或意外终止",updateMsg:"请更新 Artalk {name} 以获得更好的体验!",currentVersion:"当前版本",ignore:"忽略",open:"打开",openName:"打开{name}"},Cn="ArtalkI18n",Sn={en:Ws,"en-US":Ws,"zh-CN":ml};function oo(e){return e=e.replace(/^([a-zA-Z]+)(-[a-zA-Z]+)?$/,((e,t,n)=>t.toLowerCase()+(n||"").toUpperCase())),Sn[e]?Sn[e]:window[Cn]&&window[Cn][e]?window[Cn][e]:Sn.en}let qn="en",Un=oo(qn);function Vs(e){e!==qn&&(qn=e,Un="string"==typeof e?oo(e):e)}function w(e,t={}){let n=Un?.[e]||e;return n=n.replace(/\{\s*(\w+?)\s*\}/g,((e,n)=>t[n]||"")),gs(n)}class Fn{constructor(){h(this,"events",[])}on(e,t,n={}){this.events.push(y({name:e,handler:t},n))}off(e,t){t&&(this.events=this.events.filter((n=>!(n.name===e&&n.handler===t))))}trigger(e,t){this.events.slice(0).filter((t=>t.name===e&&"function"==typeof t.handler)).forEach((n=>{n.once&&this.off(e,n.handler),n.handler(t)}))}}const gl={el:"",pageKey:"",pageTitle:"",server:"",site:"",placeholder:"",noComment:"",sendBtn:"",darkMode:!1,editorTravel:!0,flatMode:"auto",nestMax:2,nestSort:"DATE_ASC",emoticons:"https://cdn.jsdelivr.net/gh/ArtalkJS/Emoticons/grps/default.json",vote:!0,voteDown:!1,uaBadge:!0,listSort:!0,preview:!0,countEl:".artalk-comment-count",pvEl:".artalk-pv-count",statPageKeyAttr:"data-page-key",gravatar:{mirror:"https://www.gravatar.com/avatar/",params:"sha256=1&d=mp&s=240"},pagination:{pageSize:20,readMore:!0,autoLoad:!0},heightLimit:{content:300,children:400,scrollable:!1},imgUpload:!0,reqTimeout:15e3,versionCheck:!0,useBackendConf:!0,locale:"en"};function zn(e,t=!1){const n=t?ms(gl,e):e;if(n.el&&"string"==typeof n.el)try{const e=document.querySelector(n.el);if(!e)throw Error(`Target element "${n.el}" was not found.`);n.el=e}catch(e){throw console.error(e),new Error("Please check your Artalk `el` config.")}return""===n.pageKey&&(n.pageKey=`${window.location.pathname}`),""===n.pageTitle&&(n.pageTitle=`${document.title}`),n.server&&(n.server=n.server.replace(/\/$/,"").replace(/\/api\/?$/,"")),"auto"===n.locale&&(n.locale=navigator.language),"auto"===n.flatMode&&(n.flatMode=window.matchMedia("(max-width: 768px)").matches),"number"==typeof n.nestMax&&Number(n.nestMax)<=1&&(n.flatMode=!0),n}function yl(e){const t=["el","pageKey","pageTitle","server","site","pvEl","countEl","statPageKeyAttr"];return Object.keys(e).forEach((n=>{t.includes(n)&&delete e[n],"darkMode"===n&&"auto"!==e[n]&&delete e[n]})),e.emoticons&&"string"==typeof e.emoticons&&(e.emoticons=e.emoticons.trim(),e.emoticons.startsWith("[")||e.emoticons.startsWith("{")?e.emoticons=JSON.parse(e.emoticons):"false"===e.emoticons&&(e.emoticons=!1)),e}function ro(e,t){return{baseURL:`${e.server}/api/v2`,siteName:e.site||"",pageKey:e.pageKey||"",pageTitle:e.pageTitle||"",timeout:e.reqTimeout,getApiToken:()=>t?.get("user").getData().token,userInfo:t?.get("user").checkHasBasicUserInfo()?{name:t?.get("user").getData().name,email:t?.get("user").getData().email}:void 0,handlers:t?.getApiHandlers()}}function vl(e){const t=Or();return t.add("need_captcha",(t=>e.checkCaptcha(t))),t.add("need_login",(()=>e.checkAdmin({}))),t}function kl(e,t,n){let s=null;const i=()=>{const i=(()=>{const n=e.getConf(),s={};return t.forEach((e=>{s[e]=n[e]})),s})();(null==s||!((e,t)=>JSON.stringify(e)===JSON.stringify(t))(s,i))&&(s=i,n(i))};e.on("mounted",i),e.on("updated",i)}class wl{constructor(e){h(this,"conf"),h(this,"data"),h(this,"$root"),h(this,"events",new Fn),h(this,"mounted",!1),h(this,"apiHandlers",null),h(this,"getCommentList",this.getCommentNodes),h(this,"getCommentDataList",this.getComments),this.conf=e,this.$root=e.el,this.$root.classList.add("artalk"),this.$root.innerHTML="",e.darkMode&&this.$root.classList.add("atk-dark-mode"),this.data=new al(this.events),this.on("mounted",(()=>{this.mounted=!0}))}inject(e,t){this[e]=t}get(e){return this[e]}getApi(){return new Pi(ro(this.conf,this))}getApiHandlers(){return this.apiHandlers||(this.apiHandlers=vl(this)),this.apiHandlers}getData(){return this.data}replyComment(e,t){this.editor.setReply(e,t)}editComment(e,t){this.editor.setEditComment(e,t)}fetch(e){this.data.fetchComments(e)}reload(){this.data.fetchComments({offset:0})}listGotoFirst(){this.events.trigger("list-goto-first")}getCommentNodes(){return this.list.getCommentNodes()}getComments(){return this.data.getComments()}editorShowLoading(){this.editor.showLoading()}editorHideLoading(){this.editor.hideLoading()}editorShowNotify(e,t){this.editor.showNotify(e,t)}editorResetState(){this.editor.resetState()}showSidebar(e){this.sidebarLayer.show(e)}hideSidebar(){this.sidebarLayer.hide()}checkAdmin(e){return this.checkerLauncher.checkAdmin(e)}checkCaptcha(e){return this.checkerLauncher.checkCaptcha(e)}on(e,t){this.events.on(e,t)}off(e,t){this.events.off(e,t)}trigger(e,t){this.events.trigger(e,t)}$t(e,t={}){return w(e,t)}setDarkMode(e){this.updateConf({darkMode:e})}updateConf(e){this.conf=ms(this.conf,zn(e,!1)),this.mounted&&this.events.trigger("updated",this.conf)}getConf(){return this.conf}getEl(){return this.$root}getMarked(){return to()}watchConf(e,t){kl(this,e,t)}}function dt(e,t){let n=e.querySelector(":scope > .atk-loading");n||(n=P(''),t?.transparentBg&&(n.style.background="transparent"),e.appendChild(n)),n.style.display="";const s=n.querySelector(".atk-loading-spinner");s&&(s.style.display="none",window.setTimeout((()=>{s.isConnected&&(s.style.display="")}),500))}function je(e){const t=e.querySelector(":scope > .atk-loading");t&&(t.style.display="none")}function Gs(e,t){e?dt(t):je(t)}function ao(e,t=!0,n){let s;if(n){const t=n.getBoundingClientRect();s=e.getBoundingClientRect().top-t.top+n.scrollTop-n.clientHeight/2+e.clientHeight/2}else{const t=e.getBoundingClientRect();s=t.top+window.scrollY-(window.innerHeight/2-t.height/2)}const i={top:s,left:0,behavior:"instant"};n?n.scroll(i):window.scroll(i)}function bl(e,t,n){const s=P(`
    `);s.querySelector(".atk-notify-content").innerHTML=gs(t).replace("\n","
    "),e.appendChild(s);const i=()=>{s.classList.add("atk-fade-out"),setTimeout((()=>{s.remove()}),200)};let o;o=window.setTimeout((()=>{i()}),3e3),s.addEventListener("click",(()=>{i(),window.clearTimeout(o)}))}function $l(e,t,n="in"){e.classList.add(`atk-fade-${n}`);const s=()=>{e.classList.remove(`atk-fade-${n}`),e.removeEventListener("animationend",s)};e.addEventListener("animationend",s)}function Hn(e,t){$l(e,t,"in")}function Qt(e,t,n='Artalk Error'){let s=e.querySelector(".atk-error-layer");if(null===t)return void(null!==s&&s.remove());s||(s=P(`
    ${n}
    `),e.appendChild(s));const i=s.querySelector(".atk-error-text");i.innerHTML="",null!==t&&(t instanceof HTMLElement?i.appendChild(t):i.innerText=t)}function xl(){const e=document.createElement("p");e.style.width="100%",e.style.height="200px";const t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.visibility="hidden",t.style.width="200px",t.style.height="150px",t.style.overflow="hidden",t.appendChild(e),document.body.appendChild(t);const n=e.offsetWidth;t.style.overflow="scroll";let s=e.offsetWidth;return n===s&&(s=t.clientWidth),document.body.removeChild(t),n-s}function Cl(e){const t=P(`${w("captchaCheck")}`);return t.querySelector(".atk-captcha-img").onclick=()=>{const n=t.querySelector(".atk-captcha-img");e.getApi().captcha.getCaptcha().then((e=>{n.setAttribute("src",e.data.img_data)})).catch((e=>{console.error("Failed to get captcha image ",e)}))},t}function Sl(e){const t=P('
    '),n=P('');n.style.display="none",dt(t,{transparentBg:!0}),n.src=e.getOpts().getCaptchaIframeURL(),n.onload=()=>{n.style.display="",je(t)},t.append(n);const s=P('
    ');t.append(s),e.hideInteractInput();let i=!1;return function t(){return G(this,null,(function*(){if(yield(e=>new Promise((t=>{window.setTimeout((()=>{t(null)}),e)})))(1e3),i)return;let n=!1;try{n=(yield e.getApi().captcha.getCaptchaStatus()).data.is_pass}catch{n=!1}n?e.triggerSuccess():t()}))}(),s.onclick=()=>{i=!0,e.cancel()},t}const El={request:(e,t)=>e.getApi().captcha.verifyCaptcha({value:t}),body:e=>e.get("iframe")?Sl(e):Cl(e),onSuccess(e,t,n,s){e.set("val",n)},onError(e,t,n,s){s.querySelector(".atk-captcha-img").click(),s.querySelector('input[type="text"]').value=""}},Tl={inputType:"password",request(e,t){return G(this,null,(function*(){return(yield e.getApi().user.login({name:e.getUser().getData().name,email:e.getUser().getData().email,password:t})).data}))},body:e=>P(`${w("adminCheck")}`),onSuccess(e,t,n,s){e.getUser().update({is_admin:!0,token:t.token}),e.getOpts().onReload()},onError(e,t,n,s){}};class Ll{constructor(e){h(this,"$el"),h(this,"$content"),h(this,"$actions"),this.$el=P('
    \n
    \n
    \n
    \n
    \n
    '),this.$actions=this.$el.querySelector(".atk-layer-dialog-actions"),this.$content=this.$el.querySelector(".atk-layer-dialog-content"),this.$content.appendChild(e)}setYes(e){const t=P(``);return t.onclick=this.onBtnClick(e),this.$actions.appendChild(t),this}setNo(e){const t=P(``);return t.onclick=this.onBtnClick(e),this.$actions.appendChild(t),this}onBtnClick(e){return t=>{const n=e(t.currentTarget,this);(void 0===n||!0===n)&&this.$el.remove()}}}function Ks(e){return t=>new Promise(((n,s)=>{const i=t.onCancel;t.onCancel=()=>{i&&i(),s(new Error("user canceled the checker"))};const o=t.onSuccess;t.onSuccess=()=>{o&&o(),n()},e(t)}))}class Al{constructor(e){h(this,"checkCaptcha",Ks((e=>{this.fire(El,e,(t=>{t.set("img_data",e.img_data),t.set("iframe",e.iframe)}))}))),h(this,"checkAdmin",Ks((e=>{this.fire(Tl,e)}))),this.opts=e}fire(e,t,n){const s=this.opts.getCtx().get("layerManager").create(`checker-${(new Date).getTime()}`);s.show();const i=()=>{s.destroy()},o={};let r=!1;const a={set:(e,t)=>{o[e]=t},get:e=>o[e],getOpts:()=>this.opts,getUser:()=>this.opts.getCtx().get("user"),getApi:()=>this.opts.getApi(),hideInteractInput:()=>{r=!0},triggerSuccess:()=>{i(),e.onSuccess&&e.onSuccess(a,"","",l),t.onSuccess&&t.onSuccess()},cancel:()=>{i(),t.onCancel&&t.onCancel()}};n&&n(a);const l=P();l.appendChild(e.body(a));const c=P(``);let h;l.appendChild(c),setTimeout((()=>c.focus()),80),c.onkeyup=e=>{("Enter"===e.key||13===e.keyCode)&&(e.preventDefault(),s.getEl().querySelector('button[data-action="confirm"]').click())};const d=new Ll(l);d.setYes((n=>{const s=c.value.trim();h||(h=n.innerText);const o=()=>{n.innerText=h||"",n.classList.remove("error")};return n.innerText=`${w("loading")}...`,e.request(a,s).then((n=>{i(),e.onSuccess&&e.onSuccess(a,n,s,l),t.onSuccess&&t.onSuccess()})).catch((t=>{(e=>{n.innerText=e,n.classList.add("error")})(String(t.message||String(t))),e.onError&&e.onError(a,t,s,l);const i=setTimeout((()=>o()),3e3);c.onfocus=()=>{o(),clearTimeout(i)}})),!1})),d.setNo((()=>(i(),t.onCancel&&t.onCancel(),!1))),r&&(c.style.display="none",d.$el.querySelector(".atk-layer-dialog-actions").style.display="none"),s.getEl().append(d.$el),t.onMount&&t.onMount(d.$el)}}class vs{constructor(e){h(this,"$el"),this.ctx=e}get conf(){return this.ctx.conf}getEl(){return this.$el}}const _l='
    \n
    \n \n \n \n
    \n
    \n \n
    \n \n
    \n
    \n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n',Pl={$header:".atk-header",$name:'.atk-header [name="name"]',$email:'.atk-header [name="email"]',$link:'.atk-header [name="link"]',$textareaWrap:".atk-textarea-wrap",$textarea:".atk-textarea",$bottom:".atk-bottom",$submitBtn:".atk-send-btn",$notifyWrap:".atk-notify-wrap",$bottomLeft:".atk-bottom-left",$stateWrap:".atk-state-wrap",$plugBtnWrap:".atk-plug-btn-wrap",$plugPanelWrap:".atk-plug-panel-wrap"};function Il(){const e=P(_l),t={$el:e};return Object.entries(Pl).forEach((([n,s])=>{t[n]=e.querySelector(s)})),t}class we{constructor(e){h(this,"$btn"),h(this,"$panel"),h(this,"editorStateEffectWhen"),this.kit=e}useBtn(e="
    "){return this.$btn=P(`${e}`),this.$btn}usePanel(e="
    "){return this.$panel=P(e),this.$panel}useContentTransformer(e){this.contentTransformer=e}usePanelShow(e){this.kit.useEvents().on("panel-show",(t=>{t===this&&e()}))}usePanelHide(e){this.kit.useEvents().on("panel-hide",(t=>{t===this&&e()}))}useEditorStateEffect(e,t){this.editorStateEffectWhen=e,this.editorStateEffect=t}}class Yt extends we{constructor(){super(...arguments),h(this,"isMoved",!1)}move(e){if(this.isMoved)return;this.isMoved=!0;const t=this.kit.useUI().$el;t.after(P('
    '));const n=P("
    ");e.after(n),n.replaceWith(t),t.classList.add("atk-fade-in"),t.classList.add("editor-traveling")}back(){var e;this.isMoved&&(this.isMoved=!1,null==(e=this.kit.useGlobalCtx().$root.querySelector(".atk-editor-travel-placeholder"))||e.replaceWith(this.kit.useUI().$el),this.kit.useUI().$el.classList.remove("editor-traveling"))}}class Ml{constructor(e){h(this,"stateCurt","normal"),h(this,"stateUnmountFn",null),this.editor=e}get(){return this.stateCurt}switch(e,t){var n,s,i,o,r;if(this.stateUnmountFn&&(this.stateUnmountFn(),this.stateUnmountFn=null,null==(s=null==(n=this.editor.getPlugs())?void 0:n.get(Yt))||s.back()),"normal"!==e&&t){let n=t.$comment;this.editor.conf.flatMode||(n=n.querySelector(".atk-footer")),null==(o=null==(i=this.editor.getPlugs())?void 0:i.get(Yt))||o.move(n);const s=this.editor.ctx.conf.scrollRelativeTo&&this.editor.ctx.conf.scrollRelativeTo();ao(this.editor.getUI().$el,!0,s);const a=null==(r=this.editor.getPlugs())?void 0:r.getPlugs().find((t=>t.editorStateEffectWhen===e));a&&a.editorStateEffect&&(this.stateUnmountFn=a.editorStateEffect(t.comment))}this.stateCurt=e}}class Ol extends vs{constructor(e){super(e),h(this,"ui"),h(this,"state"),this.ui=Il(),this.$el=this.ui.$el,this.state=new Ml(this)}getUI(){return this.ui}getPlugs(){return this.ctx.get("editorPlugs")}getState(){return this.state.get()}getHeaderInputEls(){return{name:this.ui.$name,email:this.ui.$email,link:this.ui.$link}}getContentFinal(){let e=this.getContentRaw();const t=this.getPlugs();return t&&(e=t.getTransformedContent(e)),e}getContentRaw(){return this.ui.$textarea.value||""}getContentMarked(){return fs(this.getContentFinal())}setContent(e){var t;this.ui.$textarea.value=e,null==(t=this.getPlugs())||t.getEvents().trigger("content-updated",e)}insertContent(e){if(document.selection)this.ui.$textarea.focus(),document.selection.createRange().text=e,this.ui.$textarea.focus();else if(this.ui.$textarea.selectionStart||0===this.ui.$textarea.selectionStart){const t=this.ui.$textarea.selectionStart,n=this.ui.$textarea.selectionEnd,s=this.ui.$textarea.scrollTop;this.setContent(this.ui.$textarea.value.substring(0,t)+e+this.ui.$textarea.value.substring(n,this.ui.$textarea.value.length)),this.ui.$textarea.focus(),this.ui.$textarea.selectionStart=t+e.length,this.ui.$textarea.selectionEnd=t+e.length,this.ui.$textarea.scrollTop=s}else this.ui.$textarea.focus(),this.ui.$textarea.value+=e}focus(){this.ui.$textarea.focus()}reset(){this.setContent(""),this.resetState()}resetState(){this.state.switch("normal")}setReply(e,t){this.state.switch("reply",{comment:e,$comment:t})}setEditComment(e,t){this.state.switch("edit",{comment:e,$comment:t})}showNotify(e,t){bl(this.ui.$notifyWrap,e,t)}showLoading(){dt(this.ui.$el)}hideLoading(){je(this.ui.$el)}submit(){const e=()=>this.ctx.trigger("editor-submit");this.ctx.conf.beforeSubmit?this.ctx.conf.beforeSubmit(this,e):e()}}const Rl='
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n';class Dl extends vs{constructor(e){super(e),h(this,"layer"),h(this,"$header"),h(this,"$closeBtn"),h(this,"$iframeWrap"),h(this,"$iframe"),h(this,"refreshWhenShow",!0),h(this,"animTimer"),this.$el=P(Rl),this.$header=this.$el.querySelector(".atk-sidebar-header"),this.$closeBtn=this.$header.querySelector(".atk-sidebar-close"),this.$iframeWrap=this.$el.querySelector(".atk-sidebar-iframe-wrap"),this.$closeBtn.onclick=()=>{this.hide()},this.ctx.on("user-changed",(()=>{this.refreshWhenShow=!0}))}show(){return G(this,arguments,(function*(e={}){if(this.$el.style.transform="",this.initLayer(),this.layer.show(),this.refreshWhenShow)this.refreshWhenShow=!1,this.$iframeWrap.innerHTML="",this.$iframe=this.createIframe(e.view),this.$iframeWrap.append(this.$iframe);else{const e=this.$iframe,t=e.src;this.getDarkMode()!==t.includes("&darkMode=1")&&this.iframeLoad(e,t.replace(/&darkMode=\d/,`&darkMode=${Number(this.getDarkMode())}`))}this.authCheck({onSuccess:()=>this.show(e)}),this.animTimer=setTimeout((()=>{this.animTimer=void 0,this.$el.style.transform="translate(0, 0)",setTimeout((()=>{this.ctx.getData().updateNotifies([])}),0),this.ctx.trigger("sidebar-show")}),100)}))}hide(){var e;null==(e=this.layer)||e.hide()}authCheck(e){return G(this,null,(function*(){const t=(yield this.ctx.getApi().user.getUserStatus(y({},this.ctx.getApi().getUserFields()))).data;t.is_admin&&!t.is_login&&(this.refreshWhenShow=!0,this.ctx.checkAdmin({onSuccess:()=>{setTimeout((()=>{e.onSuccess()}),500)},onCancel:()=>{this.hide()}}),this.hide())}))}initLayer(){this.layer||(this.layer=this.ctx.get("layerManager").create("sidebar",this.$el),this.layer.setOnAfterHide((()=>{this.ctx.editorResetState(),this.animTimer&&clearTimeout(this.animTimer),this.$el.style.transform="",this.ctx.trigger("sidebar-hide")})))}createIframe(e){const t=P(''),n=io({base:this.ctx.conf.server,path:"/sidebar/"}),s={pageKey:this.conf.pageKey,site:this.conf.site||"",user:JSON.stringify(this.ctx.get("user").getData()),time:+new Date};e&&(s.view=e),s.darkMode=this.getDarkMode()?"1":"0";const i=new URLSearchParams(s);return this.iframeLoad(t,`${n}?${i.toString()}`),t}getDarkMode(){return"auto"===this.conf.darkMode?window.matchMedia("(prefers-color-scheme: dark)").matches:this.conf.darkMode}iframeLoad(e,t){e.src=t,dt(this.$iframeWrap),e.onload=()=>{je(this.$iframeWrap)}}}const Bl='
    \n
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n \n
    \n';function ql(e,t="DATE_DESC",n=2){const s=[];e.filter((e=>0===e.rid)).forEach((t=>{const i={id:t.id,comment:t,children:[],level:1};i.parent=i,s.push(i),function t(s){const i=e.filter((e=>e.rid===s.id));0!==i.length&&(s.level>=n&&(s=s.parent),i.forEach((e=>{const n={id:e.id,comment:e,children:[],parent:s,level:s.level+1};s.children.push(n),t(n)})))}(i)}));const i=(n,s)=>{let i=n.id-s.id;return"DATE_ASC"===t?i=+new Date(n.comment.date)-+new Date(s.comment.date):"DATE_DESC"===t?i=+new Date(s.comment.date)-+new Date(n.comment.date):"SRC_INDEX"===t?i=e.indexOf(n.comment)-e.indexOf(s.comment):"VOTE_UP_DESC"===t&&(i=s.comment.vote_up-n.comment.vote_up),i};return function e(t){t.forEach((t=>{t.children=t.children.sort(i),e(t.children)}))}(s),s}const Ul=e=>({import:t=>{ql(t,e.nestSortBy,e.nestMax).forEach((n=>{var s;const i=e.createCommentNode(n.comment);null==(s=e.$commentsWrap)||s.appendChild(i.getEl()),i.getRender().playFadeAnim();const o=(n,s)=>{s.children.forEach((s=>{const i=t.find((e=>e.id===s.comment.rid)),r=s.comment,a=e.createCommentNode(r,i);n.putChild(a),o(a,s)}))};o(i,n),i.getRender().checkHeightLimit()}))},insert:(t,n)=>{var s;const i=e.createCommentNode(t,n);if(0===t.rid)null==(s=e.$commentsWrap)||s.prepend(i.getEl());else{const n=e.findCommentNode(t.rid);n&&(n.putChild(i,"DATE_ASC"===e.nestSortBy?"append":"prepend"),i.getParents().forEach((e=>{e.getRender().heightLimitRemoveForChildren()})))}i.getRender().checkHeightLimit(),i.scrollIntoView(),i.getRender().playFadeAnim()}}),Fl=e=>({import:t=>{t.forEach((n=>{const s=0===n.rid?void 0:t.find((e=>e.id===n.rid));Zs(e,"append",n,s)}))},insert:(t,n)=>{Zs(e,"prepend",t,n).scrollIntoView()}});function Zs(e,t,n,s){n.is_collapsed&&(n.is_allow_reply=!1);const i=e.createCommentNode(n,s);if(n.visible){const n=i.getEl(),s=e.$commentsWrap;"append"===t&&s?.append(n),"prepend"===t&&s?.prepend(n),i.getRender().playFadeAnim()}return i.getRender().checkHeightLimit(),i}class zl{constructor(e){this.options=e}getStrategy(){return this.options.flatMode?Fl(this.options):Ul(this.options)}import(e){this.getStrategy().import(e)}insert(e,t){this.getStrategy().insert(e,t)}}function Hl(e){const t=window||{},n=navigator||{},s=String(e||n.userAgent),i={os:"",osVersion:"",engine:"",browser:"",device:"",language:"",version:""},o={Trident:s.includes("Trident")||s.includes("NET CLR"),Presto:s.includes("Presto"),WebKit:s.includes("AppleWebKit"),Gecko:s.includes("Gecko/")},r={Safari:s.includes("Safari"),Chrome:s.includes("Chrome")||s.includes("CriOS"),IE:s.includes("MSIE")||s.includes("Trident"),Edge:s.includes("Edge")||s.includes("Edg"),Firefox:s.includes("Firefox")||s.includes("FxiOS"),"Firefox Focus":s.includes("Focus"),Chromium:s.includes("Chromium"),Opera:s.includes("Opera")||s.includes("OPR"),Vivaldi:s.includes("Vivaldi"),Yandex:s.includes("YaBrowser"),Kindle:s.includes("Kindle")||s.includes("Silk/"),360:s.includes("360EE")||s.includes("360SE"),UC:s.includes("UC")||s.includes(" UBrowser"),QQBrowser:s.includes("QQBrowser"),QQ:s.includes("QQ/"),Baidu:s.includes("Baidu")||s.includes("BIDUBrowser"),Maxthon:s.includes("Maxthon"),Sogou:s.includes("MetaSr")||s.includes("Sogou"),LBBROWSER:s.includes("LBBROWSER"),"2345Explorer":s.includes("2345Explorer"),TheWorld:s.includes("TheWorld"),MIUI:s.includes("MiuiBrowser"),Quark:s.includes("Quark"),Qiyu:s.includes("Qiyu"),Wechat:s.includes("MicroMessenger"),Taobao:s.includes("AliApp(TB"),Alipay:s.includes("AliApp(AP"),Weibo:s.includes("Weibo"),Douban:s.includes("com.douban.frodo"),Suning:s.includes("SNEBUY-APP"),iQiYi:s.includes("IqiyiApp")},a={Windows:s.includes("Windows"),Linux:s.includes("Linux")||s.includes("X11"),macOS:s.includes("Macintosh"),Android:s.includes("Android")||s.includes("Adr"),Ubuntu:s.includes("Ubuntu"),FreeBSD:s.includes("FreeBSD"),Debian:s.includes("Debian"),"Windows Phone":s.includes("IEMobile")||s.includes("Windows Phone"),BlackBerry:s.includes("BlackBerry")||s.includes("RIM"),MeeGo:s.includes("MeeGo"),Symbian:s.includes("Symbian"),iOS:s.includes("like Mac OS X"),"Chrome OS":s.includes("CrOS"),WebOS:s.includes("hpwOS")},l={Mobile:s.includes("Mobi")||s.includes("iPh")||s.includes("480"),Tablet:s.includes("Tablet")||s.includes("Pad")||s.includes("Nexus 7")};l.Mobile?l.Mobile=!s.includes("iPad"):r.Chrome&&s.includes("Edg")?(r.Chrome=!1,r.Edge=!0):t.showModalDialog&&t.chrome&&(r.Chrome=!1,r[360]=!0),i.device="PC",i.language=(()=>{const e=(n.browserLanguage||n.language).split("-");return e[1]&&(e[1]=e[1].toUpperCase()),e.join("_")})(),Object.entries({engine:o,browser:r,os:a,device:l}).forEach((([e,t])=>{Object.entries(t).forEach((([t,n])=>{!0===n&&(i[e]=t)}))}));const c={Windows:()=>{const e=s.replace(/^.*Windows NT ([\d.]+);.*$/,"$1");return{6.4:"10",6.3:"8.1",6.2:"8",6.1:"7","6.0":"Vista",5.2:"XP",5.1:"XP","5.0":"2000","10.0":"10","11.0":"11"}[e]||e},Android:()=>s.replace(/^.*Android ([\d.]+);.*$/,"$1"),iOS:()=>s.replace(/^.*OS ([\d_]+) like.*$/,"$1").replace(/_/g,"."),Debian:()=>s.replace(/^.*Debian\/([\d.]+).*$/,"$1"),"Windows Phone":()=>s.replace(/^.*Windows Phone( OS)? ([\d.]+);.*$/,"$2"),macOS:()=>s.replace(/^.*Mac OS X ([\d_]+).*$/,"$1").replace(/_/g,"."),WebOS:()=>s.replace(/^.*hpwOS\/([\d.]+);.*$/,"$1")};i.osVersion="",c[i.os]&&(i.osVersion=c[i.os](),i.osVersion===s&&(i.osVersion=""));const h={Safari:()=>s.replace(/^.*Version\/([\d.]+).*$/,"$1"),Chrome:()=>s.replace(/^.*Chrome\/([\d.]+).*$/,"$1").replace(/^.*CriOS\/([\d.]+).*$/,"$1"),IE:()=>s.replace(/^.*MSIE ([\d.]+).*$/,"$1").replace(/^.*rv:([\d.]+).*$/,"$1"),Edge:()=>s.replace(/^.*(Edge|Edg|Edg[A-Z]{1})\/([\d.]+).*$/,"$2"),Firefox:()=>s.replace(/^.*Firefox\/([\d.]+).*$/,"$1").replace(/^.*FxiOS\/([\d.]+).*$/,"$1"),"Firefox Focus":()=>s.replace(/^.*Focus\/([\d.]+).*$/,"$1"),Chromium:()=>s.replace(/^.*Chromium\/([\d.]+).*$/,"$1"),Opera:()=>s.replace(/^.*Opera\/([\d.]+).*$/,"$1").replace(/^.*OPR\/([\d.]+).*$/,"$1"),Vivaldi:()=>s.replace(/^.*Vivaldi\/([\d.]+).*$/,"$1"),Yandex:()=>s.replace(/^.*YaBrowser\/([\d.]+).*$/,"$1"),Kindle:()=>s.replace(/^.*Version\/([\d.]+).*$/,"$1"),Maxthon:()=>s.replace(/^.*Maxthon\/([\d.]+).*$/,"$1"),QQBrowser:()=>s.replace(/^.*QQBrowser\/([\d.]+).*$/,"$1"),QQ:()=>s.replace(/^.*QQ\/([\d.]+).*$/,"$1"),Baidu:()=>s.replace(/^.*BIDUBrowser[\s/]([\d.]+).*$/,"$1"),UC:()=>s.replace(/^.*UC?Browser\/([\d.]+).*$/,"$1"),Sogou:()=>s.replace(/^.*SE ([\d.X]+).*$/,"$1").replace(/^.*SogouMobileBrowser\/([\d.]+).*$/,"$1"),"2345Explorer":()=>s.replace(/^.*2345Explorer\/([\d.]+).*$/,"$1"),TheWorld:()=>s.replace(/^.*TheWorld ([\d.]+).*$/,"$1"),MIUI:()=>s.replace(/^.*MiuiBrowser\/([\d.]+).*$/,"$1"),Quark:()=>s.replace(/^.*Quark\/([\d.]+).*$/,"$1"),Qiyu:()=>s.replace(/^.*Qiyu\/([\d.]+).*$/,"$1"),Wechat:()=>s.replace(/^.*MicroMessenger\/([\d.]+).*$/,"$1"),Taobao:()=>s.replace(/^.*AliApp\(TB\/([\d.]+).*$/,"$1"),Alipay:()=>s.replace(/^.*AliApp\(AP\/([\d.]+).*$/,"$1"),Weibo:()=>s.replace(/^.*weibo__([\d.]+).*$/,"$1"),Douban:()=>s.replace(/^.*com.douban.frodo\/([\d.]+).*$/,"$1"),Suning:()=>s.replace(/^.*SNEBUY-APP([\d.]+).*$/,"$1"),iQiYi:()=>s.replace(/^.*IqiyiVersion\/([\d.]+).*$/,"$1")};return i.version="",h[i.browser]&&(i.version=h[i.browser](),i.version===s&&(i.version="")),i.version.indexOf(".")&&(i.version=i.version.substring(0,i.version.indexOf("."))),"iOS"===i.os&&s.includes("iPad")?i.os="iPadOS":"Edge"!==i.browser||s.includes("Edg")?"MIUI"===i.browser?i.os="Android":"Chrome"===i.browser&&Number(i.version)>27||"Opera"===i.browser&&Number(i.version)>12||"Yandex"===i.browser?i.engine="Blink":void 0===i.browser&&(i.browser="Unknow App"):i.engine="EdgeHTML",i}function Nl(e,t){t.forEach((({el:t,max:n,imgCheck:s})=>{if(!t)return;s&&(t.style.maxHeight=`${n+1}px`);let i=!1;const o=()=>{if(i||ll(t)<=n)return;e.scrollable?Wl({el:t,max:n}):jl({el:t,max:n,afterExpandBtnClick:()=>{var t;i=!0,null==(t=e.afterExpandBtnClick)||t.call(e)}})};if(o(),s){const e=t.querySelectorAll(".atk-content img");0===e.length&&(t.style.maxHeight=""),e.forEach((e=>{e.onload=()=>o()}))}}))}const Xt="atk-height-limit";function jl(e){if(!e.el||!e.max||e.el.classList.contains(Xt))return;e.el.classList.add(Xt),e.el.style.height=`${e.max}px`,e.el.style.overflow="hidden";const t=P(`
    ${w("readMore")}`);t.onclick=t=>{t.stopPropagation(),Nn(e.el),e.afterExpandBtnClick&&e.afterExpandBtnClick(t)},e.el.append(t)}function Nn(e){e&&e.classList.contains(Xt)&&(e.classList.remove(Xt),Array.from(e.children).forEach((e=>{e.classList.contains("atk-height-limit-btn")&&e.remove()})),e.style.height="",e.style.maxHeight="",e.style.overflow="")}const Qs="atk-height-limit-scroll";function Wl(e){e.el&&(e.el.classList.contains(Qs)||(e.el.classList.add(Qs),e.el.style.height=`${e.max}px`))}const Vl='
    \n
    \n
    \n
    \n
    \n \n \n \n
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n';function Gl(e){const t=e.$el.querySelector(".atk-avatar"),n=P(""),s=e.opts.avatarURLBuilder;if(n.src=s?s(e.data):e.comment.getGravatarURL(),e.data.link){const s=P('');s.href=ys(e.data.link)?e.data.link:`https://${e.data.link}`,s.append(n),t.append(s)}else t.append(n)}function Kl(e){Object.entries({renderNick:Zl,renderVerifyBadge:Ql,renderDate:Yl,renderUABadge:Xl}).forEach((([t,n])=>{n(e)}))}function Zl(e){if(e.$headerNick=e.$el.querySelector(".atk-nick"),e.data.link){const t=P('');t.innerText=e.data.nick,t.href=ys(e.data.link)?e.data.link:`https://${e.data.link}`,e.$headerNick.append(t)}else e.$headerNick.innerText=e.data.nick}function Ql(e){e.$headerBadgeWrap=e.$el.querySelector(".atk-badge-wrap"),e.$headerBadgeWrap.innerHTML="";const t=e.data.badge_name,n=e.data.badge_color;if(t){const s=P('');s.innerText=t.replace("管理员",w("admin")),s.style.backgroundColor=n||"",e.$headerBadgeWrap.append(s)}else if(e.data.is_verified){const t=P(``);e.$headerBadgeWrap.append(t)}if(e.data.is_pinned){const t=P(`${w("pin")}`);e.$headerBadgeWrap.append(t)}}function Yl(e){const t=e.$el.querySelector(".atk-date");t.innerText=e.comment.getDateFormatted(),t.setAttribute("data-atk-comment-date",String(+new Date(e.data.date)))}function Xl(e){if(!e.opts.uaBadge&&!e.data.ip_region)return;let t=e.$header.querySelector("atk-ua-wrap");if(t||(t=P(''),e.$header.append(t)),t.innerHTML="",e.data.ip_region){const n=P('');n.innerText=e.data.ip_region,t.append(n)}if(e.opts.uaBadge){const{browser:n,os:s}=e.comment.getUserUA();if(String(n).trim()){const e=P('');e.innerText=n,t.append(e)}if(String(s).trim()){const e=P('');e.innerText=s,t.append(e)}}}function Jl(e){if(!e.data.is_collapsed)return e.$content.innerHTML=e.comment.getContentMarked(),void e.$content.classList.remove("atk-hide","atk-collapsed");e.$content.classList.add("atk-hide","atk-type-collapsed");const t=P(`\n
    \n ${w("collapsedMsg")}\n ${w("expand")}\n
    `);e.$body.insertAdjacentElement("beforeend",t);const n=t.querySelector(".atk-show-btn");n.addEventListener("click",(t=>{t.stopPropagation(),e.$content.classList.contains("atk-hide")?(e.$content.innerHTML=e.comment.getContentMarked(),e.$content.classList.remove("atk-hide"),Hn(e.$content),n.innerText=w("collapse")):(e.$content.innerHTML="",e.$content.classList.add("atk-hide"),n.innerText=w("expand"))}))}function ec(e){e.opts.flatMode||0===e.data.rid||e.opts.replyTo&&(e.$replyAt=P(''),e.$replyAt.querySelector(".atk-nick").innerText=`${e.opts.replyTo.nick}`,e.$replyAt.onclick=()=>{e.comment.getActions().goToReplyComment()},e.$headerBadgeWrap.insertAdjacentElement("afterend",e.$replyAt))}function tc(e){if(!e.opts.flatMode||!e.opts.replyTo)return;e.$replyTo=P(`\n
    \n
    ${w("reply")} :
    \n
    \n
    `);const t=e.$replyTo.querySelector(".atk-nick");t.innerText=`@${e.opts.replyTo.nick}`,t.onclick=()=>{e.comment.getActions().goToReplyComment()};let n=fs(e.opts.replyTo.content);e.opts.replyTo.is_collapsed&&(n=`[${w("collapsed")}]`),e.$replyTo.querySelector(".atk-content").innerHTML=n,e.$body.prepend(e.$replyTo)}function nc(e){if(!e.data.is_pending)return;const t=P(`
    ${w("pendingMsg")}
    `);e.$body.prepend(t)}class et{constructor(e){h(this,"opts"),h(this,"$el"),h(this,"isLoading",!1),h(this,"msgRecTimer"),h(this,"msgRecTimerFunc"),h(this,"isConfirming",!1),h(this,"confirmRecTimer"),this.$el=P(''),this.opts="object"!=typeof e?{text:e}:e,this.$el.innerText=this.getText(),this.opts.adminOnly&&this.$el.setAttribute("atk-only-admin-show","")}get isMessaging(){return!!this.msgRecTimer}appendTo(e){return e.append(this.$el),this}getText(){return"string"==typeof this.opts.text?this.opts.text:this.opts.text()}setClick(e){this.$el.onclick=t=>{if(t.stopPropagation(),!this.isLoading){if(this.opts.confirm&&!this.isMessaging){const e=()=>{this.isConfirming=!1,this.$el.classList.remove("atk-btn-confirm"),this.$el.innerText=this.getText()};if(!this.isConfirming)return this.isConfirming=!0,this.$el.classList.add("atk-btn-confirm"),this.$el.innerText=this.opts.confirmText||w("actionConfirm"),void(this.confirmRecTimer=window.setTimeout((()=>e()),5e3));this.confirmRecTimer&&window.clearTimeout(this.confirmRecTimer),e()}if(this.msgRecTimer)return this.fireMsgRecTimer(),void this.clearMsgRecTimer();e()}}}updateText(e){e&&(this.opts.text=e),this.setLoading(!1),this.$el.innerText=this.getText()}setLoading(e,t){this.isLoading!==e&&(this.isLoading=e,e?(this.$el.classList.add("atk-btn-loading"),this.$el.innerText=t||`${w("loading")}...`):(this.$el.classList.remove("atk-btn-loading"),this.$el.innerText=this.getText()))}setError(e){this.setMsg(e,"atk-btn-error")}setWarn(e){this.setMsg(e,"atk-btn-warn")}setSuccess(e){this.setMsg(e,"atk-btn-success")}setMsg(e,t,n,s){this.setLoading(!1),t&&this.$el.classList.add(t),this.$el.innerText=e,this.setMsgRecTimer((()=>{this.$el.innerText=this.getText(),t&&this.$el.classList.remove(t),s&&s()}),n||2500)}setMsgRecTimer(e,t){this.fireMsgRecTimer(),this.clearMsgRecTimer(),this.msgRecTimerFunc=e,this.msgRecTimer=window.setTimeout((()=>{e(),this.clearMsgRecTimer()}),t)}fireMsgRecTimer(){this.msgRecTimerFunc&&this.msgRecTimerFunc()}clearMsgRecTimer(){this.msgRecTimer&&window.clearTimeout(this.msgRecTimer),this.msgRecTimer=void 0,this.msgRecTimerFunc=void 0}}function sc(e){Object.entries({renderVote:ic,renderReply:oc,renderCollapse:rc,renderModerator:ac,renderPin:lc,renderEdit:cc,renderDel:dc}).forEach((([t,n])=>{n(e)}))}function ic(e){e.opts.vote&&(e.voteBtnUp=new et((()=>`${w("voteUp")} (${e.data.vote_up||0})`)).appendTo(e.$actions),e.voteBtnUp.setClick((()=>{e.comment.getActions().vote("up")})),e.opts.voteDown&&(e.voteBtnDown=new et((()=>`${w("voteDown")} (${e.data.vote_down||0})`)).appendTo(e.$actions),e.voteBtnDown.setClick((()=>{e.comment.getActions().vote("down")}))))}function oc(e){if(!e.data.is_allow_reply)return;const t=P(`${w("reply")}`);e.$actions.append(t),t.addEventListener("click",(t=>{t.stopPropagation(),e.opts.replyComment(e.data,e.$el)}))}function rc(e){const t=new et({text:()=>e.data.is_collapsed?w("expand"):w("collapse"),adminOnly:!0});t.appendTo(e.$actions),t.setClick((()=>{e.comment.getActions().adminEdit("collapsed",t)}))}function ac(e){const t=new et({text:()=>e.data.is_pending?w("pending"):w("approved"),adminOnly:!0});t.appendTo(e.$actions),t.setClick((()=>{e.comment.getActions().adminEdit("pending",t)}))}function lc(e){const t=new et({text:()=>e.data.is_pinned?w("unpin"):w("pin"),adminOnly:!0});t.appendTo(e.$actions),t.setClick((()=>{e.comment.getActions().adminEdit("pinned",t)}))}function cc(e){const t=new et({text:w("edit"),adminOnly:!0});t.appendTo(e.$actions),t.setClick((()=>{e.opts.editComment(e.data,e.$el)}))}function dc(e){const t=new et({text:w("delete"),confirm:!0,confirmText:w("deleteConfirm"),adminOnly:!0});t.appendTo(e.$actions),t.setClick((()=>{e.comment.getActions().adminDelete(t)}))}const hc={Avatar:Gl,Header:Kl,Content:Jl,ReplyAt:ec,ReplyTo:tc,Pending:nc,Actions:sc};function uc(e){Object.entries(hc).forEach((([t,n])=>{n(e)}))}class pc{constructor(e){h(this,"comment"),h(this,"$el"),h(this,"$main"),h(this,"$header"),h(this,"$headerNick"),h(this,"$headerBadgeWrap"),h(this,"$body"),h(this,"$content"),h(this,"$childrenWrap"),h(this,"$actions"),h(this,"voteBtnUp"),h(this,"voteBtnDown"),h(this,"$replyTo"),h(this,"$replyAt"),this.comment=e}get data(){return this.comment.getData()}get opts(){return this.comment.getOpts()}render(){return this.$el=P(Vl),this.$main=this.$el.querySelector(".atk-main"),this.$header=this.$el.querySelector(".atk-header"),this.$body=this.$el.querySelector(".atk-body"),this.$content=this.$body.querySelector(".atk-content"),this.$actions=this.$el.querySelector(".atk-actions"),this.$el.setAttribute("id",`atk-comment-${this.data.id}`),uc(this),this.$childrenWrap&&this.$main.append(this.$childrenWrap),this.$el}checkHeightLimit(){const e=this.opts.heightLimit;if(!e||!e.content||!e.children)return;const t=e.content,n=e.children;Nl({afterExpandBtnClick:()=>{const e=this.comment.getChildren();1===e.length&&Nn(e[0].getRender().$content)},scrollable:e.scrollable},[{el:this.$content,max:t,imgCheck:!0},{el:this.$replyTo,max:t,imgCheck:!0},{el:this.$childrenWrap,max:n,imgCheck:!1}])}heightLimitRemoveForChildren(){this.$childrenWrap&&Nn(this.$childrenWrap)}playFadeAnim(){Hn(this.comment.getRender().$el)}playFadeAnimForBody(){Hn(this.comment.getRender().$body)}playFlashAnim(){this.$el.classList.remove("atk-flash-once"),window.setTimeout((()=>{this.$el.classList.add("atk-flash-once")}),150)}getChildrenWrap(){return this.$childrenWrap||(this.$childrenWrap=P('
    '),this.$main.append(this.$childrenWrap)),this.$childrenWrap}setUnread(e){e?this.$el.classList.add("atk-unread"):this.$el.classList.remove("atk-unread")}setOpenable(e){e?this.$el.classList.add("atk-openable"):this.$el.classList.remove("atk-openable")}setOpenURL(e){this.setOpenable(!0),this.$el.onclick=t=>{t.stopPropagation(),window.open(e)}}setOpenAction(e){this.setOpenable(!0),this.$el.onclick=t=>{t.stopPropagation(),e()}}}class fc{constructor(e){h(this,"comment"),this.comment=e}get data(){return this.comment.getData()}get opts(){return this.comment.getOpts()}getApi(){return this.comment.getOpts().getApi()}vote(e){const t="up"===e?this.comment.getRender().voteBtnUp:this.comment.getRender().voteBtnDown;this.getApi().votes.vote(`comment_${e}`,this.data.id,y({},this.getApi().getUserFields())).then((e=>{var t,n;this.data.vote_up=e.data.up,this.data.vote_down=e.data.down,null==(t=this.comment.getRender().voteBtnUp)||t.updateText(),null==(n=this.comment.getRender().voteBtnDown)||n.updateText()})).catch((e=>{t?.setError(w("voteFail")),console.error(e)}))}adminEdit(e,t){if(t.isLoading)return;t.setLoading(!0,`${w("editing")}...`);const n=y({},this.data);"collapsed"===e?n.is_collapsed=!n.is_collapsed:"pending"===e?n.is_pending=!n.is_pending:"pinned"===e&&(n.is_pinned=!n.is_pinned),this.getApi().comments.updateComment(this.data.id,y({},n)).then((e=>{t.setLoading(!1),this.comment.setData(e.data)})).catch((e=>{console.error(e),t.setError(w("editFail"))}))}adminDelete(e){e.isLoading||(e.setLoading(!0,`${w("deleting")}...`),this.getApi().comments.deleteComment(this.data.id).then((()=>{e.setLoading(!1),this.opts.onDelete&&this.opts.onDelete(this.comment)})).catch((t=>{console.error(t),e.setError(w("deleteFail"))})))}goToReplyComment(){const e=window.location.hash,t=`#atk-comment-${this.data.rid}`;window.location.hash=t,t===e&&window.dispatchEvent(new Event("hashchange"))}}class mc{constructor(e,t){h(this,"$el"),h(this,"renderInstance"),h(this,"actionInstance"),h(this,"data"),h(this,"opts"),h(this,"parent"),h(this,"children",[]),h(this,"nestCurt"),this.opts=t,this.data=y({},e),this.data.date=this.data.date.replace(/-/g,"/"),this.parent=null,this.nestCurt=1,this.actionInstance=new fc(this),this.renderInstance=new pc(this)}render(){const e=this.renderInstance.render();this.$el&&this.$el.replaceWith(e),this.$el=e,this.opts.onAfterRender&&this.opts.onAfterRender()}getActions(){return this.actionInstance}getRender(){return this.renderInstance}getData(){return this.data}setData(e){this.data=e,this.render(),this.getRender().playFadeAnimForBody()}getParent(){return this.parent}getChildren(){return this.children}getNestCurt(){return this.nestCurt}getIsRoot(){return 0===this.data.rid}getID(){return this.data.id}putChild(e,t="append"){e.parent=this,e.nestCurt=this.nestCurt+1,this.children.push(e);const n=this.getChildrenWrapEl(),s=e.getEl();"append"===t?n.append(s):"prepend"===t&&n.prepend(s),e.getRender().playFadeAnim(),e.getRender().checkHeightLimit()}getChildrenWrapEl(){return this.nestCurt>=this.opts.nestMax?this.parent.getChildrenWrapEl():this.getRender().getChildrenWrap()}getParents(){const e=[];let t=this.parent;for(;t;)e.push(t),t=t.getParent();return e}getEl(){if(!this.$el)throw new Error("comment element not initialized before `getEl()`");return this.$el}focus(){if(!this.$el)throw new Error("comment element not initialized before `focus()`");this.getParents().forEach((e=>{e.getRender().heightLimitRemoveForChildren()})),this.scrollIntoView(),this.getRender().playFlashAnim()}scrollIntoView(){this.$el&&ao(this.$el,!1,this.opts.scrollRelativeTo&&this.opts.scrollRelativeTo())}remove(){var e;null==(e=this.$el)||e.remove()}getGravatarURL(){return hl({mirror:this.opts.gravatar.mirror,params:this.opts.gravatar.params,emailHash:this.data.email_encrypted})}getContentMarked(){return fs(this.data.content)}getDateFormatted(){var e,t;const n=new Date(this.data.date);return(null==(t=(e=this.opts).dateFormatter)?void 0:t.call(e,n))||so(n,w)}getUserUA(){const e=Hl(this.data.ua);return{browser:`${e.browser} ${e.version}`,os:`${e.os} ${e.osVersion}`}}getOpts(){return this.opts}}function gc(e,t,n,s){const i=new mc(t,{onAfterRender:()=>{e.trigger("comment-rendered",i)},onDelete:t=>{e.getData().deleteComment(t.getID())},replyTo:n,flatMode:"boolean"==typeof s?.forceFlatMode?s?.forceFlatMode:e.conf.flatMode,gravatar:e.conf.gravatar,nestMax:e.conf.nestMax,heightLimit:e.conf.heightLimit,avatarURLBuilder:e.conf.avatarURLBuilder,scrollRelativeTo:e.conf.scrollRelativeTo,vote:e.conf.vote,voteDown:e.conf.voteDown,uaBadge:e.conf.uaBadge,dateFormatter:e.conf.dateFormatter,getApi:()=>e.getApi(),replyComment:(t,n)=>e.replyComment(t,n),editComment:(t,n)=>e.editComment(t,n)});return i.render(),i}class yc{constructor(e){h(this,"opts"),h(this,"$el"),h(this,"$loading"),h(this,"$text"),h(this,"offset",0),h(this,"total",0),h(this,"origText","Load More"),this.opts=e,this.origText=this.opts.text||this.origText,this.$el=P(``),this.$loading=this.$el.querySelector(".atk-loading-icon"),this.$text=this.$el.querySelector(".atk-text"),this.$el.onclick=()=>{this.click()}}get hasMore(){return this.total>this.offset+this.opts.pageSize}click(){this.hasMore&&this.opts.onClick(this.offset+this.opts.pageSize),this.checkDisabled()}show(){this.$el.style.display=""}hide(){this.$el.style.display="none"}setLoading(e){this.$loading.style.display=e?"":"none",this.$text.style.display=e?"none":""}showErr(e){this.setLoading(!1),this.$text.innerText=e,this.$el.classList.add("atk-err"),window.setTimeout((()=>{this.$text.innerText=this.origText,this.$el.classList.remove("atk-err")}),2e3)}update(e,t){this.offset=e,this.total=t,this.checkDisabled()}checkDisabled(){this.hasMore?this.show():this.hide()}}class vc{constructor(){h(this,"instance"),h(this,"onReachedBottom",null),h(this,"opt")}create(e){return this.opt=e,this.instance=new yc({pageSize:e.pageSize,onClick:t=>G(this,null,(function*(){e.ctx.fetch({offset:t})})),text:w("loadMore")}),e.readMoreAutoLoad&&(this.onReachedBottom=()=>{!this.instance.hasMore||this.opt.ctx.getData().getLoading()||this.instance.click()},this.opt.ctx.on("list-reach-bottom",this.onReachedBottom)),this.instance.$el}setLoading(e){this.instance.setLoading(e)}update(e,t){this.instance.update(e,t)}showErr(e){this.instance.showErr(e)}next(){this.instance.click()}getHasMore(){return this.instance.hasMore}getIsClearComments(e){return 0===e.offset}dispose(){this.onReachedBottom&&this.opt.ctx.off("list-reach-bottom",this.onReachedBottom),this.instance.$el.remove()}}class kc{constructor(e,t){h(this,"opts"),h(this,"total"),h(this,"$el"),h(this,"$input"),h(this,"inputTimer"),h(this,"$prevBtn"),h(this,"$nextBtn"),h(this,"page",1),this.total=e,this.opts=t,this.$el=P('
    \n
    \n
    \n \n
    \n \n
    \n \n
    \n
    \n
    '),this.$input=this.$el.querySelector(".atk-input"),this.$input.value=`${this.page}`,this.$input.oninput=()=>this.input(),this.$input.onkeydown=e=>this.keydown(e),this.$prevBtn=this.$el.querySelector(".atk-btn-prev"),this.$nextBtn=this.$el.querySelector(".atk-btn-next"),this.$prevBtn.onclick=()=>this.prev(),this.$nextBtn.onclick=()=>this.next(),this.checkDisabled()}get pageSize(){return this.opts.pageSize}get offset(){return this.pageSize*(this.page-1)}get maxPage(){return Math.ceil(this.total/this.pageSize)}update(e,t){this.page=Math.ceil(e/this.pageSize)+1,this.total=t,this.setInput(this.page),this.checkDisabled()}setInput(e){this.$input.value=`${e}`}input(e=!1){window.clearTimeout(this.inputTimer);const t=this.$input.value.trim(),n=()=>{if(""===t)return void this.setInput(this.page);let e=Number(t);Number.isNaN(e)||e<1?this.setInput(this.page):(e>this.maxPage&&(this.setInput(this.maxPage),e=this.maxPage),this.change(e))};e?n():this.inputTimer=window.setTimeout((()=>n()),800)}prev(){const e=this.page-1;e<1||this.change(e)}next(){const e=this.page+1;e>this.maxPage||this.change(e)}getHasMore(){return this.page+1<=this.maxPage}change(e){this.page=e,this.opts.onChange(this.offset),this.setInput(e),this.checkDisabled()}checkDisabled(){this.page+1>this.maxPage?this.$nextBtn.classList.add("atk-disabled"):this.$nextBtn.classList.remove("atk-disabled"),this.page-1<1?this.$prevBtn.classList.add("atk-disabled"):this.$prevBtn.classList.remove("atk-disabled")}keydown(e){const t=e.keyCode||e.which;if(38===t){const e=Number(this.$input.value)+1;if(e>this.maxPage)return;this.setInput(e),this.input()}else if(40===t){const e=Number(this.$input.value)-1;if(e<1)return;this.setInput(e),this.input()}else 13===t&&this.input(!0)}setLoading(e){e?dt(this.$el):je(this.$el)}}class wc{constructor(){h(this,"instance")}create(e){return this.instance=new kc(e.total,{pageSize:e.pageSize,onChange:t=>G(this,null,(function*(){e.ctx.editorResetState(),e.ctx.fetch({offset:t,onSuccess:()=>{e.ctx.listGotoFirst()}})}))}),this.instance.$el}setLoading(e){this.instance.setLoading(e)}update(e,t){this.instance.update(e,t)}next(){this.instance.next()}getHasMore(){return this.instance.getHasMore()}getIsClearComments(){return!0}dispose(){this.instance.$el.remove()}}function bc(e){return e.pagination.readMore?new vc:new wc}function Ys(e){const t=e.getData().getListLastFetch(),n={offset:0,total:0};return t&&(n.offset=t.params.offset,t.data&&(n.total=t.params.flatMode?t.data.count:t.data.roots_count)),n}const $c=e=>{let t=null;e.watchConf(["pagination","locale"],(n=>{const s=e.get("list");t&&t.dispose(),t=bc(n);const{offset:i,total:o}=Ys(e),r=t.create({ctx:e,pageSize:n.pagination.pageSize,total:o,readMoreAutoLoad:n.pagination.autoLoad});s.$commentsWrap.after(r),t?.update(i,o)})),e.on("list-loaded",(n=>{const{offset:s,total:i}=Ys(e);t?.update(s,i)})),e.on("list-fetch",(n=>{e.getData().getComments().length>0&&t?.getIsClearComments(n)&&e.getData().clearComments()})),e.on("list-failed",(()=>{var e;null==(e=t?.showErr)||e.call(t,w("loadFail"))})),e.on("list-fetch",(e=>{t?.setLoading(!0)})),e.on("list-fetched",(({params:e})=>{t?.setLoading(!1)}))};class xc extends vs{constructor(e){super(e),h(this,"$commentsWrap"),h(this,"commentNodes",[]),this.$el=P(Bl),this.$commentsWrap=this.$el.querySelector(".atk-list-comments-wrap"),$c(e),this.initCrudEvents()}getCommentsWrapEl(){return this.$commentsWrap}getCommentNodes(){return this.commentNodes}getListLayout({forceFlatMode:e}={}){return new zl({$commentsWrap:this.$commentsWrap,nestSortBy:this.ctx.conf.nestSort,nestMax:this.ctx.conf.nestMax,flatMode:"boolean"==typeof e?e:this.ctx.conf.flatMode,createCommentNode:(t,n)=>{const s=gc(this.ctx,t,n,{forceFlatMode:e});return this.commentNodes.push(s),s},findCommentNode:e=>this.commentNodes.find((t=>t.getID()===e))})}initCrudEvents(){this.ctx.on("list-load",(e=>{this.getListLayout().import(e)})),this.ctx.on("list-loaded",(e=>{0===e.length&&(this.commentNodes=[],this.$commentsWrap.innerHTML="")})),this.ctx.on("comment-inserted",(e=>{var t;const n=e.rid?null==(t=this.commentNodes.find((t=>t.getID()===e.rid)))?void 0:t.getData():void 0;this.getListLayout().insert(e,n)})),this.ctx.on("comment-deleted",(e=>{const t=this.commentNodes.find((t=>t.getID()===e.id));t?(t.remove(),this.commentNodes=this.commentNodes.filter((t=>t.getID()!==e.id))):console.error(`comment node id=${e.id} not found`)})),this.ctx.on("comment-updated",(e=>{const t=this.commentNodes.find((t=>t.getID()===e.id));t&&t.setData(e)}))}}let Xs,Js;function jn(){return{init(){Xs=document.body.style.overflow,Js=document.body.style.paddingRight},unlock(){document.body.style.overflow=Xs,document.body.style.paddingRight=Js},lock(){document.body.style.overflow="hidden";const e=parseInt(window.getComputedStyle(document.body,null).getPropertyValue("padding-right"),10);document.body.style.paddingRight=`${xl()+e||0}px`}}}class Cc{constructor(e,t){h(this,"allowMaskClose",!0),h(this,"onAfterHide"),this.$el=e,this.opts=t}setOnAfterHide(e){this.onAfterHide=e}setAllowMaskClose(e){this.allowMaskClose=e}getAllowMaskClose(){return this.allowMaskClose}getEl(){return this.$el}show(){this.opts.onShow(),this.$el.style.display=""}hide(){this.opts.onHide(),this.$el.style.display="none",this.onAfterHide&&this.onAfterHide()}destroy(){this.opts.onHide(),this.$el.remove(),this.onAfterHide&&this.onAfterHide()}}class Sc{constructor(){h(this,"$wrap"),h(this,"$mask"),h(this,"items",[]),this.$wrap=P(''),this.$mask=this.$wrap.querySelector(".atk-layer-mask")}createItem(e,t){(t=t||this.createItemElement(e)).setAttribute("data-layer-name",e),this.$wrap.appendChild(t);const n=new Cc(t,{onHide:()=>this.hideWrap(t),onShow:()=>this.showWrap()});return this.getMask().addEventListener("click",(()=>{n.getAllowMaskClose()&&n.hide()})),this.items.push(n),n}createItemElement(e){const t=document.createElement("div");return t.classList.add("atk-layer-item"),t.style.display="none",this.$wrap.appendChild(t),t}getWrap(){return this.$wrap}getMask(){return this.$mask}showWrap(){this.$wrap.style.display="block",this.$mask.style.display="block",this.$mask.classList.add("atk-fade-in"),jn().lock()}hideWrap(e){this.items.map((e=>e.getEl())).filter((t=>t!==e&&t.isConnected&&"none"!==t.style.display)).length>0||(this.$wrap.style.display="none",jn().unlock())}}class Ec{constructor(e){h(this,"wrap"),this.wrap=new Sc,document.body.appendChild(this.wrap.getWrap()),e.on("unmounted",(()=>{this.wrap.getWrap().remove()})),jn().init()}getEl(){return this.wrap.getWrap()}create(e,t){return this.wrap.createItem(e,t)}}const ei="ArtalkUser";class Tc{constructor(e){h(this,"data"),this.opts=e;const t=JSON.parse(window.localStorage.getItem(ei)||"{}");this.data={name:t.name||t.nick||"",email:t.email||"",link:t.link||"",token:t.token||"",is_admin:t.is_admin||t.isAdmin||!1}}getData(){return this.data}update(e={}){Object.entries(e).forEach((([e,t])=>{this.data[e]=t})),window.localStorage.setItem(ei,JSON.stringify(this.data)),this.opts.onUserChanged&&this.opts.onUserChanged(this.data)}logout(){this.update({token:"",is_admin:!1})}checkHasBasicUserInfo(){return!!this.data.name&&!!this.data.email}}const Lc={i18n(e){Vs(e.conf.locale),e.watchConf(["locale"],(e=>{Vs(e.locale)}))},user:e=>new Tc({onUserChanged:t=>{e.trigger("user-changed",t)}}),layerManager:e=>new Ec(e),checkerLauncher:e=>new Al({getCtx:()=>e,getApi:()=>e.getApi(),onReload:()=>e.reload(),getCaptchaIframeURL:()=>`${e.conf.server}/api/v2/captcha/?t=${+new Date}`}),editor(e){const t=new Ol(e);return e.$root.appendChild(t.$el),t},list(e){const t=new xc(e);return e.$root.appendChild(t.$el),t},sidebarLayer:e=>new Dl(e),editorPlugs(){}},Ac=e=>{e.watchConf(["site","pageKey","pageTitle","countEl","pvEl","statPageKeyAttr"],(t=>{lo({getApi:()=>e.getApi(),siteName:t.site,pageKey:t.pageKey,pageTitle:t.pageTitle,countEl:t.countEl,pvEl:t.pvEl,pageKeyAttr:t.statPageKeyAttr,pvAdd:"boolean"!=typeof e.conf.pvAdd||e.conf.pvAdd})}))};function lo(e){return G(this,null,(function*(){yield Pc(e);const t=yield _c(e);yield Ic(e,t)}))}function _c(e){return G(this,null,(function*(){if(!e.pvAdd||!e.pageKey)return;const t=(yield e.getApi().pages.logPv({page_key:e.pageKey,page_title:e.pageTitle,site_name:e.siteName})).data.pv;return{[e.pageKey]:t}}))}function Pc(e){return G(this,null,(function*(){yield co({opt:e,query:"page_comment",containers:[e.countEl,"#ArtalkCount"]})}))}function Ic(e,t){return G(this,null,(function*(){yield co({opt:e,query:"page_pv",containers:[e.pvEl,"#ArtalkPV"],cache:t})}))}function co(e){return G(this,null,(function*(){const{opt:t}=e;let n=e.cache||{};const s=Mc(e.containers),i=Oc(s,t.pageKeyAttr,t.pageKey,n);if(i.length>0){const s=(yield t.getApi().stats.getStats(e.query,{page_keys:i.join(","),site_name:t.siteName})).data.data;n=y(y({},n),s)}Rc(s,n,t.pageKey)}))}function Mc(e){const t=new Set;return new Set(e).forEach((e=>{document.querySelectorAll(e).forEach((e=>t.add(e)))})),t}function Oc(e,t,n,s){const i=Array.from(e).map((e=>e.getAttribute(t)||n)).filter((e=>e&&"number"!=typeof s[e]));return[...new Set(i)]}function Rc(e,t,n){e.forEach((e=>{const s=e.getAttribute("data-page-key"),i=s&&t[s]||n&&t[n]||0;e.innerText=`${Number(i)}`}))}const Dc=e=>{e.watchConf(["imgLazyLoad","markedOptions"],(t=>{ol({markedOptions:e.getConf().markedOptions,imgLazyLoad:e.getConf().imgLazyLoad})})),e.watchConf(["markedReplacers"],(e=>{e.markedReplacers&&il(e.markedReplacers)}))},ti="ArtalkContent";class Bc extends we{constructor(e){super(e);const t=()=>{this.save()};this.kit.useMounted((()=>{const e=window.localStorage.getItem(ti)||"";""!==e.trim()&&(this.kit.useEditor().showNotify(w("restoredMsg"),"i"),this.kit.useEditor().setContent(e)),this.kit.useEvents().on("content-updated",t)})),this.kit.useUnmounted((()=>{this.kit.useEvents().off("content-updated",t)}))}save(){window.localStorage.setItem(ti,this.kit.useEditor().getContentRaw().trim())}}class qc extends we{constructor(e){super(e);const t=e=>this.onKeydown(e),n=()=>this.onInput();this.kit.useMounted((()=>{this.kit.useUI().$textarea.placeholder=this.kit.useConf().placeholder||w("placeholder"),this.kit.useUI().$textarea.addEventListener("keydown",t),this.kit.useUI().$textarea.addEventListener("input",n)})),this.kit.useUnmounted((()=>{this.kit.useUI().$textarea.removeEventListener("keydown",t),this.kit.useUI().$textarea.removeEventListener("input",n)})),this.kit.useEvents().on("content-updated",(()=>{window.setTimeout((()=>{this.adaptiveHeightByContent()}),80)}))}onKeydown(e){9===(e.keyCode||e.which)&&(e.preventDefault(),this.kit.useEditor().insertContent("\t"))}onInput(){this.kit.useEvents().trigger("content-updated",this.kit.useEditor().getContentRaw())}adaptiveHeightByContent(){const e=this.kit.useUI().$textarea.offsetHeight-this.kit.useUI().$textarea.clientHeight;this.kit.useUI().$textarea.style.height="0px",this.kit.useUI().$textarea.style.height=`${this.kit.useUI().$textarea.scrollHeight+e}px`}}class Uc extends we{constructor(e){super(e);const t=()=>{this.kit.useEditor().submit()};this.kit.useMounted((()=>{this.kit.useUI().$submitBtn.innerText=this.kit.useConf().sendBtn||w("send"),this.kit.useUI().$submitBtn.addEventListener("click",t)})),this.kit.useUnmounted((()=>{this.kit.useUI().$submitBtn.removeEventListener("click",t)}))}}class ho{constructor(e){this.kit=e}reqAdd(){return G(this,null,(function*(){return(yield this.kit.useApi().comments.createComment(y({},yield this.getSubmitAddParams()))).data}))}getSubmitAddParams(){return G(this,null,(function*(){const{name:e,email:t,link:n}=this.kit.useUser().getData(),s=this.kit.useConf();return{content:this.kit.useEditor().getContentFinal(),name:e,email:t,link:n,rid:0,page_key:s.pageKey,page_title:s.pageTitle,site_name:s.site,ua:yield pl()}}))}postSubmitAdd(e){this.kit.useGlobalCtx().getData().insertComment(e)}}class ks extends we{constructor(e){super(e),h(this,"customs",[]),h(this,"defaultPreset"),this.defaultPreset=new ho(this.kit);const t=()=>this.do();this.kit.useMounted((()=>{this.kit.useGlobalCtx().on("editor-submit",t)})),this.kit.useUnmounted((()=>{this.kit.useGlobalCtx().off("editor-submit",t)}))}registerCustom(e){this.customs.push(e)}do(){return G(this,null,(function*(){if(""===this.kit.useEditor().getContentFinal().trim())return void this.kit.useEditor().focus();const e=this.customs.find((e=>e.activeCond()));this.kit.useEditor().showLoading();try{let t;e?.pre&&e.pre(),t=e?.req?yield e.req():yield this.defaultPreset.reqAdd(),e?.post?e.post(t):this.defaultPreset.postSubmitAdd(t)}catch(e){return console.error(e),void this.kit.useEditor().showNotify(`${w("commentFail")}: ${e.message||String(e)}`,"e")}finally{this.kit.useEditor().hideLoading()}this.kit.useEditor().reset(),this.kit.useGlobalCtx().trigger("editor-submitted")}))}}class Fc extends we{constructor(e){super(e),h(this,"comment"),this.useEditorStateEffect("reply",(e=>(this.setReply(e),()=>{this.cancelReply()}))),this.kit.useEvents().on("mounted",(()=>{const e=this.kit.useDeps(ks);if(!e)throw Error("SubmitPlug not initialized");const t=new ho(this.kit);e.registerCustom({activeCond:()=>!!this.comment,req:()=>G(this,null,(function*(){if(!this.comment)throw new Error("reply comment cannot be empty");return(yield this.kit.useApi().comments.createComment(Fe(y({},yield t.getSubmitAddParams()),{rid:this.comment.id,page_key:this.comment.page_key,page_title:void 0,site_name:this.comment.site_name}))).data})),post:e=>{const n=this.kit.useConf();e.page_key!==n.pageKey&&window.open(`${e.page_url}#atk-comment-${e.id}`),t.postSubmitAdd(e)}})}))}setReply(e){const t=this.kit.useUI();if(!t.$sendReplyBtn){const n=P(`${w("reply")} `);n.querySelector(".atk-text").innerText=`@${e.nick}`,n.addEventListener("click",(()=>{this.kit.useEditor().resetState()})),t.$stateWrap.append(n),t.$sendReplyBtn=n}this.comment=e,t.$textarea.focus()}cancelReply(){if(!this.comment)return;const e=this.kit.useUI();e.$sendReplyBtn&&(e.$sendReplyBtn.remove(),e.$sendReplyBtn=void 0),this.comment=void 0}}class zc extends we{constructor(e){super(e),h(this,"comment"),h(this,"originalSubmitBtnText","Send"),this.useEditorStateEffect("edit",(e=>(this.edit(e),()=>{this.cancelEdit()}))),this.kit.useMounted((()=>{const e=this.kit.useDeps(ks);if(!e)throw Error("SubmitPlug not initialized");e.registerCustom({activeCond:()=>!!this.comment,req:()=>G(this,null,(function*(){const e={content:this.kit.useEditor().getContentFinal(),nick:this.kit.useUI().$name.value,email:this.kit.useUI().$email.value,link:this.kit.useUI().$link.value},t=this.comment;return(yield this.kit.useApi().comments.updateComment(t.id,y(y({},t),e))).data})),post:e=>{this.kit.useGlobalCtx().getData().updateComment(e)}})}))}edit(e){const t=this.kit.useUI();if(!t.$editCancelBtn){const e=P(`${w("editCancel")}`);e.onclick=()=>{this.kit.useEditor().resetState()},t.$stateWrap.append(e),t.$editCancelBtn=e}this.comment=e,t.$header.style.display="none",t.$name.value=e.nick||"",t.$email.value=e.email||"",t.$link.value=e.link||"",this.kit.useEditor().setContent(e.content),t.$textarea.focus(),this.updateSubmitBtnText(w("save"))}cancelEdit(){if(!this.comment)return;const e=this.kit.useUI();e.$editCancelBtn&&(e.$editCancelBtn.remove(),e.$editCancelBtn=void 0),this.comment=void 0;const{name:t,email:n,link:s}=this.kit.useUser().getData();e.$name.value=t,e.$email.value=n,e.$link.value=s,this.kit.useEditor().setContent(""),this.restoreSubmitBtnText(),e.$header.style.display=""}updateSubmitBtnText(e){this.originalSubmitBtnText=this.kit.useUI().$submitBtn.innerText,this.kit.useUI().$submitBtn.innerText=e}restoreSubmitBtnText(){this.kit.useUI().$submitBtn.innerText=this.originalSubmitBtnText}}class Hc extends we{constructor(e){super(e);const t=()=>this.open(),n=()=>this.close();this.kit.useMounted((()=>{this.kit.useEvents().on("editor-open",t),this.kit.useEvents().on("editor-close",n)})),this.kit.useUnmounted((()=>{this.kit.useEvents().off("editor-open",t),this.kit.useEvents().off("editor-close",n)}))}open(){var e;null==(e=this.kit.useUI().$textareaWrap.querySelector(".atk-comment-closed"))||e.remove(),this.kit.useUI().$textarea.style.display="",this.kit.useUI().$bottom.style.display=""}close(){this.kit.useUI().$textareaWrap.querySelector(".atk-comment-closed")||this.kit.useUI().$textareaWrap.prepend(P(`
    ${w("onlyAdminCanReply")}
    `)),this.kit.useUser().getData().is_admin?(this.kit.useUI().$textarea.style.display="",this.kit.useUI().$bottom.style.display=""):(this.kit.useUI().$textarea.style.display="none",this.kit.useEvents().trigger("panel-close"),this.kit.useUI().$bottom.style.display="none")}}class Nc extends we{get $inputs(){return this.kit.useEditor().getHeaderInputEls()}constructor(e){super(e);const t={},n={},s=(e,t,n)=>()=>{this.kit.useEvents().trigger(e,{field:n,$input:t})};this.kit.useMounted((()=>{Object.entries(this.$inputs).forEach((([e,i])=>{i.addEventListener("input",t[e]=s("header-input",i,e)),i.addEventListener("change",n[e]=s("header-change",i,e))}))})),this.kit.useUnmounted((()=>{Object.entries(this.$inputs).forEach((([e,s])=>{s.removeEventListener("input",t[e]),s.removeEventListener("change",n[e])}))}))}}class jc extends we{constructor(e){super(e),h(this,"query",{timer:null,abortFn:null});const t=({$input:e,field:t})=>{"edit"!==this.kit.useEditor().getState()&&(this.kit.useUser().update({[t]:e.value.trim()}),("name"===t||"email"===t)&&this.fetchUserInfo())},n={name:w("nick"),email:w("email"),link:w("link")};this.kit.useMounted((()=>{Object.entries(this.kit.useEditor().getHeaderInputEls()).forEach((([e,t])=>{t.placeholder=n[e],t.value=this.kit.useUser().getData()[e]||""})),this.kit.useEvents().on("header-input",t)})),this.kit.useUnmounted((()=>{this.kit.useEvents().off("header-input",t)}))}fetchUserInfo(){this.kit.useUser().logout(),this.query.timer&&window.clearTimeout(this.query.timer),this.query.abortFn&&this.query.abortFn(),this.query.timer=window.setTimeout((()=>{this.query.timer=null;const e=this.kit.useApi(),t="getUserCancelToken";this.query.abortFn=()=>e.abortRequest(t),e.user.getUser(y({},e.getUserFields()),{cancelToken:t}).then((e=>this.onUserInfoFetched(e.data))).catch((e=>{})).finally((()=>{this.query.abortFn=null}))}),400)}onUserInfoFetched(e){var t;e.is_login||this.kit.useUser().logout(),this.kit.useGlobalCtx().getData().updateNotifies(e.notifies),this.kit.useUser().checkHasBasicUserInfo()&&!e.is_login&&null!=(t=e.user)&&t.is_admin&&this.kit.useGlobalCtx().checkAdmin({onSuccess:()=>{}}),e.user&&e.user.link&&(this.kit.useUI().$link.value=e.user.link,this.kit.useUser().update({link:e.user.link}))}}class Wc extends we{constructor(e){super(e);const t=({field:e})=>{"link"===e&&this.onLinkInputChange()};this.kit.useMounted((()=>{this.kit.useEvents().on("header-change",t)})),this.kit.useUnmounted((()=>{this.kit.useEvents().off("header-change",t)}))}onLinkInputChange(){const e=this.kit.useUI().$link.value.trim();e&&!/^(http|https):\/\//.test(e)&&(this.kit.useUI().$link.value=`https://${e}`,this.kit.useUser().update({link:this.kit.useUI().$link.value}))}}class uo extends we{constructor(e){super(e),h(this,"emoticons",[]),h(this,"loadingTask",null),h(this,"$grpWrap"),h(this,"$grpSwitcher"),h(this,"isListLoaded",!1),h(this,"isImgLoaded",!1),this.kit.useMounted((()=>{this.usePanel('
    '),this.useBtn(``)})),this.kit.useUnmounted((()=>{})),this.useContentTransformer((e=>this.transEmoticonImageText(e))),this.usePanelShow((()=>{G(this,null,(function*(){yield this.loadEmoticonsData(),this.isImgLoaded||(this.initEmoticonsList(),this.isImgLoaded=!0),setTimeout((()=>{this.changeListHeight()}),30)}))})),this.usePanelHide((()=>{this.$panel.parentElement.style.height=""})),window.setTimeout((()=>{this.loadEmoticonsData()}),1e3)}loadEmoticonsData(){return G(this,null,(function*(){if(!this.isListLoaded){if(null!==this.loadingTask)return void(yield this.loadingTask);this.loadingTask=G(this,null,(function*(){dt(this.$panel),this.emoticons=yield this.handleData(this.kit.useConf().emoticons),je(this.$panel),this.loadingTask=null,this.isListLoaded=!0})),yield this.loadingTask}}))}handleData(e){return G(this,null,(function*(){if(!Array.isArray(e)&&["object","string"].includes(typeof e)&&(e=[e]),!Array.isArray(e))return Qt(this.$panel,`[${w("emoticon")}] Data must be of Array/Object/String type`),je(this.$panel),[];const t=t=>{"object"==typeof t&&(t.name&&e.find((e=>e.name===t.name))||e.push(t))},n=e=>G(this,null,(function*(){yield Promise.all(e.map(((e,s)=>G(this,null,(function*(){if("object"!=typeof e||Array.isArray(e)){if(Array.isArray(e))yield n(e);else if("string"==typeof e){const s=yield this.remoteLoad(e);Array.isArray(s)?yield n(s):"object"==typeof s&&t(s)}}else t(e)})))))}));return yield n(e),e.forEach((e=>{this.isOwOFormat(e)?this.convertOwO(e).forEach((e=>{t(e)})):Array.isArray(e)&&e.forEach((e=>{t(e)}))})),e=e.filter((e=>"object"==typeof e&&!Array.isArray(e)&&!!e&&!!e.name)),this.solveNullKey(e),this.solveSameKey(e),e}))}remoteLoad(e){return G(this,null,(function*(){if(!e)return[];try{return yield(yield fetch(e)).json()}catch(e){return je(this.$panel),console.error("[Emoticons] Load Failed:",e),Qt(this.$panel,`[${w("emoticon")}] ${w("loadFail")}: ${String(e)}`),[]}}))}solveNullKey(e){e.forEach((e=>{e.items.forEach(((t,n)=>{t.key||(t.key=`${e.name} ${n+1}`)}))}))}solveSameKey(e){const t={};e.forEach((e=>{e.items.forEach((e=>{!e.key||""===String(e.key).trim()||(t[e.key]?t[e.key]++:t[e.key]=1,t[e.key]>1&&(e.key=`${e.key} ${t[e.key]}`))}))}))}isOwOFormat(e){try{return"object"==typeof e&&!!Object.values(e).length&&Array.isArray(Object.keys(Object.values(e)[0].container))&&Object.keys(Object.values(e)[0].container[0]).includes("icon")}catch{return!1}}convertOwO(e){const t=[];return Object.entries(e).forEach((([e,n])=>{const s={name:e,type:n.type,items:[]};n.container.forEach(((t,n)=>{const i=t.icon;if(/<(img|IMG)/.test(i)){const e=/src=["'](.*?)["']/.exec(i);e&&e.length>1&&(t.icon=e[1])}s.items.push({key:t.text||`${e} ${n+1}`,val:t.icon})})),t.push(s)})),t}initEmoticonsList(){this.$grpWrap=P('
    '),this.$panel.append(this.$grpWrap),this.emoticons.forEach(((e,t)=>{const n=P('');this.$grpWrap.append(n),n.setAttribute("data-index",String(t)),n.setAttribute("data-grp-name",e.name),n.setAttribute("data-type",e.type),e.items.forEach((t=>{const s=P('');if(n.append(s),t.key&&!new RegExp(`^(${e.name})?\\s?[0-9]+$`).test(t.key)&&s.setAttribute("title",t.key),"image"===e.type){const e=document.createElement("img");e.src=t.val,e.alt=t.key,s.append(e)}else s.innerText=t.val;s.onclick=()=>{"image"===e.type?this.kit.useEditor().insertContent(`:[${t.key}]`):this.kit.useEditor().insertContent(t.val||"")}}))})),this.emoticons.length>1&&(this.$grpSwitcher=P('
    '),this.$panel.append(this.$grpSwitcher),this.emoticons.forEach(((e,t)=>{const n=P("");n.innerText=e.name,n.setAttribute("data-index",String(t)),n.onclick=()=>this.openGrp(t),this.$grpSwitcher.append(n)}))),this.emoticons.length>0&&this.openGrp(0)}openGrp(e){var t,n,s;Array.from(this.$grpWrap.children).forEach((t=>{const n=t;n.getAttribute("data-index")!==String(e)?n.style.display="none":n.style.display=""})),null==(t=this.$grpSwitcher)||t.querySelectorAll("span.active").forEach((e=>e.classList.remove("active"))),null==(s=null==(n=this.$grpSwitcher)?void 0:n.querySelector(`span[data-index="${e}"]`))||s.classList.add("active"),this.changeListHeight()}changeListHeight(){}transEmoticonImageText(e){return!this.emoticons||!Array.isArray(this.emoticons)||this.emoticons.forEach((t=>{"image"===t.type&&Object.entries(t.items).forEach((([t,n])=>{e=e.split(`:[${n.key}]`).join(``)}))})),e}}const ni=["png","jpg","jpeg","gif","bmp","svg","webp"];class po extends we{constructor(e){super(e),h(this,"$imgUploadInput"),this.kit.useMounted((()=>this.init())),this.initDragImg()}init(){this.$imgUploadInput=document.createElement("input"),this.$imgUploadInput.type="file",this.$imgUploadInput.style.display="none",this.$imgUploadInput.accept=ni.map((e=>`.${e}`)).join(",");const e=this.useBtn(``);e.after(this.$imgUploadInput),e.onclick=()=>{const e=this.$imgUploadInput;e.onchange=()=>{G(this,null,(function*(){if(!e.files||0===e.files.length)return;const t=e.files[0];this.uploadImg(t)}))},e.click()},this.kit.useConf().imgUpload||this.$btn.setAttribute("atk-only-admin-show","")}initDragImg(){const e=e=>{if(e)for(let t=0;t{e.stopPropagation(),e.preventDefault()},n=t=>{var n;const s=null==(n=t.dataTransfer)?void 0:n.files;s?.length&&(t.preventDefault(),e(s))},s=t=>{var n;const s=null==(n=t.clipboardData)?void 0:n.files;s?.length&&(t.preventDefault(),e(s))};this.kit.useMounted((()=>{this.kit.useUI().$textarea.addEventListener("dragover",t),this.kit.useUI().$textarea.addEventListener("drop",n),this.kit.useUI().$textarea.addEventListener("paste",s)})),this.kit.useUnmounted((()=>{this.kit.useUI().$textarea.removeEventListener("dragover",t),this.kit.useUI().$textarea.removeEventListener("drop",n),this.kit.useUI().$textarea.removeEventListener("paste",s)}))}uploadImg(e){return G(this,null,(function*(){const t=/[^.]+$/.exec(e.name);if(!t||!ni.includes(String(t[0]).toLowerCase()))return;if(!this.kit.useUser().checkHasBasicUserInfo())return void this.kit.useEditor().showNotify(w("uploadLoginMsg"),"w");let n="\n";""===this.kit.useUI().$textarea.value.trim()&&(n="");const s=`${n}![](Uploading ${e.name}...)`;let i;this.kit.useEditor().insertContent(s);try{const t=this.kit.useConf().imgUploader;i=t?{public_url:yield t(e)}:(yield this.kit.useApi().upload.upload({file:e})).data}catch(e){console.error(e),this.kit.useEditor().showNotify(`${w("uploadFail")}: ${e.message}`,"e")}if(i&&i.public_url){let e=i.public_url;ys(e)||(e=io({base:this.kit.useConf().server,path:e})),this.kit.useEditor().setContent(this.kit.useUI().$textarea.value.replace(s,`${n}![](${e})`))}else this.kit.useEditor().setContent(this.kit.useUI().$textarea.value.replace(s,""))}))}}class fo extends we{constructor(e){super(e),h(this,"isPlugPanelShow",!1),this.kit.useMounted((()=>{this.usePanel('
    '),this.useBtn(``)})),this.kit.useUnmounted((()=>{})),this.kit.useEvents().on("content-updated",(e=>{this.isPlugPanelShow&&this.updateContent()})),this.usePanelShow((()=>{this.isPlugPanelShow=!0,this.updateContent()})),this.usePanelHide((()=>{this.isPlugPanelShow=!1}))}updateContent(){this.$panel.innerHTML=this.kit.useEditor().getContentMarked()}}const Vc=[Bc,Nc,jc,Wc,qc,ks,Uc,Yt,Fc,zc,Hc,uo,po,fo];function Gc(e){const t=new Map;return t.set(po,e.imgUpload),t.set(uo,e.emoticons),t.set(fo,e.preview),t.set(Yt,e.editorTravel),Vc.filter((e=>!t.has(e)||!!t.get(e)))}class Kc{constructor(e){this.plugs=e}useEditor(){return this.plugs.editor}useGlobalCtx(){return this.plugs.editor.ctx}useConf(){return this.plugs.editor.ctx.conf}useApi(){return this.plugs.editor.ctx.getApi()}useUser(){return this.plugs.editor.ctx.get("user")}useUI(){return this.plugs.editor.getUI()}useEvents(){return this.plugs.getEvents()}useMounted(e){this.useEvents().on("mounted",e)}useUnmounted(e){this.useEvents().on("unmounted",e)}useDeps(e){return this.plugs.get(e)}}const Zc=e=>{const t=e.get("editor"),n=new Qc(t);e.inject("editorPlugs",n)};class Qc{constructor(e){h(this,"plugs",[]),h(this,"openedPlug",null),h(this,"events",new Fn),this.editor=e;let t=!1;this.editor.ctx.watchConf(["imgUpload","emoticons","preview","editorTravel","locale"],(e=>{t&&this.getEvents().trigger("unmounted"),this.clear(),Gc(e).forEach((e=>{const t=new Kc(this);this.plugs.push(new e(t))})),this.getEvents().trigger("mounted"),t=!0,this.loadPluginUI()})),this.events.on("panel-close",(()=>this.closePlugPanel()))}getPlugs(){return this.plugs}getEvents(){return this.events}clear(){this.plugs=[],this.events=new Fn,this.openedPlug&&this.closePlugPanel()}loadPluginUI(){this.editor.getUI().$plugPanelWrap.innerHTML="",this.editor.getUI().$plugPanelWrap.style.display="none",this.editor.getUI().$plugBtnWrap.innerHTML="",this.plugs.forEach((e=>this.loadPluginItem(e)))}loadPluginItem(e){const t=e.$btn;if(!t)return;this.editor.getUI().$plugBtnWrap.appendChild(t),!t.onclick&&(t.onclick=()=>{this.editor.getUI().$plugBtnWrap.querySelectorAll(".active").forEach((e=>e.classList.remove("active"))),e!==this.openedPlug?(this.openPlugPanel(e),t.classList.add("active")):this.closePlugPanel()});const n=e.$panel;n&&(n.style.display="none",this.editor.getUI().$plugPanelWrap.appendChild(n))}get(e){return this.plugs.find((t=>t instanceof e))}openPlugPanel(e){this.plugs.forEach((t=>{const n=t.$panel;n&&(t===e?(n.style.display="",this.events.trigger("panel-show",e)):(n.style.display="none",this.events.trigger("panel-hide",e)))})),this.editor.getUI().$plugPanelWrap.style.display="",this.openedPlug=e}closePlugPanel(){this.openedPlug&&(this.editor.getUI().$plugPanelWrap.style.display="none",this.events.trigger("panel-hide",this.openedPlug),this.openedPlug=null)}getTransformedContent(e){let t=e;return this.plugs.forEach((e=>{e.contentTransformer&&(t=e.contentTransformer(t))})),t}}const Yc=e=>{let t;e.on("mounted",(()=>{t=e.get("list").$el.querySelector('[data-action="admin-close-comment"]'),t.addEventListener("click",(()=>{const t=e.getData().getPage();if(!t)throw new Error("Page data not found");t.admin_only=!t.admin_only,Xc(e,t)}))})),e.on("page-loaded",(n=>{var s,i;const o=e.get("editor");!0===n?.admin_only?(null==(s=o.getPlugs())||s.getEvents().trigger("editor-close"),t&&(t.innerText=w("openComment"))):(null==(i=o.getPlugs())||i.getEvents().trigger("editor-open"),t&&(t.innerText=w("closeComment")))})),e.on("list-loaded",(t=>{e.editorResetState()}))};function Xc(e,t){e.editorShowLoading(),e.getApi().pages.updatePage(t.id,t).then((({data:t})=>{e.getData().updatePage(t)})).catch((t=>{e.editorShowNotify(`${w("editFail")}: ${t.message||String(t)}`,"e")})).finally((()=>{e.editorHideLoading()}))}const Jc=e=>{e.on("comment-rendered",(t=>{if(!0===e.conf.listUnreadHighlight){const n=e.getData().getNotifies(),s=n.find((e=>e.comment_id===t.getID()));s?(t.getRender().setUnread(!0),t.getRender().setOpenAction((()=>{window.open(s.read_link),e.getData().updateNotifies(n.filter((e=>e.comment_id!==t.getID())))}))):t.getRender().setUnread(!1)}})),e.on("list-goto",(t=>{const n=no("atk_notify_key");n&&e.getApi().notifies.markNotifyRead(t,n).then((()=>{e.getData().updateNotifies(e.getData().getNotifies().filter((e=>e.comment_id!==t)))}))}))},ed=e=>{e.on("list-loaded",(()=>{(()=>{var t,n;const s=e.get("list").$el.querySelector(".atk-comment-count .atk-text");if(!s)return;const i=gs(w("counter",{count:`${Number(null==(n=null==(t=e.getData().getListLastFetch())?void 0:t.data)?void 0:n.count)||0}`}));s.innerHTML=i.replace(/(\d+)/,'$1')})()})),e.on("comment-inserted",(()=>{const t=e.getData().getListLastFetch();t?.data&&(t.data.count+=1)})),e.on("comment-deleted",(()=>{const t=e.getData().getListLastFetch();t?.data&&(t.data.count-=1)}))},td=e=>{let t=null;const n=()=>{if(!t)return;const n=e.get("user").getData();if(n.name&&n.email){t.classList.remove("atk-hide");const e=t.querySelector(".atk-text");e&&(e.innerText=n.is_admin?w("ctrlCenter"):w("msgCenter"))}else t.classList.add("atk-hide")};e.watchConf(["locale"],(s=>{t=e.get("list").$el.querySelector('[data-action="open-sidebar"]'),t&&(t.onclick=()=>{e.showSidebar()},n())})),e.on("user-changed",(e=>{n()}))},nd=e=>{let t=null;e.on("mounted",(()=>{t=e.get("list").$el.querySelector(".atk-unread-badge")})),e.on("notifies-updated",(e=>{(e=>{t&&(e>0?(t.innerText=`${Number(e||0)}`,t.style.display="block"):t.style.display="none")})(e.length||0)}))},sd=e=>{let t=0;const n=({locker:n})=>{const s=id();s&&(n&&t===s||(t=s,e.trigger("list-goto",s)))},s=()=>n({locker:!1}),i=()=>n({locker:!0});e.on("mounted",(()=>{window.addEventListener("hashchange",s),e.on("list-loaded",i)})),e.on("unmounted",(()=>{window.removeEventListener("hashchange",s),e.off("list-loaded",i)}))};function id(){const e=window.location.hash.match(/#atk-comment-([0-9]+)/);let t=e&&e[1]&&!Number.isNaN(parseFloat(e[1]))?parseFloat(e[1]):null;return t||(t=Number(no("atk_comment"))),t||null}const od=e=>{e.on("list-goto",(t=>G(void 0,null,(function*(){let n=e.getCommentNodes().find((e=>e.getID()===t));if(!n){const s=(yield e.getApi().comments.getComment(t)).data;e.get("list").getListLayout({forceFlatMode:!0}).insert(s.comment,s.reply_comment),n=e.getCommentNodes().find((e=>e.getID()===t))}n&&n.focus()}))))},mo="2.9.1",rd=e=>{e.on("mounted",(()=>{const t=e.get("list").$el.querySelector(".atk-copyright");t&&(t.innerHTML=`Powered By Artalk`)}))},ad=e=>{e.on("list-loaded",(t=>{const n=e.get("list"),s=t.length<=0;let i=n.getCommentsWrapEl().querySelector(".atk-list-no-comment");s?i||(i=P('
    '),i.innerHTML=Qi(n.ctx.conf.noComment||n.ctx.$t("noComment")),n.getCommentsWrapEl().appendChild(i)):i?.remove()}))},ld=e=>{const t=t=>{e.conf.listFetchParamsModifier=t,e.reload()};e.watchConf(["listSort","locale"],(n=>{const s=e.get("list").$el.querySelector(".atk-comment-count");s&&(n.listSort?(e=>{cd({$dropdownWrap:e,dropdownList:[[w("sortLatest"),()=>{t((e=>{e.sort_by="date_desc"}))}],[w("sortBest"),()=>{t((e=>{e.sort_by="vote"}))}],[w("sortOldest"),()=>{t((e=>{e.sort_by="date_asc"}))}],[w("sortAuthor"),()=>{t((e=>{e.view_only_admin=!0}))}]]})})(s):dd({$dropdownWrap:s}))}))};function cd(e){const{$dropdownWrap:t,dropdownList:n}=e;if(t.querySelector(".atk-dropdown"))return;t.classList.add("atk-dropdown-wrap"),t.append(P(''));let s=0;const i=P('
      ');n.forEach(((e,t)=>{const[n,o]=e,r=P('
    • '),a=r.querySelector("span");a.innerText=n,a.onclick=()=>{((e,t,n,o)=>{o(),s=e,i.querySelectorAll(".active").forEach((e=>{e.classList.remove("active")})),t.classList.add("active"),i.style.display="none",setTimeout((()=>{i.style.display=""}),80)})(t,r,0,o)},i.append(r),t===s&&r.classList.add("active")})),t.append(i)}function dd(e){var t,n;const{$dropdownWrap:s}=e;s.classList.remove("atk-dropdown-wrap"),null==(t=s.querySelector(".atk-arrow-down-icon"))||t.remove(),null==(n=s.querySelector(".atk-dropdown"))||n.remove()}const hd=e=>{let t=null;e.on("mounted",(()=>{t=window.setInterval((()=>{e.get("list").$el.querySelectorAll("[data-atk-comment-date]").forEach((t=>{var n,s;const i=new Date(Number(t.getAttribute("data-atk-comment-date")));t.innerText=(null==(s=(n=e.getConf()).dateFormatter)?void 0:s.call(n,i))||so(i,e.$t)}))}),3e4)})),e.on("unmounted",(()=>{t&&window.clearInterval(t)}))};function go(e){const t=P('

      ');if(t.querySelector(".error-message").innerText=`${w("listLoadFailMsg")}\n${e.errMsg}`,e.retryFn){const n=P(`${w("listRetry")}`);n.onclick=()=>e.retryFn&&e.retryFn(),t.appendChild(n)}if(e.onOpenSidebar){const n=P(` | ${w("openName",{name:w("ctrlCenter")})}`);t.appendChild(n),n.onclick=()=>e.onOpenSidebar&&e.onOpenSidebar()}Qt(e.$err,t)}const ud=e=>{e.on("list-fetch",(()=>{Qt(e.get("list").$el,null)})),e.on("list-failed",(t=>{go({$err:e.get("list").$el,errMsg:t.msg,errData:t.data,retryFn:()=>e.fetch({offset:0})})}))},pd=e=>{e.on("list-fetch",(t=>{const n=e.get("list");0===t.offset&&Gs(!0,n.$el)})),e.on("list-fetched",(()=>{Gs(!1,e.get("list").$el)}))},fd=e=>{e.on("list-fetch",(t=>{if(e.getData().getLoading())return;e.getData().setLoading(!0);const n=y({offset:0,limit:e.conf.pagination.pageSize,flatMode:e.conf.flatMode,paramsModifier:e.conf.listFetchParamsModifier},t);e.getData().setListLastFetch({params:n});const s={limit:n.limit,offset:n.offset,flat_mode:n.flatMode,page_key:e.getConf().pageKey,site_name:e.getConf().site};n.paramsModifier&&n.paramsModifier(s),e.getApi().comments.getComments(y(y({},s),e.getApi().getUserFields())).then((({data:t})=>{e.getData().setListLastFetch({params:n,data:t}),e.getData().loadComments(t.comments),e.getData().updatePage(t.page),n.onSuccess&&n.onSuccess(t),e.trigger("list-fetched",{params:n,data:t})})).catch((t=>{const s={msg:t.msg||String(t),data:t.data};throw n.onError&&n.onError(s),e.trigger("list-failed",s),e.trigger("list-fetched",{params:n,error:s}),t})).finally((()=>{e.getData().setLoading(!1)}))}))},md=e=>{let t=null;const n=()=>{t?.disconnect(),t=null};e.on("list-loaded",(()=>{n();const s=e.get("list").getCommentsWrapEl().childNodes,i=s.length>2?s[s.length-2]:null;if(i){if(!("IntersectionObserver"in window))return void console.warn("IntersectionObserver api not supported");(s=>{const i=e.conf.scrollRelativeTo&&e.conf.scrollRelativeTo()||null;t=new IntersectionObserver((([t])=>{t.isIntersecting&&(n(),e.trigger("list-reach-bottom"))}),{threshold:.9,root:i}),t.observe(s)})(i)}})),e.on("unmounted",(()=>{n()}))},gd=e=>{const t=()=>{const t=e.get("list"),n=e.conf.scrollRelativeTo&&e.conf.scrollRelativeTo();(n||window).scroll({top:cl(t.$el,n).top,left:0})};e.on("mounted",(()=>{e.on("list-goto-first",t)})),e.on("unmounted",(()=>{e.off("list-goto-first",t)}))},yd=[fd,pd,Jc,Yc,ed,td,nd,ld,sd,od,ad,rd,hd,ud,md,gd],vd=e=>{e.on("list-fetch",(t=>{if(0!==t.offset)return;const n=e.getApi().getUserFields();n&&e.getApi().notifies.getNotifies(n).then((t=>{e.getData().updateNotifies(t.data.notifies)}))}))};let yo=!1;const kd=e=>{e.watchConf(["apiVersion","versionCheck"],(t=>{const n=e.get("list");t.apiVersion&&t.versionCheck&&!yo&&wd(n,mo,t.apiVersion)}))};function wd(e,t,n){const s=ul(t,n);if(0===s)return;const i=P(`
      ${w("updateMsg",{name:w(s<0?"frontend":"backend")})} ${w("currentVersion")}: ${w("frontend")} ${t} / ${w("backend")} ${n}
      `),o=P(`${w("ignore")}`);o.onclick=()=>{i.remove(),yo=!0},i.append(o),e.$el.parentElement.prepend(i)}const bd=e=>{const t=()=>{xd(e.get("user").getData().is_admin,$d({$root:e.$root}))};e.on("list-loaded",(()=>{t()})),e.on("user-changed",(e=>{t()}))};function $d(e){const t=[];e.$root.querySelectorAll("[atk-only-admin-show]").forEach((e=>t.push(e)));const n=document.querySelector(".atk-sidebar");return n&&n.querySelectorAll("[atk-only-admin-show]").forEach((e=>t.push(e))),t}function xd(e,t){t.forEach((t=>{e?t.classList.remove("atk-hide"):t.classList.add("atk-hide")}))}let Ze;function En(e,t){const n="atk-dark-mode";e.forEach((e=>{t?e.classList.add(n):e.classList.remove(n)}))}const Cd=e=>{let t;const n=n=>{const s=[e.$root,e.get("layerManager").getEl()];Ze||(Ze=window.matchMedia("(prefers-color-scheme: dark)")),"auto"===n?(t||(t=e=>En(s,e.matches),Ze.addEventListener("change",t)),En(s,Ze.matches)):(t&&(Ze.removeEventListener("change",t),t=void 0),En(s,n))};e.watchConf(["darkMode"],(e=>n(e.darkMode))),e.on("created",(()=>n(e.conf.darkMode))),e.on("unmounted",(()=>{t&&Ze?.removeEventListener("change",t),t=void 0}))},Sd=[Dc,Zc,bd,...yd,vd,Ac,kd,Cd],vo=new Set([...Sd]),ko=new WeakMap;function wo(e){return G(this,null,(function*(){var t;const n=new Set,s=t=>{t.forEach((t=>{"function"==typeof t&&!n.has(t)&&(t(e,ko.get(t)),n.add(t))}))};s(vo);const{data:i}=yield e.getApi().conf.conf().catch((t=>{throw Td(e,t),t}));let o={apiVersion:null==(t=i.version)?void 0:t.version};if(e.conf.useBackendConf){if(!i.frontend_conf)throw new Error("The remote backend does not respond to the frontend conf, but `useBackendConf` conf is enabled");o=y(y({},o),yl(i.frontend_conf))}e.conf.remoteConfModifier&&e.conf.remoteConfModifier(o),o.pluginURLs&&(yield Ed(o.pluginURLs,e.conf.server).then((e=>{s(e)})).catch((e=>{console.error("Failed to load plugin",e)}))),e.trigger("created"),e.updateConf(o),e.trigger("mounted"),e.conf.remoteConfModifier||e.fetch({offset:0})}))}function Ed(e,t){return G(this,null,(function*(){const n=new Set;if(!e||!Array.isArray(e))return n;const s=[];return e.forEach((e=>{/^(http|https):\/\//.test(e)||(e=`${t.replace(/\/$/,"")}/${e.replace(/^\//,"")}`),s.push(new Promise((t=>{if(document.querySelector(`script[src="${e}"]`))return void t();const n=document.createElement("script");n.src=e,document.head.appendChild(n),n.onload=()=>t(),n.onerror=e=>{console.error("[artalk] Failed to load plugin",e),t()}})))})),yield Promise.all(s),Object.values(window.ArtalkPlugins||{}).forEach((e=>{"function"==typeof e&&n.add(e)})),n}))}function Td(e,t){var n;let s="";if(null!=(n=t.data)&&n.err_no_site){const t={create_name:e.conf.site,create_urls:`${window.location.protocol}//${window.location.host}`};s=`sites|${JSON.stringify(t)}`}go({$err:e.get("list").$el,errMsg:t.msg||String(t),errData:t.data,retryFn:()=>wo(e),onOpenSidebar:e.get("user").getData().is_admin?()=>e.showSidebar({view:s}):void 0})}class ws{constructor(e){h(this,"ctx");const t=zn(e,!0);this.ctx=new wl(t),Object.entries(Lc).forEach((([e,t])=>{const n=t(this.ctx);n&&this.ctx.inject(e,n)})),wo(this.ctx)}getConf(){return this.ctx.getConf()}getEl(){return this.ctx.$root}update(e){return this.ctx.updateConf(e),this}reload(){this.ctx.reload()}destroy(){for(this.ctx.trigger("unmounted");this.ctx.$root.firstChild;)this.ctx.$root.removeChild(this.ctx.$root.firstChild)}on(e,t){this.ctx.on(e,t)}off(e,t){this.ctx.off(e,t)}trigger(e,t){this.ctx.trigger(e,t)}setDarkMode(e){this.ctx.setDarkMode(e)}static init(e){return new ws(e)}static use(e,t){vo.add(e),ko.set(e,t)}static loadCountWidget(e){const t=zn(e,!0);lo({getApi:()=>new Pi(ro(t)),siteName:t.site,countEl:t.countEl,pvEl:t.pvEl,pageKeyAttr:t.statPageKeyAttr,pvAdd:!1})}get $root(){return this.ctx.$root}get conf(){return this.ctx.getConf()}}const Ld=()=>{new ws({el:"#Comments",site:"ittst",server:"https://artalk.loliko.cn"}),document.getElementById("Comments").classList.add("loaded")};function vt(e,t,n){const s=document.createElement(t);return e&&(s.className=e),n&&n.appendChild(s),s}function Ad(e,t,n){let s=`translate3d(${e}px,0px,0)`;return void 0!==n&&(s+=` scale3d(${n},${n},1)`),s}function Wn(e,t,n){e.style.width="number"==typeof t?`${t}px`:t,e.style.height="number"==typeof n?`${n}px`:n}window.addEventListener("load",Ld);const Te={IDLE:"idle",LOADING:"loading",LOADED:"loaded",ERROR:"error"};function _d(e){return"button"in e&&1===e.button||e.ctrlKey||e.metaKey||e.altKey||e.shiftKey}function kt(e,t,n=document){let s=[];if(e instanceof Element)s=[e];else if(e instanceof NodeList||Array.isArray(e))s=Array.from(e);else{const i="string"==typeof e?e:t;i&&(s=Array.from(n.querySelectorAll(i)))}return s}function Pd(e){return"function"==typeof e&&e.prototype&&e.prototype.goTo}function si(){return!(!navigator.vendor||!navigator.vendor.match(/apple/i))}class Id{constructor(e,t){this.type=e,this.defaultPrevented=!1,t&&Object.assign(this,t)}preventDefault(){this.defaultPrevented=!0}}class Md{constructor(){this._listeners={},this._filters={},this.pswp=void 0,this.options=void 0}addFilter(e,t,n=100){var s,i,o;this._filters[e]||(this._filters[e]=[]),null===(s=this._filters[e])||void 0===s||s.push({fn:t,priority:n}),null===(i=this._filters[e])||void 0===i||i.sort(((e,t)=>e.priority-t.priority)),null===(o=this.pswp)||void 0===o||o.addFilter(e,t,n)}removeFilter(e,t){this._filters[e]&&(this._filters[e]=this._filters[e].filter((e=>e.fn!==t))),this.pswp&&this.pswp.removeFilter(e,t)}applyFilters(e,...t){var n;return null===(n=this._filters[e])||void 0===n||n.forEach((e=>{t[0]=e.fn.apply(this,t)})),t[0]}on(e,t){var n,s;this._listeners[e]||(this._listeners[e]=[]),null===(n=this._listeners[e])||void 0===n||n.push(t),null===(s=this.pswp)||void 0===s||s.on(e,t)}off(e,t){var n;this._listeners[e]&&(this._listeners[e]=this._listeners[e].filter((e=>t!==e))),null===(n=this.pswp)||void 0===n||n.off(e,t)}dispatch(e,t){var n;if(this.pswp)return this.pswp.dispatch(e,t);const s=new Id(e,t);return null===(n=this._listeners[e])||void 0===n||n.forEach((e=>{e.call(this,s)})),s}}class Od{constructor(e,t){if(this.element=vt("pswp__img pswp__img--placeholder",e?"img":"div",t),e){const t=this.element;t.decoding="async",t.alt="",t.src=e,t.setAttribute("role","presentation")}this.element.setAttribute("aria-hidden","true")}setDisplayedSize(e,t){this.element&&("IMG"===this.element.tagName?(Wn(this.element,250,"auto"),this.element.style.transformOrigin="0 0",this.element.style.transform=Ad(0,0,e/250)):Wn(this.element,e,t))}destroy(){var e;null!==(e=this.element)&&void 0!==e&&e.parentNode&&this.element.remove(),this.element=null}}class Rd{constructor(e,t,n){this.instance=t,this.data=e,this.index=n,this.element=void 0,this.placeholder=void 0,this.slide=void 0,this.displayedImageWidth=0,this.displayedImageHeight=0,this.width=Number(this.data.w)||Number(this.data.width)||0,this.height=Number(this.data.h)||Number(this.data.height)||0,this.isAttached=!1,this.hasSlide=!1,this.isDecoding=!1,this.state=Te.IDLE,this.data.type?this.type=this.data.type:this.data.src?this.type="image":this.type="html",this.instance.dispatch("contentInit",{content:this})}removePlaceholder(){this.placeholder&&!this.keepPlaceholder()&&setTimeout((()=>{this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0)}),1e3)}load(e,t){if(this.slide&&this.usePlaceholder())if(this.placeholder){const e=this.placeholder.element;e&&!e.parentElement&&this.slide.container.prepend(e)}else{const e=this.instance.applyFilters("placeholderSrc",!(!this.data.msrc||!this.slide.isFirstSlide)&&this.data.msrc,this);this.placeholder=new Od(e,this.slide.container)}this.element&&!t||this.instance.dispatch("contentLoad",{content:this,isLazy:e}).defaultPrevented||(this.isImageContent()?(this.element=vt("pswp__img","img"),this.displayedImageWidth&&this.loadImage(e)):(this.element=vt("pswp__content","div"),this.element.innerHTML=this.data.html||""),t&&this.slide&&this.slide.updateContentSize(!0))}loadImage(e){var t,n;if(!this.isImageContent()||!this.element||this.instance.dispatch("contentLoadImage",{content:this,isLazy:e}).defaultPrevented)return;const s=this.element;this.updateSrcsetSizes(),this.data.srcset&&(s.srcset=this.data.srcset),s.src=null!==(t=this.data.src)&&void 0!==t?t:"",s.alt=null!==(n=this.data.alt)&&void 0!==n?n:"",this.state=Te.LOADING,s.complete?this.onLoaded():(s.onload=()=>{this.onLoaded()},s.onerror=()=>{this.onError()})}setSlide(e){this.slide=e,this.hasSlide=!0,this.instance=e.pswp}onLoaded(){this.state=Te.LOADED,this.slide&&this.element&&(this.instance.dispatch("loadComplete",{slide:this.slide,content:this}),this.slide.isActive&&this.slide.heavyAppended&&!this.element.parentNode&&(this.append(),this.slide.updateContentSize(!0)),(this.state===Te.LOADED||this.state===Te.ERROR)&&this.removePlaceholder())}onError(){this.state=Te.ERROR,this.slide&&(this.displayError(),this.instance.dispatch("loadComplete",{slide:this.slide,isError:!0,content:this}),this.instance.dispatch("loadError",{slide:this.slide,content:this}))}isLoading(){return this.instance.applyFilters("isContentLoading",this.state===Te.LOADING,this)}isError(){return this.state===Te.ERROR}isImageContent(){return"image"===this.type}setDisplayedSize(e,t){if(this.element&&(this.placeholder&&this.placeholder.setDisplayedSize(e,t),!this.instance.dispatch("contentResize",{content:this,width:e,height:t}).defaultPrevented&&(Wn(this.element,e,t),this.isImageContent()&&!this.isError()))){const n=!this.displayedImageWidth&&e;this.displayedImageWidth=e,this.displayedImageHeight=t,n?this.loadImage(!1):this.updateSrcsetSizes(),this.slide&&this.instance.dispatch("imageSizeChange",{slide:this.slide,width:e,height:t,content:this})}}isZoomable(){return this.instance.applyFilters("isContentZoomable",this.isImageContent()&&this.state!==Te.ERROR,this)}updateSrcsetSizes(){if(!this.isImageContent()||!this.element||!this.data.srcset)return;const e=this.element,t=this.instance.applyFilters("srcsetSizesWidth",this.displayedImageWidth,this);(!e.dataset.largestUsedSize||t>parseInt(e.dataset.largestUsedSize,10))&&(e.sizes=t+"px",e.dataset.largestUsedSize=String(t))}usePlaceholder(){return this.instance.applyFilters("useContentPlaceholder",this.isImageContent(),this)}lazyLoad(){this.instance.dispatch("contentLazyLoad",{content:this}).defaultPrevented||this.load(!0)}keepPlaceholder(){return this.instance.applyFilters("isKeepingPlaceholder",this.isLoading(),this)}destroy(){this.hasSlide=!1,this.slide=void 0,!this.instance.dispatch("contentDestroy",{content:this}).defaultPrevented&&(this.remove(),this.placeholder&&(this.placeholder.destroy(),this.placeholder=void 0),this.isImageContent()&&this.element&&(this.element.onload=null,this.element.onerror=null,this.element=void 0))}displayError(){if(this.slide){var e,t;let n=vt("pswp__error-msg","div");n.innerText=null!==(e=null===(t=this.instance.options)||void 0===t?void 0:t.errorMsg)&&void 0!==e?e:"",n=this.instance.applyFilters("contentErrorElement",n,this),this.element=vt("pswp__content pswp__error-msg-container","div"),this.element.appendChild(n),this.slide.container.innerText="",this.slide.container.appendChild(this.element),this.slide.updateContentSize(!0),this.removePlaceholder()}}append(){if(this.isAttached||!this.element)return;if(this.isAttached=!0,this.state===Te.ERROR)return void this.displayError();if(this.instance.dispatch("contentAppend",{content:this}).defaultPrevented)return;const e="decode"in this.element;this.isImageContent()?e&&this.slide&&(!this.slide.isActive||si())?(this.isDecoding=!0,this.element.decode().catch((()=>{})).finally((()=>{this.isDecoding=!1,this.appendImage()}))):this.appendImage():this.slide&&!this.element.parentNode&&this.slide.container.appendChild(this.element)}activate(){this.instance.dispatch("contentActivate",{content:this}).defaultPrevented||!this.slide||(this.isImageContent()&&this.isDecoding&&!si()?this.appendImage():this.isError()&&this.load(!1,!0),this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","false"))}deactivate(){this.instance.dispatch("contentDeactivate",{content:this}),this.slide&&this.slide.holderElement&&this.slide.holderElement.setAttribute("aria-hidden","true")}remove(){this.isAttached=!1,!this.instance.dispatch("contentRemove",{content:this}).defaultPrevented&&(this.element&&this.element.parentNode&&this.element.remove(),this.placeholder&&this.placeholder.element&&this.placeholder.element.remove())}appendImage(){this.isAttached&&(this.instance.dispatch("contentAppendImage",{content:this}).defaultPrevented||(this.slide&&this.element&&!this.element.parentNode&&this.slide.container.appendChild(this.element),(this.state===Te.LOADED||this.state===Te.ERROR)&&this.removePlaceholder()))}}function Dd(e,t){if(e.getViewportSizeFn){const n=e.getViewportSizeFn(e,t);if(n)return n}return{x:document.documentElement.clientWidth,y:window.innerHeight}}function Ut(e,t,n,s,i){let o=0;if(t.paddingFn)o=t.paddingFn(n,s,i)[e];else if(t.padding)o=t.padding[e];else{const n="padding"+e[0].toUpperCase()+e.slice(1);t[n]&&(o=t[n])}return Number(o)||0}function Bd(e,t,n,s){return{x:t.x-Ut("left",e,t,n,s)-Ut("right",e,t,n,s),y:t.y-Ut("top",e,t,n,s)-Ut("bottom",e,t,n,s)}}const ii=4e3;class qd{constructor(e,t,n,s){this.pswp=s,this.options=e,this.itemData=t,this.index=n,this.panAreaSize=null,this.elementSize=null,this.fit=1,this.fill=1,this.vFill=1,this.initial=1,this.secondary=1,this.max=1,this.min=1}update(e,t,n){const s={x:e,y:t};this.elementSize=s,this.panAreaSize=n;const i=n.x/s.x,o=n.y/s.y;this.fit=Math.min(1,io?i:o),this.vFill=Math.min(1,o),this.initial=this._getInitial(),this.secondary=this._getSecondary(),this.max=Math.max(this.initial,this.secondary,this._getMax()),this.min=Math.min(this.fit,this.initial,this.secondary),this.pswp&&this.pswp.dispatch("zoomLevelsUpdate",{zoomLevels:this,slideData:this.itemData})}_parseZoomLevelOption(e){const t=e+"ZoomLevel",n=this.options[t];if(n)return"function"==typeof n?n(this):"fill"===n?this.fill:"fit"===n?this.fit:Number(n)}_getSecondary(){let e=this._parseZoomLevelOption("secondary");return e||(e=Math.min(1,3*this.fit),this.elementSize&&e*this.elementSize.x>ii&&(e=ii/this.elementSize.x),e)}_getInitial(){return this._parseZoomLevelOption("initial")||this.fit}_getMax(){return this._parseZoomLevelOption("max")||Math.max(1,4*this.fit)}}function bo(e,t,n){const s=t.createContentFromData(e,n);let i;const{options:o}=t;if(o){let r;i=new qd(o,e,-1),r=t.pswp?t.pswp.viewportSize:Dd(o,t);const a=Bd(o,r,e,n);i.update(s.width,s.height,a)}return s.lazyLoad(),i&&s.setDisplayedSize(Math.ceil(s.width*i.initial),Math.ceil(s.height*i.initial)),s}function Ud(e,t){const n=t.getItemData(e);if(!t.dispatch("lazyLoadSlide",{index:e,itemData:n}).defaultPrevented)return bo(n,t,e)}class Fd extends Md{getNumItems(){var e;let t=0;const n=null===(e=this.options)||void 0===e?void 0:e.dataSource;n&&"length"in n?t=n.length:n&&"gallery"in n&&(n.items||(n.items=this._getGalleryDOMElements(n.gallery)),n.items&&(t=n.items.length));const s=this.dispatch("numItems",{dataSource:n,numItems:t});return this.applyFilters("numItems",s.numItems,n)}createContentFromData(e,t){return new Rd(e,this,t)}getItemData(e){var t;const n=null===(t=this.options)||void 0===t?void 0:t.dataSource;let s={};Array.isArray(n)?s=n[e]:n&&"gallery"in n&&(n.items||(n.items=this._getGalleryDOMElements(n.gallery)),s=n.items[e]);let i=s;i instanceof Element&&(i=this._domElementToItemData(i));const o=this.dispatch("itemData",{itemData:i||{},index:e});return this.applyFilters("itemData",o.itemData,e)}_getGalleryDOMElements(e){var t,n;return null!==(t=this.options)&&void 0!==t&&t.children||null!==(n=this.options)&&void 0!==n&&n.childSelector?kt(this.options.children,this.options.childSelector,e)||[]:[e]}_domElementToItemData(e){const t={element:e},n="A"===e.tagName?e:e.querySelector("a");if(n){t.src=n.dataset.pswpSrc||n.href,n.dataset.pswpSrcset&&(t.srcset=n.dataset.pswpSrcset),t.width=n.dataset.pswpWidth?parseInt(n.dataset.pswpWidth,10):0,t.height=n.dataset.pswpHeight?parseInt(n.dataset.pswpHeight,10):0,t.w=t.width,t.h=t.height,n.dataset.pswpType&&(t.type=n.dataset.pswpType);const i=e.querySelector("img");var s;if(i)t.msrc=i.currentSrc||i.src,t.alt=null!==(s=i.getAttribute("alt"))&&void 0!==s?s:"";(n.dataset.pswpCropped||n.dataset.cropped)&&(t.thumbCropped=!0)}return this.applyFilters("domItemData",t,e,n)}lazyLoadData(e,t){return bo(e,this,t)}}class zd extends Fd{constructor(e){super(),this.options=e||{},this._uid=0,this.shouldOpen=!1,this._preloadedContent=void 0,this.onThumbnailsClick=this.onThumbnailsClick.bind(this)}init(){kt(this.options.gallery,this.options.gallerySelector).forEach((e=>{e.addEventListener("click",this.onThumbnailsClick,!1)}))}onThumbnailsClick(e){if(_d(e)||window.pswp)return;let t={x:e.clientX,y:e.clientY};!t.x&&!t.y&&(t=null);let n=this.getClickedIndex(e);n=this.applyFilters("clickedIndex",n,e,this);const s={gallery:e.currentTarget};n>=0&&(e.preventDefault(),this.loadAndOpen(n,s,t))}getClickedIndex(e){if(this.options.getClickedIndexFn)return this.options.getClickedIndexFn.call(this,e);const t=e.target,n=kt(this.options.children,this.options.childSelector,e.currentTarget).findIndex((e=>e===t||e.contains(t)));return-1!==n?n:this.options.children||this.options.childSelector?-1:0}loadAndOpen(e,t,n){if(window.pswp||!this.options)return!1;if(!t&&this.options.gallery&&this.options.children){const e=kt(this.options.gallery);e[0]&&(t={gallery:e[0]})}return this.options.index=e,this.options.initialPointerPos=n,this.shouldOpen=!0,this.preload(e,t),!0}preload(e,t){const{options:n}=this;t&&(n.dataSource=t);const s=[],i=typeof n.pswpModule;if(Pd(n.pswpModule))s.push(Promise.resolve(n.pswpModule));else{if("string"===i)throw new Error("pswpModule as string is no longer supported");if("function"!==i)throw new Error("pswpModule is not valid");s.push(n.pswpModule())}"function"==typeof n.openPromise&&s.push(n.openPromise()),!1!==n.preloadFirstSlide&&e>=0&&(this._preloadedContent=Ud(e,this));const o=++this._uid;Promise.all(s).then((e=>{if(this.shouldOpen){const t=e[0];this._openPhotoswipe(t,o)}}))}_openPhotoswipe(e,t){if(t!==this._uid&&this.shouldOpen||(this.shouldOpen=!1,window.pswp))return;const n="object"==typeof e?new e.default(this.options):new e(this.options);this.pswp=n,window.pswp=n,Object.keys(this._listeners).forEach((e=>{var t;null===(t=this._listeners[e])||void 0===t||t.forEach((t=>{n.on(e,t)}))})),Object.keys(this._filters).forEach((e=>{var t;null===(t=this._filters[e])||void 0===t||t.forEach((t=>{n.addFilter(e,t.fn,t.priority)}))})),this._preloadedContent&&(n.contentLoader.addToCache(this._preloadedContent),this._preloadedContent=void 0),n.on("destroy",(()=>{this.pswp=void 0,delete window.pswp})),n.init()}destroy(){var e;null===(e=this.pswp)||void 0===e||e.destroy(),this.shouldOpen=!1,this._listeners={},kt(this.options.gallery,this.options.gallerySelector).forEach((e=>{e.removeEventListener("click",this.onThumbnailsClick,!1)}))}}let $t,Hd=kr((()=>import("./photoswipe.esm.CKijkUPa.js")),[]);function oi(){$t=new zd({gallery:".custom-md img, #post-cover img",pswpModule:()=>Hd,closeSVG:'',zoomSVG:'',padding:{top:20,bottom:20,left:20,right:20},wheelToZoom:!0,arrowPrev:!1,arrowNext:!1,imageClickAction:"close",tapAction:"close",doubleTapAction:"zoom"}),$t.addFilter("domItemData",((e,t)=>(t instanceof HTMLImageElement&&(e.src=t.src,e.w=Number(t.naturalWidth||window.innerWidth),e.h=Number(t.naturalHeight||window.innerHeight),e.msrc=t.src),e))),$t.init()}const ri=()=>{$t||oi(),window.swup.hooks.on("page:view",(()=>{oi()})),window.swup.hooks.on("content:replace",(()=>{$t?.destroy?.()}),{before:!0})};window.swup?ri():document.addEventListener("swup:enable",ri);const be=(e,t)=>{const{o:n,i:s,u:i}=e;let o,r=n;const a=(e,t)=>{const n=r,a=e,l=t||(s?!s(n,a):n!==a);return(l||i)&&(r=a,o=n),[r,l,o]};return[t?e=>a(t(r,o),e):a,e=>[r,!!e,o]]},Nd=typeof window<"u"&&typeof HTMLElement<"u"&&!!window.document,ke=Nd?window:{},$o=Math.max,jd=Math.min,Vn=Math.round,Jt=Math.abs,ai=Math.sign,xo=ke.cancelAnimationFrame,bs=ke.requestAnimationFrame,en=ke.setTimeout,Gn=ke.clearTimeout,cn=e=>typeof ke[e]<"u"?ke[e]:void 0,Wd=cn("MutationObserver"),li=cn("IntersectionObserver"),tn=cn("ResizeObserver"),Ht=cn("ScrollTimeline"),$s=e=>void 0===e,dn=e=>null===e,Re=e=>"number"==typeof e,Lt=e=>"string"==typeof e,xs=e=>"boolean"==typeof e,_e=e=>"function"==typeof e,De=e=>Array.isArray(e),nn=e=>"object"==typeof e&&!De(e)&&!dn(e),Cs=e=>{const t=!!e&&e.length,n=Re(t)&&t>-1&&t%1==0;return!!(De(e)||!_e(e)&&n)&&(!(t>0&&nn(e))||t-1 in e)},sn=e=>!!e&&e.constructor===Object,on=e=>e instanceof HTMLElement,hn=e=>e instanceof Element;function ee(e,t){if(Cs(e))for(let n=0;nt(e[n],n,e)));return e}const Co=(e,t)=>e.indexOf(t)>=0,xt=(e,t)=>e.concat(t),ae=(e,t,n)=>(!Lt(t)&&Cs(t)?Array.prototype.push.apply(e,t):e.push(t),e),Ge=e=>Array.from(e||[]),Ss=e=>De(e)?e:!Lt(e)&&Cs(e)?Ge(e):[e],Kn=e=>!!e&&!e.length,Zn=e=>Ge(new Set(e)),Se=(e,t,n)=>{ee(e,(e=>!e||e.apply(void 0,t||[]))),!n&&(e.length=0)},So="paddingTop",Eo="paddingRight",To="paddingLeft",Lo="paddingBottom",Ao="marginLeft",_o="marginRight",Po="marginBottom",Io="overflowX",Mo="overflowY",un="width",pn="height",Ne="visible",Qe="hidden",at="scroll",Vd=e=>{const t=String(e||"");return t?t[0].toUpperCase()+t.slice(1):""},fn=(e,t,n,s)=>{if(e&&t){let s=!0;return ee(n,(n=>{e[n]!==t[n]&&(s=!1)})),s}return!1},Oo=(e,t)=>fn(e,t,["w","h"]),Nt=(e,t)=>fn(e,t,["x","y"]),Gd=(e,t)=>fn(e,t,["t","r","b","l"]),Ye=()=>{},q=(e,...t)=>e.bind(0,...t),st=e=>{let t;const n=e?en:bs,s=e?Gn:xo;return[i=>{s(t),t=n((()=>i()),_e(e)?e():e)},()=>s(t)]},Qn=(e,t)=>{const{_:n,v:s,p:i,S:o}=t||{};let r,a,l,c,h=Ye;const d=function(t){h(),Gn(r),c=r=a=void 0,h=Ye,e.apply(this,t)},u=e=>o&&a?o(a,e):e,p=()=>{h!==Ye&&d(u(l)||l)},m=function(){const e=Ge(arguments),t=_e(n)?n():n;if(Re(t)&&t>=0){const n=_e(s)?s():s,o=Re(n)&&n>=0,m=t>0?en:bs,g=t>0?Gn:xo,f=u(e)||e,y=d.bind(0,f);let k;h(),i&&!c?(y(),c=!0,k=m((()=>c=void 0),t)):(k=m(y,t),o&&!r&&(r=en(p,n))),h=()=>g(k),a=l=f}else d(e)};return m.m=p,m},Ro=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),Pe=e=>e?Object.keys(e):[],Q=(e,t,n,s,i,o,r)=>{const a=[t,n,s,i,o,r];return("object"!=typeof e||dn(e))&&!_e(e)&&(e={}),ee(a,(t=>{ee(t,((n,s)=>{const i=t[s];if(e===i)return!0;const o=De(i);if(i&&sn(i)){const t=e[s];let n=t;o&&!De(t)?n=[]:!o&&!sn(t)&&(n={}),e[s]=Q(n,i)}else e[s]=o?i.slice():i}))})),e},Do=(e,t)=>ee(Q({},e),((e,t,n)=>{void 0===e?delete n[t]:e&&sn(e)&&(n[t]=Do(e))})),Es=e=>!Pe(e).length,Bo=(e,t,n)=>$o(e,jd(t,n)),Xe=e=>Zn((De(e)?e:(e||"").split(" ")).filter((e=>e))),Ts=(e,t)=>e&&e.getAttribute(t),ci=(e,t)=>e&&e.hasAttribute(t),qe=(e,t,n)=>{ee(Xe(t),(t=>{e&&e.setAttribute(t,String(n||""))}))},Me=(e,t)=>{ee(Xe(t),(t=>e&&e.removeAttribute(t)))},mn=(e,t)=>{const n=Xe(Ts(e,t)),s=q(qe,e,t),i=(e,t)=>{const s=new Set(n);return ee(Xe(e),(e=>{s[t](e)})),Ge(s).join(" ")};return{O:e=>s(i(e,"delete")),$:e=>s(i(e,"add")),C:e=>{const t=Xe(e);return t.reduce(((e,t)=>e&&n.includes(t)),t.length>0)}}},qo=(e,t,n)=>(mn(e,t).O(n),q(Ls,e,t,n)),Ls=(e,t,n)=>(mn(e,t).$(n),q(qo,e,t,n)),rn=(e,t,n,s)=>(s?Ls:qo)(e,t,n),As=(e,t,n)=>mn(e,t).C(n),Uo=e=>mn(e,"class"),Fo=(e,t)=>{Uo(e).O(t)},_s=(e,t)=>(Uo(e).$(t),q(Fo,e,t)),zo=(e,t)=>{const n=t?hn(t)&&t:document;return n?Ge(n.querySelectorAll(e)):[]},Kd=(e,t)=>{const n=t?hn(t)&&t:document;return n&&n.querySelector(e)},Yn=(e,t)=>hn(e)&&e.matches(t),Ho=e=>Yn(e,"body"),Xn=e=>e?Ge(e.childNodes):[],Ct=e=>e&&e.parentElement,it=(e,t)=>hn(e)&&e.closest(t),Jn=e=>document.activeElement,Zd=(e,t,n)=>{const s=it(e,t),i=e&&Kd(n,s),o=it(i,t)===s;return!(!s||!i)&&(s===e||i===e||o&&it(it(e,n),t)!==s)},lt=e=>{ee(Ss(e),(e=>{const t=Ct(e);e&&t&&t.removeChild(e)}))},xe=(e,t)=>q(lt,e&&t&&ee(Ss(t),(t=>{t&&e.appendChild(t)}))),ot=e=>{const t=document.createElement("div");return qe(t,"class",e),t},No=e=>{const t=ot();return t.innerHTML=e.trim(),ee(Xn(t),(e=>lt(e)))},di=(e,t)=>e.getPropertyValue(t)||e[t]||"",jo=e=>{const t=e||0;return isFinite(t)?t:0},Ft=e=>jo(parseFloat(e||"")),es=e=>Math.round(1e4*e)/1e4,Wo=e=>`${es(jo(e))}px`;function St(e,t){e&&t&&ee(t,((t,n)=>{try{const s=e.style,i=dn(t)||xs(t)?"":Re(t)?Wo(t):t;0===n.indexOf("--")?s.setProperty(n,i):s[n]=i}catch{}}))}function ze(e,t,n){const s=Lt(t);let i=s?"":{};if(e){const o=ke.getComputedStyle(e,n)||e.style;i=s?di(o,t):Ge(t).reduce(((e,t)=>(e[t]=di(o,t),e)),i)}return i}const hi=(e,t,n)=>{const s=t?`${t}-`:"",i=n?`-${n}`:"",o=`${s}top${i}`,r=`${s}right${i}`,a=`${s}bottom${i}`,l=`${s}left${i}`,c=ze(e,[o,r,a,l]);return{t:Ft(c[o]),r:Ft(c[r]),b:Ft(c[a]),l:Ft(c[l])}},Qd=(e,t)=>"translate"+(nn(e)?`(${e.x},${e.y})`:`Y(${e})`),Yd=e=>!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length),Xd={w:0,h:0},gn=(e,t)=>t?{w:t[`${e}Width`],h:t[`${e}Height`]}:Xd,Jd=e=>gn("inner",e||ke),rt=q(gn,"offset"),Vo=q(gn,"client"),an=q(gn,"scroll"),Ps=e=>{const t=parseFloat(ze(e,un))||0,n=parseFloat(ze(e,pn))||0;return{w:t-Vn(t),h:n-Vn(n)}},Tn=e=>e.getBoundingClientRect(),eh=e=>!!e&&Yd(e),ts=e=>!(!e||!e[pn]&&!e[un]),Go=(e,t)=>{const n=ts(e);return!ts(t)&&n},ui=(e,t,n,s)=>{ee(Xe(t),(t=>{e&&e.removeEventListener(t,n,s)}))},ie=(e,t,n,s)=>{var i;const o=null==(i=s&&s.H)||i,r=s&&s.I||!1,a=s&&s.A||!1,l={passive:o,capture:r};return q(Se,Xe(t).map((t=>{const s=a?i=>{ui(e,t,s,r),n&&n(i)}:n;return e&&e.addEventListener(t,s,l),q(ui,e,t,s,r)})))},Ko=e=>e.stopPropagation(),ns=e=>e.preventDefault(),Zo=e=>Ko(e)||ns(e),Oe=(e,t)=>{const{x:n,y:s}=Re(t)?{x:t,y:t}:t||{};Re(n)&&(e.scrollLeft=n),Re(s)&&(e.scrollTop=s)},Ce=e=>({x:e.scrollLeft,y:e.scrollTop}),Qo=()=>({D:{x:0,y:0},M:{x:0,y:0}}),th=(e,t)=>{const{D:n,M:s}=e,{w:i,h:o}=t,r=(e,t,n)=>{let s=ai(e)*n,i=ai(t)*n;if(s===i){const n=Jt(e),o=Jt(t);i=n>o?0:i,s=n{const n=(e,t)=>0===e&&e<=t;return{x:n(e.x,t.x),y:n(e.y,t.y)}},fi=({D:e,M:t},n)=>{const s=(e,t,n)=>Bo(0,1,(e-n)/(e-t)||0);return{x:s(e.x,t.x,n.x),y:s(e.y,t.y,n.y)}},ss=e=>{e&&e.focus&&e.focus({preventScroll:!0})},mi=(e,t)=>{ee(Ss(t),e)},is=e=>{const t=new Map,n=(e,n)=>{if(e){const s=t.get(e);mi((e=>{s&&s[e?"delete":"clear"](e)}),n)}else t.forEach((e=>{e.clear()})),t.clear()},s=(e,i)=>{if(Lt(e)){const s=t.get(e)||new Set;return t.set(e,s),mi((e=>{_e(e)&&s.add(e)}),i),q(n,e,i)}xs(i)&&i&&n();const o=Pe(e),r=[];return ee(o,(t=>{const n=e[t];n&&ae(r,s(t,n))})),q(Se,r)};return s(e||{}),[s,n,(e,n)=>{ee(Ge(t.get(e)),(e=>{n&&!Kn(n)?e.apply(0,n):e()}))}]},gi=e=>JSON.stringify(e,((e,t)=>{if(_e(t))throw 0;return t})),yi=(e,t)=>e?`${t}`.split(".").reduce(((e,t)=>e&&Ro(e,t)?e[t]:void 0),e):void 0,nh={paddingAbsolute:!1,showNativeOverlaidScrollbars:!1,update:{elementEvents:[["img","load"]],debounce:[0,33],attributes:null,ignoreMutation:null},overflow:{x:"scroll",y:"scroll"},scrollbars:{theme:"os-theme-dark",visibility:"auto",autoHide:"never",autoHideDelay:1300,autoHideSuspend:!1,dragScroll:!0,clickScroll:!1,pointers:["mouse","touch","pen"]}},Yo=(e,t)=>{const n={};return ee(xt(Pe(t),Pe(e)),(s=>{const i=e[s],o=t[s];if(nn(i)&&nn(o))Q(n[s]={},Yo(i,o)),Es(n[s])&&delete n[s];else if(Ro(t,s)&&o!==i){let e=!0;if(De(i)||De(o))try{gi(i)===gi(o)&&(e=!1)}catch{}e&&(n[s]=o)}})),n},vi=(e,t,n)=>s=>[yi(e,s),n||void 0!==yi(t,s)],ht="data-overlayscrollbars",jt="os-environment",zt=`${jt}-scrollbar-hidden`,Ln=`${ht}-initialize`,Wt="noClipping",ki=`${ht}-body`,We=ht,sh="host",Ue=`${ht}-viewport`,ih=Io,oh=Mo,rh="arrange",Xo="measuring",ah="scrolling",Jo="scrollbarHidden",lh="noContent",os=`${ht}-padding`,wi=`${ht}-content`,Is="os-size-observer",ch=`${Is}-appear`,dh=`${Is}-listener`,hh="os-trinsic-observer",uh="os-theme-none",Ee="os-scrollbar",ph=`${Ee}-rtl`,fh=`${Ee}-horizontal`,mh=`${Ee}-vertical`,er=`${Ee}-track`,Ms=`${Ee}-handle`,gh=`${Ee}-visible`,yh=`${Ee}-cornerless`,bi=`${Ee}-interaction`,$i=`${Ee}-unusable`,rs=`${Ee}-auto-hide`,xi=`${rs}-hidden`,Ci=`${Ee}-wheel`,vh=`${er}-interactive`,kh=`${Ms}-interactive`;let tr;const wh=()=>tr,bh=e=>{tr=e};let An;const $h=()=>{const e=(e,t,n)=>{xe(document.body,e),xe(document.body,e);const s=Vo(e),i=rt(e),o=Ps(t);return n&<(e),{x:i.h-s.h+o.h,y:i.w-s.w+o.w}},t=No(`
      `)[0],n=t.firstChild,s=t.lastChild,i=wh();i&&(s.nonce=i);const[o,,r]=is(),[a,l]=be({o:e(t,n),i:Nt},q(e,t,n,!0)),[c]=l(),h=(e=>{let t=!1;const n=_s(e,zt);try{t="none"===ze(e,"scrollbar-width")||"none"===ze(e,"display","::-webkit-scrollbar")}catch{}return n(),t})(t),d={x:0===c.x,y:0===c.y},u={elements:{host:null,padding:!h,viewport:e=>h&&Ho(e)&&e,content:!1},scrollbars:{slot:!0},cancel:{nativeScrollbarsOverlaid:!1,body:null}},p=Q({},nh),m=q(Q,{},p),g=q(Q,{},u),f={T:c,k:d,R:h,V:!!Ht,L:q(o,"r"),U:g,P:e=>Q(u,e)&&g(),N:m,q:e=>Q(p,e)&&m(),B:Q({},u),F:Q({},p)};if(Me(t,"style"),lt(t),ie(ke,"resize",(()=>{r("r",[])})),_e(ke.matchMedia)&&!h&&(!d.x||!d.y)){const e=t=>{const n=ke.matchMedia(`(resolution: ${ke.devicePixelRatio}dppx)`);ie(n,"change",(()=>{t(),e(t)}),{A:!0})};e((()=>{const[e,t]=a();Q(f.T,e),r("r",[t])}))}return f},Be=()=>(An||(An=$h()),An),nr=(e,t)=>_e(t)?t.apply(0,e):t,xh=(e,t,n,s)=>{const i=$s(s)?n:s;return nr(e,i)||t.apply(0,e)},sr=(e,t,n,s)=>{const i=$s(s)?n:s,o=nr(e,i);return!!o&&(on(o)?o:t.apply(0,e))},Ch=(e,t)=>{const{nativeScrollbarsOverlaid:n,body:s}=t||{},{k:i,R:o,U:r}=Be(),{nativeScrollbarsOverlaid:a,body:l}=r().cancel,c=n??a,h=$s(s)?l:s,d=(i.x||i.y)&&c,u=e&&(dn(h)?!o:h);return!!d||!!u},Os=new WeakMap,Sh=(e,t)=>{Os.set(e,t)},Eh=e=>{Os.delete(e)},ir=e=>Os.get(e),Th=(e,t,n)=>{let s=!1;const i=!!n&&new WeakMap,o=o=>{if(i&&n){ee(n.map((t=>{const[n,s]=t||[];return[s&&n?(o||zo)(n,e):[],s]})),(n=>ee(n[0],(o=>{const r=n[1],a=i.get(o)||[];if(e.contains(o)&&r){const e=ie(o,r,(n=>{s?(e(),i.delete(o)):t(n)}));i.set(o,ae(a,e))}else Se(a),i.delete(o)}))))}};return o(),[()=>{s=!0},o]},Si=(e,t,n,s)=>{let i=!1;const{j:o,X:r,Y:a,W:l,J:c,G:h}=s||{},d=Qn((()=>i&&n(!0)),{_:33,v:99}),[u,p]=Th(e,d,a),m=r||[],g=xt(o||[],m),f=(i,o)=>{if(!Kn(o)){const r=c||Ye,a=h||Ye,d=[],u=[];let g=!1,f=!1;if(ee(o,(n=>{const{attributeName:i,target:o,type:c,oldValue:h,addedNodes:p,removedNodes:y}=n,k="attributes"===c,w="childList"===c,v=e===o,b=k&&i,$=b&&Ts(o,i||""),x=Lt($)?$:null,E=b&&h!==x,C=Co(m,i)&&E;if(t&&(w||!v)){const t=k&&E,c=t&&l&&Yn(o,l),u=(c?!r(o,i,h,x):!k||t)&&!a(n,!!c,e,s);ee(p,(e=>ae(d,e))),ee(y,(e=>ae(d,e))),f=f||u}!t&&v&&E&&!r(o,i,h,x)&&(ae(u,i),g=g||C)})),p((e=>Zn(d).reduce(((t,n)=>(ae(t,zo(e,n)),Yn(n,e)?ae(t,n):t)),[]))),t)return!i&&f&&n(!1),[!1];if(!Kn(u)||g){const e=[Zn(u),g];return!i&&n.apply(0,e),e}}},y=new Wd(q(f,!1));return[()=>(y.observe(e,{attributes:!0,attributeOldValue:!0,attributeFilter:g,subtree:t,childList:t,characterData:t}),i=!0,()=>{i&&(u(),y.disconnect(),i=!1)}),()=>{if(i)return d.m(),f(!0,y.takeRecords())}]},or={},rr={},Lh=e=>{ee(e,(e=>ee(e,((t,n)=>{or[n]=e[n]}))))},ar=(e,t,n)=>Pe(e).map((s=>{const{static:i,instance:o}=e[s],[r,a,l]=n||[],c=n?o:i;if(c){const e=n?c(r,a,t):c(t);return(l||rr)[s]=e}})),At=e=>rr[e],Ah="__osOptionsValidationPlugin",_h="__osSizeObserverPlugin",Ph=(e,t)=>{const{k:n}=t,[s,i]=e("showNativeOverlaidScrollbars");return[s&&n.x&&n.y,i]},ct=e=>0===e.indexOf(Ne),Ih=(e,t)=>{const n=(e,t,n,s)=>{const i=e===Ne?Qe:e.replace(`${Ne}-`,""),o=ct(e),r=ct(n);return t||s?o&&r?Ne:o?t&&s?i:t?Ne:Qe:t?i:r&&s?Ne:Qe:Qe},s={x:n(t.x,e.x,t.y,e.y),y:n(t.y,e.y,t.x,e.x)};return{K:s,Z:{x:s.x===at,y:s.y===at}}},lr="__osScrollbarsHidingPlugin",Mh="__osClickScrollPlugin",cr=(e,t,n)=>{const{dt:s}=n||{},i=At(_h),[o]=be({o:!1,u:!0});return()=>{const n=[],r=No(`
      `)[0],a=r.firstChild,l=e=>{let n=!1,s=!1;if(e instanceof ResizeObserverEntry){const[t,,i]=o(e.contentRect),r=ts(t);s=Go(t,i),n=!s&&!r}else s=!0===e;n||t({ft:!0,dt:s})};if(tn){const e=new tn((e=>l(e.pop())));e.observe(a),ae(n,(()=>{e.disconnect()}))}else{if(!i)return Ye;{const[e,t]=i(a,l,s);ae(n,xt([_s(r,ch),ie(r,"animationstart",e)],t))}}return q(Se,ae(n,xe(e,r)))}},Oh=(e,t)=>{let n;const s=ot(hh),[i]=be({o:!1}),o=(e,n)=>{if(e){const s=i((e=>0===e.h||e.isIntersecting||e.intersectionRatio>0)(e)),[,o]=s;return o&&!n&&t(s)&&[s]}},r=(e,t)=>o(t.pop(),e);return[()=>{const t=[];if(li)n=new li(q(r,!1),{root:e}),n.observe(s),ae(t,(()=>{n.disconnect()}));else{const e=()=>{const e=rt(s);o(e)};ae(t,cr(s,e)()),e()}return q(Se,ae(t,xe(e,s)))},()=>n&&r(!0,n.takeRecords())]},Rh=(e,t,n,s)=>{let i,o,r,a,l,c;const h=`[${We}]`,d=`[${Ue}]`,u=["id","class","style","open","wrap","cols","rows"],{vt:p,ht:m,ot:g,gt:f,bt:y,nt:k,wt:w,yt:v,St:b,Ot:$}=e,x=e=>"rtl"===ze(e,"direction"),E={$t:!1,ct:x(p)},C=Be(),S=At(lr),[T]=be({i:Oo,o:{w:0,h:0}},(()=>{const s=S&&S.tt(e,t,E,C,n).ut,i=!(w&&k)&&As(m,We,Wt),o=!k&&v(rh),r=o&&Ce(f),a=r&&$(),l=b(Xo,i),c=o&&s&&s()[0],h=an(g),d=Ps(g);return c&&c(),Oe(f,r),a&&a(),i&&l(),{w:h.w+d.w,h:h.h+d.h}})),L=Qn(s,{_:()=>i,v:()=>o,S(e,t){const[n]=e,[s]=t;return[xt(Pe(n),Pe(s)).reduce(((e,t)=>(e[t]=n[t]||s[t],e)),{})]}}),A=e=>{const t=x(p);Q(e,{Ct:c!==t}),Q(E,{ct:t}),c=t},P=(e,t)=>{const[n,i]=e,o={xt:i};return Q(E,{$t:n}),!t&&s(o),o},M=({ft:e,dt:t})=>{const n=e&&!t||!C.R?s:L,i={ft:e||t,dt:t};A(i),n(i)},q=(e,t)=>{const[,n]=T(),i={Ht:n};return A(i),n&&!t&&(e?s:L)(i),i},I=(e,t,n)=>{const s={Et:t};return A(s),t&&!n&&L(s),s},[_,R]=y?Oh(m,P):[],O=!k&&cr(m,M,{dt:!0}),[D,U]=Si(m,!1,I,{X:u,j:u}),B=k&&tn&&new tn((e=>{const t=e[e.length-1].contentRect;M({ft:!0,dt:Go(t,l)}),l=t})),j=Qn((()=>{const[,e]=T();s({Ht:e})}),{_:222,p:!0});return[()=>{B&&B.observe(m);const e=O&&O(),t=_&&_(),n=D(),s=C.L((e=>{e?L({zt:e}):j()}));return()=>{B&&B.disconnect(),e&&e(),t&&t(),a&&a(),n(),s()}},({It:e,At:t,Dt:n})=>{const s={},[l]=e("update.ignoreMutation"),[c,p]=e("update.attributes"),[m,f]=e("update.elementEvents"),[w,v]=e("update.debounce"),b=t||n;if(f||p){r&&r(),a&&a();const[e,t]=Si(y||g,!0,q,{j:xt(u,c||[]),Y:m,W:h,G:(e,t)=>{const{target:n,attributeName:s}=e;return!(t||!s||k)&&Zd(n,h,d)||!!it(n,`.${Ee}`)||!!(e=>_e(l)&&l(e))(e)}});a=e(),r=t}if(v)if(L.m(),De(w)){const e=w[0],t=w[1];i=Re(e)&&e,o=Re(t)&&t}else Re(w)?(i=w,o=!1):(i=!1,o=!1);if(b){const e=U(),t=R&&R(),n=r&&r();e&&Q(s,I(e[0],e[1],b)),t&&Q(s,P(t[0],b)),n&&Q(s,q(n[0],b))}return A(s),s},E]},Dh=(e,t,n,s)=>{const i="--os-viewport-percent",o="--os-scroll-percent",r="--os-scroll-direction",{U:a}=Be(),{scrollbars:l}=a(),{slot:c}=l,{vt:h,ht:d,ot:u,Mt:p,gt:m,wt:g,nt:f}=t,{scrollbars:y}=p?{}:e,{slot:k}=y||{},w=[],v=[],b=[],$=sr([h,d,u],(()=>f&&g?h:d),c,k),x=e=>{if(Ht){const t=new Ht({source:m,axis:e});return{kt:e=>{const n=e.Tt.animate({clear:["left"],[o]:[0,1]},{timeline:t});return()=>n.cancel()}}}},E={x:x("x"),y:x("y")},C=(e,t,n)=>{const s=n?_s:Fo;ee(e,(e=>{s(e.Tt,t)}))},S=(e,t)=>{ee(e,(e=>{const[n,s]=t(e);St(n,s)}))},T=(e,t,n)=>{const s=xs(n),i=!s||!n;(!s||n)&&C(v,e,t),i&&C(b,e,t)},L=e=>{const t=e?"x":"y",n=ot(`${Ee} ${e?fh:mh}`),i=ot(er),o=ot(Ms),r={Tt:n,Ut:i,Pt:o},a=E[t];return ae(e?v:b,r),ae(w,[xe(n,i),xe(i,o),q(lt,n),a&&a.kt(r),s(r,T,e)]),r},A=q(L,!0),P=q(L,!1);return A(),P(),[{Nt:()=>{const e=(()=>{const{Rt:e,Vt:t}=n,s=(e,t)=>Bo(0,1,e/(e+t)||0);return{x:s(t.x,e.x),y:s(t.y,e.y)}})(),t=e=>t=>[t.Tt,{[i]:es(e)+""}];S(v,t(e.x)),S(b,t(e.y))},qt:()=>{if(!Ht){const{Lt:e}=n,t=fi(e,Ce(m)),s=e=>t=>[t.Tt,{[o]:es(e)+""}];S(v,s(t.x)),S(b,s(t.y))}},Bt:()=>{const{Lt:e}=n,t=pi(e),s=e=>t=>[t.Tt,{[r]:e?"0":"1"}];S(v,s(t.x)),S(b,s(t.y))},Ft:()=>{if(f&&!g){const{Rt:e,Lt:t}=n,s=pi(t),i=fi(t,Ce(m)),o=t=>{const{Tt:n}=t,o=Ct(n)===u&&n,r=(e,t,n)=>{const s=t*e;return Wo(n?s:-s)};return[o,o&&{transform:Qd({x:r(i.x,e.x,s.x),y:r(i.y,e.y,s.y)})}]};S(v,o),S(b,o)}},jt:T,Xt:{Yt:v,Wt:A,Jt:q(S,v)},Gt:{Yt:b,Wt:P,Jt:q(S,b)}},()=>(xe($,v[0].Tt),xe($,b[0].Tt),q(Se,w))]},Bh=(e,t,n,s)=>(i,o,r)=>{const{ht:a,ot:l,nt:c,gt:h,Kt:d,Ot:u}=t,{Tt:p,Ut:m,Pt:g}=i,[f,y]=st(333),[k,w]=st(444),v=e=>{_e(h.scrollBy)&&h.scrollBy({behavior:"smooth",left:e.x,top:e.y})};let b=!0;return q(Se,[ie(g,"pointermove pointerleave",s),ie(p,"pointerenter",(()=>{o(bi,!0)})),ie(p,"pointerleave pointercancel",(()=>{o(bi,!1)})),!c&&ie(p,"mousedown",(()=>{const e=Jn();(ci(e,Ue)||ci(e,We)||e===document.body)&&en(q(ss,l),25)})),ie(p,"wheel",(e=>{const{deltaX:t,deltaY:n,deltaMode:s}=e;b&&0===s&&Ct(p)===a&&v({x:t,y:n}),b=!1,o(Ci,!0),f((()=>{b=!0,o(Ci)})),ns(e)}),{H:!1,I:!0}),ie(p,"pointerdown",q(ie,d,"click",Zo,{A:!0,I:!0,H:!1}),{I:!0}),(()=>{const t="pointerup pointercancel lostpointercapture",s="client"+(r?"X":"Y"),i=r?un:pn,o=r?"left":"top",a=r?"w":"h",l=r?"x":"y",c=[];return ie(m,"pointerdown",(r=>{const p=it(r.target,`.${Ms}`)===g,f=p?g:m,y=e.scrollbars,b=y[p?"dragScroll":"clickScroll"],{button:$,isPrimary:x,pointerType:E}=r,{pointers:C}=y;if(0===$&&x&&b&&(C||[]).includes(E)){Se(c),w();const e=!p&&(r.shiftKey||"instant"===b),y=q(Tn,g),$=q(Tn,m),x=(e,t)=>(e||y())[o]-(t||$())[o],E=Vn(Tn(h)[i])/rt(h)[a]||1,C=((e,t)=>s=>{const{Rt:i}=n,o=rt(m)[a]-rt(g)[a],r=t*s/o*i[l];Oe(h,{[l]:e+r})})(Ce(h)[l],1/E),S=r[s],T=y(),L=$(),A=T[i],P=x(T,L)+A/2,M=S-L[o],I=p?0:M-P,_=e=>{Se(D),f.releasePointerCapture(e.pointerId)},R=p||e,O=u(),D=[ie(d,t,_),ie(d,"selectstart",(e=>ns(e)),{H:!1}),ie(m,t,_),R&&ie(m,"pointermove",(e=>C(I+(e[s]-S)))),R&&(()=>{const e=Ce(h);O();const t=Ce(h),n={x:t.x-e.x,y:t.y-e.y};(Jt(n.x)>3||Jt(n.y)>3)&&(u(),Oe(h,e),v(n),k(O))})];if(f.setPointerCapture(r.pointerId),e)C(I);else if(!p){const e=At(Mh);if(e){const t=e(C,I,A,(e=>{e?O():ae(D,O)}));ae(D,t),ae(c,q(t,!0))}}}}))})(),y,w])},qh=(e,t,n,s,i,o)=>{let r,a,l,c,h,d=Ye,u=0;const p=e=>"mouse"===e.pointerType,[m,g]=st(),[f,y]=st(100),[k,w]=st(100),[v,b]=st((()=>u)),[$,x]=Dh(e,i,s,Bh(t,i,s,(e=>p(e)&&_()))),{ht:E,Qt:C,wt:S}=i,{jt:T,Nt:L,qt:A,Bt:P,Ft:M}=$,I=(e,t)=>{if(b(),e)T(xi);else{const e=q(T,xi,!0);u>0&&!t?v(e):e()}},_=()=>{(l?!r:!c)&&(I(!0),f((()=>{I(!1)})))},R=e=>{T(rs,e,!0),T(rs,e,!1)},O=e=>{p(e)&&(r=l,l&&I(!0))},D=[b,y,w,g,()=>d(),ie(E,"pointerover",O,{A:!0}),ie(E,"pointerenter",O),ie(E,"pointerleave",(e=>{p(e)&&(r=!1,l&&I(!1))})),ie(E,"pointermove",(e=>{p(e)&&a&&_()})),ie(C,"scroll",(e=>{m((()=>{A(),_()})),o(e),M()}))];return[()=>q(Se,ae(D,x())),({It:e,Dt:t,Zt:i,tn:o})=>{const{nn:r,sn:p,en:m,cn:g}=o||{},{Ct:f,dt:y}=i||{},{ct:w}=n,{k:v}=Be(),{K:b,rn:$}=s,[x,E]=e("showNativeOverlaidScrollbars"),[_,O]=e("scrollbars.theme"),[D,U]=e("scrollbars.visibility"),[B,j]=e("scrollbars.autoHide"),[F,z]=e("scrollbars.autoHideSuspend"),[N]=e("scrollbars.autoHideDelay"),[W,H]=e("scrollbars.dragScroll"),[G,Q]=e("scrollbars.clickScroll"),[V,Z]=e("overflow"),K=y&&!t,J=$.x||$.y,Y=r||p||g||f||t,X=m||U||Z,ee=x&&v.x&&v.y,te=(e,t,n)=>{const s=e.includes(at)&&(D===Ne||"auto"===D&&t===at);return T(gh,s,n),s};if(u=N,K&&(F&&J?(R(!1),d(),k((()=>{d=ie(C,"scroll",q(R,!0),{A:!0})}))):R(!0)),E&&T(uh,ee),O&&(T(h),T(_,!0),h=_),z&&!F&&R(!0),j&&(a="move"===B,l="leave"===B,c="never"===B,I(c,!0)),H&&T(kh,W),Q&&T(vh,!!G),X){const e=te(V.x,b.x,!0),t=te(V.y,b.y,!1);T(yh,!(e&&t))}Y&&(A(),L(),M(),g&&P(),T($i,!$.x,!0),T($i,!$.y,!1),T(ph,w&&!S))},{},$]},Uh=e=>{const t=Be(),{U:n,R:s}=t,{elements:i}=n(),{padding:o,viewport:r,content:a}=i,l=on(e),c=l?{}:e,{elements:h}=c,{padding:d,viewport:u,content:p}=h||{},m=l?e:c.target,g=Ho(m),f=m.ownerDocument,y=f.documentElement,k=()=>f.defaultView||ke,w=q(xh,[m]),v=q(sr,[m]),b=q(ot,""),$=q(w,b,r),x=q(v,b,a),E=$(u),C=E===m,S=C&&g,T=!C&&x(p),L=!C&&E===T,A=S?y:E,P=S?A:m,M=!C&&v(b,o,d),I=!L&&T,_=[I,A,M,P].map((e=>on(e)&&!Ct(e)&&e)),R=e=>e&&Co(_,e),O=!R(A)&&(e=>{const t=rt(e),n=an(e),s=ze(e,Io),i=ze(e,Mo);return n.w-t.w>0&&!ct(s)||n.h-t.h>0&&!ct(i)})(A)?A:m,D=S?y:A,U={vt:m,ht:P,ot:A,ln:M,bt:I,gt:D,Qt:S?f:A,an:g?y:O,Kt:f,wt:g,Mt:l,nt:C,un:k,yt:e=>As(A,Ue,e),St:(e,t)=>rn(A,Ue,e,t),Ot:()=>rn(D,Ue,ah,!0)},{vt:B,ht:j,ln:F,ot:z,bt:N}=U,W=[()=>{Me(j,[We,Ln]),Me(B,Ln),g&&Me(y,[Ln,We])}];let H=Xn([N,z,F,j,B].find((e=>e&&!R(e))));const G=S?B:N||z,Q=q(Se,W);return[U,()=>{const e=k(),t=Jn(),n=e=>{xe(Ct(e),Xn(e)),lt(e)},i=e=>ie(e,"focusin focusout focus blur",Zo,{I:!0,H:!1}),o="tabindex",r=Ts(z,o),a=i(t);return qe(j,We,C?"":sh),qe(F,os,""),qe(z,Ue,""),qe(N,wi,""),C||(qe(z,o,r||"-1"),g&&qe(y,ki,"")),xe(G,H),xe(j,F),xe(F||j,!C&&z),xe(z,N),ae(W,[a,()=>{const e=Jn(),t=R(z),s=t&&e===z?B:e,a=i(s);Me(F,os),Me(N,wi),Me(z,Ue),g&&Me(y,ki),r?qe(z,o,r):Me(z,o),R(N)&&n(N),t&&n(z),R(F)&&n(F),ss(s),a()}]),s&&!C&&(Ls(z,Ue,Jo),ae(W,q(Me,z,Ue))),ss(!C&&g&&t===B&&e.top===e?z:t),a(),H=0,Q},Q]},Fh=({bt:e})=>({Zt:t,_n:n,Dt:s})=>{const{xt:i}=t||{},{$t:o}=n;e&&(i||s)&&St(e,{[pn]:o&&"100%"})},zh=({ht:e,ln:t,ot:n,nt:s},i)=>{const[o,r]=be({i:Gd,o:hi()},q(hi,e,"padding",""));return({It:e,Zt:a,_n:l,Dt:c})=>{let[h,d]=r(c);const{R:u}=Be(),{ft:p,Ht:m,Ct:g}=a||{},{ct:f}=l,[y,k]=e("paddingAbsolute");(p||d||c||m)&&([h,d]=o(c));const w=!s&&(k||g||d);if(w){const e=!y||!t&&!u,s=h.r+h.l,o=h.t+h.b,r={[_o]:e&&!f?-s:0,[Po]:e?-o:0,[Ao]:e&&f?-s:0,top:e?-h.t:0,right:e?f?-h.r:"auto":0,left:e?f?"auto":-h.l:0,[un]:e&&`calc(100% + ${s}px)`},a={[So]:e?h.t:0,[Eo]:e?h.r:0,[Lo]:e?h.b:0,[To]:e?h.l:0};St(t||n,r),St(n,a),Q(i,{ln:h,dn:!e,rt:t?a:Q({},r,a)})}return{fn:w}}},Hh=(e,t)=>{const n=Be(),{ht:s,ln:i,ot:o,nt:r,Qt:a,gt:l,wt:c,St:h,un:d}=e,{R:u}=n,p=c&&r,m=q($o,0),g={display:()=>!1,direction:e=>"ltr"!==e,flexDirection:e=>e.endsWith("-reverse"),writingMode:e=>"horizontal-tb"!==e},f=Pe(g),y={i:Oo,o:{w:0,h:0}},k={i:Nt,o:{}},w=e=>{h(Xo,!p&&e)},[v,b]=be(y,q(Ps,o)),[$,x]=be(y,q(an,o)),[E,C]=be(y),[S]=be(k),[T,L]=be(y),[A]=be(k),[P]=be({i:(e,t)=>fn(e,t,f),o:{}},(()=>eh(o)?ze(o,f):{})),[M,I]=be({i:(e,t)=>Nt(e.D,t.D)&&Nt(e.M,t.M),o:Qo()}),_=At(lr),R=(e,t)=>`${t?ih:oh}${Vd(e)}`;return({It:r,Zt:c,_n:y,Dt:k},{fn:q})=>{const{ft:O,Ht:D,Ct:U,dt:B,zt:j}=c||{},F=_&&_.tt(e,t,y,n,r),{it:z,ut:N,_t:W}=F||{},[H,G]=Ph(r,n),[V,Z]=r("overflow"),K=ct(V.x),J=ct(V.y);let Y=b(k),X=x(k),ee=C(k),te=L(k);G&&u&&h(Jo,!H);{As(s,We,Wt)&&w(!0);const[e]=N?N():[],[t]=Y=v(k),[n]=X=$(k),i=Vo(o),r=p&&Jd(d()),a={w:m(n.w+t.w),h:m(n.h+t.h)},l={w:m((r?r.w:i.w+m(i.w-n.w))+t.w),h:m((r?r.h:i.h+m(i.h-n.h))+t.h)};e&&e(),te=T(l),ee=E(((e,t)=>{const n=ke.devicePixelRatio%1!=0?1:0,s={w:m(e.w-t.w),h:m(e.h-t.h)};return{w:s.w>n?s.w:0,h:s.h>n?s.h:0}})(a,l),k)}const[ne,se]=te,[oe,re]=ee,[ae,le]=X,[ce,he]=Y,[de,ue]=S({x:oe.w>0,y:oe.h>0}),pe=K&&J&&(de.x||de.y)||K&&de.x&&!de.y||J&&de.y&&!de.x,me=q||U||j||he||le||se||re||Z||G||!0,ge=Ih(de,V),[fe,ye]=A(ge.K),[we,ve]=P(k),be=U||B||ve||ue||k,[$e,xe]=be?M((e=>{if(!f.some((t=>{const n=e[t];return n&&g[t](n)})))return{D:{x:0,y:0},M:{x:1,y:1}};w(!0);const t=Ce(l),n=h(lh,!0),s=ie(a,at,(e=>{const n=Ce(l);e.isTrusted&&n.x===t.x&&n.y===t.y&&Ko(e)}),{I:!0,A:!0});Oe(l,{x:0,y:0}),n();const i=Ce(l),o=an(l);Oe(l,{x:o.w,y:o.h});const r=Ce(l);Oe(l,{x:r.x-i.x<1&&-o.w,y:r.y-i.y<1&&-o.h});const c=Ce(l);return Oe(l,t),bs((()=>s())),{D:i,M:c}})(we),k):I();return me&&(ye&&(e=>{const t=e=>[Ne,Qe,at].map((t=>R(t,e))),n=t(!0).concat(t()).join(" ");h(n),h(Pe(e).map((t=>R(e[t],"x"===t))).join(" "),!0)})(ge.K),W&&z&&St(o,W(ge,y,z(ge,ae,ce)))),w(!1),rn(s,We,Wt,pe),rn(i,os,Wt,pe),Q(t,{K:fe,Vt:{x:ne.w,y:ne.h},Rt:{x:oe.w,y:oe.h},rn:de,Lt:th($e,oe)}),{en:ye,nn:se,sn:re,cn:xe||re,vn:be}}},Nh=e=>{const[t,n,s]=Uh(e),i={ln:{t:0,r:0,b:0,l:0},dn:!1,rt:{[_o]:0,[Po]:0,[Ao]:0,[So]:0,[Eo]:0,[Lo]:0,[To]:0},Vt:{x:0,y:0},Rt:{x:0,y:0},K:{x:Qe,y:Qe},rn:{x:!1,y:!1},Lt:Qo()},{vt:o,gt:r,nt:a,Ot:l}=t,{R:c,k:h}=Be(),d=!c&&(h.x||h.y),u=[Fh(t),zh(t,i),Hh(t,i)];return[n,e=>{const t={},n=d&&Ce(r),s=n&&l();return ee(u,(n=>{Q(t,n(e,t)||{})})),Oe(r,n),s&&s(),!a&&Oe(o,0),t},i,t,s]},jh=(e,t,n,s,i)=>{let o=!1;const r=vi(t,{}),[a,l,c,h,d]=Nh(e),[u,p,m]=Rh(h,c,r,(e=>{w({},e)})),[g,f,,y]=qh(e,t,m,c,h,i),k=e=>Pe(e).some((t=>!!e[t])),w=(e,i)=>{if(n())return!1;const{pn:r,Dt:a,At:c,hn:h}=e,d=r||{},u=!!a||!o,g={It:vi(t,d,u),pn:d,Dt:u};if(h)return f(g),!1;const y=i||p(Q({},g,{At:c})),w=l(Q({},g,{_n:m,Zt:y}));f(Q({},g,{Zt:y,tn:w}));const v=k(y),b=k(w),$=v||b||!Es(d)||u;return o=!0,$&&s(e,{Zt:y,tn:w}),$};return[()=>{const{an:e,gt:t,Ot:n}=h,s=Ce(e),i=[u(),a(),g()],o=n();return Oe(t,s),o(),q(Se,i)},w,()=>({gn:m,bn:c}),{wn:h,yn:y},d]},Ve=(e,t,n)=>{const{N:s}=Be(),i=on(e),o=i?e:e.target,r=ir(o);if(t&&!r){let r=!1;const a=[],l={},c=e=>{const t=Do(e),n=At(Ah);return n?n(t,!0):t},h=Q({},s(),c(t)),[d,u,p]=is(),[m,g,f]=is(n),y=(e,t)=>{f(e,t),p(e,t)},[k,w,v,b,$]=jh(e,h,(()=>r),(({pn:e,Dt:t},{Zt:n,tn:s})=>{const{ft:i,Ct:o,xt:r,Ht:a,Et:l,dt:c}=n,{nn:h,sn:d,en:u,cn:p}=s;y("updated",[E,{updateHints:{sizeChanged:!!i,directionChanged:!!o,heightIntrinsicChanged:!!r,overflowEdgeChanged:!!h,overflowAmountChanged:!!d,overflowStyleChanged:!!u,scrollCoordinatesChanged:!!p,contentMutation:!!a,hostMutation:!!l,appear:!!c},changedOptions:e||{},force:!!t}])}),(e=>y("scroll",[E,e]))),x=e=>{Eh(o),Se(a),r=!0,y("destroyed",[E,e]),u(),g()},E={options(e,t){if(e){const n=t?s():{},i=Yo(h,Q(n,c(e)));Es(i)||(Q(h,i),w({pn:i}))}return Q({},h)},on:m,off:(e,t)=>{e&&t&&g(e,t)},state(){const{gn:e,bn:t}=v(),{ct:n}=e,{Vt:s,Rt:i,K:o,rn:a,ln:l,dn:c,Lt:h}=t;return Q({},{overflowEdge:s,overflowAmount:i,overflowStyle:o,hasOverflow:a,scrollCoordinates:{start:h.D,end:h.M},padding:l,paddingAbsolute:c,directionRTL:n,destroyed:r})},elements(){const{vt:e,ht:t,ln:n,ot:s,bt:i,gt:o,Qt:r}=b.wn,{Xt:a,Gt:l}=b.yn,c=e=>{const{Pt:t,Ut:n,Tt:s}=e;return{scrollbar:s,track:n,handle:t}},h=e=>{const{Yt:t,Wt:n}=e,s=c(t[0]);return Q({},s,{clone:()=>{const e=c(n());return w({hn:!0}),e}})};return Q({},{target:e,host:t,padding:n||s,viewport:s,content:i||s,scrollOffsetElement:o,scrollEventElement:r,scrollbarHorizontal:h(a),scrollbarVertical:h(l)})},update:e=>w({Dt:e,At:!0}),destroy:q(x,!1),plugin:e=>l[Pe(e)[0]]};return ae(a,[$]),Sh(o,E),ar(or,Ve,[E,d,l]),Ch(b.wn.wt,!i&&e.cancel)?(x(!0),E):(ae(a,k()),y("initialized",[E]),E.update(),E)}return r};Ve.plugin=e=>{const t=De(e),n=t?e:[e],s=n.map((e=>ar(e,Ve)[0]));return Lh(n),t?s:s[0]},Ve.valid=e=>{const t=e&&e.elements,n=_e(t)&&t();return sn(n)&&!!ir(n.target)},Ve.env=()=>{const{T:e,k:t,R:n,V:s,B:i,F:o,U:r,P:a,N:l,q:c}=Be();return Q({},{scrollbarsSize:e,scrollbarsOverlaid:t,scrollbarsHiding:n,scrollTimeline:s,staticDefaultInitialization:i,staticDefaultOptions:o,getDefaultInitialization:r,setDefaultInitialization:a,getDefaultOptions:l,setDefaultOptions:c})},Ve.nonce=bh;const dr=!!document.getElementById("banner-wrapper");function Rs(e,t){document.addEventListener("click",(n=>{let s=document.getElementById(e),i=n.target;if(i instanceof Node){for(let e of t){let t=document.getElementById(e);if(t==i||t?.contains(i))return}s.classList.add("float-panel-closed")}}))}function Wh(){const e=wr();br(e)}function Vh(){$r(xr())}function hr(){const e=document.querySelector("body");e&&(Ve({target:e,cancel:{nativeScrollbarsOverlaid:!0}},{scrollbars:{theme:"scrollbar-base scrollbar-auto py-1",autoHide:"move",autoHideDelay:500,autoHideSuspend:!1}}),document.querySelectorAll("pre").forEach((e=>{Ve(e,{scrollbars:{theme:"scrollbar-base scrollbar-dark px-2",autoHide:"leave",autoHideDelay:500,autoHideSuspend:!1}})})))}function Gh(){const e=document.getElementById("banner");e?e.classList.remove("opacity-0","scale-105"):console.error("Failed to find the banner element")}function ur(){Wh(),Vh(),hr(),Gh()}Rs("display-setting",["display-setting","display-settings-switch"]),Rs("nav-menu-panel",["nav-menu-panel","nav-menu-switch"]),Rs("search-panel",["search-panel","search-bar","search-switch"]),ur(),document.addEventListener("astro:after-swap",ur);const Ei=()=>{window.swup.hooks.on("link:click",(()=>{if(document.documentElement.style.setProperty("--content-delay","0ms"),!dr)return;let e=.3*window.innerHeight-72-16,t=document.getElementById("navbar-wrapper");!t||!document.body.classList.contains("lg:is-home")||(document.body.scrollTop>=e||document.documentElement.scrollTop>=e)&&t.classList.add("navbar-hidden")})),window.swup.hooks.on("content:replace",hr),window.swup.hooks.on("visit:start",(e=>{const t=document.querySelector("body");Cr(e.to.url,Sr("/"))?t.classList.add("lg:is-home"):t.classList.remove("lg:is-home");const n=document.getElementById("page-height-extend");n&&n.classList.remove("hidden")})),window.swup.hooks.on("page:view",(()=>{const e=document.getElementById("page-height-extend");e&&e.classList.remove("hidden")})),window.swup.hooks.on("visit:end",(e=>{const t=document.getElementById("page-height-extend");t&&t.classList.add("hidden")}))};window?.swup?.hooks?Ei():document.addEventListener("swup:enable",Ei);let _n=document.getElementById("back-to-top-btn"),Pn=document.getElementById("navbar-wrapper");function Kh(){if(_n&&(document.body.scrollTop>600||document.documentElement.scrollTop>600?_n.classList.remove("hide"):_n.classList.add("hide")),dr&&Pn){let e=.3*window.innerHeight-72-16;document.body.classList.contains("lg:is-home")&&window.innerWidth>=1024&&(e=.6*window.innerHeight-72-16),document.body.scrollTop>=e||document.documentElement.scrollTop>=e?Pn.classList.add("navbar-hidden"):Pn.classList.remove("navbar-hidden")}}function Zh(){"dark"===localStorage.theme?(document.documentElement.classList.remove("dark"),localStorage.theme="light"):(document.documentElement.classList.add("dark"),localStorage.theme="dark")}function pr(){let e=document.getElementById("scheme-switch");e&&e.addEventListener("click",(function(){Zh()}));let t=document.getElementById("display-settings-switch");t&&t.addEventListener("click",(function(){let e=document.getElementById("display-setting");e&&e.classList.toggle("float-panel-closed")}));let n=document.getElementById("nav-menu-switch");n&&n.addEventListener("click",(function(){let e=document.getElementById("nav-menu-panel");e&&e.classList.toggle("float-panel-closed")}))}window.onscroll=Kh,pr(),document.addEventListener("astro:after-swap",(()=>{pr()}),{once:!1});class Qh extends HTMLElement{constructor(){if(super(),"true"!==this.dataset.isCollapsed)return;const e=this.dataset.id,t=this.querySelector(".expand-btn"),n=this.querySelector(`#${e}`);t.addEventListener("click",(()=>{n.classList.remove("collapsed"),t.classList.add("hidden")}))}}customElements.define("widget-layout",Qh); \ No newline at end of file diff --git a/about/index.html b/about/index.html index 8ab947d..6d2610f 100644 --- a/about/index.html +++ b/about/index.html @@ -1 +1 @@ -关于 - 平淡生活
      \ No newline at end of file +关于 - 平淡生活
      \ No newline at end of file diff --git a/archive/category/uncategorized/index.html b/archive/category/uncategorized/index.html index 4075319..920f3b9 100644 --- a/archive/category/uncategorized/index.html +++ b/archive/category/uncategorized/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/category/\345\210\206\344\272\253/index.html" "b/archive/category/\345\210\206\344\272\253/index.html" index 61117e5..24938e0 100644 --- "a/archive/category/\345\210\206\344\272\253/index.html" +++ "b/archive/category/\345\210\206\344\272\253/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/category/\345\215\232\345\256\242/index.html" "b/archive/category/\345\215\232\345\256\242/index.html" index 70b3cb4..3f10d51 100644 --- "a/archive/category/\345\215\232\345\256\242/index.html" +++ "b/archive/category/\345\215\232\345\256\242/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/category/\346\216\250\350\215\220/index.html" "b/archive/category/\346\216\250\350\215\220/index.html" index 2bf6094..e6a8420 100644 --- "a/archive/category/\346\216\250\350\215\220/index.html" +++ "b/archive/category/\346\216\250\350\215\220/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/category/\351\232\217\347\254\224/index.html" "b/archive/category/\351\232\217\347\254\224/index.html" index 3eab32a..6e57e01 100644 --- "a/archive/category/\351\232\217\347\254\224/index.html" +++ "b/archive/category/\351\232\217\347\254\224/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/category/\351\273\230\350\256\244/index.html" "b/archive/category/\351\273\230\350\256\244/index.html" index f29d3aa..a3e68c6 100644 --- "a/archive/category/\351\273\230\350\256\244/index.html" +++ "b/archive/category/\351\273\230\350\256\244/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/index.html b/archive/index.html index 0d527eb..dde47a1 100644 --- a/archive/index.html +++ b/archive/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Alist/index.html b/archive/tag/Alist/index.html index e91524d..7788141 100644 --- a/archive/tag/Alist/index.html +++ b/archive/tag/Alist/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Artalk/index.html b/archive/tag/Artalk/index.html index 101d37d..87192db 100644 --- a/archive/tag/Artalk/index.html +++ b/archive/tag/Artalk/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Astro/index.html b/archive/tag/Astro/index.html index 0ae3f51..83f47cc 100644 --- a/archive/tag/Astro/index.html +++ b/archive/tag/Astro/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/CommentsByQQ/index.html b/archive/tag/CommentsByQQ/index.html index dd1e422..cba0564 100644 --- a/archive/tag/CommentsByQQ/index.html +++ b/archive/tag/CommentsByQQ/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Docker/index.html b/archive/tag/Docker/index.html index 5d6e999..1393b49 100644 --- a/archive/tag/Docker/index.html +++ b/archive/tag/Docker/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Github/index.html b/archive/tag/Github/index.html index f4d2dd5..67798a6 100644 --- a/archive/tag/Github/index.html +++ b/archive/tag/Github/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Gotosocial/index.html b/archive/tag/Gotosocial/index.html index ec76659..c783a57 100644 --- a/archive/tag/Gotosocial/index.html +++ b/archive/tag/Gotosocial/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Hexo/index.html b/archive/tag/Hexo/index.html index edc7b06..be57607 100644 --- a/archive/tag/Hexo/index.html +++ b/archive/tag/Hexo/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Linux/index.html b/archive/tag/Linux/index.html index 24e9e92..921bb56 100644 --- a/archive/tag/Linux/index.html +++ b/archive/tag/Linux/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Mariadb/index.html b/archive/tag/Mariadb/index.html index 24d47da..c5b4c10 100644 --- a/archive/tag/Mariadb/index.html +++ b/archive/tag/Mariadb/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Memos/index.html b/archive/tag/Memos/index.html index e2eb867..16727a0 100644 --- a/archive/tag/Memos/index.html +++ b/archive/tag/Memos/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Pleroma/index.html b/archive/tag/Pleroma/index.html index 14cffe9..80e8d64 100644 --- a/archive/tag/Pleroma/index.html +++ b/archive/tag/Pleroma/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" "b/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" index 2994e08..b2824d0 100644 --- "a/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" +++ "b/archive/tag/QQ\346\234\272\345\231\250\344\272\272/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/SForum/index.html b/archive/tag/SForum/index.html index 72325ab..7dfb6a9 100644 --- a/archive/tag/SForum/index.html +++ b/archive/tag/SForum/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/Twikoo/index.html b/archive/tag/Twikoo/index.html index 29bda38..9076950 100644 --- a/archive/tag/Twikoo/index.html +++ b/archive/tag/Twikoo/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/V2RAY/index.html b/archive/tag/V2RAY/index.html index c28512f..d4931a2 100644 --- a/archive/tag/V2RAY/index.html +++ b/archive/tag/V2RAY/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/VPS/index.html b/archive/tag/VPS/index.html index ce8bd5f..ee5bb4a 100644 --- a/archive/tag/VPS/index.html +++ b/archive/tag/VPS/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/amd/index.html b/archive/tag/amd/index.html index 3ca80e3..33aa508 100644 --- a/archive/tag/amd/index.html +++ b/archive/tag/amd/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/artalk/index.html b/archive/tag/artalk/index.html index c5e92be..8761461 100644 --- a/archive/tag/artalk/index.html +++ b/archive/tag/artalk/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/centos/index.html b/archive/tag/centos/index.html index c901267..37ac773 100644 --- a/archive/tag/centos/index.html +++ b/archive/tag/centos/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/chajian/index.html b/archive/tag/chajian/index.html index 1162f6f..e39f250 100644 --- a/archive/tag/chajian/index.html +++ b/archive/tag/chajian/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/chatgpt/index.html b/archive/tag/chatgpt/index.html index 068a8b7..8eef7d7 100644 --- a/archive/tag/chatgpt/index.html +++ b/archive/tag/chatgpt/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/cloud torrent/index.html b/archive/tag/cloud torrent/index.html index bd56f18..ef15b28 100644 --- a/archive/tag/cloud torrent/index.html +++ b/archive/tag/cloud torrent/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/clover/index.html b/archive/tag/clover/index.html index c2b652f..afae996 100644 --- a/archive/tag/clover/index.html +++ b/archive/tag/clover/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/edid/index.html b/archive/tag/edid/index.html index 37b4134..5ff78ce 100644 --- a/archive/tag/edid/index.html +++ b/archive/tag/edid/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/fly.io/index.html b/archive/tag/fly.io/index.html index 60cc724..ba70065 100644 --- a/archive/tag/fly.io/index.html +++ b/archive/tag/fly.io/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/fuwari/index.html b/archive/tag/fuwari/index.html index b1d0970..74ffdf8 100644 --- a/archive/tag/fuwari/index.html +++ b/archive/tag/fuwari/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/hackintool/index.html b/archive/tag/hackintool/index.html index e96cff5..0599267 100644 --- a/archive/tag/hackintool/index.html +++ b/archive/tag/hackintool/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/hexo/index.html b/archive/tag/hexo/index.html index 65929f9..5e1e571 100644 --- a/archive/tag/hexo/index.html +++ b/archive/tag/hexo/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/lede/index.html b/archive/tag/lede/index.html index 4361552..333aa65 100644 --- a/archive/tag/lede/index.html +++ b/archive/tag/lede/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/linux/index.html b/archive/tag/linux/index.html index d4941e5..a40e453 100644 --- a/archive/tag/linux/index.html +++ b/archive/tag/linux/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/macos/index.html b/archive/tag/macos/index.html index 58e0a84..1dc1a6e 100644 --- a/archive/tag/macos/index.html +++ b/archive/tag/macos/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/mastodon/index.html b/archive/tag/mastodon/index.html index 4c774ad..7750af7 100644 --- a/archive/tag/mastodon/index.html +++ b/archive/tag/mastodon/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/memos/index.html b/archive/tag/memos/index.html index 77fb7bf..780ffa4 100644 --- a/archive/tag/memos/index.html +++ b/archive/tag/memos/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/office/index.html b/archive/tag/office/index.html index a1fc8c0..54bcf40 100644 --- a/archive/tag/office/index.html +++ b/archive/tag/office/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/opencore/index.html b/archive/tag/opencore/index.html index c886c6d..bbc9f54 100644 --- a/archive/tag/opencore/index.html +++ b/archive/tag/opencore/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/openwrt/index.html b/archive/tag/openwrt/index.html index a9266f6..363a898 100644 --- a/archive/tag/openwrt/index.html +++ b/archive/tag/openwrt/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/samsung/index.html b/archive/tag/samsung/index.html index e06cea8..2641594 100644 --- a/archive/tag/samsung/index.html +++ b/archive/tag/samsung/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/torrent/index.html b/archive/tag/torrent/index.html index 7b94f9b..cc78124 100644 --- a/archive/tag/torrent/index.html +++ b/archive/tag/torrent/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/typecho/index.html b/archive/tag/typecho/index.html index e630ddf..5db5200 100644 --- a/archive/tag/typecho/index.html +++ b/archive/tag/typecho/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/webhook/index.html b/archive/tag/webhook/index.html index bfdbb19..e9ca2c1 100644 --- a/archive/tag/webhook/index.html +++ b/archive/tag/webhook/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/archive/tag/windows/index.html b/archive/tag/windows/index.html index ea165fc..5415503 100644 --- a/archive/tag/windows/index.html +++ b/archive/tag/windows/index.html @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\344\270\213\350\275\275/index.html" "b/archive/tag/\344\270\213\350\275\275/index.html" index 79c9679..02d526a 100644 --- "a/archive/tag/\344\270\213\350\275\275/index.html" +++ "b/archive/tag/\344\270\213\350\275\275/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\344\270\273\346\216\247/index.html" "b/archive/tag/\344\270\273\346\216\247/index.html" index 6902ef3..b8fba65 100644 --- "a/archive/tag/\344\270\273\346\216\247/index.html" +++ "b/archive/tag/\344\270\273\346\216\247/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\205\215\351\251\261/index.html" "b/archive/tag/\345\205\215\351\251\261/index.html" index 7912e82..23e359b 100644 --- "a/archive/tag/\345\205\215\351\251\261/index.html" +++ "b/archive/tag/\345\205\215\351\251\261/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\215\232\345\256\242/index.html" "b/archive/tag/\345\215\232\345\256\242/index.html" index 098eab7..77f75a5 100644 --- "a/archive/tag/\345\215\232\345\256\242/index.html" +++ "b/archive/tag/\345\215\232\345\256\242/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\216\202\345\225\206/index.html" "b/archive/tag/\345\216\202\345\225\206/index.html" index d596679..87820de 100644 --- "a/archive/tag/\345\216\202\345\225\206/index.html" +++ "b/archive/tag/\345\216\202\345\225\206/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\221\275\344\273\244/index.html" "b/archive/tag/\345\221\275\344\273\244/index.html" index 283dd29..58471a7 100644 --- "a/archive/tag/\345\221\275\344\273\244/index.html" +++ "b/archive/tag/\345\221\275\344\273\244/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\233\272\346\200\201/index.html" "b/archive/tag/\345\233\272\346\200\201/index.html" index 575a65a..3f13e23 100644 --- "a/archive/tag/\345\233\272\346\200\201/index.html" +++ "b/archive/tag/\345\233\272\346\200\201/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\255\227\344\275\223/index.html" "b/archive/tag/\345\255\227\344\275\223/index.html" index e256a3b..947e47e 100644 --- "a/archive/tag/\345\255\227\344\275\223/index.html" +++ "b/archive/tag/\345\255\227\344\275\223/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\345\274\200\345\215\241/index.html" "b/archive/tag/\345\274\200\345\215\241/index.html" index b672915..305e934 100644 --- "a/archive/tag/\345\274\200\345\215\241/index.html" +++ "b/archive/tag/\345\274\200\345\215\241/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\346\225\231\347\250\213/index.html" "b/archive/tag/\346\225\231\347\250\213/index.html" index a864a04..61af640 100644 --- "a/archive/tag/\346\225\231\347\250\213/index.html" +++ "b/archive/tag/\346\225\231\347\250\213/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\346\230\276\345\215\241/index.html" "b/archive/tag/\346\230\276\345\215\241/index.html" index 1fa878a..a059594 100644 --- "a/archive/tag/\346\230\276\345\215\241/index.html" +++ "b/archive/tag/\346\230\276\345\215\241/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\346\242\257\345\255\220/index.html" "b/archive/tag/\346\242\257\345\255\220/index.html" index 3ec0988..84b53e4 100644 --- "a/archive/tag/\346\242\257\345\255\220/index.html" +++ "b/archive/tag/\346\242\257\345\255\220/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\346\263\250\345\206\214/index.html" "b/archive/tag/\346\263\250\345\206\214/index.html" index 76ba812..bce06b7 100644 --- "a/archive/tag/\346\263\250\345\206\214/index.html" +++ "b/archive/tag/\346\263\250\345\206\214/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\347\224\237\346\264\273/index.html" "b/archive/tag/\347\224\237\346\264\273/index.html" index 2fecec3..985e443 100644 --- "a/archive/tag/\347\224\237\346\264\273/index.html" +++ "b/archive/tag/\347\224\237\346\264\273/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\347\241\254\347\233\230/index.html" "b/archive/tag/\347\241\254\347\233\230/index.html" index b8fc0e6..1bd17c2 100644 --- "a/archive/tag/\347\241\254\347\233\230/index.html" +++ "b/archive/tag/\347\241\254\347\233\230/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" "b/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" index 5f31467..a760579 100644 --- "a/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" +++ "b/archive/tag/\347\241\254\347\233\230\347\233\222/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\347\243\201\345\212\233/index.html" "b/archive/tag/\347\243\201\345\212\233/index.html" index a2bbe6b..d936be1 100644 --- "a/archive/tag/\347\243\201\345\212\233/index.html" +++ "b/archive/tag/\347\243\201\345\212\233/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" "b/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" index d7a986a..b7fb505 100644 --- "a/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" +++ "b/archive/tag/\347\247\221\345\255\246\344\270\212\347\275\221/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" "b/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" index 7b22241..a9c146d 100644 --- "a/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" +++ "b/archive/tag/\347\254\224\350\256\260\346\234\254/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" "b/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" index b36a08f..387be7f 100644 --- "a/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" +++ "b/archive/tag/\350\207\252\345\212\250\345\214\226/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" "b/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" index d157ccf..31ab785 100644 --- "a/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" +++ "b/archive/tag/\350\231\232\346\213\237\344\277\241\347\224\250\345\215\241/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\350\247\202\345\275\261/index.html" "b/archive/tag/\350\247\202\345\275\261/index.html" index 21511a7..ebe886a 100644 --- "a/archive/tag/\350\247\202\345\275\261/index.html" +++ "b/archive/tag/\350\247\202\345\275\261/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\350\257\204\350\256\272/index.html" "b/archive/tag/\350\257\204\350\256\272/index.html" index bef5828..c67b751 100644 --- "a/archive/tag/\350\257\204\350\256\272/index.html" +++ "b/archive/tag/\350\257\204\350\256\272/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\350\261\206\347\223\243/index.html" "b/archive/tag/\350\261\206\347\223\243/index.html" index 6a507a9..59a6887 100644 --- "a/archive/tag/\350\261\206\347\223\243/index.html" +++ "b/archive/tag/\350\261\206\347\223\243/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" "b/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" index 0111c6a..25f4e8d 100644 --- "a/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" +++ "b/archive/tag/\350\275\257\350\267\257\347\224\261/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\351\203\250\347\275\262/index.html" "b/archive/tag/\351\203\250\347\275\262/index.html" index 6da33c7..e212e4e 100644 --- "a/archive/tag/\351\203\250\347\275\262/index.html" +++ "b/archive/tag/\351\203\250\347\275\262/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\351\230\277\351\207\214/index.html" "b/archive/tag/\351\230\277\351\207\214/index.html" index cd982de..5f542c1 100644 --- "a/archive/tag/\351\230\277\351\207\214/index.html" +++ "b/archive/tag/\351\230\277\351\207\214/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" "b/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" index 55cfbd2..261fca2 100644 --- "a/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" +++ "b/archive/tag/\351\230\277\351\207\214\346\202\237\347\251\272/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" "b/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" index 0125559..ed07bed 100644 --- "a/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" +++ "b/archive/tag/\351\234\236\351\271\234\346\226\207\346\245\267/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git "a/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" "b/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" index ef39609..fd87a83 100644 --- "a/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" +++ "b/archive/tag/\351\273\221\350\213\271\346\236\234/index.html" @@ -1 +1 @@ -归档 - 平淡生活
      \ No newline at end of file +归档 - 平淡生活
      \ No newline at end of file diff --git a/index.html b/index.html index ae63127..a320e3a 100644 --- a/index.html +++ b/index.html @@ -1 +1 @@ -平淡生活 - 退休前的牛马生活
      从Hexo到Astro
      本文简单讲述了如何从从Hexo到Astro的过程,并使用脚本转换Front-matter
      413 字
      |
      2 分钟
      LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
      这篇文章介绍了如何通过SSH登录到软路由,并指导用户安装一个名为koolss的科学上网插件。具体步骤包括下载插件文件,其链接为[https://blog-1312096806.cos.ap-guangzhou.myqcloud.com/halo/koolss_2.2.2.tar.gz]。
      30 字
      |
      1 分钟
      给Memos添加Artalk评论
      2024-10-10
      这篇文章介绍了如何为Memos v0.16.1版本添加Twikoo评论功能,并提供了自定义脚本和样式的更新说明。文章中包括了具体的代码替换步骤,如将’.resource-wrapper’替换为’.gap-2’或’.memo-wrapper’,以及如何隐藏评论数的操作指南。此外,还提到了适用于Memos 0.15.1版本以下的更新提醒。
      230 字
      |
      1 分钟
      给Memos添加Twikoo评论
      2024-10-10
      这篇文章介绍了如何更新和自定义脚本以适应不同版本的memos应用。文章提到了2023年10月23日对脚本的更新,使其适用于memos v0.16.1版本,以及之前的几次更新。此外,文章还提到了由于官方已经添加了评论图标,因此不再需要通过CSS添加图标。最后,文章指出了在memos升级到0.15.1版本后,某些自定义脚本无法使用的情况。
      577 字
      |
      3 分钟
      Artalk评论使用QQ机器人通知
      这篇文章介绍了如何使用QQ机器人接收Artalk的评论通知。文章首先确保Artalk和QQ机器人都已部署完成,然后通过配置QQ机器人的HTTP服务和中间服务MESSAGE-PUSHER来实现消息推送。接着,文章详细说明了如何在MESSAGE-PUSHER中配置通道和接口,并将生成的Webhook地址填入Artalk的Webhook设置中,从而实现Artalk评论时QQ机器人的通知功能。
      417 字
      |
      2 分钟
      使用Docker快速部署一个memos的QQ机器人
      这篇文章介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。文章详细描述了准备工作,包括安装Docker、获取QQ账号和Memos账号。接着,文章提供了具体的部署步骤,包括创建docker-compose.yml文件并运行相关命令来启动QQ机器人。最后,文章还简要说明了如何使用这个机器人,包括绑定账号和发送消息到Memos的功能。
      500 字
      |
      3 分钟
      给博客增加一个观影页面
      这篇文章介绍了作者如何通过自定义代码构建一个观影页面,而不是使用插件。文章详细描述了项目的GitHub地址,并提供了具体的步骤:首先根据提供的GitHub链接创建接口,然后在博客根目录下新建movies文件夹和index.md文件,接着创建movies.js文件和movies.css文件,最后完成页面的构建。
      471 字
      |
      2 分钟
      通过取子集的方式压缩霞鹜文楷字体
      这篇文章介绍了如何使用Python的fonttools库对字体文件进行子集化和压缩。首先,通过pip安装fonttools库,然后使用该库对指定的字体文件进行子集化处理,保留特定的字符集,从而将字体文件从11M压缩到1.7M左右。接着,文章还提到了如何安装并使用brotli模块进一步压缩字体文件,并将最终结果转换为woff2格式,大小约为840kb。整个过程涉及输入和输出文件路径的定义,以及具体的命令操作。
      199 字
      |
      1 分钟
      \ No newline at end of file +平淡生活 - 退休前的牛马生活
      从Hexo到Astro
      本文简单讲述了如何从从Hexo到Astro的过程,并使用脚本转换Front-matter
      413 字
      |
      2 分钟
      LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
      这篇文章介绍了如何通过SSH登录到软路由,并指导用户安装一个名为koolss的科学上网插件。具体步骤包括下载插件文件,其链接为[https://blog-1312096806.cos.ap-guangzhou.myqcloud.com/halo/koolss_2.2.2.tar.gz]。
      30 字
      |
      1 分钟
      给Memos添加Artalk评论
      2024-10-10
      这篇文章介绍了如何为Memos v0.16.1版本添加Twikoo评论功能,并提供了自定义脚本和样式的更新说明。文章中包括了具体的代码替换步骤,如将’.resource-wrapper’替换为’.gap-2’或’.memo-wrapper’,以及如何隐藏评论数的操作指南。此外,还提到了适用于Memos 0.15.1版本以下的更新提醒。
      230 字
      |
      1 分钟
      给Memos添加Twikoo评论
      2024-10-10
      这篇文章介绍了如何更新和自定义脚本以适应不同版本的memos应用。文章提到了2023年10月23日对脚本的更新,使其适用于memos v0.16.1版本,以及之前的几次更新。此外,文章还提到了由于官方已经添加了评论图标,因此不再需要通过CSS添加图标。最后,文章指出了在memos升级到0.15.1版本后,某些自定义脚本无法使用的情况。
      577 字
      |
      3 分钟
      Artalk评论使用QQ机器人通知
      这篇文章介绍了如何使用QQ机器人接收Artalk的评论通知。文章首先确保Artalk和QQ机器人都已部署完成,然后通过配置QQ机器人的HTTP服务和中间服务MESSAGE-PUSHER来实现消息推送。接着,文章详细说明了如何在MESSAGE-PUSHER中配置通道和接口,并将生成的Webhook地址填入Artalk的Webhook设置中,从而实现Artalk评论时QQ机器人的通知功能。
      417 字
      |
      2 分钟
      使用Docker快速部署一个memos的QQ机器人
      这篇文章介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。文章详细描述了准备工作,包括安装Docker、获取QQ账号和Memos账号。接着,文章提供了具体的部署步骤,包括创建docker-compose.yml文件并运行相关命令来启动QQ机器人。最后,文章还简要说明了如何使用这个机器人,包括绑定账号和发送消息到Memos的功能。
      500 字
      |
      3 分钟
      给博客增加一个观影页面
      这篇文章介绍了作者如何通过自定义代码构建一个观影页面,而不是使用插件。文章详细描述了项目的GitHub地址,并提供了具体的步骤:首先根据提供的GitHub链接创建接口,然后在博客根目录下新建movies文件夹和index.md文件,接着创建movies.js文件和movies.css文件,最后完成页面的构建。
      471 字
      |
      2 分钟
      通过取子集的方式压缩霞鹜文楷字体
      这篇文章介绍了如何使用Python的fonttools库对字体文件进行子集化和压缩。首先,通过pip安装fonttools库,然后使用该库对指定的字体文件进行子集化处理,保留特定的字符集,从而将字体文件从11M压缩到1.7M左右。接着,文章还提到了如何安装并使用brotli模块进一步压缩字体文件,并将最终结果转换为woff2格式,大小约为840kb。整个过程涉及输入和输出文件路径的定义,以及具体的命令操作。
      199 字
      |
      1 分钟
      \ No newline at end of file diff --git a/memos/index.html b/memos/index.html index a839798..3355ba4 100644 --- a/memos/index.html +++ b/memos/index.html @@ -1 +1 @@ -关于 - 平淡生活
      \ No newline at end of file +关于 - 平淡生活
      \ No newline at end of file diff --git a/pagefind/fragment/zh-cn_1bf44ab.pf_fragment b/pagefind/fragment/zh-cn_1bf44ab.pf_fragment new file mode 100644 index 0000000..173c8af Binary files /dev/null and b/pagefind/fragment/zh-cn_1bf44ab.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_2445239.pf_fragment b/pagefind/fragment/zh-cn_2445239.pf_fragment new file mode 100644 index 0000000..c572d7e Binary files /dev/null and b/pagefind/fragment/zh-cn_2445239.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_261643d.pf_fragment b/pagefind/fragment/zh-cn_261643d.pf_fragment deleted file mode 100644 index d103a9f..0000000 Binary files a/pagefind/fragment/zh-cn_261643d.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_5d7cba7.pf_fragment b/pagefind/fragment/zh-cn_5d7cba7.pf_fragment deleted file mode 100644 index 977e39f..0000000 Binary files a/pagefind/fragment/zh-cn_5d7cba7.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_75e8203.pf_fragment b/pagefind/fragment/zh-cn_6a53e6b.pf_fragment similarity index 88% rename from pagefind/fragment/zh-cn_75e8203.pf_fragment rename to pagefind/fragment/zh-cn_6a53e6b.pf_fragment index 622569b..c46a8cc 100644 Binary files a/pagefind/fragment/zh-cn_75e8203.pf_fragment and b/pagefind/fragment/zh-cn_6a53e6b.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_6ed4378.pf_fragment b/pagefind/fragment/zh-cn_6ed4378.pf_fragment new file mode 100644 index 0000000..45ff786 Binary files /dev/null and b/pagefind/fragment/zh-cn_6ed4378.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_7d5fded.pf_fragment b/pagefind/fragment/zh-cn_7d5fded.pf_fragment new file mode 100644 index 0000000..51e98ab Binary files /dev/null and b/pagefind/fragment/zh-cn_7d5fded.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_817470c.pf_fragment b/pagefind/fragment/zh-cn_817470c.pf_fragment deleted file mode 100644 index 6a346fa..0000000 Binary files a/pagefind/fragment/zh-cn_817470c.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_95274fe.pf_fragment b/pagefind/fragment/zh-cn_95274fe.pf_fragment deleted file mode 100644 index 7665ef8..0000000 Binary files a/pagefind/fragment/zh-cn_95274fe.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_9d2b1a5.pf_fragment b/pagefind/fragment/zh-cn_9d2b1a5.pf_fragment new file mode 100644 index 0000000..e6ff960 Binary files /dev/null and b/pagefind/fragment/zh-cn_9d2b1a5.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_d2235f9.pf_fragment b/pagefind/fragment/zh-cn_d2235f9.pf_fragment deleted file mode 100644 index 9fafdca..0000000 Binary files a/pagefind/fragment/zh-cn_d2235f9.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_d5fe5a7.pf_fragment b/pagefind/fragment/zh-cn_d5fe5a7.pf_fragment new file mode 100644 index 0000000..960769e Binary files /dev/null and b/pagefind/fragment/zh-cn_d5fe5a7.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_e1c98bb.pf_fragment b/pagefind/fragment/zh-cn_e1c98bb.pf_fragment deleted file mode 100644 index ce8dab8..0000000 Binary files a/pagefind/fragment/zh-cn_e1c98bb.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_e355e39.pf_fragment b/pagefind/fragment/zh-cn_e355e39.pf_fragment deleted file mode 100644 index 0e49200..0000000 Binary files a/pagefind/fragment/zh-cn_e355e39.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_e7a23a6.pf_fragment b/pagefind/fragment/zh-cn_e7a23a6.pf_fragment new file mode 100644 index 0000000..7028c42 Binary files /dev/null and b/pagefind/fragment/zh-cn_e7a23a6.pf_fragment differ diff --git a/pagefind/fragment/zh-cn_e8f742a.pf_fragment b/pagefind/fragment/zh-cn_e8f742a.pf_fragment deleted file mode 100644 index acad206..0000000 Binary files a/pagefind/fragment/zh-cn_e8f742a.pf_fragment and /dev/null differ diff --git a/pagefind/fragment/zh-cn_f3e7d1a.pf_fragment b/pagefind/fragment/zh-cn_f3e7d1a.pf_fragment new file mode 100644 index 0000000..cb59605 Binary files /dev/null and b/pagefind/fragment/zh-cn_f3e7d1a.pf_fragment differ diff --git a/pagefind/pagefind-entry.json b/pagefind/pagefind-entry.json index 3167f8f..926ca95 100644 --- a/pagefind/pagefind-entry.json +++ b/pagefind/pagefind-entry.json @@ -1 +1 @@ -{"version":"1.1.0","languages":{"zh-cn":{"hash":"zh-cn_be3c2dbab86e9","wasm":null,"page_count":44}}} \ No newline at end of file +{"version":"1.1.0","languages":{"zh-cn":{"hash":"zh-cn_6a38ec9d7c44a","wasm":null,"page_count":44}}} \ No newline at end of file diff --git a/pagefind/pagefind.zh-cn_6a38ec9d7c44a.pf_meta b/pagefind/pagefind.zh-cn_6a38ec9d7c44a.pf_meta new file mode 100644 index 0000000..988ef3f Binary files /dev/null and b/pagefind/pagefind.zh-cn_6a38ec9d7c44a.pf_meta differ diff --git a/pagefind/pagefind.zh-cn_be3c2dbab86e9.pf_meta b/pagefind/pagefind.zh-cn_be3c2dbab86e9.pf_meta deleted file mode 100644 index 95572e5..0000000 Binary files a/pagefind/pagefind.zh-cn_be3c2dbab86e9.pf_meta and /dev/null differ diff --git a/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html b/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html index 6bef88e..3b5cd15 100644 --- a/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html +++ b/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/index.html @@ -1 +1 @@ -2023年黑苹果amd免驱显卡购买推荐 - 平淡生活
      332 字
      2 分钟
      2023年黑苹果amd免驱显卡购买推荐

      RX 6600 RX 6600 XT RX 6800 RX 6800 XT RX 6900 XT

      RX 5500 RX 5500 XT RX 5600 RX 5600 XT RX 5700 RX 5700 XT RX 5700 XT 50周年纪念版 如遇到黑屏,需要boot参数agdpmod=pikera才能正确显示

      Vega 20系列 从Mojave开始支持#

      Radeon VII

      Vega 10系列 从High Sierra开始支持#

      Vega 64 Liquid Vega 64 Vega 56 Vega Frontier Edition Radeon Pro WX 9100 Radeon Pro WX 7100 ## Polaris架构10和20系列 从Sierra开始支持 400系列:

      RX 480 RX 470D RX 470 RX 460 RX 590 RX 580X RX 580 RX 570X RX 570 RX 560X RX 560 WX 5100 WX 4100 E9550

      还有些同Polaris核心的 rx550

      R7 / R9系列 从Yosemite开始支持#

      R9 Fury X R9 Fury R9 Nano R9 390(需要FakeID) R9 290X / 390X R9 290/390(需提供FakeID) R9 280x / 380x(不一定成功) R9 280/380(需要FakeID) R9 270X / 370X R7 270/370(需提供FakeID) R7 265 R7 260x / 360x R9 260/360(根据型号可能需要FakeID) R9 255 R7 250X R7 250(需提供FakeID) R7 240(需要FakeID)

      HD 8000系列 从Mountain Lion开始支持#

      HD 8740 HD 8760 HD 8770 HD 8850 HD 8870 HD 8890 HD 8950 HD 8970

      HD 7000系列 从Mountain Lion开始支持#

      Dual AMD FirePro D300 Dual AMD FirePro D500 Dual AMD FirePro D700 FirePro W5100(FakeID needed) FirePro W7000 FirePro W9000 HD 7700 HD 7730 HD 7750 HD 7770 HD 7790 HD 7850 HD 7870 HD 7870 XT HD 7950 HD 7970 HD 7990

      2023年黑苹果amd免驱显卡购买推荐
      https://blog.ittst.com/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/
      作者
      浪子
      发布于
      2022-01-21
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +2023年黑苹果amd免驱显卡购买推荐 - 平淡生活
      332 字
      2 分钟
      2023年黑苹果amd免驱显卡购买推荐

      RX 6600 RX 6600 XT RX 6800 RX 6800 XT RX 6900 XT

      RX 5500 RX 5500 XT RX 5600 RX 5600 XT RX 5700 RX 5700 XT RX 5700 XT 50周年纪念版 如遇到黑屏,需要boot参数agdpmod=pikera才能正确显示

      Vega 20系列 从Mojave开始支持#

      Radeon VII

      Vega 10系列 从High Sierra开始支持#

      Vega 64 Liquid Vega 64 Vega 56 Vega Frontier Edition Radeon Pro WX 9100 Radeon Pro WX 7100 ## Polaris架构10和20系列 从Sierra开始支持 400系列:

      RX 480 RX 470D RX 470 RX 460 RX 590 RX 580X RX 580 RX 570X RX 570 RX 560X RX 560 WX 5100 WX 4100 E9550

      还有些同Polaris核心的 rx550

      R7 / R9系列 从Yosemite开始支持#

      R9 Fury X R9 Fury R9 Nano R9 390(需要FakeID) R9 290X / 390X R9 290/390(需提供FakeID) R9 280x / 380x(不一定成功) R9 280/380(需要FakeID) R9 270X / 370X R7 270/370(需提供FakeID) R7 265 R7 260x / 360x R9 260/360(根据型号可能需要FakeID) R9 255 R7 250X R7 250(需提供FakeID) R7 240(需要FakeID)

      HD 8000系列 从Mountain Lion开始支持#

      HD 8740 HD 8760 HD 8770 HD 8850 HD 8870 HD 8890 HD 8950 HD 8970

      HD 7000系列 从Mountain Lion开始支持#

      Dual AMD FirePro D300 Dual AMD FirePro D500 Dual AMD FirePro D700 FirePro W5100(FakeID needed) FirePro W7000 FirePro W9000 HD 7700 HD 7730 HD 7750 HD 7770 HD 7790 HD 7850 HD 7870 HD 7870 XT HD 7950 HD 7970 HD 7990

      2023年黑苹果amd免驱显卡购买推荐
      https://blog.ittst.com/posts/2023-black-apple-amd--free-drived-card-buying-recommendation/
      作者
      浪子
      发布于
      2022-01-21
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/2023-methods-to-register-chatgpt-in-china/index.html b/posts/2023-methods-to-register-chatgpt-in-china/index.html index 67cc29e..c6cb6a3 100644 --- a/posts/2023-methods-to-register-chatgpt-in-china/index.html +++ b/posts/2023-methods-to-register-chatgpt-in-china/index.html @@ -1 +1 @@ -2023国内注册ChatGPT的方法 - 平淡生活
      1192 字
      6 分钟
      2023国内注册ChatGPT的方法

      国内注册ChatGPT的方法#

      ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序,于 2022 年 11 月推出,基于 GPT-3.5 架构的大型语言模型并通过强化学习进行训练,在这款软件中用户们可以与 AI 人工智能进行多种的对话工作,目前,有部分地区(例如中国大陆香港)无法使用此项服务

      ChatGPT技术开发商OpenAI斥巨资买下AI.com域名,现在访问AI.com直接跳转到ChatGPT官网。 2024年AI.com已经跳转到google Gemini的官网了

      ChatGPT功能#

      • ChatGPT 在搜索和写作上非常强大。
      • ChatGPT 可以根据用户提供的信息,给出合理而有效的搜索结果,
      • ChatGPT 写的短篇小说,
      • ChatGPT 写的信件,内容通畅,用词准确。
      • ChatGPT 撰写专业的电子邮件回复
      • ChatGPT 为营销活动产生新的内容创意
      • ChatGPT 解决任何编码问题或为获取代码

      国内用户注册ChatGPT的方法#

      国内用户想要注册 ChatGPT,首先需要有一个网络环境,例如美国;然后,需要一个可以接收短信验证码的手机号码,之后就可以打开 ChatGPT 的网站注册 ,邮件验证,电话号码验证等等。

      如果出现如下的界面,则证明你的网络所在地区无法注册访问ChatGPT。

      注意:如果无法搞定上述必要条件的话,可以尝试 搭建一个梯子 x-ui:支持多协议多用户的 xray 面板

      注册 OpenAI 账号#

      1、点击打开 https://chat.openai.com/auth/login 页面中的 Sign up进行相应的账号注册(注意网络环境不能是香港澳门等地区,不然会提示不能在当前国家服务)。

      注册 2、在新的页面可选择注册 ChatGPT 账号的方式,可以使用邮箱(国内邮箱也可以,建议使用国外邮箱),,或者有谷歌账号的邮箱,或者用 Microsoft Account 注册也可以。

      选择创建ChatGPT账号的方式 使用邮箱注册ChatGPT时,输入邮箱地址,点击Continue,之后输入密码,进入下一步骤。

      使用邮箱注册ChatGPT 使用 Microsoft Account 注册ChatGPT时,可以使用Microsoft账号登录,如果有Github账号的话,可点击登录选项,然后选择使用Github账号 注册。

      使用Microsoft-Account注册ChatGPT 使用 Google 账号注册ChatGPT时,输入Google账号地址及密码,然后进入下一步骤。

      使用Google账号注册ChatGPT 3、以使用邮箱注册ChatGPT为例,输入邮箱需要在邮箱收到的邮件内点击验证,

      验证ChatGPT邮箱 4、然后继续在ChatGPT注册页面填入信息

      在ChatGPT注册页面填入信息 5、填写ChatGPT手机短信验证码

      填写ChatGPT手机短信验证码

      接收手机短信验证码#

      需要使用中国以外的手机号码进行验证,例如美国、印度等,可以在俄罗斯的接码平台sms-activate来完成,该网站支持中文/英文显示界面,支持支付宝,使用俄罗斯卢布计费。

      1、现在就需要用到注册的第三方接码平台了,访问 https://sms-activate.org/

      注册的第三方接码平台了

      2、注册完成后需要充值(按照 1 美元兑换 73 卢布),点击右上角**“ 余额充值 ”,使用支付宝充值 1 美元即可(sms-activate.org平台规则发生变化,少于10美元充值,需最低充值2美元<2023.3.22>)**。

      注册完成后需要充值 3、在平台左侧搜索 OpenAI ,然后在国家那里找到Indonesia(印度尼西亚),点击选择国家后面的加入购物车即可。

      选择国家 4、然后等一会出现如下界面,这里的手机号拷贝出来,输入到上一步中注册OpenAI的界面上,然后点击 Send code按钮,在下图的界面中等待验证码短信发送

      接收输入验证码 注意:有效期是20分钟,需要快速操作,若两三分钟没有收到短信验证码,可点击旁边的删除按钮,然后再次选择别的手机号码,未收到验证不扣费。

      使用ChatGPT#

      账号注册完成了,就可以尽情的使用ChatGPT来玩耍了,重新登录ChatGPT官网,然后访问Chat,这时你就可以开始尽情和机器人聊天了。

      使用ChatGPT

      使用ChatGPT示例,如何写一个吸引人的 标题

      使用ChatGPT示例

      总结#

      以上是为你介绍的国内注册 ChatGPT 的方法,希望对你了解 ChatGPT 有所帮助,如有问题,欢迎联系我们。

      2023国内注册ChatGPT的方法
      https://blog.ittst.com/posts/2023-methods-to-register-chatgpt-in-china/
      作者
      浪子
      发布于
      2023-04-07
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +2023国内注册ChatGPT的方法 - 平淡生活
      1192 字
      6 分钟
      2023国内注册ChatGPT的方法

      国内注册ChatGPT的方法#

      ChatGPT 是由 OpenAI开发的一个人工智能聊天机器人程序,于 2022 年 11 月推出,基于 GPT-3.5 架构的大型语言模型并通过强化学习进行训练,在这款软件中用户们可以与 AI 人工智能进行多种的对话工作,目前,有部分地区(例如中国大陆香港)无法使用此项服务

      ChatGPT技术开发商OpenAI斥巨资买下AI.com域名,现在访问AI.com直接跳转到ChatGPT官网。 2024年AI.com已经跳转到google Gemini的官网了

      ChatGPT功能#

      • ChatGPT 在搜索和写作上非常强大。
      • ChatGPT 可以根据用户提供的信息,给出合理而有效的搜索结果,
      • ChatGPT 写的短篇小说,
      • ChatGPT 写的信件,内容通畅,用词准确。
      • ChatGPT 撰写专业的电子邮件回复
      • ChatGPT 为营销活动产生新的内容创意
      • ChatGPT 解决任何编码问题或为获取代码

      国内用户注册ChatGPT的方法#

      国内用户想要注册 ChatGPT,首先需要有一个网络环境,例如美国;然后,需要一个可以接收短信验证码的手机号码,之后就可以打开 ChatGPT 的网站注册 ,邮件验证,电话号码验证等等。

      如果出现如下的界面,则证明你的网络所在地区无法注册访问ChatGPT。

      注意:如果无法搞定上述必要条件的话,可以尝试 搭建一个梯子 x-ui:支持多协议多用户的 xray 面板

      注册 OpenAI 账号#

      1、点击打开 https://chat.openai.com/auth/login 页面中的 Sign up进行相应的账号注册(注意网络环境不能是香港澳门等地区,不然会提示不能在当前国家服务)。

      注册 2、在新的页面可选择注册 ChatGPT 账号的方式,可以使用邮箱(国内邮箱也可以,建议使用国外邮箱),,或者有谷歌账号的邮箱,或者用 Microsoft Account 注册也可以。

      选择创建ChatGPT账号的方式 使用邮箱注册ChatGPT时,输入邮箱地址,点击Continue,之后输入密码,进入下一步骤。

      使用邮箱注册ChatGPT 使用 Microsoft Account 注册ChatGPT时,可以使用Microsoft账号登录,如果有Github账号的话,可点击登录选项,然后选择使用Github账号 注册。

      使用Microsoft-Account注册ChatGPT 使用 Google 账号注册ChatGPT时,输入Google账号地址及密码,然后进入下一步骤。

      使用Google账号注册ChatGPT 3、以使用邮箱注册ChatGPT为例,输入邮箱需要在邮箱收到的邮件内点击验证,

      验证ChatGPT邮箱 4、然后继续在ChatGPT注册页面填入信息

      在ChatGPT注册页面填入信息 5、填写ChatGPT手机短信验证码

      填写ChatGPT手机短信验证码

      接收手机短信验证码#

      需要使用中国以外的手机号码进行验证,例如美国、印度等,可以在俄罗斯的接码平台sms-activate来完成,该网站支持中文/英文显示界面,支持支付宝,使用俄罗斯卢布计费。

      1、现在就需要用到注册的第三方接码平台了,访问 https://sms-activate.org/

      注册的第三方接码平台了

      2、注册完成后需要充值(按照 1 美元兑换 73 卢布),点击右上角**“ 余额充值 ”,使用支付宝充值 1 美元即可(sms-activate.org平台规则发生变化,少于10美元充值,需最低充值2美元<2023.3.22>)**。

      注册完成后需要充值 3、在平台左侧搜索 OpenAI ,然后在国家那里找到Indonesia(印度尼西亚),点击选择国家后面的加入购物车即可。

      选择国家 4、然后等一会出现如下界面,这里的手机号拷贝出来,输入到上一步中注册OpenAI的界面上,然后点击 Send code按钮,在下图的界面中等待验证码短信发送

      接收输入验证码 注意:有效期是20分钟,需要快速操作,若两三分钟没有收到短信验证码,可点击旁边的删除按钮,然后再次选择别的手机号码,未收到验证不扣费。

      使用ChatGPT#

      账号注册完成了,就可以尽情的使用ChatGPT来玩耍了,重新登录ChatGPT官网,然后访问Chat,这时你就可以开始尽情和机器人聊天了。

      使用ChatGPT

      使用ChatGPT示例,如何写一个吸引人的 标题

      使用ChatGPT示例

      总结#

      以上是为你介绍的国内注册 ChatGPT 的方法,希望对你了解 ChatGPT 有所帮助,如有问题,欢迎联系我们。

      2023国内注册ChatGPT的方法
      https://blog.ittst.com/posts/2023-methods-to-register-chatgpt-in-china/
      作者
      浪子
      发布于
      2023-04-07
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/42-virtual-credit-card-opening-channels/index.html b/posts/42-virtual-credit-card-opening-channels/index.html index 384e4e8..8905c46 100644 --- a/posts/42-virtual-credit-card-opening-channels/index.html +++ b/posts/42-virtual-credit-card-opening-channels/index.html @@ -1 +1 @@ -42个虚拟信用卡开卡渠道 - 平淡生活
      1871 字
      9 分钟
      42个虚拟信用卡开卡渠道
      1. 全球付 http://www.globalcash.hk/ 在线申请,可充值,微信支付,开卡简单。

      2. 爱汇旅之卡 http://www.ihui.com/ 此卡是目前最方便容易获得,并大量获得的实体mastercard实体卡,可以直接联系客服大量拿卡,一次上百张甚至是数百张,该卡支持paypal、amazon、google等网站。

      3. Tap&go 拍住赏 http://tapngo.com.hk/ 可以支持微信,amazon、applepay 国际阿里云 GCE aws paypal等大部分网站,需要认证,买卡可以去香港总部或者某宝,最低100余额 充值可在香港便利店充值或者网上找人代充!

      4. 三三金融: https://cards.33finance.com 需要到香港公司进行开卡,也可以找某宝,开出来的卡适用于大部分网站,包括欧贝通/amazon/阿里云/paypal/等等等等,充值也需要到香港便利店或者是到公司充,也可以找人代充。

      5. Tierrapay www.tierrapay.com卡段4665 注册要用欧洲地址,比如英国,需要用pm或者是wmz充值,无需认证即可成功开卡。

      6. 通汇香港 https://www.transforex.hk/ 此卡要携带护照和身份证前往香港开通,该公司有礼品卡,固定金额每天限购买3张,经测试,此卡适用于paypal amazon ebay等平台

      7. Uphold www.uphold.com 需要护照和地址证明申请,支持银行 比特币进行充值

      8. Payeer http://www.zhesui.com/payeer/ 目前需要用欧洲国家的资料注册,

      9. Advcash 目前需要用欧洲国家的资料注册

      10. Moneypolo http://www.zhesui.com/moneypolo/需要完成实名认证,以及收费购买。

      11. Wirexapp http://www.zhesui.com/wirex-app-visa/ 4665卡段,目前需要用欧洲国家地址注册申请。没认证只能比特币充值。

      12. Payoneer派安盈 附带美国 日本 英国和欧洲银行账户 http://www.payoneer.com/

      13. okpay 需要用护照通过实名认证才能开卡。

      14. Qiwi https://qiwi.com/ 需要俄罗斯电话卡注册成功才能开卡 (俄罗斯卡可以去淘宝买一个)

      15. ecoPayz http://www.zhesui.com/ecopayz-card/ 目前需要认证,该卡支持大部分网站,可以无限移除替换卡片。

      16. 浦发E-GO卡(需要有浦发实体卡) http://www.zhesui.com/e-go/ 该卡可以开出银联 mastercard visa AME 四种卡片

      17. Yandexmoney money.yandex.ru 以上虚拟卡渠道基本都是国外电子钱包发行的,类似于国内的支付宝,不同的是除开少数几个支持人民币和国内银行充值的之外,其他基本都需要使用国外银行卡或者是电子钱包、信用卡充值,如果没有的话我们可以通过兑换的方式为该网站充值,具体兑换商可参照电子货币兑换网中国上面所说的兑换网站以及方法:电子货币兑换网中国:http://currencyexchange.net.cn/

      18. VirtualCards(支持支付宝充值) https://VirtualCards.us 50美元起充,注册成功无需充值既可出卡号

      19. payweb http://payweb.com (需要付费、只有实体卡)可以用银联进行充值!

      20. Solid Trust Pay http://SolidTrustPay.com

      21. Skrill(需要注册国外账户) http://www.skrill.com 要注册欧洲国家的资料才有开卡选项。

      22. Neteller(需要注册国外账户) www.neteller.com

      23. v-preca(需要日本ip注册 少数中国卡能够充值) http://vpc.lifecard.co.jp

      24. mun-prepaid(需要日本ip注册) 日元卡或者日本便利店充值 www.mun-prepaid.com

      25. Giftcardmall www.giftcardmall.com 此网站要美国信用卡或者是借记卡进行购买

      26. netspend(需翻墙 国外身份认证) www.Netspend.com

      27. vanilla(实体卡、需要国外身份或者是便利店购买) 也可以找我们进行购买。 www.vanilla.com

      28. 通汇香港 https://www.transforex.hk/ 此卡支持amazon googleplay paypal 等网站需要携带护照和身份证到香港总公司进行开卡!用身份证就能通过认证,可以开实体卡和虚拟卡

      29. Entropay 欧贝通 www.Entropay.com 不认证可以开五张卡,4067卡段,该卡可以用三三金融卡进行充值,可以自定义充值金额,认证过的账户可以开出10张卡片,可以自由决定充值的金额。欧贝通充值可以用 tapngo卡和三三金融进行充值,经本人测试是中国用户目前最好使的充值方法,tapngo和三三金融可以自行在香港购买。

      30. payoneer payoneer是目前非常不错的虚拟卡平台,身份证即可申请下来,遗憾的是申请到收到卡需要一个月左右的时间,值得一提的是payoneer更吸引我们的是他有美国银行账户、美元、欧元、日元、英镑银行账户可供我们申请选择,非常值得拥有。

      31. Mmvpaymmvpay 是新加坡的虚拟卡平台可以开出mastercard 虚拟卡,需要新加坡手机号码注册!经过测试,账户不用认证,甚至是不用充值,一个账户直接可以获取5张卡片信息,包含卡号,有效期和卡密信息

      32. paypal mastercard https://www.paypal.com/us/webapps/mpp/paypal-prepaid-mastercard 此卡是paypal美国发行的mastercard,支持大部分网站消费,绑定以及验证,但是需要美国护照、身份和银行卡信息申请,并且是需要真实的

      33. amazon mastercard https://www.amazon.co.jp/ 三井住友カード株式会社-amazon-mastercardゴード/dp/b0092vb6vkAmazon mastercard是amazon日本网站发行的mastercard虚拟卡账户,同样是需要日本身份证护照地址证明才能申请下来,专门针对日亚的mastercard。

      34. Cryptopaycryptopay 是一个数字交易平台同属4665卡段的虚拟卡,不认证可以开出虚拟卡,但是前提是必须用欧洲国家的地址以及资料进行注册!

      35. Capitalistcapitalist 是一个俄罗斯的电子钱包工具,目前不认证一个账户可以开2张mastercard虚拟卡,分别是一张欧元的一张,一张美元的,认证过后可以开通四张卡片,两张实体卡和两张虚拟卡。

      36. Unichangeunichange 是一个电子货币兑换平台,该平台提供欧元和美元两种币种的虚拟卡。Unichange.me如果你没有某些资料,某些材料,那么万能的商人一定可以满足的了你!

      37. PayzaPayza 也是一个电子钱包工具,类似于paypal之类的电子 钱包,这边主要介绍payza发行的mastercard虚拟卡,申请虚拟卡需要身份证和信用卡认证,可以用预付卡能看得到自己姓名的信用卡。

      38. mycard2go mycard2go是一个德国的虚拟卡,发卡行为wire bank ag卡种为visa,注册账户无需身份认证,但是需要进行充值了才能开卡,充值成功后自动开通卡片,卡种为欧元,需要用KLARNA网银或者是当地现金进行充值,也可以进行网银。

      39. Vandle https://app.vandle.jp/ vandle是一家日本的虚拟卡提供平台,它提供mastercard虚拟卡片,需要再日本的便利店进行充值,也可以用日本的信用卡网银进行充值

      40. Chocom http://www.chocom.jp/index.html Chocom也是一家日本的虚拟卡,可以在日本的便利店,或者是日本信用卡以及Chocom电子钱包进行充值。

      41. Docomokouza docomokouza为日本docomo发行的visa虚拟信用卡,甚至是注册无需审查即可申请visa虚拟卡,最短有效期仅10天,还有一种则为3年需要日本的电子货币或者是信用卡对其进行充值。 https://docomokouza.jpmastercard借记卡

      42. Nttsmarttrade nttsmarttrade是一家日本的在线虚拟卡平台,支持中文界面,非常方便,需要用日本信用卡段进行充值,中国和日本以外的mastercard无法进行充值。http://www.nttsmarttrade.co.jp/mastercardnet/cn/

      42个虚拟信用卡开卡渠道
      https://blog.ittst.com/posts/42-virtual-credit-card-opening-channels/
      作者
      浪子
      发布于
      2022-11-29
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +42个虚拟信用卡开卡渠道 - 平淡生活
      1871 字
      9 分钟
      42个虚拟信用卡开卡渠道
      1. 全球付 http://www.globalcash.hk/ 在线申请,可充值,微信支付,开卡简单。

      2. 爱汇旅之卡 http://www.ihui.com/ 此卡是目前最方便容易获得,并大量获得的实体mastercard实体卡,可以直接联系客服大量拿卡,一次上百张甚至是数百张,该卡支持paypal、amazon、google等网站。

      3. Tap&go 拍住赏 http://tapngo.com.hk/ 可以支持微信,amazon、applepay 国际阿里云 GCE aws paypal等大部分网站,需要认证,买卡可以去香港总部或者某宝,最低100余额 充值可在香港便利店充值或者网上找人代充!

      4. 三三金融: https://cards.33finance.com 需要到香港公司进行开卡,也可以找某宝,开出来的卡适用于大部分网站,包括欧贝通/amazon/阿里云/paypal/等等等等,充值也需要到香港便利店或者是到公司充,也可以找人代充。

      5. Tierrapay www.tierrapay.com卡段4665 注册要用欧洲地址,比如英国,需要用pm或者是wmz充值,无需认证即可成功开卡。

      6. 通汇香港 https://www.transforex.hk/ 此卡要携带护照和身份证前往香港开通,该公司有礼品卡,固定金额每天限购买3张,经测试,此卡适用于paypal amazon ebay等平台

      7. Uphold www.uphold.com 需要护照和地址证明申请,支持银行 比特币进行充值

      8. Payeer http://www.zhesui.com/payeer/ 目前需要用欧洲国家的资料注册,

      9. Advcash 目前需要用欧洲国家的资料注册

      10. Moneypolo http://www.zhesui.com/moneypolo/需要完成实名认证,以及收费购买。

      11. Wirexapp http://www.zhesui.com/wirex-app-visa/ 4665卡段,目前需要用欧洲国家地址注册申请。没认证只能比特币充值。

      12. Payoneer派安盈 附带美国 日本 英国和欧洲银行账户 http://www.payoneer.com/

      13. okpay 需要用护照通过实名认证才能开卡。

      14. Qiwi https://qiwi.com/ 需要俄罗斯电话卡注册成功才能开卡 (俄罗斯卡可以去淘宝买一个)

      15. ecoPayz http://www.zhesui.com/ecopayz-card/ 目前需要认证,该卡支持大部分网站,可以无限移除替换卡片。

      16. 浦发E-GO卡(需要有浦发实体卡) http://www.zhesui.com/e-go/ 该卡可以开出银联 mastercard visa AME 四种卡片

      17. Yandexmoney money.yandex.ru 以上虚拟卡渠道基本都是国外电子钱包发行的,类似于国内的支付宝,不同的是除开少数几个支持人民币和国内银行充值的之外,其他基本都需要使用国外银行卡或者是电子钱包、信用卡充值,如果没有的话我们可以通过兑换的方式为该网站充值,具体兑换商可参照电子货币兑换网中国上面所说的兑换网站以及方法:电子货币兑换网中国:http://currencyexchange.net.cn/

      18. VirtualCards(支持支付宝充值) https://VirtualCards.us 50美元起充,注册成功无需充值既可出卡号

      19. payweb http://payweb.com (需要付费、只有实体卡)可以用银联进行充值!

      20. Solid Trust Pay http://SolidTrustPay.com

      21. Skrill(需要注册国外账户) http://www.skrill.com 要注册欧洲国家的资料才有开卡选项。

      22. Neteller(需要注册国外账户) www.neteller.com

      23. v-preca(需要日本ip注册 少数中国卡能够充值) http://vpc.lifecard.co.jp

      24. mun-prepaid(需要日本ip注册) 日元卡或者日本便利店充值 www.mun-prepaid.com

      25. Giftcardmall www.giftcardmall.com 此网站要美国信用卡或者是借记卡进行购买

      26. netspend(需翻墙 国外身份认证) www.Netspend.com

      27. vanilla(实体卡、需要国外身份或者是便利店购买) 也可以找我们进行购买。 www.vanilla.com

      28. 通汇香港 https://www.transforex.hk/ 此卡支持amazon googleplay paypal 等网站需要携带护照和身份证到香港总公司进行开卡!用身份证就能通过认证,可以开实体卡和虚拟卡

      29. Entropay 欧贝通 www.Entropay.com 不认证可以开五张卡,4067卡段,该卡可以用三三金融卡进行充值,可以自定义充值金额,认证过的账户可以开出10张卡片,可以自由决定充值的金额。欧贝通充值可以用 tapngo卡和三三金融进行充值,经本人测试是中国用户目前最好使的充值方法,tapngo和三三金融可以自行在香港购买。

      30. payoneer payoneer是目前非常不错的虚拟卡平台,身份证即可申请下来,遗憾的是申请到收到卡需要一个月左右的时间,值得一提的是payoneer更吸引我们的是他有美国银行账户、美元、欧元、日元、英镑银行账户可供我们申请选择,非常值得拥有。

      31. Mmvpaymmvpay 是新加坡的虚拟卡平台可以开出mastercard 虚拟卡,需要新加坡手机号码注册!经过测试,账户不用认证,甚至是不用充值,一个账户直接可以获取5张卡片信息,包含卡号,有效期和卡密信息

      32. paypal mastercard https://www.paypal.com/us/webapps/mpp/paypal-prepaid-mastercard 此卡是paypal美国发行的mastercard,支持大部分网站消费,绑定以及验证,但是需要美国护照、身份和银行卡信息申请,并且是需要真实的

      33. amazon mastercard https://www.amazon.co.jp/ 三井住友カード株式会社-amazon-mastercardゴード/dp/b0092vb6vkAmazon mastercard是amazon日本网站发行的mastercard虚拟卡账户,同样是需要日本身份证护照地址证明才能申请下来,专门针对日亚的mastercard。

      34. Cryptopaycryptopay 是一个数字交易平台同属4665卡段的虚拟卡,不认证可以开出虚拟卡,但是前提是必须用欧洲国家的地址以及资料进行注册!

      35. Capitalistcapitalist 是一个俄罗斯的电子钱包工具,目前不认证一个账户可以开2张mastercard虚拟卡,分别是一张欧元的一张,一张美元的,认证过后可以开通四张卡片,两张实体卡和两张虚拟卡。

      36. Unichangeunichange 是一个电子货币兑换平台,该平台提供欧元和美元两种币种的虚拟卡。Unichange.me如果你没有某些资料,某些材料,那么万能的商人一定可以满足的了你!

      37. PayzaPayza 也是一个电子钱包工具,类似于paypal之类的电子 钱包,这边主要介绍payza发行的mastercard虚拟卡,申请虚拟卡需要身份证和信用卡认证,可以用预付卡能看得到自己姓名的信用卡。

      38. mycard2go mycard2go是一个德国的虚拟卡,发卡行为wire bank ag卡种为visa,注册账户无需身份认证,但是需要进行充值了才能开卡,充值成功后自动开通卡片,卡种为欧元,需要用KLARNA网银或者是当地现金进行充值,也可以进行网银。

      39. Vandle https://app.vandle.jp/ vandle是一家日本的虚拟卡提供平台,它提供mastercard虚拟卡片,需要再日本的便利店进行充值,也可以用日本的信用卡网银进行充值

      40. Chocom http://www.chocom.jp/index.html Chocom也是一家日本的虚拟卡,可以在日本的便利店,或者是日本信用卡以及Chocom电子钱包进行充值。

      41. Docomokouza docomokouza为日本docomo发行的visa虚拟信用卡,甚至是注册无需审查即可申请visa虚拟卡,最短有效期仅10天,还有一种则为3年需要日本的电子货币或者是信用卡对其进行充值。 https://docomokouza.jpmastercard借记卡

      42. Nttsmarttrade nttsmarttrade是一家日本的在线虚拟卡平台,支持中文界面,非常方便,需要用日本信用卡段进行充值,中国和日本以外的mastercard无法进行充值。http://www.nttsmarttrade.co.jp/mastercardnet/cn/

      42个虚拟信用卡开卡渠道
      https://blog.ittst.com/posts/42-virtual-credit-card-opening-channels/
      作者
      浪子
      发布于
      2022-11-29
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/add-a-movie-viewing-page-to-the-blog/index.html b/posts/add-a-movie-viewing-page-to-the-blog/index.html index 84126fa..1e9a816 100644 --- a/posts/add-a-movie-viewing-page-to-the-blog/index.html +++ b/posts/add-a-movie-viewing-page-to-the-blog/index.html @@ -1,4 +1,4 @@ -给博客增加一个观影页面 - 平淡生活
      471 字
      2 分钟
      给博客增加一个观影页面

      前言#

      使用插件构建的观影页面有点不那么喜欢,所以我决定自己写一个。

      项目#

      所使用的的项目地址 https://github.com/bigfa/douban-cf-worker

      步骤#

      1. 首先根据https://github.com/bigfa/douban-cf-worker 中的步骤创建接口

      2. 在博客的根目录下新建一个名为 movies 的文件夹,然后在 movies 文件夹下新建一个名为 index.md 的文件,在文件中写入以下内容:

      ---
      +给博客增加一个观影页面 - 平淡生活
      471 字
      2 分钟
      给博客增加一个观影页面

      前言#

      使用插件构建的观影页面有点不那么喜欢,所以我决定自己写一个。

      项目#

      所使用的的项目地址 https://github.com/bigfa/douban-cf-worker

      步骤#

      1. 首先根据https://github.com/bigfa/douban-cf-worker 中的步骤创建接口

      2. 在博客的根目录下新建一个名为 movies 的文件夹,然后在 movies 文件夹下新建一个名为 index.md 的文件,在文件中写入以下内容:

      ---
       title: 观影
       date: 2024-09-11 13:00:56
       ---
      @@ -122,4 +122,4 @@
       .item-title a:hover {
           text-decoration: underline;
       }
      -

      如此即可大功告成了

      给博客增加一个观影页面
      https://blog.ittst.com/posts/add-a-movie-viewing-page-to-the-blog/
      作者
      浪子
      发布于
      2024-09-11
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      如此即可大功告成了

      给博客增加一个观影页面
      https://blog.ittst.com/posts/add-a-movie-viewing-page-to-the-blog/
      作者
      浪子
      发布于
      2024-09-11
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/add-artalk-comments-to-memos/index.html b/posts/add-artalk-comments-to-memos/index.html index 67331bc..fcde49d 100644 --- a/posts/add-artalk-comments-to-memos/index.html +++ b/posts/add-artalk-comments-to-memos/index.html @@ -1,4 +1,4 @@ -给Memos添加Artalk评论 - 平淡生活
      230 字
      1 分钟
      给Memos添加Artalk评论
      2024-10-10

      上文提到

      给Memos添加Twikoo评论

      • 2023.10.23更新以适用于memos v0.16.1版本 把’.resource-wrapper’替换为’.gap-2’

      • 2023.10.17更新memos0.16版本

      自定义脚本#

      把’.resource-wrapper’替换为’.memo-wrapper’

      自定义样式#

      隐藏评论数

      .text-sm.text-gray-500.ml-1{display:none !important;}
      +给Memos添加Artalk评论 - 平淡生活
      230 字
      1 分钟
      给Memos添加Artalk评论
      2024-10-10

      上文提到

      给Memos添加Twikoo评论

      • 2023.10.23更新以适用于memos v0.16.1版本 把’.resource-wrapper’替换为’.gap-2’

      • 2023.10.17更新memos0.16版本

      自定义脚本#

      把’.resource-wrapper’替换为’.memo-wrapper’

      自定义样式#

      隐藏评论数

      .text-sm.text-gray-500.ml-1{display:none !important;}
       
      • 2023.9.26更新提醒:适用于 memos 0.15.1版本以下

      自定义脚本#

      // 用 JS 向页面中插入 JS
       function addArtalkJS() { 
           var memosArtalk = document.createElement("script");
      @@ -49,4 +49,4 @@
       

      自定义样式#

      a.time-text:after { content: '   评论 💬 '; }
       .atk-main-editor { margin-top: 20px; }
       
      -
      给Memos添加Artalk评论
      https://blog.ittst.com/posts/add-artalk-comments-to-memos/
      作者
      浪子
      发布于
      2024-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      给Memos添加Artalk评论
      https://blog.ittst.com/posts/add-artalk-comments-to-memos/
      作者
      浪子
      发布于
      2024-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/add-twikoo-comments-to-memos/index.html b/posts/add-twikoo-comments-to-memos/index.html index 2715a15..37dbdf6 100644 --- a/posts/add-twikoo-comments-to-memos/index.html +++ b/posts/add-twikoo-comments-to-memos/index.html @@ -1,4 +1,4 @@ -给Memos添加Twikoo评论 - 平淡生活
      577 字
      3 分钟
      给Memos添加Twikoo评论
      2024-10-10

      代码来自于@林木木

      2023.10.23更新脚本以适用于memos v0.16.1

      自定义脚本#

      // Memos v0.16.1 单条页面插入 Twikoo 评论
      +给Memos添加Twikoo评论 - 平淡生活
      577 字
      3 分钟
      给Memos添加Twikoo评论
      2024-10-10

      代码来自于@林木木

      2023.10.23更新脚本以适用于memos v0.16.1

      自定义脚本#

      // Memos v0.16.1 单条页面插入 Twikoo 评论
       var twikooENV = 'https://你的.com/'
       function addTwikooJS() { 
         var memosTwikoo = document.createElement("script");
      @@ -131,4 +131,4 @@
       .btns-container.space-x-2{margin-right:1.5rem;}
       .action-button-container{color: #e5e7eb;}
       .action-button-container a{display:none !important;}
      -
      给Memos添加Twikoo评论
      https://blog.ittst.com/posts/add-twikoo-comments-to-memos/
      作者
      浪子
      发布于
      2024-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      给Memos添加Twikoo评论
      https://blog.ittst.com/posts/add-twikoo-comments-to-memos/
      作者
      浪子
      发布于
      2024-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/ali-goku-service-offline/index.html b/posts/ali-goku-service-offline/index.html index 72b94e6..8fa4f7b 100644 --- a/posts/ali-goku-service-offline/index.html +++ b/posts/ali-goku-service-offline/index.html @@ -1 +1 @@ -阿里悟空服务下线 - 平淡生活
      188 字
      1 分钟
      阿里悟空服务下线

      阿里悟空服务宣布于2016年10月31号正式下线,基于阿里悟空的phpwind移动版,基本上也可以宣告死亡了。 实际上phpwind早在两年前已经停止更新维护,目前的社区论坛程序discuz也处于停止更新维护的状态,伴随了广大草根站长走过十年岁月的两大社区程序也算是完成了自己的使命。 一直对社交网络不死心的阿里也放弃了pw是不是意味着社区论坛就此消亡。或者说,在将来不再会有个人草根站长了?毕竟网站开发维护的成本对于非IT人员来讲实在太过于高昂

      阿里悟空服务下线
      https://blog.ittst.com/posts/ali-goku-service-offline/
      作者
      浪子
      发布于
      2016-11-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +阿里悟空服务下线 - 平淡生活
      188 字
      1 分钟
      阿里悟空服务下线

      阿里悟空服务宣布于2016年10月31号正式下线,基于阿里悟空的phpwind移动版,基本上也可以宣告死亡了。 实际上phpwind早在两年前已经停止更新维护,目前的社区论坛程序discuz也处于停止更新维护的状态,伴随了广大草根站长走过十年岁月的两大社区程序也算是完成了自己的使命。 一直对社交网络不死心的阿里也放弃了pw是不是意味着社区论坛就此消亡。或者说,在将来不再会有个人草根站长了?毕竟网站开发维护的成本对于非IT人员来讲实在太过于高昂

      阿里悟空服务下线
      https://blog.ittst.com/posts/ali-goku-service-offline/
      作者
      浪子
      发布于
      2016-11-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/artalk-comments-using-qq-robot-notification/index.html b/posts/artalk-comments-using-qq-robot-notification/index.html index 69056ae..a636f35 100644 --- a/posts/artalk-comments-using-qq-robot-notification/index.html +++ b/posts/artalk-comments-using-qq-robot-notification/index.html @@ -1,4 +1,4 @@ -Artalk评论使用QQ机器人通知 - 平淡生活
      417 字
      2 分钟
      Artalk评论使用QQ机器人通知

      前言#

      上文使用Docker快速部署一个memos的QQ机器人介绍了QQ机器人的部署方法

      本次将介绍如何使用QQ机器人接收Artalk的评论通知 实现原理是利用Artalk的Webhook功能

      准备#

      1. 确保Artalk已经部署完成
      2. 确保QQ机器人已经部署完成

      使用#

      QQ机器人#

      确保QQ机器人的管理页面开启了HTTP服务,且端口为3000

      访问IP:3000 出现以下页面则说明QQ机器人已经开启了HTTP服务

      {
      +Artalk评论使用QQ机器人通知 - 平淡生活
      417 字
      2 分钟
      Artalk评论使用QQ机器人通知

      前言#

      上文使用Docker快速部署一个memos的QQ机器人介绍了QQ机器人的部署方法

      本次将介绍如何使用QQ机器人接收Artalk的评论通知 实现原理是利用Artalk的Webhook功能

      准备#

      1. 确保Artalk已经部署完成
      2. 确保QQ机器人已经部署完成

      使用#

      QQ机器人#

      确保QQ机器人的管理页面开启了HTTP服务,且端口为3000

      访问IP:3000 出现以下页面则说明QQ机器人已经开启了HTTP服务

      {
         "status": "failed",
         "retcode": 200,
         "data": null,
      @@ -17,4 +17,4 @@
       

      构建规则填写

      {
         "content": " $name 在 $site 上评论啦 \n 内容:$content \n 时间:$time \n 链接:$url?atk_comment=$id"
       }
      -

      提交之后 点击复制webhook地址

      Artalk配置#

      在Artalk的后台管理页面,进入设置->多元推送->Webhook

      填入之前复制的webhook地址

      如此即可在artalk有人评论时QQ机器人通知你的QQ啦!

      Artalk评论使用QQ机器人通知
      https://blog.ittst.com/posts/artalk-comments-using-qq-robot-notification/
      作者
      浪子
      发布于
      2024-09-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      提交之后 点击复制webhook地址

      Artalk配置#

      在Artalk的后台管理页面,进入设置->多元推送->Webhook

      填入之前复制的webhook地址

      如此即可在artalk有人评论时QQ机器人通知你的QQ啦!

      Artalk评论使用QQ机器人通知
      https://blog.ittst.com/posts/artalk-comments-using-qq-robot-notification/
      作者
      浪子
      发布于
      2024-09-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html b/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html index b8622ed..cec6004 100644 --- a/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html +++ b/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/index.html @@ -1 +1 @@ -华硕b150m-et m2+rx560黑苹果oc0.8.5引导 - 平淡生活
      133 字
      1 分钟
      华硕b150m-et m2+rx560黑苹果oc0.8.5引导
      2022-10-21
      无标签

      配置如下#

      cpu:魔改qhpw 2.2g hz 主板:华硕b150m-et m2 内存:8g ddr4 2133mhz 硬盘:nvme 256gb ssd 显卡:肥猫家rx560 4gb 网卡:bcm94360cd 电源:长城额定300w 机箱:乔思伯c2黑色

      乔思伯这个机箱是个大闷罐,但是显卡功耗低,双烤温度最高75摄氏度

      截图#

      Jietu20221020-144354.jpg Jietu20221021-145738.jpg

      bios设置#

      关闭 CSM兼容性 关闭 VT-D 关闭 串口 打开 USB handoff 关闭 CFG LOCK

      已驱动#

      声卡 网卡 显卡 电源管理 显卡加速 Jietu20221021-152807.jpg

      引导下载#

      下载地址

      华硕b150m-et m2+rx560黑苹果oc0.8.5引导
      https://blog.ittst.com/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/
      作者
      浪子
      发布于
      2022-10-21
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +华硕b150m-et m2+rx560黑苹果oc0.8.5引导 - 平淡生活
      133 字
      1 分钟
      华硕b150m-et m2+rx560黑苹果oc0.8.5引导
      2022-10-21
      无标签

      配置如下#

      cpu:魔改qhpw 2.2g hz 主板:华硕b150m-et m2 内存:8g ddr4 2133mhz 硬盘:nvme 256gb ssd 显卡:肥猫家rx560 4gb 网卡:bcm94360cd 电源:长城额定300w 机箱:乔思伯c2黑色

      乔思伯这个机箱是个大闷罐,但是显卡功耗低,双烤温度最高75摄氏度

      截图#

      Jietu20221020-144354.jpg Jietu20221021-145738.jpg

      bios设置#

      关闭 CSM兼容性 关闭 VT-D 关闭 串口 打开 USB handoff 关闭 CFG LOCK

      已驱动#

      声卡 网卡 显卡 电源管理 显卡加速 Jietu20221021-152807.jpg

      引导下载#

      下载地址

      华硕b150m-et m2+rx560黑苹果oc0.8.5引导
      https://blog.ittst.com/posts/asus-b150m-et-m2+rx560-black-apple-oc0.8.5-guide/
      作者
      浪子
      发布于
      2022-10-21
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/black-apple-solid--state-pit-guideline/index.html b/posts/black-apple-solid--state-pit-guideline/index.html index 8d03f08..3c3183d 100644 --- a/posts/black-apple-solid--state-pit-guideline/index.html +++ b/posts/black-apple-solid--state-pit-guideline/index.html @@ -1 +1 @@ -黑苹果固态避坑指南 - 平淡生活
      636 字
      3 分钟
      黑苹果固态避坑指南

      三星 PM961 / PM981 / PM981a / PM991 会导致 macOS 无法安装或正常运行

      三星 983ZET无法安装 macOS;

      2019 年 5 月以前出厂的 三星 970 EVO Plus 可能存在和 PM9x1 系列类似的问题,但可以通过在Windows环境升级官方固件解决 macOS 兼容问题;

      镁光 2200S无法安装或稳定运行 macOS;

      爱国者 P2000 256GB无法通过 10.15、11.x、12.x 任何一个版本的正常安装流程,但不排除个例的可能;

      macOS 不支持使用 Intel 傲腾(Optane Memory)或镁光 3D XPoint 进行加速的笔记本电脑;

      下面的型号是与 macOS IONVMeFamily 兼容性不佳的型号(可能无故卡住或运行不正常)#

      英特尔 600P/660P/760P 系列

      金士顿 A2000:配置 S5Z42105控制器的版本必须搭配NVMeFix.kext 1.0.8 及以上,也可能完全无法安装;

      海力士 PC601/PC611/PC711/BC501:主要见于联想和戴尔笔记本,部分批次正常部分会卡住;

      技嘉 GIGABYTE M.2 PCIe SSD(比如 GP-GSM2NE8512GNTD

      威刚 剑鱼 ADATA Swordfish 2 TB M.2-2280

      海力士 SK Hynix HFS001TD9TNG-L5B0B

      海力士 SK Hynix P31

      镁光 Micron 2200V MTFDHBA512TCK -移速的256G同样使用的镁光颗粒无法安装;

      阿斯加特 Asgard AN3+ (STAR1000P)

      朗科 Netac NVME SSD 480

      西部数据 SN550/570/730/750/850都能正常安装和运行 macOS;

      三星 970EVO/Pro/Plus(升级固件后)和 980/980 Pro 都能正常安装和运行 macOS,但是此系列存在 TRIM支持问题;

      海盗船 MP400/MP600系列均能正常安装运行 macOS;

      绝大部分常见的 SATA 接口固态盘都能正常安装和运行 macOS;

      不完全支持TRIM(主要影响特定条件下的写入速度,什么是 TRIM?),但安装运行正常的型号:#

      三星 Samsung 950 Pro

      三星 Samsung 960 Evo/Pro

      三星 Samsung 970 Evo/Pro

      「重要提示」在 macOS 12.0 及以上版本中,OpenCore 无法再修改 APFS 文件系统的 TRIM超时数值,部分执行 TRIM相对较慢的固态硬盘(主要是三星的控制器)将没有足够的时间执行 TRIM 操作。 不正确的设置可能导致进入系统缓慢,因此对 macOS TRIM支持度不佳的硬盘建议将 SetApfsTrimTimeout值改成 0 以关闭 TRIM,或 -1 以关闭该功能。此现象在 12.3 及以上的版本中尤其明显。

      完整支持 macOS TRIM 的型号:#

      西部数据 SN5xx/7xx 系列(未完全测试)

      英睿达 Crucial P1 1TB NVME(SM2263EN,未完全测试)

      金典 KingDian S280(SATA)

      浦科特 PLEXTOR M5Pro(SATA)

      三星 Samsung 850 PRO(SATA,未完全测试)

      三星 Samsung 870 EVO(SATA,未完全测试)

      黑苹果固态避坑指南
      https://blog.ittst.com/posts/black-apple-solid--state-pit-guideline/
      作者
      浪子
      发布于
      2022-04-12
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +黑苹果固态避坑指南 - 平淡生活
      636 字
      3 分钟
      黑苹果固态避坑指南

      三星 PM961 / PM981 / PM981a / PM991 会导致 macOS 无法安装或正常运行

      三星 983ZET无法安装 macOS;

      2019 年 5 月以前出厂的 三星 970 EVO Plus 可能存在和 PM9x1 系列类似的问题,但可以通过在Windows环境升级官方固件解决 macOS 兼容问题;

      镁光 2200S无法安装或稳定运行 macOS;

      爱国者 P2000 256GB无法通过 10.15、11.x、12.x 任何一个版本的正常安装流程,但不排除个例的可能;

      macOS 不支持使用 Intel 傲腾(Optane Memory)或镁光 3D XPoint 进行加速的笔记本电脑;

      下面的型号是与 macOS IONVMeFamily 兼容性不佳的型号(可能无故卡住或运行不正常)#

      英特尔 600P/660P/760P 系列

      金士顿 A2000:配置 S5Z42105控制器的版本必须搭配NVMeFix.kext 1.0.8 及以上,也可能完全无法安装;

      海力士 PC601/PC611/PC711/BC501:主要见于联想和戴尔笔记本,部分批次正常部分会卡住;

      技嘉 GIGABYTE M.2 PCIe SSD(比如 GP-GSM2NE8512GNTD

      威刚 剑鱼 ADATA Swordfish 2 TB M.2-2280

      海力士 SK Hynix HFS001TD9TNG-L5B0B

      海力士 SK Hynix P31

      镁光 Micron 2200V MTFDHBA512TCK -移速的256G同样使用的镁光颗粒无法安装;

      阿斯加特 Asgard AN3+ (STAR1000P)

      朗科 Netac NVME SSD 480

      西部数据 SN550/570/730/750/850都能正常安装和运行 macOS;

      三星 970EVO/Pro/Plus(升级固件后)和 980/980 Pro 都能正常安装和运行 macOS,但是此系列存在 TRIM支持问题;

      海盗船 MP400/MP600系列均能正常安装运行 macOS;

      绝大部分常见的 SATA 接口固态盘都能正常安装和运行 macOS;

      不完全支持TRIM(主要影响特定条件下的写入速度,什么是 TRIM?),但安装运行正常的型号:#

      三星 Samsung 950 Pro

      三星 Samsung 960 Evo/Pro

      三星 Samsung 970 Evo/Pro

      「重要提示」在 macOS 12.0 及以上版本中,OpenCore 无法再修改 APFS 文件系统的 TRIM超时数值,部分执行 TRIM相对较慢的固态硬盘(主要是三星的控制器)将没有足够的时间执行 TRIM 操作。 不正确的设置可能导致进入系统缓慢,因此对 macOS TRIM支持度不佳的硬盘建议将 SetApfsTrimTimeout值改成 0 以关闭 TRIM,或 -1 以关闭该功能。此现象在 12.3 及以上的版本中尤其明显。

      完整支持 macOS TRIM 的型号:#

      西部数据 SN5xx/7xx 系列(未完全测试)

      英睿达 Crucial P1 1TB NVME(SM2263EN,未完全测试)

      金典 KingDian S280(SATA)

      浦科特 PLEXTOR M5Pro(SATA)

      三星 Samsung 850 PRO(SATA,未完全测试)

      三星 Samsung 870 EVO(SATA,未完全测试)

      黑苹果固态避坑指南
      https://blog.ittst.com/posts/black-apple-solid--state-pit-guideline/
      作者
      浪子
      发布于
      2022-04-12
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/centos-appears-at-yum/index.html b/posts/centos-appears-at-yum/index.html index bc0f516..b9ec195 100644 --- a/posts/centos-appears-at-yum/index.html +++ b/posts/centos-appears-at-yum/index.html @@ -1,6 +1,6 @@ -centos在yum时出现Determining fastest mirrors - 平淡生活
      183 字
      1 分钟
      centos在yum时出现Determining fastest mirrors
      2023-10-05

      问题1#

      yum makecache时,停在Determining fastest mirrors,一直在判断最快镜像,由于已经指定了yum源,所以不需要些插件,可以用动禁用。

      解决方法:

      修改/etc/yum/pluginconf.d/fastestmirror.conf里面的enabled=0

      修改/etc/yum.conf里面的plugins=0

      问题解决。

      问题2#

      Could not retrieve mirrorlist http://mirrors.elrepo.org/mirrors-elrepo.el7 error was 12: Timeout on http://mirrors.elrepo.org/mirrors-elrepo.el7: (28, ‘Connection timed out after 30001 milliseconds’)

      镜像列表http://mirrors.elrepo.org/mirrors-elrepo.el7 的地址无法访问

      解决方法

      更新ELRepo 软件仓库镜像 首先按照官网的安装说明,配置 ELRepo:

      rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
      +centos在yum时出现Determining fastest mirrors - 平淡生活
      183 字
      1 分钟
      centos在yum时出现Determining fastest mirrors
      2023-10-05

      问题1#

      yum makecache时,停在Determining fastest mirrors,一直在判断最快镜像,由于已经指定了yum源,所以不需要些插件,可以用动禁用。

      解决方法:

      修改/etc/yum/pluginconf.d/fastestmirror.conf里面的enabled=0

      修改/etc/yum.conf里面的plugins=0

      问题解决。

      问题2#

      Could not retrieve mirrorlist http://mirrors.elrepo.org/mirrors-elrepo.el7 error was 12: Timeout on http://mirrors.elrepo.org/mirrors-elrepo.el7: (28, ‘Connection timed out after 30001 milliseconds’)

      镜像列表http://mirrors.elrepo.org/mirrors-elrepo.el7 的地址无法访问

      解决方法

      更新ELRepo 软件仓库镜像 首先按照官网的安装说明,配置 ELRepo:

      rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
       

      按照你的系统版本,运行:

      yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
       

      接下来是换源,建议先备份 /etc/yum.repos.d/elrepo.repo

      cp /etc/yum.repos.d/elrepo.repo /etc/yum.repos.d/elrepo.repo.bak
       

      然后编辑/etc/yum.repos.d/elrepo.repo 文件,在 mirrorlist=后的地址替换为

      https://mirrors.tuna.tsinghua.edu.cn/elrepo
       

      最后,更新软件包缓存

      yum makecache
      -
      centos在yum时出现Determining fastest mirrors
      https://blog.ittst.com/posts/centos-appears-at-yum/
      作者
      浪子
      发布于
      2023-10-05
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      centos在yum时出现Determining fastest mirrors
      https://blog.ittst.com/posts/centos-appears-at-yum/
      作者
      浪子
      发布于
      2023-10-05
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html b/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html index 4f21823..2d8be03 100644 --- a/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html +++ b/posts/centos-system-time-and-time-zone-viewing-and-modification-method/index.html @@ -1,8 +1,8 @@ -CentOS系统时间和时区查看以及修改的方法 - 平淡生活
      120 字
      1 分钟
      CentOS系统时间和时区查看以及修改的方法
      2016-11-14

      一、时间修改 远程连接到centos 或者直接登录系统

      date 
      +CentOS系统时间和时区查看以及修改的方法 - 平淡生活
      120 字
      1 分钟
      CentOS系统时间和时区查看以及修改的方法
      2016-11-14

      一、时间修改 远程连接到centos 或者直接登录系统

      date 
       

      查看系统时间

      date -s 
       

      修改时间 看下面的例子

      date -s  03/04/2013
       

      (将系统日期设定为2013年03月04日)

      date -s  110:38
       

      (将系统时间设定为上午 10:38)

      二、时区修改

      先查看时区

      date -R  
       

      修改时区: (将Asia/shanghai-上海时区写入当前时区)

      cp -f /usr/share/zoneinfo/Asia/Shanghai     /etc/localtime 
       

      提示是否覆盖,输入Y回车, 然后

      date
      -

      查看时区和时间(CST,中国时区)

      CentOS系统时间和时区查看以及修改的方法
      https://blog.ittst.com/posts/centos-system-time-and-time-zone-viewing-and-modification-method/
      作者
      浪子
      发布于
      2016-11-14
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      查看时区和时间(CST,中国时区)

      CentOS系统时间和时区查看以及修改的方法
      https://blog.ittst.com/posts/centos-system-time-and-time-zone-viewing-and-modification-method/
      作者
      浪子
      发布于
      2016-11-14
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/cloud-torrent-for-centos-one--click-installation/index.html b/posts/cloud-torrent-for-centos-one--click-installation/index.html index e2bbe99..a2e7c33 100644 --- a/posts/cloud-torrent-for-centos-one--click-installation/index.html +++ b/posts/cloud-torrent-for-centos-one--click-installation/index.html @@ -1,2 +1,2 @@ -Cloud Torrent for centos一键安装 - 平淡生活
      863 字
      4 分钟
      Cloud Torrent for centos一键安装

      支持 离线下载 BT和磁力链接和边下边播 的老司机坐骑 —— Cloud Torrent 声明:本文章仅提供 BT/磁力链接 下载工具的安装方法和说明,任何使用此工具 下载版权侵权文件或导致任何经济损失,皆和本人无任何关系!如果你不同意或有异议,请关闭这个网页! 10-1.png

      • 系统需求 CentOS / Debian / Ubuntu 都可以,因为是 Go语言写的

      • 脚本版本: Ver: 1.0.3

      • Cloud Torrent特点 支持 BT下载 支持 磁力链接下载 支持 搜索磁力链接 支持 离线下载 支持 边下边播( 格式限制:mp4/wbem/ogg,同时需要手动输入链接) 可视化界面 Web UI

      • 安装步骤

        wget -N —no-check-certificate https://www.xuanlove.download/sh/cloudt.sh && chmod +x cloudt.sh && bash cloudt.sh

      下载运行完毕脚本,就会直接开始安装 Cloud Torrent ,安装过程中如果出现让你选择Y和N的,都选Y。 安装完成之后,就会提醒你,输入要开放的端口(推荐:默认 8000) 启动后,访问 http://VPS_IP:8000 即可看到Web UI界面了。

      • 脚本使用说明

        bash cloudt.sh #可以直接输入这个命令,会自动判断是否需要 安装/启动/停止 Cloud Torrent   bash cloudt.sh install #安装 Cloud Torrent   bash cloudt.sh start #启动 Cloud Torrent   bash cloudt.sh stop #停止 Cloud Torrent   bash cloudt.sh tail #查看 Cloud Torrent 日志   bash cloudt.sh uninstall #卸载 Cloud Torrent

      • Cloud Torrent使用说明 Cloud Torrent可以直接在输入中输入 磁力链接 或者 在线的BT种子(不支持本地上传),点击下面的 蓝色的按钮,就会开始解析资源。


      按钮说明#

      成功解析后,就会显示如下的界面,开始下载。 Files 是查看正在下载的文件列表, Start 是启动下载(默认解析后直接启动下载), Stop 是停止下载。 还有,如果你下载完毕或者点了 Stop 停止下载,那么 Stop 就会变成 Remove 删除任务的按钮了。

      搜索磁力链接#

      Cloud Torrent支持搜索磁力链接,在输入栏中直接输入你要搜索的文件名称,同时点击 绿色的按钮 选择一个搜索源,然后点击 蓝色的Search 按钮就可以搜索了。 注意:Cloud Torrent是国外人写的,所以这些搜索源均是国外的磁力链接网站,搜索到的资源基本没有中文的,所以非特殊需求的这个功能就没什么卵用了。

      注意事项#

      BT和磁力链接的速度是和, 磁力链接/BT 的用户上传共享量 和 中心服务器的宽带质量,以及你下载 磁力链接/BT 的VPS的宽带有关系。 这种软件在某些程度上比不上 国内的迅雷,毕竟迅雷 用户了很大共享了很多的上传速度,而且还有缓存的中心服务器,所以才会那么快。 如果你是国外的VPS,特别是美国的,一定要注意下载 BT/磁力链接 容易遇到蜜罐,然后被投诉封VPS。建议使用欧洲的罗马尼亚,那里的VPS无视版权,当然拉回本地,速度肯定也不会多快

      无法访问你的 http://IP:端口#

      可能是防火墙规则的问题,使用下面这个命令来开放端口

      iptables -I INPUT -p tcp --dport 端口 -j ACCEPT
      -
      Cloud Torrent for centos一键安装
      https://blog.ittst.com/posts/cloud-torrent-for-centos-one--click-installation/
      作者
      浪子
      发布于
      2017-05-27
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +Cloud Torrent for centos一键安装 - 平淡生活
      863 字
      4 分钟
      Cloud Torrent for centos一键安装

      支持 离线下载 BT和磁力链接和边下边播 的老司机坐骑 —— Cloud Torrent 声明:本文章仅提供 BT/磁力链接 下载工具的安装方法和说明,任何使用此工具 下载版权侵权文件或导致任何经济损失,皆和本人无任何关系!如果你不同意或有异议,请关闭这个网页! 10-1.png

      • 系统需求 CentOS / Debian / Ubuntu 都可以,因为是 Go语言写的

      • 脚本版本: Ver: 1.0.3

      • Cloud Torrent特点 支持 BT下载 支持 磁力链接下载 支持 搜索磁力链接 支持 离线下载 支持 边下边播( 格式限制:mp4/wbem/ogg,同时需要手动输入链接) 可视化界面 Web UI

      • 安装步骤

        wget -N —no-check-certificate https://www.xuanlove.download/sh/cloudt.sh && chmod +x cloudt.sh && bash cloudt.sh

      下载运行完毕脚本,就会直接开始安装 Cloud Torrent ,安装过程中如果出现让你选择Y和N的,都选Y。 安装完成之后,就会提醒你,输入要开放的端口(推荐:默认 8000) 启动后,访问 http://VPS_IP:8000 即可看到Web UI界面了。

      • 脚本使用说明

        bash cloudt.sh #可以直接输入这个命令,会自动判断是否需要 安装/启动/停止 Cloud Torrent   bash cloudt.sh install #安装 Cloud Torrent   bash cloudt.sh start #启动 Cloud Torrent   bash cloudt.sh stop #停止 Cloud Torrent   bash cloudt.sh tail #查看 Cloud Torrent 日志   bash cloudt.sh uninstall #卸载 Cloud Torrent

      • Cloud Torrent使用说明 Cloud Torrent可以直接在输入中输入 磁力链接 或者 在线的BT种子(不支持本地上传),点击下面的 蓝色的按钮,就会开始解析资源。


      按钮说明#

      成功解析后,就会显示如下的界面,开始下载。 Files 是查看正在下载的文件列表, Start 是启动下载(默认解析后直接启动下载), Stop 是停止下载。 还有,如果你下载完毕或者点了 Stop 停止下载,那么 Stop 就会变成 Remove 删除任务的按钮了。

      搜索磁力链接#

      Cloud Torrent支持搜索磁力链接,在输入栏中直接输入你要搜索的文件名称,同时点击 绿色的按钮 选择一个搜索源,然后点击 蓝色的Search 按钮就可以搜索了。 注意:Cloud Torrent是国外人写的,所以这些搜索源均是国外的磁力链接网站,搜索到的资源基本没有中文的,所以非特殊需求的这个功能就没什么卵用了。

      注意事项#

      BT和磁力链接的速度是和, 磁力链接/BT 的用户上传共享量 和 中心服务器的宽带质量,以及你下载 磁力链接/BT 的VPS的宽带有关系。 这种软件在某些程度上比不上 国内的迅雷,毕竟迅雷 用户了很大共享了很多的上传速度,而且还有缓存的中心服务器,所以才会那么快。 如果你是国外的VPS,特别是美国的,一定要注意下载 BT/磁力链接 容易遇到蜜罐,然后被投诉封VPS。建议使用欧洲的罗马尼亚,那里的VPS无视版权,当然拉回本地,速度肯定也不会多快

      无法访问你的 http://IP:端口#

      可能是防火墙规则的问题,使用下面这个命令来开放端口

      iptables -I INPUT -p tcp --dport 端口 -j ACCEPT
      +
      Cloud Torrent for centos一键安装
      https://blog.ittst.com/posts/cloud-torrent-for-centos-one--click-installation/
      作者
      浪子
      发布于
      2017-05-27
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html b/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html index b8cfe89..d7a0e43 100644 --- a/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html +++ b/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/index.html @@ -1,5 +1,5 @@ -通过取子集的方式压缩霞鹜文楷字体 - 平淡生活
      199 字
      1 分钟
      通过取子集的方式压缩霞鹜文楷字体

      使用python#

      这里使用到的是Python 的库:fonttools

      使用最新版 Python 的 pip 命令安装即可在 Shell 中使用:

      pip install fonttools
      +通过取子集的方式压缩霞鹜文楷字体 - 平淡生活
      199 字
      1 分钟
      通过取子集的方式压缩霞鹜文楷字体

      使用python#

      这里使用到的是Python 的库:fonttools

      使用最新版 Python 的 pip 命令安装即可在 Shell 中使用:

      pip install fonttools
       

      常用汉字大约有3500字 我使用的是这个现代汉语常用 3500 字.txt 中文常用字库项目https://github.com/DavidSheh/CommonChineseCharacter

      取子集#

      使用以下命令即可对字体文件取子集

      fonttools subset "$input_file" --text-file="$text_file" --output-file="$output_file"
       

      其中 $input_file:输入的字体文件。 $text_file:定义保留字符的纯文本文件路径。 $output_file:输出的字体文件路径。

      取完子集完成之后字体从11M压缩到1.7M左右

      压缩#

      安装模块brotli

      pip install brotli
       

      使用命令

      fonttools ttLib.woff2 compress "$input_file" -o "$output_file"
      -

      其中 $input_file:输入的字体文件。 $output_file:输出的字体文件路径。

      再次压缩为 woff2 字体格式 大约840kb

      通过取子集的方式压缩霞鹜文楷字体
      https://blog.ittst.com/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/
      作者
      浪子
      发布于
      2024-09-03
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      其中 $input_file:输入的字体文件。 $output_file:输出的字体文件路径。

      再次压缩为 woff2 字体格式 大约840kb

      通过取子集的方式压缩霞鹜文楷字体
      https://blog.ittst.com/posts/compressed-xiafen-kaikai-font-by-taking-the-ziji-setting/
      作者
      浪子
      发布于
      2024-09-03
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/deploy-alist-in-fly.io/index.html b/posts/deploy-alist-in-fly.io/index.html index f0d0d74..981c099 100644 --- a/posts/deploy-alist-in-fly.io/index.html +++ b/posts/deploy-alist-in-fly.io/index.html @@ -1,4 +1,4 @@ -在fly.io部署Alist - 平淡生活
      188 字
      1 分钟
      在fly.io部署Alist
      2024-01-27

      安装flyctl#

      此处以Windows安装为例

      pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
      +在fly.io部署Alist - 平淡生活
      188 字
      1 分钟
      在fly.io部署Alist
      2024-01-27

      安装flyctl#

      此处以Windows安装为例

      pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
       

      初始化#

      flyctl launch
       

      按照提示创建一个app image 选择N会跳出网页要求填写 image APP name 自己设置 port 为5244 RAM选择256MB

      创建一个1G的可持久卷#

      flyctl volumes create alist_data --region hkg --size 1
       

      编辑fly.toml#

      参照以下内容编辑

      app = "alist"
      @@ -31,4 +31,4 @@
       

      部署#

      flyctl deploy
       

      等待完成,会得到一个网址

      演示#

      https://so4.fly.dev

      获取管理员密码#

      进入SSH

      flyctl ssh console
       

      执行

      ./alist admin set NEW_PASSWORD
      -

      NEW_PASSWORD为自己设置的密码

      在fly.io部署Alist
      https://blog.ittst.com/posts/deploy-alist-in-fly.io/
      作者
      浪子
      发布于
      2024-01-27
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      NEW_PASSWORD为自己设置的密码

      在fly.io部署Alist
      https://blog.ittst.com/posts/deploy-alist-in-fly.io/
      作者
      浪子
      发布于
      2024-01-27
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/deploy-gotosocial-in-fly.io/index.html b/posts/deploy-gotosocial-in-fly.io/index.html index f768d68..155f2da 100644 --- a/posts/deploy-gotosocial-in-fly.io/index.html +++ b/posts/deploy-gotosocial-in-fly.io/index.html @@ -1,4 +1,4 @@ -在fly.io部署Gotosocial - 平淡生活
      490 字
      2 分钟
      在fly.io部署Gotosocial

      关于Gotosocial#

      GoToSocial 是一个十分轻量(轻量到甚至没有用户界面,需要使用第三方程序登录、兼容 Mastodon 应用进行使用)的 ActivityPub 联邦社交网络程序,自建 GoToSocial 可以避免您的信息因为所在实例倒闭、不可抗力等原因化为乌有。

      准备#

      • 注册 Fly.io 账号,并绑卡(避免滥用);
      • 注册 Cloudflare 并启用 R2,启用 R2 需要绑卡。新建一个储存桶并创建一个 API 令牌。

      安装 flyctl#

      • Linux
      curl -L https://fly.io/install.sh | sh
      +在fly.io部署Gotosocial - 平淡生活
      490 字
      2 分钟
      在fly.io部署Gotosocial

      关于Gotosocial#

      GoToSocial 是一个十分轻量(轻量到甚至没有用户界面,需要使用第三方程序登录、兼容 Mastodon 应用进行使用)的 ActivityPub 联邦社交网络程序,自建 GoToSocial 可以避免您的信息因为所在实例倒闭、不可抗力等原因化为乌有。

      准备#

      • 注册 Fly.io 账号,并绑卡(避免滥用);
      • 注册 Cloudflare 并启用 R2,启用 R2 需要绑卡。新建一个储存桶并创建一个 API 令牌。

      安装 flyctl#

      • Linux
      curl -L https://fly.io/install.sh | sh
       
      • macOS
      curl -L https://fly.io/install.sh | sh
       
      • Windows,需要开启 RemoteSigned: 管理员运行
       Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
       
      powershell -Command "iwr https://fly.io/install.ps1 -useb | iex"
      @@ -49,4 +49,4 @@
       
      • 创建用户
      /gotosocial/gotosocial admin account create --username YOUR_USERNAME --email YOUR@EMAIL.COM --password 'SOME_VERY_GOOD_PASSWD'
       

      YOUR_USERNAME为用户名 YOUR@EMAIL.COM为邮箱 SOME_VERY_GOOD_PASSWD为密码,需设置足够复杂,太简单会提示密码不够安全,需重新设置

      • 设置管理员
      /gotosocial/gotosocial admin account promote --username YOUR_USERNAME
       

      演示#

      https://m.ima.cm

      https://m.ima.cm/@jkjoy

      下载数据库#

      fly.toml文件目录执行

      flyctl sftp get /gotosocial/storage/sqlite.db
      -
      在fly.io部署Gotosocial
      https://blog.ittst.com/posts/deploy-gotosocial-in-fly.io/
      作者
      浪子
      发布于
      2023-08-17
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      在fly.io部署Gotosocial
      https://blog.ittst.com/posts/deploy-gotosocial-in-fly.io/
      作者
      浪子
      发布于
      2023-08-17
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/deploy-the-artalk-review-system-in-fly.io/index.html b/posts/deploy-the-artalk-review-system-in-fly.io/index.html index 8891529..d52e107 100644 --- a/posts/deploy-the-artalk-review-system-in-fly.io/index.html +++ b/posts/deploy-the-artalk-review-system-in-fly.io/index.html @@ -1,4 +1,4 @@ -在fly.io部署artalk评论系统 - 平淡生活
      191 字
      1 分钟
      在fly.io部署artalk评论系统
      2023-08-15

      众所周知Fly.io是一个免费的SAAS平台 提供三个内存为256MB的服务器,总3G硬盘空间. 为防止滥用,需要绑定信用卡.

      准备#

      安装官方的命令行工具flyctl

      初始化#

      flyctl launch
      +在fly.io部署artalk评论系统 - 平淡生活
      191 字
      1 分钟
      在fly.io部署artalk评论系统
      2023-08-15

      众所周知Fly.io是一个免费的SAAS平台 提供三个内存为256MB的服务器,总3G硬盘空间. 为防止滥用,需要绑定信用卡.

      准备#

      安装官方的命令行工具flyctl

      初始化#

      flyctl launch
       

      根据提示创建一个app

      创建一个1G的硬盘#

      1G的硬盘用来储存评论数据绰绰有余了

      flyctl volumes create artalk_data --region hkg --size 1
       

      编辑FLY.TOML#

      #根据自动生成的FLY.TOML文件修改
       app = "atim"  
      @@ -24,4 +24,4 @@
       

      在 fly.toml 文件目录执行#

      flyctl ssh console
       

      创建一个管理员账号

      ./artalk admin
       

      如需重启则执行

      flyctl apps restart
      -
      在fly.io部署artalk评论系统
      https://blog.ittst.com/posts/deploy-the-artalk-review-system-in-fly.io/
      作者
      浪子
      发布于
      2023-08-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      在fly.io部署artalk评论系统
      https://blog.ittst.com/posts/deploy-the-artalk-review-system-in-fly.io/
      作者
      浪子
      发布于
      2023-08-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/docker-deploy-activity-relay-service/index.html b/posts/docker-deploy-activity-relay-service/index.html index cf3cfa5..d91b5de 100644 --- a/posts/docker-deploy-activity-relay-service/index.html +++ b/posts/docker-deploy-activity-relay-service/index.html @@ -1,4 +1,4 @@ -Docker部署Activity-Relay服务 - 平淡生活
      250 字
      1 分钟
      Docker部署Activity-Relay服务
      2023-10-03
      • 经过测试国内部署会有无法通讯的问题.

      测试环境#

      centos7.9

      准备工作#

      • git
      • openssl
      • nginx
      • docker
      • docker-compose

      从仓库Pull a repository#

      git clone https://github.com/yukimochi/Activity-Relay.git -b v2.0.0
      +Docker部署Activity-Relay服务 - 平淡生活
      250 字
      1 分钟
      Docker部署Activity-Relay服务
      2023-10-03
      • 经过测试国内部署会有无法通讯的问题.

      测试环境#

      centos7.9

      准备工作#

      • git
      • openssl
      • nginx
      • docker
      • docker-compose

      从仓库Pull a repository#

      git clone https://github.com/yukimochi/Activity-Relay.git -b v2.0.0
       

      复制编辑config.yml#

      进入Activity-Relay目录

      cd Activity-Relay
       cp config.yml.example config.yml
       

      修改相关配置

      vim config.yml
      @@ -76,4 +76,4 @@
       
         }
       
      -
      Docker部署Activity-Relay服务
      https://blog.ittst.com/posts/docker-deploy-activity-relay-service/
      作者
      浪子
      发布于
      2023-10-03
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      Docker部署Activity-Relay服务
      https://blog.ittst.com/posts/docker-deploy-activity-relay-service/
      作者
      浪子
      发布于
      2023-10-03
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/from-hexo-to-astro/index.html b/posts/from-hexo-to-astro/index.html index c9b9846..bd220a0 100644 --- a/posts/from-hexo-to-astro/index.html +++ b/posts/from-hexo-to-astro/index.html @@ -1,5 +1,5 @@ -从Hexo到Astro - 平淡生活
      413 字
      2 分钟
      从Hexo到Astro

      很多人在向Astro转移,咱也跟风一波. 主要是很喜欢fuwari的这个主题模板,曾经也移植到了Typecho平台.

      步骤#

      安装Astro#

      1. 从这个模板生成一个新的存储库或分叉这个存储库。 https://github.com/saicaca/fuwari/generate

      2. 要在本地编辑你的博客,克隆你的存储库,运行

      pnpm install
      +从Hexo到Astro - 平淡生活
      413 字
      2 分钟
      从Hexo到Astro

      很多人在向Astro转移,咱也跟风一波. 主要是很喜欢fuwari的这个主题模板,曾经也移植到了Typecho平台.

      步骤#

      安装Astro#

      1. 从这个模板生成一个新的存储库或分叉这个存储库。 https://github.com/saicaca/fuwari/generate

      2. 要在本地编辑你的博客,克隆你的存储库,运行

      pnpm install
       
      pnpm add sharp
       

      安装依赖项。如果你没有安装pnpm 则执行

      npm install-g pnpm
       
      1. 编辑配置文件src/config.ts以自定义你的博客。

      2. 创建一个新帖子 运行

      pnpm new-post <filename>
      -

      并在src/content/post/中进行编辑。

      1. 按照指南将你的博客部署到VercelNetlifyGitHub Pages等。

      部署前需要在astro.config.mjs中编辑站点配置。

      迁移#

      由于HEXOAstroFront-matter存在差异会导致无法正常生成页面 所以就利用deepseek写了个python的脚本用以实现以下功能

      1. 自动生成slug 利用谷歌翻译
      2. 自动更改文件名为文章名. 这个是历史遗留问题.从wordpress转过来时留下的.
      3. 自动更改datepublished.由于hexo的使用过程中有很多种譬如时间戳 譬如 YYYY-MM-DD这一种在HEXO下本来兼容的现在到了Astro下就都报错了.如果出现无法转换则使用默认日期.避免转换过程中出现中断.
      4. 更改categorytags

      https://gist.github.com/jkjoy/459deed2048a432f8147abde2a334082

      脚本 122 行posts_dir = '_posts'为hexo文章路径.

      把转换好的文章 复制进 src/content/post/ 下.

      上传#

      可以上传到VercelNetlifyGitHub Pages 这些都不赘述了.

      玩过Hexo基本都知道怎么操作了

      总结#

      AstroFront-matter太骚了.

      几乎每个模板的定义还不一样.

      从Hexo到Astro
      https://blog.ittst.com/posts/from-hexo-to-astro/
      作者
      浪子
      发布于
      2024-10-28
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      并在src/content/post/中进行编辑。

      1. 按照指南将你的博客部署到VercelNetlifyGitHub Pages等。

      部署前需要在astro.config.mjs中编辑站点配置。

      迁移#

      由于HEXOAstroFront-matter存在差异会导致无法正常生成页面 所以就利用deepseek写了个python的脚本用以实现以下功能

      1. 自动生成slug 利用谷歌翻译
      2. 自动更改文件名为文章名. 这个是历史遗留问题.从wordpress转过来时留下的.
      3. 自动更改datepublished.由于hexo的使用过程中有很多种譬如时间戳 譬如 YYYY-MM-DD这一种在HEXO下本来兼容的现在到了Astro下就都报错了.如果出现无法转换则使用默认日期.避免转换过程中出现中断.
      4. 更改categorytags

      https://gist.github.com/jkjoy/459deed2048a432f8147abde2a334082

      脚本 122 行posts_dir = '_posts'为hexo文章路径.

      把转换好的文章 复制进 src/content/post/ 下.

      上传#

      可以上传到VercelNetlifyGitHub Pages 这些都不赘述了.

      玩过Hexo基本都知道怎么操作了

      总结#

      AstroFront-matter太骚了.

      几乎每个模板的定义还不一样.

      从Hexo到Astro
      https://blog.ittst.com/posts/from-hexo-to-astro/
      作者
      浪子
      发布于
      2024-10-28
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/how-to-deploy-memos-in-fly.io/index.html b/posts/how-to-deploy-memos-in-fly.io/index.html index 8071d97..bb5925e 100644 --- a/posts/how-to-deploy-memos-in-fly.io/index.html +++ b/posts/how-to-deploy-memos-in-fly.io/index.html @@ -1,4 +1,4 @@ -如何在Fly.io部署Memos - 平淡生活
      263 字
      1 分钟
      如何在Fly.io部署Memos
      2023-08-15

      项目#

      https://github.com/hu3rror/memos-on-fly

      准备工作#

      安装flyctl#

      Install flyctl 以WINDOWS为例

      pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
      +如何在Fly.io部署Memos - 平淡生活
      263 字
      1 分钟
      如何在Fly.io部署Memos
      2023-08-15

      项目#

      https://github.com/hu3rror/memos-on-fly

      准备工作#

      安装flyctl#

      Install flyctl 以WINDOWS为例

      pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"
       

      其他系统请参照官方

      新建APP#

      初始化

      flyctl launch
       

      按照提示选择会生成一个FLY.TOML文件

      编辑FLY.TOML#

      添加以下

      [build]
         image = "ghcr.io/hu3rror/memos-litestream:latest"
      @@ -23,4 +23,4 @@
       

      添加持久卷#

      flyctl volumes create memos_data --region hkg --size 1
       

      密钥#

      将B2存储的密钥添加到fly的密钥存储中,使用官方镜像可以忽略此步骤

      flyctl secrets set LITESTREAM_ACCESS_KEY_ID="<keyId>" LITESTREAM_SECRET_ACCESS_KEY="<applicationKey>"
       

      部署#

      flyctl deploy
      -

      演示地址#

      https://memosim.fly.dev/ 绑定域名演示 https://imad.top

      如何在Fly.io部署Memos
      https://blog.ittst.com/posts/how-to-deploy-memos-in-fly.io/
      作者
      浪子
      发布于
      2023-08-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      演示地址#

      https://memosim.fly.dev/ 绑定域名演示 https://imad.top

      如何在Fly.io部署Memos
      https://blog.ittst.com/posts/how-to-deploy-memos-in-fly.io/
      作者
      浪子
      发布于
      2023-08-15
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html b/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html index 91e610a..1b5df97 100644 --- a/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html +++ b/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/index.html @@ -1,3 +1,3 @@ -LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法 - 平淡生活
      30 字
      1 分钟
      LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法

      用SSH登录软路由

      ssh root@192.168.1.1
      +LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法 - 平淡生活
      30 字
      1 分钟
      LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法

      用SSH登录软路由

      ssh root@192.168.1.1
       

      然后输入

      sed -i 's/\tdetect_package/\t# detect_package/g' /koolshare/scripts/ks_tar_install.sh
      -

      再安装科学上网插件即可

      koolss

      LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
      https://blog.ittst.com/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/
      作者
      浪子
      发布于
      2024-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      再安装科学上网插件即可

      koolss

      LEDE 软路由安装“koolss”离线插件包提示含非法关键字的解决方法
      https://blog.ittst.com/posts/lede-soft-routing-installation-koolss-offline-plug--in-package-prompts-to-solve-illegal-keywords/
      作者
      浪子
      发布于
      2024-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/local-installation-package-command-under-linux/index.html b/posts/local-installation-package-command-under-linux/index.html index 06c857e..7e6c01b 100644 --- a/posts/local-installation-package-command-under-linux/index.html +++ b/posts/local-installation-package-command-under-linux/index.html @@ -1,3 +1,3 @@ -Linux下本地安装包命令 - 平淡生活
      28 字
      1 分钟
      Linux下本地安装包命令
      2022-07-27

      centos下安装RPM安装包#

      sudo yum localinstall file.rpm
      +Linux下本地安装包命令 - 平淡生活
      \ No newline at end of file +
      Linux下本地安装包命令
      https://blog.ittst.com/posts/local-installation-package-command-under-linux/
      作者
      浪子
      发布于
      2022-07-27
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html b/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html index 28ca77d..25c08a4 100644 --- a/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html +++ b/posts/macos-and-windows-dual-systems-are-not-synchronized/index.html @@ -1,2 +1,2 @@ -macOS与Windows双系统时间不同步的解决办法 - 平淡生活
      \ No newline at end of file +macOS与Windows双系统时间不同步的解决办法 - 平淡生活
      \ No newline at end of file diff --git a/posts/mariadb-creates-databases,-users-and-authorization/index.html b/posts/mariadb-creates-databases,-users-and-authorization/index.html index 942c39c..4162a80 100644 --- a/posts/mariadb-creates-databases,-users-and-authorization/index.html +++ b/posts/mariadb-creates-databases,-users-and-authorization/index.html @@ -1,4 +1,4 @@ -Mariadb创建数据库、用户及授权 - 平淡生活
      245 字
      1 分钟
      Mariadb创建数据库、用户及授权
      2023-10-06

      在测试SForum程序中使用到的部分关于数据库的操作

      安装Mariadb服务器#

      apt install mariadb-server-10.6
      +Mariadb创建数据库、用户及授权 - 平淡生活
      245 字
      1 分钟
      Mariadb创建数据库、用户及授权
      2023-10-06

      在测试SForum程序中使用到的部分关于数据库的操作

      安装Mariadb服务器#

      apt install mariadb-server-10.6
       

      初始化数据库#

       mysql_secure_installation
       

      连接数据库#

      mysql -u root -p 
       

      创建数据库#

      CREATE DATABASE bbs;
      @@ -9,4 +9,4 @@
       FLUSH privileges;
       

      或则采用下面的代码,除了操作权限授权外,还赋予授权的权限。#

      GRANT ALL ON test.* to username@'%' IDENTIFIED BY 'passowrd' WITH GRANT OPTION;
       FLUSH privileges;
      -
      Mariadb创建数据库、用户及授权
      https://blog.ittst.com/posts/mariadb-creates-databases,-users-and-authorization/
      作者
      浪子
      发布于
      2023-10-06
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      Mariadb创建数据库、用户及授权
      https://blog.ittst.com/posts/mariadb-creates-databases,-users-and-authorization/
      作者
      浪子
      发布于
      2023-10-06
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/nec-m700-black-apple-oc0.9.4-guide/index.html b/posts/nec-m700-black-apple-oc0.9.4-guide/index.html index aeb2eee..50b3f87 100644 --- a/posts/nec-m700-black-apple-oc0.9.4-guide/index.html +++ b/posts/nec-m700-black-apple-oc0.9.4-guide/index.html @@ -1 +1 @@ -NEC M700黑苹果OC0.9.4引导 - 平淡生活
      106 字
      1 分钟
      NEC M700黑苹果OC0.9.4引导
      2023-10-01

      NEC M700黑苹果OC0.9.4引导#

      配置#

      CPU QHPW 2.2Ghz 四核心八线程I7es魔改 主板NEC 内存8GB DDR4 2666Mhz 硬盘512GB SSD 无线网卡BCM943224pcieBT拆机 有线网卡INTEL 声卡ALC235

      准备工作#

      U盘 16G以上 解锁CFG LOCK工具 ami BIOS提取工具 opencore OCAT

      解锁CFG LOCK#

      在WINDOWS系统下通过工具提取出BIOS. 通过UEFI TOOL打开提取出的BIOS文件,查找cfg lock

      NEC M700黑苹果OC0.9.4引导
      https://blog.ittst.com/posts/nec-m700-black-apple-oc0.9.4-guide/
      作者
      浪子
      发布于
      2023-10-01
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +NEC M700黑苹果OC0.9.4引导 - 平淡生活
      106 字
      1 分钟
      NEC M700黑苹果OC0.9.4引导
      2023-10-01

      NEC M700黑苹果OC0.9.4引导#

      配置#

      CPU QHPW 2.2Ghz 四核心八线程I7es魔改 主板NEC 内存8GB DDR4 2666Mhz 硬盘512GB SSD 无线网卡BCM943224pcieBT拆机 有线网卡INTEL 声卡ALC235

      准备工作#

      U盘 16G以上 解锁CFG LOCK工具 ami BIOS提取工具 opencore OCAT

      解锁CFG LOCK#

      在WINDOWS系统下通过工具提取出BIOS. 通过UEFI TOOL打开提取出的BIOS文件,查找cfg lock

      NEC M700黑苹果OC0.9.4引导
      https://blog.ittst.com/posts/nec-m700-black-apple-oc0.9.4-guide/
      作者
      浪子
      发布于
      2023-10-01
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/nec-vk22-black-apple-opencore-guide/index.html b/posts/nec-vk22-black-apple-opencore-guide/index.html index 38e5037..b57a357 100644 --- a/posts/nec-vk22-black-apple-opencore-guide/index.html +++ b/posts/nec-vk22-black-apple-opencore-guide/index.html @@ -1 +1 @@ -NEC VK22 黑苹果opencore引导 - 平淡生活
      192 字
      1 分钟
      NEC VK22 黑苹果opencore引导

      关于解锁#

      安装之前要解锁cfglock

      关于nvme固态的使用#

      思路就是用一个U盘格式化成FAT32格式

      把oc引导复制在U盘中。

      在BIOS中把U盘启动设为第一启动项

      这样做得好处是不用修改BIOS直接使用nvme的固态提升读写速度

      坏处就是占用一个USB口

      其他#

      笔记本黑苹果的难点就在于注入edid。

      我的做法是在clover下安装好macos之后再用hackintool注入EDID,然后再转为opencore引导。

      其他都很简单我就不多说了。

      附上EFI文件,三码自己改

      已驱动#

      显卡 声卡 网卡 (已更换DW1820A) 读卡器 USB 触摸板

      下载#

      请打赏后下载

      NEC VK22 黑苹果opencore引导
      https://blog.ittst.com/posts/nec-vk22-black-apple-opencore-guide/
      作者
      浪子
      发布于
      2021-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +NEC VK22 黑苹果opencore引导 - 平淡生活
      192 字
      1 分钟
      NEC VK22 黑苹果opencore引导

      关于解锁#

      安装之前要解锁cfglock

      关于nvme固态的使用#

      思路就是用一个U盘格式化成FAT32格式

      把oc引导复制在U盘中。

      在BIOS中把U盘启动设为第一启动项

      这样做得好处是不用修改BIOS直接使用nvme的固态提升读写速度

      坏处就是占用一个USB口

      其他#

      笔记本黑苹果的难点就在于注入edid。

      我的做法是在clover下安装好macos之后再用hackintool注入EDID,然后再转为opencore引导。

      其他都很简单我就不多说了。

      附上EFI文件,三码自己改

      已驱动#

      显卡 声卡 网卡 (已更换DW1820A) 读卡器 USB 触摸板

      下载#

      请打赏后下载

      NEC VK22 黑苹果opencore引导
      https://blog.ittst.com/posts/nec-vk22-black-apple-opencore-guide/
      作者
      浪子
      发布于
      2021-10-10
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/office2016-mac-version-download,-install,-crack-activation/index.html b/posts/office2016-mac-version-download,-install,-crack-activation/index.html index bf06d81..afd5aae 100644 --- a/posts/office2016-mac-version-download,-install,-crack-activation/index.html +++ b/posts/office2016-mac-version-download,-install,-crack-activation/index.html @@ -1 +1 @@ -office2016 Mac 版本下载安装及破解激活 - 平淡生活
      \ No newline at end of file +office2016 Mac 版本下载安装及破解激活 - 平淡生活
      \ No newline at end of file diff --git a/posts/quickly-deploy-misskey-instance/index.html b/posts/quickly-deploy-misskey-instance/index.html index 2bf243a..7c34808 100644 --- a/posts/quickly-deploy-misskey-instance/index.html +++ b/posts/quickly-deploy-misskey-instance/index.html @@ -1,4 +1,4 @@ -快速部署misskey实例 - 平淡生活
      308 字
      2 分钟
      快速部署misskey实例
      2023-10-11

      使用官方推荐一键脚本#

      使用纯净的Ubuntu系统安装,推荐配置双核心四线程.

      更新软件#

      sudo apt update; sudo apt full-upgrade -y; sudo reboot
      +快速部署misskey实例 - 平淡生活
      308 字
      2 分钟
      快速部署misskey实例
      2023-10-11

      使用官方推荐一键脚本#

      使用纯净的Ubuntu系统安装,推荐配置双核心四线程.

      更新软件#

      sudo apt update; sudo apt full-upgrade -y; sudo reboot
       

      一键脚本#

      wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/ubuntu.sh -O ubuntu.sh; sudo bash ubuntu.sh
       

      按照提示输入内容

      更新misskey脚本#

      更新 Misskey 的脚本不会升级运行环境。 对于脚本的更新内容,另请参阅 “更新日志”

      wget https://raw.githubusercontent.com/joinmisskey/bash-install/main/update.ubuntu.sh -O update.sh
       
      sudo bash update.sh
      @@ -44,4 +44,4 @@
               add_header X-Cache $upstream_cache_status;
           }
       }
      -
      快速部署misskey实例
      https://blog.ittst.com/posts/quickly-deploy-misskey-instance/
      作者
      浪子
      发布于
      2023-10-11
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      快速部署misskey实例
      https://blog.ittst.com/posts/quickly-deploy-misskey-instance/
      作者
      浪子
      发布于
      2023-10-11
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/qv2ray-client-and-kernel-download/index.html b/posts/qv2ray-client-and-kernel-download/index.html index 80467df..dc85b8b 100644 --- a/posts/qv2ray-client-and-kernel-download/index.html +++ b/posts/qv2ray-client-and-kernel-download/index.html @@ -1 +1 @@ -Qv2ray客户端及内核下载 - 平淡生活
      154 字
      1 分钟
      Qv2ray客户端及内核下载
      2023-04-07

      关于Qv2ray#

      在我们常用的PC系统上,比如Windows/Mac/Linux等系统平台,V2ray官方并没有发布图形化的桌面客户端。

      V2rayN和Qv2ray等一些第三方工具,在V2ray官方内核的基础上,为我们提供了图形化界面支持,使用起来会更加方便。

      其中Qv2ray除了支持V2ray的vmess协议外,还可以通过安装插件的方式,额外增加对SS/SSR/Trojan等代理协议的支持,可作为V2ray/SS/SSR/Trojan客户端使用。

      支持的协议#

      Vmess(V2ray) SS(Shadowsocks) SSR(ShadowsocksR) Trojan Trojan-go NaiveProxy Vless

      下载#

      客户端下载#

      https://github.com/Qv2ray/Qv2ray/releases

      内核下载#

      https://github.com/v2fly/v2ray-core/releases/tag/v4.31.0

      Qv2ray客户端及内核下载
      https://blog.ittst.com/posts/qv2ray-client-and-kernel-download/
      作者
      浪子
      发布于
      2023-04-07
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +Qv2ray客户端及内核下载 - 平淡生活
      154 字
      1 分钟
      Qv2ray客户端及内核下载
      2023-04-07

      关于Qv2ray#

      在我们常用的PC系统上,比如Windows/Mac/Linux等系统平台,V2ray官方并没有发布图形化的桌面客户端。

      V2rayN和Qv2ray等一些第三方工具,在V2ray官方内核的基础上,为我们提供了图形化界面支持,使用起来会更加方便。

      其中Qv2ray除了支持V2ray的vmess协议外,还可以通过安装插件的方式,额外增加对SS/SSR/Trojan等代理协议的支持,可作为V2ray/SS/SSR/Trojan客户端使用。

      支持的协议#

      Vmess(V2ray) SS(Shadowsocks) SSR(ShadowsocksR) Trojan Trojan-go NaiveProxy Vless

      下载#

      客户端下载#

      https://github.com/Qv2ray/Qv2ray/releases

      内核下载#

      https://github.com/v2fly/v2ray-core/releases/tag/v4.31.0

      Qv2ray客户端及内核下载
      https://blog.ittst.com/posts/qv2ray-client-and-kernel-download/
      作者
      浪子
      发布于
      2023-04-07
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html b/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html index 658d762..fb2eff9 100644 --- a/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html +++ b/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/index.html @@ -1 +1 @@ -记一次亿储SSD固态掉盘修复(重新开卡) - 平淡生活
      378 字
      2 分钟
      记一次亿储SSD固态掉盘修复(重新开卡)

      老孙在闲鱼淘了一块二手的SSD,本来准备用来安装黑苹果使用。 刚开始安装挺顺利,安装的是OSX 12.13.6,分区格式APFS。 笔记本没有息屏就上班去了。 下班回来一看界面卡死。于是只有强行关机重启。 这下问题来了,识别不了硬盘了。 百度出的原因就是固态硬盘掉盘。是二三线固态厂商的通病。再次建议大家还是买大厂的产品。 有教程说30分钟拯救固态。试了一晚上不行。 看了第二种方法就是去开卡量产。 摸索了一晚上终于成功了!!!

      所需物料#


      硬盘盒(USB转接卡) 螺丝刀(拆硬盘用) 开卡软件(文章末尾下载) 1 首先把硬盘拆开 拆开硬盘发现主控是慧荣sm 2246XT(其实百度也可以百度到,如果是正品的话……) 103_2877224_9e544a870ce08b2.jpg 图是网上找的,主控型号一般会印在主控芯片上,也就是那个小的。 2 短接JP1,PCB上一般会有标注,如果和我的硬盘一样的话就短接最上面两个(懒 没有作图 网图) 3 接上硬盘盒 打开开卡软件sm2246XT_MPTool_O1224H 4 识别到port1之后 不用短接 QQ浏览器截图20190801131230.png 5 此时应该在Parameter里面选择一个合适的flash型号,直接开卡就会成功 103_2877224_bd107f5920c8e54.png

      参考教程链接

      http://www.upantool.com/jiaocheng/ssd/2017/10569.html http://bbs.mydigit.cn/read.php?tid=2367269

      开卡工具下载#

      sm2246XT_MPTool_O1224H.zip

      bg.jpg

      记一次亿储SSD固态掉盘修复(重新开卡)
      https://blog.ittst.com/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/
      作者
      浪子
      发布于
      2019-08-01
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +记一次亿储SSD固态掉盘修复(重新开卡) - 平淡生活
      378 字
      2 分钟
      记一次亿储SSD固态掉盘修复(重新开卡)

      老孙在闲鱼淘了一块二手的SSD,本来准备用来安装黑苹果使用。 刚开始安装挺顺利,安装的是OSX 12.13.6,分区格式APFS。 笔记本没有息屏就上班去了。 下班回来一看界面卡死。于是只有强行关机重启。 这下问题来了,识别不了硬盘了。 百度出的原因就是固态硬盘掉盘。是二三线固态厂商的通病。再次建议大家还是买大厂的产品。 有教程说30分钟拯救固态。试了一晚上不行。 看了第二种方法就是去开卡量产。 摸索了一晚上终于成功了!!!

      所需物料#


      硬盘盒(USB转接卡) 螺丝刀(拆硬盘用) 开卡软件(文章末尾下载) 1 首先把硬盘拆开 拆开硬盘发现主控是慧荣sm 2246XT(其实百度也可以百度到,如果是正品的话……) 103_2877224_9e544a870ce08b2.jpg 图是网上找的,主控型号一般会印在主控芯片上,也就是那个小的。 2 短接JP1,PCB上一般会有标注,如果和我的硬盘一样的话就短接最上面两个(懒 没有作图 网图) 3 接上硬盘盒 打开开卡软件sm2246XT_MPTool_O1224H 4 识别到port1之后 不用短接 QQ浏览器截图20190801131230.png 5 此时应该在Parameter里面选择一个合适的flash型号,直接开卡就会成功 103_2877224_bd107f5920c8e54.png

      参考教程链接

      http://www.upantool.com/jiaocheng/ssd/2017/10569.html http://bbs.mydigit.cn/read.php?tid=2367269

      开卡工具下载#

      sm2246XT_MPTool_O1224H.zip

      bg.jpg

      记一次亿储SSD固态掉盘修复(重新开卡)
      https://blog.ittst.com/posts/remember-to-restore-the-ssd-ssd-solid-state-(re--opening-the-card)/
      作者
      浪子
      发布于
      2019-08-01
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/start-with-memos's-webhook/index.html b/posts/start-with-memos's-webhook/index.html index 33847ce..dbb3c88 100644 --- a/posts/start-with-memos's-webhook/index.html +++ b/posts/start-with-memos's-webhook/index.html @@ -1,4 +1,4 @@ -从memos的webhook开始 - 平淡生活
      779 字
      4 分钟
      从memos的webhook开始
      2024-06-18

      说在前面#

      memos的webhook功能从v0.18 版本开始加入. webhook也为memos带来了不一样的玩法.

      前段时间从Typecho主题icefox上直接CTRL+C了CSS布局,做了一个基于memos的单页面,类微信朋友圈.

      然后使用webhook自动保存json到本地目录,快速加载. 解决跨域问题

      获取memos.json#

      使用bash#

      创建一个memos.sh文件

      #!/bin/bash
      +从memos的webhook开始 - 平淡生活
      779 字
      4 分钟
      从memos的webhook开始
      2024-06-18

      说在前面#

      memos的webhook功能从v0.18 版本开始加入. webhook也为memos带来了不一样的玩法.

      前段时间从Typecho主题icefox上直接CTRL+C了CSS布局,做了一个基于memos的单页面,类微信朋友圈.

      然后使用webhook自动保存json到本地目录,快速加载. 解决跨域问题

      获取memos.json#

      使用bash#

      创建一个memos.sh文件

      #!/bin/bash
       
       # API地址
       API_URL="https://memos.ee/api/v1/memos"
      @@ -74,4 +74,4 @@
         command-working-directory: "/"
       

      然后运行

      docker compose up -d
       

      即可

      使用Webhook#

      hooks.yaml为webhook的配置文件

      其中的execute-command为容器中的可执行脚本目录 webhook的访问地址格式为 服务器 ip:端口/hooks/id 访问http://127.0.0.1:9000/hooks/memos 即可触发执行bash /config/memos.sh

      在memos的webhook设置中填入http://127.0.0.1:9000/hooks/memos的webhook地址, 即可

      以宝塔为例#

      创建一个名为 api.domain.com的网站 在网站的根目录下创建 docker-compose.yaml hooks.yaml memos.sh 的文件 运行

      docker compose up -d
      -

      创建一个反向代理 使 127.0.0.1:9000 代理到 api.domain.com 的 /webhook/ 目录 访问api.domain.com/webhook/hooks/memos 此时会在网站根目录下生成memos.json 访问api.domain.com/memos.json 此时在memos的webhook地址中填入api.domain.com/webhook/hooks/memos 实现在memos更新时自动更新memos.json文件

      演示#

      https://memos.jkjoy.cn

      从memos的webhook开始
      https://blog.ittst.com/posts/start-with-memos's-webhook/
      作者
      浪子
      发布于
      2024-06-18
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      创建一个反向代理 使 127.0.0.1:9000 代理到 api.domain.com 的 /webhook/ 目录 访问api.domain.com/webhook/hooks/memos 此时会在网站根目录下生成memos.json 访问api.domain.com/memos.json 此时在memos的webhook地址中填入api.domain.com/webhook/hooks/memos 实现在memos更新时自动更新memos.json文件

      演示#

      https://memos.jkjoy.cn

      从memos的webhook开始
      https://blog.ittst.com/posts/start-with-memos's-webhook/
      作者
      浪子
      发布于
      2024-06-18
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/test-various-problems-encountered-in-xiuno2sforum/index.html b/posts/test-various-problems-encountered-in-xiuno2sforum/index.html index 72f4090..19af9ba 100644 --- a/posts/test-various-problems-encountered-in-xiuno2sforum/index.html +++ b/posts/test-various-problems-encountered-in-xiuno2sforum/index.html @@ -1,4 +1,4 @@ -测试xiuno2Sforum中遇到的各种问题 - 平淡生活
      392 字
      2 分钟
      测试xiuno2Sforum中遇到的各种问题
      2023-10-06

      想把xiunobbs数据转换成SForum,由于最新版本的SForum没有转换工具支持 于是采用Sforum v2.2.2测试

      测试环境#

      • Ubuntu 22.0.4
      • php8.0
      • mariadb10.6
      • composer
      • redis
      • nginx or apache

      测试程序#

      sforum v2.2.2

      xiuno2sforum v2.2.2

      PHP#

      安装PPA 源#

      需要使用 PPA 源安装:

      sudo apt install software-properties-common -y
      +测试xiuno2Sforum中遇到的各种问题 - 平淡生活
      392 字
      2 分钟
      测试xiuno2Sforum中遇到的各种问题
      2023-10-06

      想把xiunobbs数据转换成SForum,由于最新版本的SForum没有转换工具支持 于是采用Sforum v2.2.2测试

      测试环境#

      • Ubuntu 22.0.4
      • php8.0
      • mariadb10.6
      • composer
      • redis
      • nginx or apache

      测试程序#

      sforum v2.2.2

      xiuno2sforum v2.2.2

      PHP#

      安装PPA 源#

      需要使用 PPA 源安装:

      sudo apt install software-properties-common -y
       sudo add-apt-repository ppa:ondrej/php
       sudo apt-get update
       

      安装php8.0#

      apt install php8.0
      @@ -40,4 +40,4 @@
       

      安装SForum v2.2.2#

      composer create-project zhuchunshu/sforum=v2.2.2 sforum
       

      进入安装目录,

      cd sforum
       

      按照提示,连续执行命令即可完成安装(启动服务也是此命令):

      php CodeFec CodeFec
      -
      测试xiuno2Sforum中遇到的各种问题
      https://blog.ittst.com/posts/test-various-problems-encountered-in-xiuno2sforum/
      作者
      浪子
      发布于
      2023-10-06
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +
      测试xiuno2Sforum中遇到的各种问题
      https://blog.ittst.com/posts/test-various-problems-encountered-in-xiuno2sforum/
      作者
      浪子
      发布于
      2023-10-06
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html b/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html index edb2aba..3f1def7 100644 --- a/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html +++ b/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/index.html @@ -1,3 +1,3 @@ -centos7 ssh连接慢的解决方法 - 平淡生活
      35 字
      1 分钟
      centos7 ssh连接慢的解决方法
      2022-08-12
      vim /etc/ssh/sshd_config
      +centos7 ssh连接慢的解决方法 - 平淡生活
      \ No newline at end of file +

      重启

      centos7 ssh连接慢的解决方法
      https://blog.ittst.com/posts/the-solution-of-the-cantos7-ssh-connection-is-slow/
      作者
      浪子
      发布于
      2022-08-12
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/there-is-no-network-after-installs7-installation/index.html b/posts/there-is-no-network-after-installs7-installation/index.html index d33ce3c..6514f59 100644 --- a/posts/there-is-no-network-after-installs7-installation/index.html +++ b/posts/there-is-no-network-after-installs7-installation/index.html @@ -1,2 +1,2 @@ -centos7安装后没有网络 - 平淡生活
      \ No newline at end of file +centos7安装后没有网络 - 平淡生活
      \ No newline at end of file diff --git a/posts/typecho-plug--in-commentsbyqq-modified-version/index.html b/posts/typecho-plug--in-commentsbyqq-modified-version/index.html index 26aa62f..fe1602a 100644 --- a/posts/typecho-plug--in-commentsbyqq-modified-version/index.html +++ b/posts/typecho-plug--in-commentsbyqq-modified-version/index.html @@ -1 +1 @@ -Typecho插件CommentsByQQ修改版 - 平淡生活
      113 字
      1 分钟
      Typecho插件CommentsByQQ修改版

      简介#

      基于Typecho插件CommentsByQQ修改 一直想让qq来通知评论消息。毕竟邮箱之类的还是不太方便。 原作者的插件QQ机器人已经挂了。所以我自己搭建了一个基于go-http的QQ机器人 由于本人也是菜鸟,没有后续

      使用#

      添加qq机器人153985848为好友 在后台设置中填写接收消息的qq号即可

      下载地址#

      CommentsByQQ.zip

      Typecho插件CommentsByQQ修改版
      https://blog.ittst.com/posts/typecho-plug--in-commentsbyqq-modified-version/
      作者
      浪子
      发布于
      2022-09-19
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +Typecho插件CommentsByQQ修改版 - 平淡生活
      113 字
      1 分钟
      Typecho插件CommentsByQQ修改版

      简介#

      基于Typecho插件CommentsByQQ修改 一直想让qq来通知评论消息。毕竟邮箱之类的还是不太方便。 原作者的插件QQ机器人已经挂了。所以我自己搭建了一个基于go-http的QQ机器人 由于本人也是菜鸟,没有后续

      使用#

      添加qq机器人153985848为好友 在后台设置中填写接收消息的qq号即可

      下载地址#

      CommentsByQQ.zip

      Typecho插件CommentsByQQ修改版
      https://blog.ittst.com/posts/typecho-plug--in-commentsbyqq-modified-version/
      作者
      浪子
      发布于
      2022-09-19
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/use-docker-to-build-a-pleroma-example/index.html b/posts/use-docker-to-build-a-pleroma-example/index.html index d290217..cbc4281 100644 --- a/posts/use-docker-to-build-a-pleroma-example/index.html +++ b/posts/use-docker-to-build-a-pleroma-example/index.html @@ -1,4 +1,4 @@ -使用 Docker 构建 Pleroma 实例 - 平淡生活
      459 字
      2 分钟
      使用 Docker 构建 Pleroma 实例

      Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。 而 ActivityPub 包括 Mastodon(Pawoo 等)、Misskey(misskey.io 等)、Pleroma 等等。 在这些开源产品中,Pleroma 实机上部署环境步骤复杂繁琐。 但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢? 现在 docker 的出现大大简化了部署的方式,只需要简单三步即可轻松搭建实例。

      本文将介绍如何使用 docker 构建 Pleroma 实例。 以宝塔面板为例

      先安装docker#

      在应用商店中查找docker并安装

      获取 docker-compose.yml 模板#

      git clone https://git.pleroma.social/pleroma/pleroma-docker-compose.git
      +使用 Docker 构建 Pleroma 实例 - 平淡生活
      459 字
      2 分钟
      使用 Docker 构建 Pleroma 实例

      Pleroma 是一个去中心化的社区程序,其基于 ActivityPub 协议。 而 ActivityPub 包括 Mastodon(Pawoo 等)、Misskey(misskey.io 等)、Pleroma 等等。 在这些开源产品中,Pleroma 实机上部署环境步骤复杂繁琐。 但它是对服务器性能要求最低的微博客工具,它的配置要求多低呢? 现在 docker 的出现大大简化了部署的方式,只需要简单三步即可轻松搭建实例。

      本文将介绍如何使用 docker 构建 Pleroma 实例。 以宝塔面板为例

      先安装docker#

      在应用商店中查找docker并安装

      获取 docker-compose.yml 模板#

      git clone https://git.pleroma.social/pleroma/pleroma-docker-compose.git
       cd pleroma-docker-compose 
       

      接下来所有操作(除 nginx 配置)如果没有加以说明都在这个目录下进行。

      需要修改的内容#

      打开./enviroments/pleroma/pleroma.env,修改其中的配置:

      DB_USER=pleroma # 数据库用户名
       DB_PASS=pleroma # 数据库密码
      @@ -27,4 +27,4 @@
           # proxy_hide_header Upgrade;
       }
       

      创建管理员账户#

      docker exec -it pleroma ./opt/pleroma/bin/pleroma_ctl user new admin 邮箱 --admin
      -

      运行后会出现一个链接,复制在浏览器即可重置密码.

      修改文件夹权限#

      /root/pleroma-docker-compose/volumes/pleroma下的uploads权限设置为777 当然如果你用S3协议的对象存储则不需要修改 直接在后台设置S3即可.

      演示地址#

      https://chaihu.top

      使用 Docker 构建 Pleroma 实例
      https://blog.ittst.com/posts/use-docker-to-build-a-pleroma-example/
      作者
      浪子
      发布于
      2023-07-24
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      运行后会出现一个链接,复制在浏览器即可重置密码.

      修改文件夹权限#

      /root/pleroma-docker-compose/volumes/pleroma下的uploads权限设置为777 当然如果你用S3协议的对象存储则不需要修改 直接在后台设置S3即可.

      演示地址#

      https://chaihu.top

      使用 Docker 构建 Pleroma 实例
      https://blog.ittst.com/posts/use-docker-to-build-a-pleroma-example/
      作者
      浪子
      发布于
      2023-07-24
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html b/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html index 9b4c9c7..7fc93c7 100644 --- a/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html +++ b/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/index.html @@ -1,4 +1,4 @@ -使用Docker快速部署一个memos的QQ机器人 - 平淡生活
      500 字
      3 分钟
      使用Docker快速部署一个memos的QQ机器人

      前言:本文介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。

      准备工作#

      1. 安装Docker
      2. 一个QQ账号
      3. 一个Memos账号

      部署#

      memos机器人#

      此处使用Nonebot2作为框架,自己撸的Nonebot2的插件nonebot_plugin_memos对接Memos机器人。

      我打包编译的镜像jkjoy/qq2memos:latest

      如需源码参考 https://www.imsun.org/archives/1668.html

      首先创建一个docker-compose.yml文件,内容如下:

      services:
      +使用Docker快速部署一个memos的QQ机器人 - 平淡生活
      500 字
      3 分钟
      使用Docker快速部署一个memos的QQ机器人

      前言:本文介绍了如何使用Docker快速部署一个QQ机器人,并通过对接Nonebot实现Memos机器人的功能。

      准备工作#

      1. 安装Docker
      2. 一个QQ账号
      3. 一个Memos账号

      部署#

      memos机器人#

      此处使用Nonebot2作为框架,自己撸的Nonebot2的插件nonebot_plugin_memos对接Memos机器人。

      我打包编译的镜像jkjoy/qq2memos:latest

      如需源码参考 https://www.imsun.org/archives/1668.html

      首先创建一个docker-compose.yml文件,内容如下:

      services:
         memos:
           container_name: memos
           environment:
      @@ -28,4 +28,4 @@
             - "./config:/app/napcat/config"
           network_mode: host #使用host的原因是为了方便对接宿主机的nonebot框架
       

      然后运行docker-compose up -d即可。

      访问WEBUI地址 http://ip:6099/webui/login.html

      登录所使用的tokendocker-compose.yaml 所在目录下的config中的webui.json

      可选择扫码登录

      在设置页面中添加反向 WS 地址,地址为

      ws://127.0.0.1:8080/onebot/v11/ws
      -

      这里的 8080 是 NoneBot 输出的端口号,根据情况自行更改

      /onebot/v11/ws 是 NoneBot onebot 适配器默认的路径

      点击保存,容器日志提示通讯成功即可.

      使用机器人#

      在聊天对话框输入任何内容会提示绑定

      按照提示进行绑定即可

      在绑定成功后,在聊天对话框输入任何内容都会转发到Memos 且 默认为公开内容.

      暂不支持发送图片等其他内容.

      使用Docker快速部署一个memos的QQ机器人
      https://blog.ittst.com/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/
      作者
      浪子
      发布于
      2024-09-13
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      这里的 8080 是 NoneBot 输出的端口号,根据情况自行更改

      /onebot/v11/ws 是 NoneBot onebot 适配器默认的路径

      点击保存,容器日志提示通讯成功即可.

      使用机器人#

      在聊天对话框输入任何内容会提示绑定

      按照提示进行绑定即可

      在绑定成功后,在聊天对话框输入任何内容都会转发到Memos 且 默认为公开内容.

      暂不支持发送图片等其他内容.

      使用Docker快速部署一个memos的QQ机器人
      https://blog.ittst.com/posts/use-docker-to-quickly-deploy-a-memos-qq-robot/
      作者
      浪子
      发布于
      2024-09-13
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html b/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html index 76c22bd..cc21dd2 100644 --- a/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html +++ b/posts/use-docker-to-quickly-deploy-mastodon-instances/index.html @@ -1,4 +1,4 @@ -使用Docker快速部署mastodon实例 - 平淡生活
      272 字
      1 分钟
      使用Docker快速部署mastodon实例
      2023-10-30

      如何使用Docker快速部署mastodon实例#

      直接使用docker compose部署是不可行的,需要按照步骤进行

      创建目录#

      mkdir -p /home/mastodon/mastodon
      +使用Docker快速部署mastodon实例 - 平淡生活
      272 字
      1 分钟
      使用Docker快速部署mastodon实例
      2023-10-30

      如何使用Docker快速部署mastodon实例#

      直接使用docker compose部署是不可行的,需要按照步骤进行

      创建目录#

      mkdir -p /home/mastodon/mastodon
       

      进入目录#

      cd /home/mastodon/mastodon
       

      拉取镜像#

      docker pull ghcr.io/mastodon/mastodon
       

      修改docker compose配置文件#

      wget https://raw.githubusercontent.com/mastodon/mastodon/main/docker-compose.yml
      @@ -16,4 +16,4 @@
       docker-compose down
       docker-compose up -d
       

      创建管理员

      docker exec mastodon-web-1 tootctl accounts create USERNAME --email EMAIL --confirmed --role Owner
      -

      至此完成

      使用Docker快速部署mastodon实例
      https://blog.ittst.com/posts/use-docker-to-quickly-deploy-mastodon-instances/
      作者
      浪子
      发布于
      2023-10-30
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      至此完成

      使用Docker快速部署mastodon实例
      https://blog.ittst.com/posts/use-docker-to-quickly-deploy-mastodon-instances/
      作者
      浪子
      发布于
      2023-10-30
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html b/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html index f1fcafc..3e0f54b 100644 --- a/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html +++ b/posts/use-github-actions-to-automatically-deploy-hexo-blog/index.html @@ -1,4 +1,4 @@ -利用 Github Actions 自动部署 Hexo 博客 - 平淡生活
      331 字
      2 分钟
      利用 Github Actions 自动部署 Hexo 博客

      Github Actions 简介#

      Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行 Jobs 时,它会创建一个容器 (runner),容器支持:Ubuntu、Windows 和 MacOS 等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

      前提#

      1.您已经创建了hexo博客 2.您已经注册了github的账户 3.您已经创建了github项目并上传了hexo源码

      创建#

      在项目根目录下创建.github/workflows/main.yml

      1.点击此处申请 Personal access tokens (classic)

      2.在Settings-secrets and variables-Actions下设置HEXOBLOG为上一步得到的Personal access tokens

      1.png

      3.可以把以下内容粘贴进去

      run-name: Deploy 
      +利用 Github Actions 自动部署 Hexo 博客 - 平淡生活
      331 字
      2 分钟
      利用 Github Actions 自动部署 Hexo 博客

      Github Actions 简介#

      Github Actions 可以很方便实现 CI/CD 工作流,类似 Travis 的用法,来帮我们完成一些工作,比如实现自动化测试、打包、部署等操作。当我们运行 Jobs 时,它会创建一个容器 (runner),容器支持:Ubuntu、Windows 和 MacOS 等系统,在容器中我们可以安装软件,利用安装的软件帮我们处理一些数据,然后把处理好的数据推送到某个地方。

      前提#

      1.您已经创建了hexo博客 2.您已经注册了github的账户 3.您已经创建了github项目并上传了hexo源码

      创建#

      在项目根目录下创建.github/workflows/main.yml

      1.点击此处申请 Personal access tokens (classic)

      2.在Settings-secrets and variables-Actions下设置HEXOBLOG为上一步得到的Personal access tokens

      1.png

      3.可以把以下内容粘贴进去

      run-name: Deploy 
        
       on: 
         push:
      @@ -54,4 +54,4 @@
               PUBLISH_BRANCH: gh-pages 
               PUBLISH_DIR: ./public 
               commit_message: ${{ github.event.head_commit.message }}
      -

      实现的功能#

      在hexo项目main分支有更新时,会自动更新仓库下分支gh-pages

      利用 Github Actions 自动部署 Hexo 博客
      https://blog.ittst.com/posts/use-github-actions-to-automatically-deploy-hexo-blog/
      作者
      浪子
      发布于
      2024-05-08
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      实现的功能#

      在hexo项目main分支有更新时,会自动更新仓库下分支gh-pages

      利用 Github Actions 自动部署 Hexo 博客
      https://blog.ittst.com/posts/use-github-actions-to-automatically-deploy-hexo-blog/
      作者
      浪子
      发布于
      2024-05-08
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html b/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html index 452b871..b771fa4 100644 --- a/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html +++ b/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/index.html @@ -1,4 +1,4 @@ -用Memos API实现hexo博客的动态说说页面 - 平淡生活
      121 字
      1 分钟
      用Memos API实现hexo博客的动态说说页面
      2023-06-13

      新建一个页面

      hexo new page Memos
      +用Memos API实现hexo博客的动态说说页面 - 平淡生活
      121 字
      1 分钟
      用Memos API实现hexo博客的动态说说页面
      2023-06-13

      新建一个页面

      hexo new page Memos
       

      修改Memos/index.md内容为

      ---
       title: Memos
       comments: false
      @@ -21,4 +21,4 @@
         }
       </script>
       <script src="https://blogcdn.loliko.cn/memos/js/memo.js?0.0.2"></script>
      -

      即可~

      代码来源于网络~

      用Memos API实现hexo博客的动态说说页面
      https://blog.ittst.com/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/
      作者
      浪子
      发布于
      2023-06-13
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +

      即可~

      代码来源于网络~

      用Memos API实现hexo博客的动态说说页面
      https://blog.ittst.com/posts/use-memos-api-to-implement-the-dynamic-page-of-the-hexo-blog/
      作者
      浪子
      发布于
      2023-06-13
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/vi-editor's-basic-usage-method/index.html b/posts/vi-editor's-basic-usage-method/index.html index 8112b23..c6dec93 100644 --- a/posts/vi-editor's-basic-usage-method/index.html +++ b/posts/vi-editor's-basic-usage-method/index.html @@ -1 +1 @@ -Vi编辑器的基本使用方法 - 平淡生活
      2295 字
      11 分钟
      Vi编辑器的基本使用方法
      2016-11-16

      vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。 由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。 Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

      1、vi的基本概念

      基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

      1. 命令行模式command mode)

      控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

      1. 插入模式(Insert mode)

      只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

      1. 底行模式(last line mode)

      将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。 不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

      2、vi的基本操作

      a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

      b) 切换至插入模式(Insert mode)编辑文件 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

      c) Insert 的切换 您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

      d) 退出vi及保存文件

      在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:

      w filename (输入 「w filename」将文章以指定的文件名filename保存)

      wq (输入「wq」,存盘并退出vi)

      q! (输入q!, 不存盘强制退出vi)

      3、命令行模式(command mode)功能键

      1). 插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

      2). 从插入模式切换为命令行模式 按「ESC」键。

      3). 移动光标 vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。 按「ctrl」+「b」:屏幕往“后”移动一页。 按「ctrl」+「f」:屏幕往“前”移动一页。 按「ctrl」+「u」:屏幕往“后”移动半页。 按「ctrl」+「d」:屏幕往“前”移动半页。 按数字「0」:移到文章的开头。 按「G」:移动到文章的最后。 按「$」:移动到光标所在行的“行尾”。 按「^」:移动到光标所在行的“行首” 按「w」:光标跳到下个字的开头 按「e」:光标跳到下个字的字尾 按「b」:光标回到上个字的开头 按「#l」:光标移到该行的第#个位置,如:5l,56l。

      4). 删除文字 「x」:每按一次,删除光标所在位置的“后面”一个字符。 「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。 「dd」:删除光标所在行。 「#dd」:从光标所在行开始删除#行

      5). 复制 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

      6). 替换 「r」:替换光标所在处的字符。 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

      7). 回复上一次操作 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

      8). 更改 「cw」:更改光标所在处的字到字尾处 「c#w」:例如,「c3w」表示更改3个字 9). 跳至指定的行 「ctrl」+「g」列出光标所在行的行号。 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

      4、Last line mode下命令简介 在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

      A) 列出行号 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。

      B) 跳到文件中的某一行 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

      C) 查找字符 「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

      D) 保存文件 「w」:在冒号输入字母「w」就可以将文件保存起来。

      E) 离开vi 「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。 「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

      5、vi命令列表

      1、下表列出命令模式下的一些键的功能: h 左移光标一个字符 l 右移光标一个字符 k 光标上移一行 j 光标下移一行 ^ 光标移动至行首 0 数字“0”,光标移至文章的开头 G 光标移至文章的最后 $ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 在光标位置前插入字符 a 在光标所在位置的后一个字符开始增加 o 插入新的一行,从行首开始输入 ESC 从输入状态退至命令状态 x 删除光标后面的字符 #x 删除光标后的#个字符 X (大写X),删除光标前面的字符 #X 删除光标前面的#个字符 dd 删除光标所在的行 #dd 删除从光标所在行数的#行 yw 复制光标所在位置的一个字 #yw 复制光标所在位置的#个字 yy 复制光标所在位置的一行 #yy 复制从光标所在行数的#行 p 粘贴 u 取消操作 cw 更改光标所在位置的一个字 #cw 更改光标所在位置的#个字

      2、下表列出行命令模式下的一些指令 w filename 储存正在编辑的文件为filename wq filename 储存正在编辑的文件为filename,并退出vi q! 放弃所有修改,退出vi set nu 显示行号 /或? 查找,在/后输入要查找的内容 n 与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。

      对于第一次用vi,有几点注意要提醒一下:

      1、用vi打开文件后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。

      切换方法:在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

      2、编辑好后,需从插入模式切换为命令行模式才能对文件进行保存,切换方法:按「ESC」键。

      3、保存并退出文件:在命令模式下输入即可!(别忘了wq前面的:)

      Vi编辑器的基本使用方法
      https://blog.ittst.com/posts/vi-editor's-basic-usage-method/
      作者
      浪子
      发布于
      2016-11-16
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file +Vi编辑器的基本使用方法 - 平淡生活
      2295 字
      11 分钟
      Vi编辑器的基本使用方法
      2016-11-16

      vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。 由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。 Vi也是Linux中最基本的文本编辑器,学会它后,您将在Linux的世界里畅行无阻。

      1、vi的基本概念

      基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

      1. 命令行模式command mode)

      控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

      1. 插入模式(Insert mode)

      只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

      1. 底行模式(last line mode)

      将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。 不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

      2、vi的基本操作

      a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ vi myfile 不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

      b) 切换至插入模式(Insert mode)编辑文件 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

      c) Insert 的切换 您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

      d) 退出vi及保存文件

      在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:

      w filename (输入 「w filename」将文章以指定的文件名filename保存)

      wq (输入「wq」,存盘并退出vi)

      q! (输入q!, 不存盘强制退出vi)

      3、命令行模式(command mode)功能键

      1). 插入模式 按「i」切换进入插入模式「insert mode」,按“i”进入插入模式后是从光标当前位置开始输入文件; 按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字; 按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。

      2). 从插入模式切换为命令行模式 按「ESC」键。

      3). 移动光标 vi可以直接用键盘上的光标来上下左右移动,但正规的vi是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。 按「ctrl」+「b」:屏幕往“后”移动一页。 按「ctrl」+「f」:屏幕往“前”移动一页。 按「ctrl」+「u」:屏幕往“后”移动半页。 按「ctrl」+「d」:屏幕往“前”移动半页。 按数字「0」:移到文章的开头。 按「G」:移动到文章的最后。 按「$」:移动到光标所在行的“行尾”。 按「^」:移动到光标所在行的“行首” 按「w」:光标跳到下个字的开头 按「e」:光标跳到下个字的字尾 按「b」:光标回到上个字的开头 按「#l」:光标移到该行的第#个位置,如:5l,56l。

      4). 删除文字 「x」:每按一次,删除光标所在位置的“后面”一个字符。 「#x」:例如,「6x」表示删除光标所在位置的“后面”6个字符。 「X」:大写的X,每按一次,删除光标所在位置的“前面”一个字符。 「#X」:例如,「20X」表示删除光标所在位置的“前面”20个字符。 「dd」:删除光标所在行。 「#dd」:从光标所在行开始删除#行

      5). 复制 「yw」:将光标所在之处到字尾的字符复制到缓冲区中。 「#yw」:复制#个字到缓冲区 「yy」:复制光标所在行到缓冲区。 「#yy」:例如,「6yy」表示拷贝从光标所在的该行“往下数”6行文字。 「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与“y”有关的复制命令都必须与“p”配合才能完成复制与粘贴功能。

      6). 替换 「r」:替换光标所在处的字符。 「R」:替换光标所到之处的字符,直到按下「ESC」键为止。

      7). 回复上一次操作 「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次“u”可以执行多次回复。

      8). 更改 「cw」:更改光标所在处的字到字尾处 「c#w」:例如,「c3w」表示更改3个字 9). 跳至指定的行 「ctrl」+「g」列出光标所在行的行号。 「#G」:例如,「15G」,表示移动光标至文章的第15行行首。

      4、Last line mode下命令简介 在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

      A) 列出行号 「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。

      B) 跳到文件中的某一行 「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字15,再回车,就会跳到文章的第15行。

      C) 查找字符 「/关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。 「?关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。

      D) 保存文件 「w」:在冒号输入字母「w」就可以将文件保存起来。

      E) 离开vi 「q」:按「q」就是退出,如果无法离开vi,可以在「q」后跟一个「!」强制离开vi。 「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

      5、vi命令列表

      1、下表列出命令模式下的一些键的功能: h 左移光标一个字符 l 右移光标一个字符 k 光标上移一行 j 光标下移一行 ^ 光标移动至行首 0 数字“0”,光标移至文章的开头 G 光标移至文章的最后 $ 光标移动至行尾 Ctrl+f 向前翻屏 Ctrl+b 向后翻屏 Ctrl+d 向前翻半屏 Ctrl+u 向后翻半屏 i 在光标位置前插入字符 a 在光标所在位置的后一个字符开始增加 o 插入新的一行,从行首开始输入 ESC 从输入状态退至命令状态 x 删除光标后面的字符 #x 删除光标后的#个字符 X (大写X),删除光标前面的字符 #X 删除光标前面的#个字符 dd 删除光标所在的行 #dd 删除从光标所在行数的#行 yw 复制光标所在位置的一个字 #yw 复制光标所在位置的#个字 yy 复制光标所在位置的一行 #yy 复制从光标所在行数的#行 p 粘贴 u 取消操作 cw 更改光标所在位置的一个字 #cw 更改光标所在位置的#个字

      2、下表列出行命令模式下的一些指令 w filename 储存正在编辑的文件为filename wq filename 储存正在编辑的文件为filename,并退出vi q! 放弃所有修改,退出vi set nu 显示行号 /或? 查找,在/后输入要查找的内容 n 与/或?一起使用,如果查找的内容不是想要找的关键字,按n或向后(与/联用)或向前(与?联用)继续查找,直到找到为止。

      对于第一次用vi,有几点注意要提醒一下:

      1、用vi打开文件后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。

      切换方法:在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

      2、编辑好后,需从插入模式切换为命令行模式才能对文件进行保存,切换方法:按「ESC」键。

      3、保存并退出文件:在命令模式下输入即可!(别忘了wq前面的:)

      Vi编辑器的基本使用方法
      https://blog.ittst.com/posts/vi-editor's-basic-usage-method/
      作者
      浪子
      发布于
      2016-11-16
      许可协议
      CC BY-NC-SA 4.0
      \ No newline at end of file diff --git a/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html b/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html index 938731e..549e380 100644 --- a/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html +++ b/posts/vk23-black-apple-opencore0.8.5-guide-macos12.6.1/index.html @@ -1 +1 @@ -VK23黑苹果OpenCore0.8.5引导macOS12.6.1 - 平淡生活
      \ No newline at end of file +VK23黑苹果OpenCore0.8.5引导macOS12.6.1 - 平淡生活
      \ No newline at end of file