├── .editorconfig ├── .github └── workflows │ └── node.js.yml ├── .gitignore ├── .husky └── pre-commit ├── .markdownlint.json ├── .npmrc ├── .vscode ├── extensions.json └── settings.json ├── OWNERS ├── README.md ├── docs ├── about.md ├── contribution │ ├── issue.md │ ├── pr.md │ └── sponsor.md ├── developer-guide │ ├── annotations-form.md │ ├── core │ │ ├── build.md │ │ ├── code-style.md │ │ ├── framework.md │ │ ├── prepare.md │ │ ├── run.md │ │ └── structure.md │ ├── form-schema.md │ ├── plugin │ │ ├── api-reference │ │ │ ├── server │ │ │ │ ├── extension-client.md │ │ │ │ ├── extension-getter.md │ │ │ │ ├── extension.md │ │ │ │ ├── finder-for-theme.md │ │ │ │ ├── login-handler-enhancer.md │ │ │ │ ├── notification.md │ │ │ │ ├── reconciler.md │ │ │ │ ├── reverseproxy.md │ │ │ │ ├── setting-fetcher.md │ │ │ │ ├── template-for-theme.md │ │ │ │ └── websocket.md │ │ │ └── ui │ │ │ │ ├── api-request.md │ │ │ │ ├── components │ │ │ │ ├── annotations-form.md │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ ├── filter-clean-button.md │ │ │ │ ├── filter-dropdown.md │ │ │ │ ├── has-permission.md │ │ │ │ ├── index.md │ │ │ │ ├── plugin-detail-modal.md │ │ │ │ ├── search-input.md │ │ │ │ ├── uppy-upload.md │ │ │ │ ├── v-codemirror.md │ │ │ │ ├── v-permission.md │ │ │ │ └── v-tooltip.md │ │ │ │ └── route.md │ │ ├── appendices.md │ │ ├── basics │ │ │ ├── devtools.md │ │ │ ├── manifest.md │ │ │ ├── server │ │ │ │ ├── lifecycle.md │ │ │ │ └── object-management.md │ │ │ ├── structure.md │ │ │ └── ui │ │ │ │ ├── build.md │ │ │ │ ├── entry.md │ │ │ │ └── intro.md │ │ ├── examples │ │ │ └── todolist.md │ │ ├── extension-points │ │ │ ├── server │ │ │ │ ├── additional-webfilter.md │ │ │ │ ├── attachment.md │ │ │ │ ├── authentication-webfilter.md │ │ │ │ ├── comment-subject.md │ │ │ │ ├── comment-widget.md │ │ │ │ ├── index.md │ │ │ │ ├── notifier.md │ │ │ │ ├── post-content.md │ │ │ │ ├── singlepage-content.md │ │ │ │ ├── template-footer-processor.md │ │ │ │ ├── template-head-processor.md │ │ │ │ └── username-password-authentication-manager.md │ │ │ └── ui │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ ├── attachment-selector-create.md │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ ├── backup-tabs-create.md │ │ │ │ ├── comment-list-item-operation-create.md │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ ├── dashboard-widgets.md │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ ├── editor-create.md │ │ │ │ ├── index.md │ │ │ │ ├── interface │ │ │ │ ├── Attachment.md │ │ │ │ ├── ListedComment.md │ │ │ │ ├── ListedPost.md │ │ │ │ ├── ListedReply.md │ │ │ │ ├── ListedSinglePage.md │ │ │ │ ├── OperationItem.md │ │ │ │ ├── Plugin.md │ │ │ │ └── Theme.md │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ ├── reply-list-item-operation-create.md │ │ │ │ ├── single-page-list-item-field-create.md │ │ │ │ ├── single-page-list-item-operation-create.md │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ └── user-detail-tabs-create.md │ │ ├── hello-world.md │ │ ├── interaction │ │ │ ├── dependency.md │ │ │ ├── making-plugin-extensible.md │ │ │ └── shared-events.md │ │ ├── introduction.md │ │ ├── prepare.md │ │ ├── publish.md │ │ └── security │ │ │ ├── rbac.md │ │ │ ├── role-template.md │ │ │ └── ui-permission.md │ ├── restful-api │ │ ├── api-client.md │ │ └── introduction.md │ └── theme │ │ ├── annotations.md │ │ ├── code-snippets.md │ │ ├── config.md │ │ ├── finder-apis.md │ │ ├── finder-apis │ │ ├── category.md │ │ ├── comment.md │ │ ├── contributor.md │ │ ├── menu.md │ │ ├── plugin.md │ │ ├── post.md │ │ ├── single-page.md │ │ ├── site-stats.md │ │ ├── tag.md │ │ └── theme.md │ │ ├── global-variables.md │ │ ├── image-optimization.md │ │ ├── prepare.md │ │ ├── settings.md │ │ ├── static-resources.md │ │ ├── structure.md │ │ ├── template-route-mapping.md │ │ ├── template-tag.md │ │ ├── template-variables.md │ │ ├── template-variables │ │ ├── archives.md │ │ ├── auth.md │ │ ├── author.md │ │ ├── categories.md │ │ ├── category.md │ │ ├── error.md │ │ ├── index_.md │ │ ├── page.md │ │ ├── post.md │ │ ├── tag.md │ │ └── tags.md │ │ └── vo │ │ ├── _CategoryTreeVo.md │ │ ├── _CategoryVo.md │ │ ├── _CommentVo.md │ │ ├── _ContentVo.md │ │ ├── _ContributorVo.md │ │ ├── _ListedPostVo.md │ │ ├── _ListedSinglePageVo.md │ │ ├── _MenuItemVo.md │ │ ├── _MenuVo.md │ │ ├── _PostVo.md │ │ ├── _ReplyVo.md │ │ ├── _SinglePageVo.md │ │ ├── _SiteSettingVo.md │ │ ├── _TagVo.md │ │ ├── _ThemeVo.md │ │ └── _UserVo.md ├── getting-started │ ├── first-post.md │ ├── install │ │ ├── 1panel.md │ │ ├── cloud │ │ │ ├── alibaba-cloud-computenest.md │ │ │ ├── alibaba-cloud-market.md │ │ │ └── tencent-cloud-lighthouse.md │ │ ├── config.md │ │ ├── docker-compose.md │ │ ├── docker.md │ │ ├── helm.md │ │ ├── jar-file.md │ │ ├── offline.md │ │ ├── other │ │ │ ├── nginxproxymanager.md │ │ │ └── traefik.md │ │ ├── podman.md │ │ └── slots │ │ │ ├── _docker-args.md │ │ │ └── _docker-registry-list.md │ ├── migrate-from-1.x.md │ ├── prepare.md │ └── setup.md ├── intro.md └── user-guide │ ├── app-store.md │ ├── attachments.md │ ├── backup.md │ ├── common.md │ ├── faq.md │ ├── menus.md │ ├── pages.md │ ├── plugins.md │ ├── posts.md │ ├── settings.md │ ├── themes.md │ ├── user-center.md │ └── users.md ├── docusaurus.config.js ├── i18n └── zh-Hans │ ├── code.json │ ├── docusaurus-plugin-content-docs │ ├── current.json │ ├── version-2.16.json │ ├── version-2.17.json │ ├── version-2.18.json │ ├── version-2.19.json │ ├── version-2.20.json │ └── version-2.21.json │ └── docusaurus-theme-classic │ ├── footer.json │ └── navbar.json ├── index.js ├── netlify.toml ├── package.json ├── pnpm-lock.yaml ├── pnpm-workspace.yaml ├── sidebars.js ├── src ├── components │ └── .gitkeep ├── css │ └── custom.css ├── pages │ └── versions.tsx └── theme │ └── SearchBar.js ├── static ├── .nojekyll └── img │ ├── adaptive2.png │ ├── annotation-setting │ └── annotation-setting-preview.png │ ├── create-repository-for-hello-world-plugin.png │ ├── developer-guide │ ├── plugin │ │ ├── basic │ │ │ └── server │ │ │ │ └── post-content-version-generation.png │ │ ├── extension-points │ │ │ └── ui │ │ │ │ ├── attachment-list-item-operation-create.png │ │ │ │ ├── attachment-selector-create.png │ │ │ │ ├── backup-list-item-operation-create.png │ │ │ │ ├── backup-tabs-create.png │ │ │ │ ├── comment-list-item-operation-create.png │ │ │ │ ├── comment-subject-ref-create.png │ │ │ │ ├── dashboard-widgets.png │ │ │ │ ├── default-editor-extension-bubble-menu.png │ │ │ │ ├── default-editor-extension-drag.png │ │ │ │ ├── default-editor-extension-slash-command.png │ │ │ │ ├── default-editor-extension-toolbar.png │ │ │ │ ├── default-editor-extension-toolbox.png │ │ │ │ ├── editor-create.png │ │ │ │ ├── plugin-installation-tabs-create.png │ │ │ │ ├── plugin-list-item-field-create.png │ │ │ │ ├── plugin-list-item-operation-create.png │ │ │ │ ├── plugin-self-tabs-create.png │ │ │ │ ├── post-list-item-field-create.png │ │ │ │ ├── post-list-item-operation-create.png │ │ │ │ ├── reply-list-item-operation-create.png │ │ │ │ ├── single-page-list-item-field-create.png │ │ │ │ ├── single-page-list-item-operation-create.png │ │ │ │ ├── theme-list-item-operation-create.png │ │ │ │ ├── theme-list-tabs-create.png │ │ │ │ ├── uc-user-profile-tabs-create.png │ │ │ │ └── user-detail-tabs-create.png │ │ └── use-devtools.png │ ├── rest-api │ │ └── swagger-ui-overview.png │ └── theme │ │ ├── custom-login-layout.png │ │ └── custom-signup-layout.png │ ├── developer-run │ ├── IntelliJ-IDEA-Profiles-Win.png │ └── IntelliJ-IDEA-Profiles-macOS.png │ ├── favicon-96x96.png │ ├── formkit │ ├── formkit-repeater.png │ └── formkit-verify-form.png │ ├── halo-data-export.png │ ├── halo-plugin-hello-world-todo-swagger-api.png │ ├── install │ ├── 1panel │ │ ├── 1panel.png │ │ ├── app-store-halo.png │ │ ├── halo-console.png │ │ ├── halo-status.png │ │ ├── install-halo.png │ │ ├── new-site.png │ │ ├── openresty-mysql.png │ │ └── site.png │ ├── alibab-cloud-computenest │ │ ├── deploy_1.jpg │ │ ├── deploy_2.jpg │ │ └── halo-setup.jpg │ ├── alibaba-cloud-market │ │ ├── 1panel-add-domain.png │ │ ├── 1panel-installed-apps.png │ │ ├── 1panel-update-halo-external-url.png │ │ ├── 1panel-upgrade-halo.png │ │ ├── 1panel-website.png │ │ ├── 1panel.png │ │ ├── buy-1.png │ │ ├── buy-2.png │ │ ├── buy-3.jpeg │ │ ├── buy-4.jpeg │ │ ├── get-1panel-info.png │ │ ├── instance.png │ │ ├── iptables-1panel.jpeg │ │ └── iptables-http.jpeg │ └── tencent-cloud-lighthouse │ │ ├── 1panel-info.png │ │ ├── 1panel-login.png │ │ ├── 1panel-overview.png │ │ ├── application.png │ │ ├── buy.png │ │ ├── domain.png │ │ ├── external-url.png │ │ ├── firewall.png │ │ ├── halo-setup.png │ │ ├── installed-apps.png │ │ ├── upgrade.png │ │ └── websites.png │ ├── migrate │ ├── halo1.6-export.png │ ├── halo2.0-migrate-plugin-1.png │ ├── halo2.0-migrate-plugin-2.png │ ├── halo2.0-migrate-plugin-3.png │ └── halo2.0-migrate-plugin.png │ ├── nginx-proxy-manager │ ├── Nginx-Proxy-Manager-1.png │ ├── Nginx-Proxy-Manager-2.png │ ├── Nginx-Proxy-Manager-3.png │ ├── Nginx-Proxy-Manager-4.png │ ├── Nginx-Proxy-Manager-5.png │ ├── Nginx-Proxy-Manager-6.png │ ├── Nginx-Proxy-Manager-7.png │ └── Nginx-Proxy-Manager-8.png │ ├── plugin-hello-world.png │ ├── setup │ ├── setup-2.20.png │ └── setup.png │ ├── theme │ └── reload-theme-config.png │ ├── todo-ui.png │ ├── todolist-in-list.png │ ├── uc │ ├── totp-config.png │ ├── totp.png │ ├── uc-entry.png │ ├── uc-notification-preferences.png │ ├── uc-notifications.png │ ├── uc-pat-creation.png │ ├── uc-pat-token.png │ ├── uc-pat.png │ ├── uc-posts.png │ ├── uc-profile.png │ └── user-devices.png │ └── user-guide │ ├── app-store │ ├── app-store-license-generate-license-1.png │ ├── app-store-license-generate-license-2.png │ ├── app-store-license-generate-license-3.png │ ├── app-store-license-manage.png │ ├── app-store-license-offline-option.png │ ├── app-store-license-offline.png │ ├── app-store-license-status.png │ ├── app-store-page.png │ ├── app-store-pat.png │ ├── app-store-plugin-license.png │ ├── app-store-plugins.png │ ├── app-store-themes.png │ ├── app-store-upgrade-plugin.png │ └── app-store-upgrade-theme.png │ ├── attachments │ ├── attachment-batch-operate.png │ ├── attachment-detail.png │ ├── attachment-group-add.png │ ├── attachment-group-delete.png │ ├── attachment-move.png │ ├── attachment-policy-add-local.png │ ├── attachment-policy-add.png │ ├── attachment-policy-operate.png │ ├── attachment-policy.png │ ├── attachment-upload-multiple.png │ └── attachment-upload.png │ ├── backup │ ├── backup-complete.png │ ├── backup-running.png │ ├── before-restore.png │ ├── create-backup.png │ ├── restore-complete.png │ ├── restore-upload.png │ ├── restore.png │ └── waiting-restart.png │ ├── common │ ├── login.png │ ├── signup.png │ └── 控制台界面说明.png │ ├── menus │ ├── create-menu-item-2.png │ ├── create-menu-item.png │ ├── create-menu.png │ ├── menu-item-operation.png │ ├── menu-operation.png │ ├── menus.png │ └── sort.gif │ ├── pages │ └── page-about.png │ ├── plugins │ ├── extension-point-settings-entry.png │ ├── extension-point-settings.png │ ├── plugin-install.png │ ├── plugin-setting.png │ ├── plugin-switch.png │ └── plugin-uninstall.png │ ├── posts │ ├── category-create-2.png │ ├── category-create.png │ ├── category-move.gif │ ├── post-edit.png │ ├── post-setting.png │ ├── tag-create.png │ └── tag-list.png │ ├── settings │ └── setting-basic.png │ ├── themes │ ├── theme-install-alt.png │ ├── theme-install.png │ ├── theme-preview.png │ ├── theme-setting.png │ └── theme-uninstall.png │ ├── user-permission.png │ └── users │ ├── auth-providers-2.20+.png │ ├── auth-providers-entry.png │ ├── auth-providers.png │ ├── role-creation.png │ ├── role-fork.png │ ├── role-management.png │ ├── user-operate.png │ ├── user-setting-2.20+.png │ └── user-setting.png ├── versioned_docs ├── version-2.16 │ ├── about.md │ ├── contribution │ │ ├── issue.md │ │ ├── pr.md │ │ └── sponsor.md │ ├── developer-guide │ │ ├── annotations-form.md │ │ ├── core │ │ │ ├── build.md │ │ │ ├── code-style.md │ │ │ ├── prepare.md │ │ │ ├── run.md │ │ │ └── structure.md │ │ ├── form-schema.md │ │ ├── plugin │ │ │ ├── api-reference │ │ │ │ ├── server │ │ │ │ │ ├── extension-client.md │ │ │ │ │ ├── extension-points │ │ │ │ │ │ ├── additional-webfilter.md │ │ │ │ │ │ ├── attachment.md │ │ │ │ │ │ ├── authentication-webfilter.md │ │ │ │ │ │ ├── comment-subject.md │ │ │ │ │ │ ├── comment-widget.md │ │ │ │ │ │ ├── index.md │ │ │ │ │ │ ├── notifier.md │ │ │ │ │ │ ├── post-content.md │ │ │ │ │ │ ├── singlepage-content.md │ │ │ │ │ │ ├── template-head-processor.md │ │ │ │ │ │ └── username-password-authentication-manager.md │ │ │ │ │ ├── extension.md │ │ │ │ │ ├── finder-for-theme.md │ │ │ │ │ ├── reconciler.md │ │ │ │ │ ├── reverseproxy.md │ │ │ │ │ ├── role-template.md │ │ │ │ │ ├── template-for-theme.md │ │ │ │ │ └── websocket.md │ │ │ │ └── ui │ │ │ │ │ ├── components │ │ │ │ │ ├── annotations-form.md │ │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ │ ├── filter-clean-button.md │ │ │ │ │ ├── filter-dropdown.md │ │ │ │ │ ├── has-permission.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── search-input.md │ │ │ │ │ ├── uppy-upload.md │ │ │ │ │ ├── v-codemirror.md │ │ │ │ │ ├── v-permission.md │ │ │ │ │ └── v-tooltip.md │ │ │ │ │ ├── extension-points │ │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ │ ├── attachment-selector-create.md │ │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ │ ├── backup-tabs-create.md │ │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ │ ├── editor-create.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── interface │ │ │ │ │ │ ├── Attachment.md │ │ │ │ │ │ ├── ListedPost.md │ │ │ │ │ │ ├── OperationItem.md │ │ │ │ │ │ ├── Plugin.md │ │ │ │ │ │ └── Theme.md │ │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ │ └── user-detail-tabs-create.md │ │ │ │ │ └── route.md │ │ │ ├── appendices.md │ │ │ ├── basics │ │ │ │ ├── devtools.md │ │ │ │ ├── framework.md │ │ │ │ ├── manifest.md │ │ │ │ ├── server │ │ │ │ │ ├── lifecycle.md │ │ │ │ │ └── object-management.md │ │ │ │ ├── structure.md │ │ │ │ └── ui │ │ │ │ │ ├── entry.md │ │ │ │ │ └── intro.md │ │ │ ├── examples │ │ │ │ └── todolist.md │ │ │ ├── hello-world.md │ │ │ ├── introduction.md │ │ │ ├── prepare.md │ │ │ └── publish.md │ │ └── theme │ │ │ ├── annotations.md │ │ │ ├── code-snippets.md │ │ │ ├── config.md │ │ │ ├── finder-apis.md │ │ │ ├── finder-apis │ │ │ ├── category.md │ │ │ ├── comment.md │ │ │ ├── contributor.md │ │ │ ├── menu.md │ │ │ ├── plugin.md │ │ │ ├── post.md │ │ │ ├── single-page.md │ │ │ ├── site-stats.md │ │ │ ├── tag.md │ │ │ └── theme.md │ │ │ ├── global-variables.md │ │ │ ├── prepare.md │ │ │ ├── settings.md │ │ │ ├── static-resources.md │ │ │ ├── structure.md │ │ │ ├── template-route-mapping.md │ │ │ ├── template-tag.md │ │ │ ├── template-variables.md │ │ │ ├── template-variables │ │ │ ├── archives.md │ │ │ ├── author.md │ │ │ ├── categories.md │ │ │ ├── category.md │ │ │ ├── error.md │ │ │ ├── index_.md │ │ │ ├── page.md │ │ │ ├── post.md │ │ │ ├── tag.md │ │ │ └── tags.md │ │ │ └── vo │ │ │ ├── _CategoryTreeVo.md │ │ │ ├── _CategoryVo.md │ │ │ ├── _CommentVo.md │ │ │ ├── _ContentVo.md │ │ │ ├── _ContributorVo.md │ │ │ ├── _ListedPostVo.md │ │ │ ├── _ListedSinglePageVo.md │ │ │ ├── _MenuItemVo.md │ │ │ ├── _MenuVo.md │ │ │ ├── _PostVo.md │ │ │ ├── _ReplyVo.md │ │ │ ├── _SinglePageVo.md │ │ │ ├── _SiteSettingVo.md │ │ │ ├── _TagVo.md │ │ │ ├── _ThemeVo.md │ │ │ └── _UserVo.md │ ├── getting-started │ │ ├── first-post.md │ │ ├── install │ │ │ ├── 1panel.md │ │ │ ├── cloud │ │ │ │ └── tencent-cloud-lighthouse.md │ │ │ ├── docker-compose.md │ │ │ ├── docker.md │ │ │ ├── helm.md │ │ │ ├── jar-file.md │ │ │ ├── other │ │ │ │ ├── nginxproxymanager.md │ │ │ │ └── traefik.md │ │ │ ├── podman.md │ │ │ └── slots │ │ │ │ ├── _docker-args.md │ │ │ │ └── _docker-registry-list.md │ │ ├── migrate-from-1.x.md │ │ ├── prepare.md │ │ └── setup.md │ ├── intro.md │ └── user-guide │ │ ├── app-store.md │ │ ├── attachments.md │ │ ├── backup.md │ │ ├── common.md │ │ ├── faq.md │ │ ├── menus.md │ │ ├── pages.md │ │ ├── plugins.md │ │ ├── posts.md │ │ ├── settings.md │ │ ├── themes.md │ │ ├── user-center.md │ │ └── users.md ├── version-2.17 │ ├── about.md │ ├── contribution │ │ ├── issue.md │ │ ├── pr.md │ │ └── sponsor.md │ ├── developer-guide │ │ ├── annotations-form.md │ │ ├── core │ │ │ ├── build.md │ │ │ ├── code-style.md │ │ │ ├── prepare.md │ │ │ ├── run.md │ │ │ └── structure.md │ │ ├── form-schema.md │ │ ├── plugin │ │ │ ├── api-reference │ │ │ │ ├── server │ │ │ │ │ ├── extension-client.md │ │ │ │ │ ├── extension-points │ │ │ │ │ │ ├── additional-webfilter.md │ │ │ │ │ │ ├── attachment.md │ │ │ │ │ │ ├── authentication-webfilter.md │ │ │ │ │ │ ├── comment-subject.md │ │ │ │ │ │ ├── comment-widget.md │ │ │ │ │ │ ├── index.md │ │ │ │ │ │ ├── notifier.md │ │ │ │ │ │ ├── post-content.md │ │ │ │ │ │ ├── singlepage-content.md │ │ │ │ │ │ ├── template-footer-processor.md │ │ │ │ │ │ ├── template-head-processor.md │ │ │ │ │ │ └── username-password-authentication-manager.md │ │ │ │ │ ├── extension.md │ │ │ │ │ ├── finder-for-theme.md │ │ │ │ │ ├── login-handler-enhancer.md │ │ │ │ │ ├── reconciler.md │ │ │ │ │ ├── reverseproxy.md │ │ │ │ │ ├── role-template.md │ │ │ │ │ ├── setting-fetcher.md │ │ │ │ │ ├── template-for-theme.md │ │ │ │ │ └── websocket.md │ │ │ │ └── ui │ │ │ │ │ ├── api-request.md │ │ │ │ │ ├── components │ │ │ │ │ ├── annotations-form.md │ │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ │ ├── filter-clean-button.md │ │ │ │ │ ├── filter-dropdown.md │ │ │ │ │ ├── has-permission.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── plugin-detail-modal.md │ │ │ │ │ ├── search-input.md │ │ │ │ │ ├── uppy-upload.md │ │ │ │ │ ├── v-codemirror.md │ │ │ │ │ ├── v-permission.md │ │ │ │ │ └── v-tooltip.md │ │ │ │ │ ├── extension-points │ │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ │ ├── attachment-selector-create.md │ │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ │ ├── backup-tabs-create.md │ │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ │ ├── editor-create.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── interface │ │ │ │ │ │ ├── Attachment.md │ │ │ │ │ │ ├── ListedPost.md │ │ │ │ │ │ ├── OperationItem.md │ │ │ │ │ │ ├── Plugin.md │ │ │ │ │ │ └── Theme.md │ │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ │ └── user-detail-tabs-create.md │ │ │ │ │ └── route.md │ │ │ ├── appendices.md │ │ │ ├── basics │ │ │ │ ├── devtools.md │ │ │ │ ├── framework.md │ │ │ │ ├── manifest.md │ │ │ │ ├── server │ │ │ │ │ ├── lifecycle.md │ │ │ │ │ └── object-management.md │ │ │ │ ├── structure.md │ │ │ │ └── ui │ │ │ │ │ ├── entry.md │ │ │ │ │ └── intro.md │ │ │ ├── examples │ │ │ │ └── todolist.md │ │ │ ├── hello-world.md │ │ │ ├── introduction.md │ │ │ ├── prepare.md │ │ │ └── publish.md │ │ └── theme │ │ │ ├── annotations.md │ │ │ ├── code-snippets.md │ │ │ ├── config.md │ │ │ ├── finder-apis.md │ │ │ ├── finder-apis │ │ │ ├── category.md │ │ │ ├── comment.md │ │ │ ├── contributor.md │ │ │ ├── menu.md │ │ │ ├── plugin.md │ │ │ ├── post.md │ │ │ ├── single-page.md │ │ │ ├── site-stats.md │ │ │ ├── tag.md │ │ │ └── theme.md │ │ │ ├── global-variables.md │ │ │ ├── prepare.md │ │ │ ├── settings.md │ │ │ ├── static-resources.md │ │ │ ├── structure.md │ │ │ ├── template-route-mapping.md │ │ │ ├── template-tag.md │ │ │ ├── template-variables.md │ │ │ ├── template-variables │ │ │ ├── archives.md │ │ │ ├── author.md │ │ │ ├── categories.md │ │ │ ├── category.md │ │ │ ├── error.md │ │ │ ├── index_.md │ │ │ ├── page.md │ │ │ ├── post.md │ │ │ ├── tag.md │ │ │ └── tags.md │ │ │ └── vo │ │ │ ├── _CategoryTreeVo.md │ │ │ ├── _CategoryVo.md │ │ │ ├── _CommentVo.md │ │ │ ├── _ContentVo.md │ │ │ ├── _ContributorVo.md │ │ │ ├── _ListedPostVo.md │ │ │ ├── _ListedSinglePageVo.md │ │ │ ├── _MenuItemVo.md │ │ │ ├── _MenuVo.md │ │ │ ├── _PostVo.md │ │ │ ├── _ReplyVo.md │ │ │ ├── _SinglePageVo.md │ │ │ ├── _SiteSettingVo.md │ │ │ ├── _TagVo.md │ │ │ ├── _ThemeVo.md │ │ │ └── _UserVo.md │ ├── getting-started │ │ ├── first-post.md │ │ ├── install │ │ │ ├── 1panel.md │ │ │ ├── cloud │ │ │ │ └── tencent-cloud-lighthouse.md │ │ │ ├── docker-compose.md │ │ │ ├── docker.md │ │ │ ├── helm.md │ │ │ ├── jar-file.md │ │ │ ├── offline.md │ │ │ ├── other │ │ │ │ ├── nginxproxymanager.md │ │ │ │ └── traefik.md │ │ │ ├── podman.md │ │ │ └── slots │ │ │ │ ├── _docker-args.md │ │ │ │ └── _docker-registry-list.md │ │ ├── migrate-from-1.x.md │ │ ├── prepare.md │ │ └── setup.md │ ├── intro.md │ └── user-guide │ │ ├── app-store.md │ │ ├── attachments.md │ │ ├── backup.md │ │ ├── common.md │ │ ├── faq.md │ │ ├── menus.md │ │ ├── pages.md │ │ ├── plugins.md │ │ ├── posts.md │ │ ├── settings.md │ │ ├── themes.md │ │ ├── user-center.md │ │ └── users.md ├── version-2.18 │ ├── about.md │ ├── contribution │ │ ├── issue.md │ │ ├── pr.md │ │ └── sponsor.md │ ├── developer-guide │ │ ├── annotations-form.md │ │ ├── core │ │ │ ├── build.md │ │ │ ├── code-style.md │ │ │ ├── prepare.md │ │ │ ├── run.md │ │ │ └── structure.md │ │ ├── form-schema.md │ │ ├── plugin │ │ │ ├── api-reference │ │ │ │ ├── server │ │ │ │ │ ├── extension-client.md │ │ │ │ │ ├── extension-getter.md │ │ │ │ │ ├── extension-points │ │ │ │ │ │ ├── additional-webfilter.md │ │ │ │ │ │ ├── attachment.md │ │ │ │ │ │ ├── authentication-webfilter.md │ │ │ │ │ │ ├── comment-subject.md │ │ │ │ │ │ ├── comment-widget.md │ │ │ │ │ │ ├── index.md │ │ │ │ │ │ ├── notifier.md │ │ │ │ │ │ ├── post-content.md │ │ │ │ │ │ ├── singlepage-content.md │ │ │ │ │ │ ├── template-footer-processor.md │ │ │ │ │ │ ├── template-head-processor.md │ │ │ │ │ │ └── username-password-authentication-manager.md │ │ │ │ │ ├── extension.md │ │ │ │ │ ├── finder-for-theme.md │ │ │ │ │ ├── login-handler-enhancer.md │ │ │ │ │ ├── reconciler.md │ │ │ │ │ ├── reverseproxy.md │ │ │ │ │ ├── role-template.md │ │ │ │ │ ├── setting-fetcher.md │ │ │ │ │ ├── template-for-theme.md │ │ │ │ │ └── websocket.md │ │ │ │ └── ui │ │ │ │ │ ├── api-request.md │ │ │ │ │ ├── components │ │ │ │ │ ├── annotations-form.md │ │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ │ ├── filter-clean-button.md │ │ │ │ │ ├── filter-dropdown.md │ │ │ │ │ ├── has-permission.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── plugin-detail-modal.md │ │ │ │ │ ├── search-input.md │ │ │ │ │ ├── uppy-upload.md │ │ │ │ │ ├── v-codemirror.md │ │ │ │ │ ├── v-permission.md │ │ │ │ │ └── v-tooltip.md │ │ │ │ │ ├── extension-points │ │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ │ ├── attachment-selector-create.md │ │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ │ ├── backup-tabs-create.md │ │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ │ ├── editor-create.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── interface │ │ │ │ │ │ ├── Attachment.md │ │ │ │ │ │ ├── ListedPost.md │ │ │ │ │ │ ├── OperationItem.md │ │ │ │ │ │ ├── Plugin.md │ │ │ │ │ │ └── Theme.md │ │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ │ └── user-detail-tabs-create.md │ │ │ │ │ └── route.md │ │ │ ├── appendices.md │ │ │ ├── basics │ │ │ │ ├── devtools.md │ │ │ │ ├── framework.md │ │ │ │ ├── manifest.md │ │ │ │ ├── server │ │ │ │ │ ├── lifecycle.md │ │ │ │ │ └── object-management.md │ │ │ │ ├── structure.md │ │ │ │ └── ui │ │ │ │ │ ├── entry.md │ │ │ │ │ └── intro.md │ │ │ ├── examples │ │ │ │ └── todolist.md │ │ │ ├── hello-world.md │ │ │ ├── introduction.md │ │ │ ├── prepare.md │ │ │ └── publish.md │ │ └── theme │ │ │ ├── annotations.md │ │ │ ├── code-snippets.md │ │ │ ├── config.md │ │ │ ├── finder-apis.md │ │ │ ├── finder-apis │ │ │ ├── category.md │ │ │ ├── comment.md │ │ │ ├── contributor.md │ │ │ ├── menu.md │ │ │ ├── plugin.md │ │ │ ├── post.md │ │ │ ├── single-page.md │ │ │ ├── site-stats.md │ │ │ ├── tag.md │ │ │ └── theme.md │ │ │ ├── global-variables.md │ │ │ ├── prepare.md │ │ │ ├── settings.md │ │ │ ├── static-resources.md │ │ │ ├── structure.md │ │ │ ├── template-route-mapping.md │ │ │ ├── template-tag.md │ │ │ ├── template-variables.md │ │ │ ├── template-variables │ │ │ ├── archives.md │ │ │ ├── author.md │ │ │ ├── categories.md │ │ │ ├── category.md │ │ │ ├── error.md │ │ │ ├── index_.md │ │ │ ├── page.md │ │ │ ├── post.md │ │ │ ├── tag.md │ │ │ └── tags.md │ │ │ └── vo │ │ │ ├── _CategoryTreeVo.md │ │ │ ├── _CategoryVo.md │ │ │ ├── _CommentVo.md │ │ │ ├── _ContentVo.md │ │ │ ├── _ContributorVo.md │ │ │ ├── _ListedPostVo.md │ │ │ ├── _ListedSinglePageVo.md │ │ │ ├── _MenuItemVo.md │ │ │ ├── _MenuVo.md │ │ │ ├── _PostVo.md │ │ │ ├── _ReplyVo.md │ │ │ ├── _SinglePageVo.md │ │ │ ├── _SiteSettingVo.md │ │ │ ├── _TagVo.md │ │ │ ├── _ThemeVo.md │ │ │ └── _UserVo.md │ ├── getting-started │ │ ├── first-post.md │ │ ├── install │ │ │ ├── 1panel.md │ │ │ ├── cloud │ │ │ │ └── tencent-cloud-lighthouse.md │ │ │ ├── docker-compose.md │ │ │ ├── docker.md │ │ │ ├── helm.md │ │ │ ├── jar-file.md │ │ │ ├── offline.md │ │ │ ├── other │ │ │ │ ├── nginxproxymanager.md │ │ │ │ └── traefik.md │ │ │ ├── podman.md │ │ │ └── slots │ │ │ │ ├── _docker-args.md │ │ │ │ └── _docker-registry-list.md │ │ ├── migrate-from-1.x.md │ │ ├── prepare.md │ │ └── setup.md │ ├── intro.md │ └── user-guide │ │ ├── app-store.md │ │ ├── attachments.md │ │ ├── backup.md │ │ ├── common.md │ │ ├── faq.md │ │ ├── menus.md │ │ ├── pages.md │ │ ├── plugins.md │ │ ├── posts.md │ │ ├── settings.md │ │ ├── themes.md │ │ ├── user-center.md │ │ └── users.md ├── version-2.19 │ ├── about.md │ ├── contribution │ │ ├── issue.md │ │ ├── pr.md │ │ └── sponsor.md │ ├── developer-guide │ │ ├── annotations-form.md │ │ ├── core │ │ │ ├── build.md │ │ │ ├── code-style.md │ │ │ ├── prepare.md │ │ │ ├── run.md │ │ │ └── structure.md │ │ ├── form-schema.md │ │ ├── plugin │ │ │ ├── api-reference │ │ │ │ ├── server │ │ │ │ │ ├── extension-client.md │ │ │ │ │ ├── extension-getter.md │ │ │ │ │ ├── extension-points │ │ │ │ │ │ ├── additional-webfilter.md │ │ │ │ │ │ ├── attachment.md │ │ │ │ │ │ ├── authentication-webfilter.md │ │ │ │ │ │ ├── comment-subject.md │ │ │ │ │ │ ├── comment-widget.md │ │ │ │ │ │ ├── index.md │ │ │ │ │ │ ├── notifier.md │ │ │ │ │ │ ├── post-content.md │ │ │ │ │ │ ├── singlepage-content.md │ │ │ │ │ │ ├── template-footer-processor.md │ │ │ │ │ │ ├── template-head-processor.md │ │ │ │ │ │ └── username-password-authentication-manager.md │ │ │ │ │ ├── extension.md │ │ │ │ │ ├── finder-for-theme.md │ │ │ │ │ ├── login-handler-enhancer.md │ │ │ │ │ ├── reconciler.md │ │ │ │ │ ├── reverseproxy.md │ │ │ │ │ ├── role-template.md │ │ │ │ │ ├── setting-fetcher.md │ │ │ │ │ ├── template-for-theme.md │ │ │ │ │ └── websocket.md │ │ │ │ └── ui │ │ │ │ │ ├── api-request.md │ │ │ │ │ ├── components │ │ │ │ │ ├── annotations-form.md │ │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ │ ├── filter-clean-button.md │ │ │ │ │ ├── filter-dropdown.md │ │ │ │ │ ├── has-permission.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── plugin-detail-modal.md │ │ │ │ │ ├── search-input.md │ │ │ │ │ ├── uppy-upload.md │ │ │ │ │ ├── v-codemirror.md │ │ │ │ │ ├── v-permission.md │ │ │ │ │ └── v-tooltip.md │ │ │ │ │ ├── extension-points │ │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ │ ├── attachment-selector-create.md │ │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ │ ├── backup-tabs-create.md │ │ │ │ │ ├── comment-list-item-operation-create.md │ │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ │ ├── editor-create.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── interface │ │ │ │ │ │ ├── Attachment.md │ │ │ │ │ │ ├── ListedComment.md │ │ │ │ │ │ ├── ListedPost.md │ │ │ │ │ │ ├── ListedReply.md │ │ │ │ │ │ ├── OperationItem.md │ │ │ │ │ │ ├── Plugin.md │ │ │ │ │ │ └── Theme.md │ │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ │ ├── reply-list-item-operation-create.md │ │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ │ └── user-detail-tabs-create.md │ │ │ │ │ └── route.md │ │ │ ├── appendices.md │ │ │ ├── basics │ │ │ │ ├── devtools.md │ │ │ │ ├── framework.md │ │ │ │ ├── manifest.md │ │ │ │ ├── server │ │ │ │ │ ├── lifecycle.md │ │ │ │ │ └── object-management.md │ │ │ │ ├── structure.md │ │ │ │ └── ui │ │ │ │ │ ├── entry.md │ │ │ │ │ └── intro.md │ │ │ ├── examples │ │ │ │ └── todolist.md │ │ │ ├── hello-world.md │ │ │ ├── introduction.md │ │ │ ├── prepare.md │ │ │ └── publish.md │ │ ├── restful-api │ │ │ ├── api-client.md │ │ │ └── introduction.md │ │ └── theme │ │ │ ├── annotations.md │ │ │ ├── code-snippets.md │ │ │ ├── config.md │ │ │ ├── finder-apis.md │ │ │ ├── finder-apis │ │ │ ├── category.md │ │ │ ├── comment.md │ │ │ ├── contributor.md │ │ │ ├── menu.md │ │ │ ├── plugin.md │ │ │ ├── post.md │ │ │ ├── single-page.md │ │ │ ├── site-stats.md │ │ │ ├── tag.md │ │ │ └── theme.md │ │ │ ├── global-variables.md │ │ │ ├── image-optimization.md │ │ │ ├── prepare.md │ │ │ ├── settings.md │ │ │ ├── static-resources.md │ │ │ ├── structure.md │ │ │ ├── template-route-mapping.md │ │ │ ├── template-tag.md │ │ │ ├── template-variables.md │ │ │ ├── template-variables │ │ │ ├── archives.md │ │ │ ├── author.md │ │ │ ├── categories.md │ │ │ ├── category.md │ │ │ ├── error.md │ │ │ ├── index_.md │ │ │ ├── page.md │ │ │ ├── post.md │ │ │ ├── tag.md │ │ │ └── tags.md │ │ │ └── vo │ │ │ ├── _CategoryTreeVo.md │ │ │ ├── _CategoryVo.md │ │ │ ├── _CommentVo.md │ │ │ ├── _ContentVo.md │ │ │ ├── _ContributorVo.md │ │ │ ├── _ListedPostVo.md │ │ │ ├── _ListedSinglePageVo.md │ │ │ ├── _MenuItemVo.md │ │ │ ├── _MenuVo.md │ │ │ ├── _PostVo.md │ │ │ ├── _ReplyVo.md │ │ │ ├── _SinglePageVo.md │ │ │ ├── _SiteSettingVo.md │ │ │ ├── _TagVo.md │ │ │ ├── _ThemeVo.md │ │ │ └── _UserVo.md │ ├── getting-started │ │ ├── first-post.md │ │ ├── install │ │ │ ├── 1panel.md │ │ │ ├── cloud │ │ │ │ ├── alibaba-cloud-computenest.md │ │ │ │ └── tencent-cloud-lighthouse.md │ │ │ ├── docker-compose.md │ │ │ ├── docker.md │ │ │ ├── helm.md │ │ │ ├── jar-file.md │ │ │ ├── offline.md │ │ │ ├── other │ │ │ │ ├── nginxproxymanager.md │ │ │ │ └── traefik.md │ │ │ ├── podman.md │ │ │ └── slots │ │ │ │ ├── _docker-args.md │ │ │ │ └── _docker-registry-list.md │ │ ├── migrate-from-1.x.md │ │ ├── prepare.md │ │ └── setup.md │ ├── intro.md │ └── user-guide │ │ ├── app-store.md │ │ ├── attachments.md │ │ ├── backup.md │ │ ├── common.md │ │ ├── faq.md │ │ ├── menus.md │ │ ├── pages.md │ │ ├── plugins.md │ │ ├── posts.md │ │ ├── settings.md │ │ ├── themes.md │ │ ├── user-center.md │ │ └── users.md ├── version-2.20 │ ├── about.md │ ├── contribution │ │ ├── issue.md │ │ ├── pr.md │ │ └── sponsor.md │ ├── developer-guide │ │ ├── annotations-form.md │ │ ├── core │ │ │ ├── build.md │ │ │ ├── code-style.md │ │ │ ├── framework.md │ │ │ ├── prepare.md │ │ │ ├── run.md │ │ │ └── structure.md │ │ ├── form-schema.md │ │ ├── plugin │ │ │ ├── api-reference │ │ │ │ ├── server │ │ │ │ │ ├── extension-client.md │ │ │ │ │ ├── extension-getter.md │ │ │ │ │ ├── extension.md │ │ │ │ │ ├── finder-for-theme.md │ │ │ │ │ ├── login-handler-enhancer.md │ │ │ │ │ ├── notification.md │ │ │ │ │ ├── reconciler.md │ │ │ │ │ ├── reverseproxy.md │ │ │ │ │ ├── setting-fetcher.md │ │ │ │ │ ├── template-for-theme.md │ │ │ │ │ └── websocket.md │ │ │ │ └── ui │ │ │ │ │ ├── api-request.md │ │ │ │ │ ├── components │ │ │ │ │ ├── annotations-form.md │ │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ │ ├── filter-clean-button.md │ │ │ │ │ ├── filter-dropdown.md │ │ │ │ │ ├── has-permission.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── plugin-detail-modal.md │ │ │ │ │ ├── search-input.md │ │ │ │ │ ├── uppy-upload.md │ │ │ │ │ ├── v-codemirror.md │ │ │ │ │ ├── v-permission.md │ │ │ │ │ └── v-tooltip.md │ │ │ │ │ └── route.md │ │ │ ├── appendices.md │ │ │ ├── basics │ │ │ │ ├── devtools.md │ │ │ │ ├── manifest.md │ │ │ │ ├── server │ │ │ │ │ ├── lifecycle.md │ │ │ │ │ └── object-management.md │ │ │ │ ├── structure.md │ │ │ │ └── ui │ │ │ │ │ ├── entry.md │ │ │ │ │ └── intro.md │ │ │ ├── examples │ │ │ │ └── todolist.md │ │ │ ├── extension-points │ │ │ │ ├── server │ │ │ │ │ ├── additional-webfilter.md │ │ │ │ │ ├── attachment.md │ │ │ │ │ ├── authentication-webfilter.md │ │ │ │ │ ├── comment-subject.md │ │ │ │ │ ├── comment-widget.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── notifier.md │ │ │ │ │ ├── post-content.md │ │ │ │ │ ├── singlepage-content.md │ │ │ │ │ ├── template-footer-processor.md │ │ │ │ │ ├── template-head-processor.md │ │ │ │ │ └── username-password-authentication-manager.md │ │ │ │ └── ui │ │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ │ ├── attachment-selector-create.md │ │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ │ ├── backup-tabs-create.md │ │ │ │ │ ├── comment-list-item-operation-create.md │ │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ │ ├── editor-create.md │ │ │ │ │ ├── index.md │ │ │ │ │ ├── interface │ │ │ │ │ ├── Attachment.md │ │ │ │ │ ├── ListedComment.md │ │ │ │ │ ├── ListedPost.md │ │ │ │ │ ├── ListedReply.md │ │ │ │ │ ├── OperationItem.md │ │ │ │ │ ├── Plugin.md │ │ │ │ │ └── Theme.md │ │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ │ ├── reply-list-item-operation-create.md │ │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ │ └── user-detail-tabs-create.md │ │ │ ├── hello-world.md │ │ │ ├── interaction │ │ │ │ ├── dependency.md │ │ │ │ ├── making-plugin-extensible.md │ │ │ │ └── shared-events.md │ │ │ ├── introduction.md │ │ │ ├── prepare.md │ │ │ ├── publish.md │ │ │ └── security │ │ │ │ ├── rbac.md │ │ │ │ ├── role-template.md │ │ │ │ └── ui-permission.md │ │ ├── restful-api │ │ │ ├── api-client.md │ │ │ └── introduction.md │ │ └── theme │ │ │ ├── annotations.md │ │ │ ├── code-snippets.md │ │ │ ├── config.md │ │ │ ├── finder-apis.md │ │ │ ├── finder-apis │ │ │ ├── category.md │ │ │ ├── comment.md │ │ │ ├── contributor.md │ │ │ ├── menu.md │ │ │ ├── plugin.md │ │ │ ├── post.md │ │ │ ├── single-page.md │ │ │ ├── site-stats.md │ │ │ ├── tag.md │ │ │ └── theme.md │ │ │ ├── global-variables.md │ │ │ ├── image-optimization.md │ │ │ ├── prepare.md │ │ │ ├── settings.md │ │ │ ├── static-resources.md │ │ │ ├── structure.md │ │ │ ├── template-route-mapping.md │ │ │ ├── template-tag.md │ │ │ ├── template-variables.md │ │ │ ├── template-variables │ │ │ ├── archives.md │ │ │ ├── auth.md │ │ │ ├── author.md │ │ │ ├── categories.md │ │ │ ├── category.md │ │ │ ├── error.md │ │ │ ├── index_.md │ │ │ ├── page.md │ │ │ ├── post.md │ │ │ ├── tag.md │ │ │ └── tags.md │ │ │ └── vo │ │ │ ├── _CategoryTreeVo.md │ │ │ ├── _CategoryVo.md │ │ │ ├── _CommentVo.md │ │ │ ├── _ContentVo.md │ │ │ ├── _ContributorVo.md │ │ │ ├── _ListedPostVo.md │ │ │ ├── _ListedSinglePageVo.md │ │ │ ├── _MenuItemVo.md │ │ │ ├── _MenuVo.md │ │ │ ├── _PostVo.md │ │ │ ├── _ReplyVo.md │ │ │ ├── _SinglePageVo.md │ │ │ ├── _SiteSettingVo.md │ │ │ ├── _TagVo.md │ │ │ ├── _ThemeVo.md │ │ │ └── _UserVo.md │ ├── getting-started │ │ ├── first-post.md │ │ ├── install │ │ │ ├── 1panel.md │ │ │ ├── cloud │ │ │ │ ├── alibaba-cloud-computenest.md │ │ │ │ ├── alibaba-cloud-market.md │ │ │ │ └── tencent-cloud-lighthouse.md │ │ │ ├── config.md │ │ │ ├── docker-compose.md │ │ │ ├── docker.md │ │ │ ├── helm.md │ │ │ ├── jar-file.md │ │ │ ├── offline.md │ │ │ ├── other │ │ │ │ ├── nginxproxymanager.md │ │ │ │ └── traefik.md │ │ │ ├── podman.md │ │ │ └── slots │ │ │ │ ├── _docker-args.md │ │ │ │ └── _docker-registry-list.md │ │ ├── migrate-from-1.x.md │ │ ├── prepare.md │ │ └── setup.md │ ├── intro.md │ └── user-guide │ │ ├── app-store.md │ │ ├── attachments.md │ │ ├── backup.md │ │ ├── common.md │ │ ├── faq.md │ │ ├── menus.md │ │ ├── pages.md │ │ ├── plugins.md │ │ ├── posts.md │ │ ├── settings.md │ │ ├── themes.md │ │ ├── user-center.md │ │ └── users.md └── version-2.21 │ ├── about.md │ ├── contribution │ ├── issue.md │ ├── pr.md │ └── sponsor.md │ ├── developer-guide │ ├── annotations-form.md │ ├── core │ │ ├── build.md │ │ ├── code-style.md │ │ ├── framework.md │ │ ├── prepare.md │ │ ├── run.md │ │ └── structure.md │ ├── form-schema.md │ ├── plugin │ │ ├── api-reference │ │ │ ├── server │ │ │ │ ├── extension-client.md │ │ │ │ ├── extension-getter.md │ │ │ │ ├── extension.md │ │ │ │ ├── finder-for-theme.md │ │ │ │ ├── login-handler-enhancer.md │ │ │ │ ├── notification.md │ │ │ │ ├── reconciler.md │ │ │ │ ├── reverseproxy.md │ │ │ │ ├── setting-fetcher.md │ │ │ │ ├── template-for-theme.md │ │ │ │ └── websocket.md │ │ │ └── ui │ │ │ │ ├── api-request.md │ │ │ │ ├── components │ │ │ │ ├── annotations-form.md │ │ │ │ ├── attachment-file-type-icon.md │ │ │ │ ├── attachment-selector-modal.md │ │ │ │ ├── filter-clean-button.md │ │ │ │ ├── filter-dropdown.md │ │ │ │ ├── has-permission.md │ │ │ │ ├── index.md │ │ │ │ ├── plugin-detail-modal.md │ │ │ │ ├── search-input.md │ │ │ │ ├── uppy-upload.md │ │ │ │ ├── v-codemirror.md │ │ │ │ ├── v-permission.md │ │ │ │ └── v-tooltip.md │ │ │ │ └── route.md │ │ ├── appendices.md │ │ ├── basics │ │ │ ├── devtools.md │ │ │ ├── manifest.md │ │ │ ├── server │ │ │ │ ├── lifecycle.md │ │ │ │ └── object-management.md │ │ │ ├── structure.md │ │ │ └── ui │ │ │ │ ├── build.md │ │ │ │ ├── entry.md │ │ │ │ └── intro.md │ │ ├── examples │ │ │ └── todolist.md │ │ ├── extension-points │ │ │ ├── server │ │ │ │ ├── additional-webfilter.md │ │ │ │ ├── attachment.md │ │ │ │ ├── authentication-webfilter.md │ │ │ │ ├── comment-subject.md │ │ │ │ ├── comment-widget.md │ │ │ │ ├── index.md │ │ │ │ ├── notifier.md │ │ │ │ ├── post-content.md │ │ │ │ ├── singlepage-content.md │ │ │ │ ├── template-footer-processor.md │ │ │ │ ├── template-head-processor.md │ │ │ │ └── username-password-authentication-manager.md │ │ │ └── ui │ │ │ │ ├── attachment-list-item-operation-create.md │ │ │ │ ├── attachment-selector-create.md │ │ │ │ ├── backup-list-item-operation-create.md │ │ │ │ ├── backup-tabs-create.md │ │ │ │ ├── comment-list-item-operation-create.md │ │ │ │ ├── comment-subject-ref-create.md │ │ │ │ ├── dashboard-widgets.md │ │ │ │ ├── default-editor-extension-create.md │ │ │ │ ├── editor-create.md │ │ │ │ ├── index.md │ │ │ │ ├── interface │ │ │ │ ├── Attachment.md │ │ │ │ ├── ListedComment.md │ │ │ │ ├── ListedPost.md │ │ │ │ ├── ListedReply.md │ │ │ │ ├── ListedSinglePage.md │ │ │ │ ├── OperationItem.md │ │ │ │ ├── Plugin.md │ │ │ │ └── Theme.md │ │ │ │ ├── plugin-installation-tabs-create.md │ │ │ │ ├── plugin-list-item-field-create.md │ │ │ │ ├── plugin-list-item-operation-create.md │ │ │ │ ├── plugin-self-tabs-create.md │ │ │ │ ├── post-list-item-field-create.md │ │ │ │ ├── post-list-item-operation-create.md │ │ │ │ ├── reply-list-item-operation-create.md │ │ │ │ ├── single-page-list-item-field-create.md │ │ │ │ ├── single-page-list-item-operation-create.md │ │ │ │ ├── theme-list-item-operation-create.md │ │ │ │ ├── theme-list-tabs-create.md │ │ │ │ ├── uc-user-profile-tabs-create.md │ │ │ │ └── user-detail-tabs-create.md │ │ ├── hello-world.md │ │ ├── interaction │ │ │ ├── dependency.md │ │ │ ├── making-plugin-extensible.md │ │ │ └── shared-events.md │ │ ├── introduction.md │ │ ├── prepare.md │ │ ├── publish.md │ │ └── security │ │ │ ├── rbac.md │ │ │ ├── role-template.md │ │ │ └── ui-permission.md │ ├── restful-api │ │ ├── api-client.md │ │ └── introduction.md │ └── theme │ │ ├── annotations.md │ │ ├── code-snippets.md │ │ ├── config.md │ │ ├── finder-apis.md │ │ ├── finder-apis │ │ ├── category.md │ │ ├── comment.md │ │ ├── contributor.md │ │ ├── menu.md │ │ ├── plugin.md │ │ ├── post.md │ │ ├── single-page.md │ │ ├── site-stats.md │ │ ├── tag.md │ │ └── theme.md │ │ ├── global-variables.md │ │ ├── image-optimization.md │ │ ├── prepare.md │ │ ├── settings.md │ │ ├── static-resources.md │ │ ├── structure.md │ │ ├── template-route-mapping.md │ │ ├── template-tag.md │ │ ├── template-variables.md │ │ ├── template-variables │ │ ├── archives.md │ │ ├── auth.md │ │ ├── author.md │ │ ├── categories.md │ │ ├── category.md │ │ ├── error.md │ │ ├── index_.md │ │ ├── page.md │ │ ├── post.md │ │ ├── tag.md │ │ └── tags.md │ │ └── vo │ │ ├── _CategoryTreeVo.md │ │ ├── _CategoryVo.md │ │ ├── _CommentVo.md │ │ ├── _ContentVo.md │ │ ├── _ContributorVo.md │ │ ├── _ListedPostVo.md │ │ ├── _ListedSinglePageVo.md │ │ ├── _MenuItemVo.md │ │ ├── _MenuVo.md │ │ ├── _PostVo.md │ │ ├── _ReplyVo.md │ │ ├── _SinglePageVo.md │ │ ├── _SiteSettingVo.md │ │ ├── _TagVo.md │ │ ├── _ThemeVo.md │ │ └── _UserVo.md │ ├── getting-started │ ├── first-post.md │ ├── install │ │ ├── 1panel.md │ │ ├── cloud │ │ │ ├── alibaba-cloud-computenest.md │ │ │ ├── alibaba-cloud-market.md │ │ │ └── tencent-cloud-lighthouse.md │ │ ├── config.md │ │ ├── docker-compose.md │ │ ├── docker.md │ │ ├── helm.md │ │ ├── jar-file.md │ │ ├── offline.md │ │ ├── other │ │ │ ├── nginxproxymanager.md │ │ │ └── traefik.md │ │ ├── podman.md │ │ └── slots │ │ │ ├── _docker-args.md │ │ │ └── _docker-registry-list.md │ ├── migrate-from-1.x.md │ ├── prepare.md │ └── setup.md │ ├── intro.md │ └── user-guide │ ├── app-store.md │ ├── attachments.md │ ├── backup.md │ ├── common.md │ ├── faq.md │ ├── menus.md │ ├── pages.md │ ├── plugins.md │ ├── posts.md │ ├── settings.md │ ├── themes.md │ ├── user-center.md │ └── users.md ├── versioned_sidebars ├── version-2.16-sidebars.json ├── version-2.17-sidebars.json ├── version-2.18-sidebars.json ├── version-2.19-sidebars.json ├── version-2.20-sidebars.json └── version-2.21-sidebars.json ├── versions.json └── versionsArchived.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*.md] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = false 9 | insert_final_newline = true -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | # Editor 19 | 20 | .idea 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | pnpm lint 5 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "MD033": false, 3 | "MD024": false, 4 | "MD029": false, 5 | "MD041": false, 6 | "MD010": { 7 | "code_blocks": true, 8 | "spaces_per_tab": 4 9 | }, 10 | "MD046": false, 11 | "line-length": false, 12 | "fix": true 13 | } -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["davidanson.vscode-markdownlint"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "[markdown]": { 3 | "editor.defaultFormatter": "yzhang.markdown-all-in-one" 4 | }, 5 | "i18n-ally.localesPaths": [ 6 | "i18n" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /OWNERS: -------------------------------------------------------------------------------- 1 | reviewers: 2 | - ruibaby 3 | - guqing 4 | - JohnNiang 5 | - wan92hen 6 | 7 | approvers: 8 | - ruibaby 9 | - guqing 10 | - JohnNiang 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # The open-source repo for [docs.halo.run](https://docs.halo.run) 2 | 3 | This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator. 4 | 5 | ### Installation 6 | 7 | ``` 8 | $ pnpm install 9 | ``` 10 | 11 | > If you don’t have pnpm installed, you can install it with the following command: 12 | 13 | ``` 14 | npm install -g pnpm 15 | ``` 16 | 17 | ### Local Development 18 | 19 | ``` 20 | $ pnpm start 21 | ``` 22 | 23 | This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. 24 | 25 | ### Build 26 | 27 | ``` 28 | $ pnpm build 29 | ``` 30 | 31 | This command generates static content into the `build` directory and can be served using any static contents hosting service. 32 | -------------------------------------------------------------------------------- /docs/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 关于文档 3 | description: 关于本文档站点的一些说明 4 | --- 5 | 6 | :::note 7 | 此文档使用 [Docusaurus](https://docusaurus.io/) 搭建,感谢 [Docusaurus](https://github.com/facebook/docusaurus) 社区所做的贡献。 8 | ::: 9 | 10 | ## 参与贡献 11 | 12 | :::tip 13 | 如果你发现文档中有不正确或者需要添加的内容,非常欢迎参与到文档编辑当中。 14 | ::: 15 | 16 | 当前文档的仓库地址为 [halo-dev/docs](https://github.com/halo-dev/docs) ,所以你可以 fork 此仓库,修改之后提交 `Pull request` 等待我们合并即可。 17 | -------------------------------------------------------------------------------- /docs/contribution/issue.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 问题反馈 3 | description: 问题反馈渠道及指南 4 | --- 5 | 6 | :::info 7 | 如果您在使用过程中遇到了什么问题,您可以通过下面的方式反馈,但请尽量按照要求提出反馈。 8 | ::: 9 | 10 | ## GitHub Issues 11 | 12 | 链接:[https://github.com/halo-dev/halo/issues](https://github.com/halo-dev/halo/issues) 13 | 14 | 如果你在使用过程中,遇到了一些 bug 或者需要添加某些新特性,请尽量在 GitHub Issues 进行反馈,这非常有助于我们跟踪解决此问题,您也可以很方便的接收到处理状态。 15 | 16 | 建议步骤: 17 | 18 | 1. 在 [Issues 列表](https://github.com/halo-dev/halo/issues) 搜索相关问题,看看是否有其他人已经提到了此问题。 19 | 2. 如果当前还没有人遇到您类似的问题,那么请点击右上角的 `New issue` 按钮创建新的 issue。 20 | 3. 选择正确的反馈类型。 21 | 4. 请尽可能详细的按照模板填写内容。 22 | 5. 点击 `Submit new issue` 提交 issue。 23 | 24 | ## Halo 官方社区 25 | 26 | 链接:[https://bbs.halo.run](https://bbs.halo.run) 27 | 28 | 此平台主要目的用于与其他 Halo 用户进行交流。但如果您对 GitHub 不是很熟悉或者没有账号,您也可以在此平台进行反馈。 29 | -------------------------------------------------------------------------------- /docs/contribution/sponsor.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 赞助我们 3 | description: 如果 Halo 对你有帮助,不妨赞助我们 4 | --- 5 | 6 | ## 为什么需要赞助 7 | 8 | 我们花费了大量的精力来维护这个软件,并且也提供了不少资金来维护服务器,域名等。因此我们需要赞助来节省部分开发成本。你的赞助不仅仅会被我们用来支付一些开发成本(比如服务器,OSS,域名等),还会让我们有更多的信心和精力投入到这个开源项目的开发中。从而让项目保持更加健康的成长以及迭代。 9 | 10 | ## 赞助形式 11 | 12 | :::info 13 | 你可以通过任何形式对我们赞助,不限于资金。 14 | ::: 15 | 16 | ### 资金赞助 17 | 18 | - 爱发电:[https://afdian.com/a/halo-dev](https://afdian.com/a/halo-dev) 19 | 20 | ### 通过我们的推广链接购买服务器 21 | 22 | 如果你当前还没有购买服务器,可以考虑通过以下链接购买,这会为我们带来一部分收益。 23 | 24 | - 阿里云:[https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=j57gyupo](https://www.aliyun.com/daily-act/ecs/activity_selection?userCode=j57gyupo) 25 | - 阿里云新人专享:[https://www.aliyun.com/minisite/goods?userCode=j57gyupo](https://www.aliyun.com/minisite/goods?userCode=j57gyupo) 26 | - 腾讯云:[https://curl.qcloud.com/9Ogon25Y](https://curl.qcloud.com/9Ogon25Y) 27 | -------------------------------------------------------------------------------- /docs/developer-guide/core/code-style.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 代码风格 3 | description: 代码风格的相关配置说明 4 | --- 5 | 6 | Halo 添加了 checkstyle 插件,来保证每位提交者代码的风格保持一致,减少无效代码的修改。本篇文章主要讲解如何在 IDEA 中添加 CheckStyle 插件,并引入项目所提供的 checkstyle.xml 配置。 7 | 8 | ## 安装 CheckStyle-IDEA 9 | 10 | - 进入 IDEA 插件市场。 11 | - 搜索 CheckStyle-IDEA,点击安装即可。 12 | 13 | ## 配置 CheckStyle 14 | 15 | - 进入 CheckStyle 配置(File | Settings | Tools | Checkstyle)。 16 | - 选择 Checkstyle 版本:9.3(以文件 `application/build.gradle` 中指定的版本为准)。 17 | - 在配置文件中点击添加按钮,配置描述可随便填写(推荐 Halo Checks),选择 ./config/checkstyle/checkstyle.xml,点击下一步和完成。 18 | - 勾选刚刚创建的配置文件。 19 | 20 | ## 配置 Editor 21 | 22 | - 进入编辑器配置(File | Settings | Editor | Code Style) 23 | 24 | - 导入 checkstyle.xm 配置: 25 | 26 | ![image.png](https://www.halo.run/upload/2020/2/image-0c7a018e73f74634a534fa3ba8806628.png) 27 | 28 | - 选择 `./config/checkstyle/checkstyle.xml` 配置文件,点击确定即可。 29 | 30 | 至此,有关代码风格检查工具和格式化配置已经完成。 31 | -------------------------------------------------------------------------------- /docs/developer-guide/core/prepare.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 准备工作 3 | description: 开发环境的准备工作 4 | --- 5 | 6 | ## 环境要求 7 | 8 | - [OpenJDK 21 LTS](https://github.com/openjdk/jdk) 9 | - [Node.js 20 LTS](https://nodejs.org) 10 | - [pnpm 10](https://pnpm.io/) 11 | - [IntelliJ IDEA](https://www.jetbrains.com/idea/) 12 | - [Git](https://git-scm.com/) 13 | - [Docker](https://www.docker.com/)(可选) 14 | 15 | ## 名词解释 16 | 17 | ### 工作目录 18 | 19 | 指 Halo 所依赖的工作目录,在 Halo 运行的时候会在系统当前用户目录下产生一个 halo-next 的文件夹,绝对路径为 ~/halo-next。里面通常包含下列目录或文件: 20 | 21 | 1. `db`:存放 H2 Database 的物理文件,如果你使用其他数据库,那么不会存在这个目录。 22 | 2. `themes`:里面包含用户所安装的主题。 23 | 2. `plugins`:里面包含用户所安装的插件。 24 | 5. `attachments`:附件目录。 25 | 4. `logs`:运行日志目录。 26 | -------------------------------------------------------------------------------- /docs/developer-guide/plugin/api-reference/ui/components/attachment-file-type-icon.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: AttachmentFileTypeIcon 3 | description: 附件文件类型图标组件 4 | --- 5 | 6 | 此组件用于根据文件名显示文件类型图标。 7 | 8 | ## 使用示例 9 | 10 | ```html 11 | 12 | 13 |