From 47906dc7b71525f202485574aa72c96f2b973550 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 1 Sep 2025 10:21:27 +0530 Subject: [PATCH 01/49] chore: moved astro project and setup backend --- .gitignore | 28 +- .../.github}/ISSUE_TEMPLATE/bug_report.md | 0 .../.github}/ISSUE_TEMPLATE/epic.md | 0 .../.github}/ISSUE_TEMPLATE/feature.md | 0 .../.github}/ISSUE_TEMPLATE/user-story.md | 0 .../.github}/workflows/deploy.yml | 0 .../.github}/workflows/main_docs-next.yml | 108 ++-- LICENSE => ClientApp/LICENSE | 0 README.md => ClientApp/README.md | 0 .../astro.config.mjs | 0 .../build}/detect-duplicate-frontmatter.js | 0 .../build}/local-build-script.mjs | 0 .../e2e-tests}/package-lock.json | 0 .../e2e-tests}/package.json | 0 .../e2e-tests}/playwright.config.ts | 0 .../e2e-tests}/tests/index.spec.ts | 0 ...ex-page-snapshot-test-1-chromium-win32.png | Bin ...dex-page-snapshot-test-1-firefox-win32.png | Bin ...ndex-page-snapshot-test-1-webkit-win32.png | Bin .../package-lock.json | 0 package.json => ClientApp/package.json | 0 {public => ClientApp/public}/favicon.ico | Bin {src => ClientApp/src}/assets/404_Hugo.svg | 0 {src => ClientApp/src}/assets/favicon.ico | Bin {src => ClientApp/src}/assets/logo.svg | 14 +- {src => ClientApp/src}/assets/suo-logo.svg | 0 .../src}/components/AreasOfInterest.astro | 62 +- .../src}/components/Audience.astro | 60 +- ...CategoryLandingAdditionalContentCard.astro | 0 .../src}/components/CategoryLandingCard.astro | 0 .../src}/components/CheckBox.tsx | 0 .../src}/components/EditPage.astro | 24 +- .../src}/components/Feedback.astro | 28 +- {src => ClientApp/src}/components/Footer.tsx | 0 .../src}/components/GradientBanner.astro | 38 +- .../src}/components/Hamburger.astro | 46 +- .../src}/components/Header.astro | 340 +++++------ {src => ClientApp/src}/components/Hero.astro | 82 +-- .../src}/components/IconSelection.tsx | 0 .../src}/components/LanguageSelect.tsx | 0 {src => ClientApp/src}/components/Link.astro | 0 .../src}/components/OnThisArticle.tsx | 0 .../src}/components/OnThisPage.astro | 314 +++++----- .../src}/components/PageHeader.astro | 154 ++--- .../components/QuickAccessShortcuts.astro | 0 .../src}/components/Search.astro | 0 .../src}/components/SearchPage.tsx | 0 {src => ClientApp/src}/components/Share.astro | 130 ++--- .../src}/components/SubCategoryCard.astro | 0 .../src}/components/TableOfContentList.tsx | 0 .../src}/components/YamlClass.astro | 0 .../src}/components/YamlItem.astro | 0 .../src}/components/YamlNamespace.astro | 0 {src => ClientApp/src}/content.config.ts | 0 {src => ClientApp/src}/content.schema.ts | 0 {src => ClientApp/src}/data/audience.ts | 58 +- {src => ClientApp/src}/data/navigation.ts | 552 +++++++++--------- {src => ClientApp/src}/env.d.ts | 0 {src => ClientApp/src}/layouts/Base.astro | 86 +-- .../src}/layouts/CategoryLandingLayout.astro | 0 .../src}/layouts/ContentLayout.astro | 162 ++--- .../layouts/SubCategoryLandingLayout.astro | 0 .../src}/layouts/YamlLayoutPage.astro | 0 .../media/contribute/add-suggestion-icon.png | Bin .../src}/media/contribute/checkout-pr.png | Bin .../src}/media/contribute/comment.png | Bin .../media/contribute/commit-suggestion.png | Bin .../src}/media/contribute/commit-to-patch.png | Bin .../contribute/conversation-view-changes.png | Bin .../media/contribute/copy-branch-name.png | Bin .../src}/media/contribute/copy-path.png | Bin .../contribute/create-issue-on-github.png | Bin .../src}/media/contribute/create-patch.png | Bin .../create-pull-request-on-github.png | Bin .../contribute/edit-article-on-github.png | Bin .../src}/media/contribute/edit-file-in-pr.png | Bin .../src}/media/contribute/edit-in-patch.png | Bin .../contribute/edit-markdown-on-github.png | Bin .../media/contribute/enter-suggestion.png | Bin .../media/contribute/fork-repo-on-github.png | Bin .../src}/media/contribute/gitbash-pull.png | Bin .../src}/media/contribute/github-clone.png | Bin .../media/contribute/github-create-pr.png | Bin .../src}/media/contribute/github-open-pr.png | Bin .../how-to-create-tutorial-a-overview.png | Bin .../src}/media/contribute/line-comment.png | Bin .../media/contribute/mdlint-list-hover.png | Bin .../media/contribute/mdlint-list-quickfix.png | Bin .../media/contribute/mdlint-list-warning.png | Bin .../media/contribute/plain-action-buttons.PNG | Bin .../media/contribute/preview-suggestion.png | Bin .../contribute/propose-changes-on-github.png | Bin .../src}/media/contribute/review-changes.png | Bin .../src}/media/contribute/select-branch.png | Bin .../src}/media/contribute/submit-review.png | Bin .../media/contribute/vscode-branch-menu.png | Bin .../src}/media/contribute/vscode-branches.png | Bin .../src}/media/contribute/vscode-clone.png | Bin .../media/contribute/vscode-commit-menu.png | Bin .../contribute/vscode-confirm-commit.png | Bin .../media/contribute/vscode-create-branch.png | Bin .../media/contribute/vscode-push-commit.png | Bin .../src}/media/contribute/vscode-push.png | Bin .../contribute/vscode-source-control-menu.png | Bin .../contribute/vscode-stage-all-changes.png | Bin .../src}/media/contribute/vscode-stash.png | Bin .../media/contribute/vscode-switch-branch.png | Bin .../media/contribute/vscode-sync-changes.png | Bin .../src}/media/edit-action-button.png | Bin .../src}/media/feedback-action-button.png | Bin .../src}/media/github-superoffice-docs.png | Bin .../media/mobile/mobile-add-email-address.png | Bin .../mobile/mobile-add-email-as-attendee.png | Bin ...ription-to-title-agenda-internal-notes.png | Bin .../mobile-crm-follow-up-show-links.png | Bin .../media/mobile/mobile-crm-gif-prev-02.gif | Bin .../src}/media/share-action-button.png | Bin {src => ClientApp/src}/pages/404.astro | 66 +-- {src => ClientApp/src}/pages/_migrate.md | 106 ++-- .../src}/pages/contribute/[...slug].astro | 0 .../src}/pages/contribute/index.astro | 0 .../src}/pages/da/[...slug].astro | 0 .../src}/pages/da/[...subcategory].astro | 0 .../src}/pages/da/[category].astro | 0 .../src}/pages/de/[...slug].astro | 0 .../src}/pages/de/[...subcategory].astro | 0 .../src}/pages/de/[category].astro | 0 .../src}/pages/en/[...category].astro | 0 .../src}/pages/en/[...slug].astro | 0 .../src}/pages/en/[...subcategory].astro | 0 .../src}/pages/en/api/[...slug].astro | 0 .../pages/en/api/reference/[...slug].astro | 0 .../reference/netserver/core/[...slug].astro | 0 .../netserver/services/[...slug].astro | 0 .../en/api/reference/web/[...slug].astro | 0 .../en/api/reference/webapi/[...slug].astro | 0 .../en/automation/crmscript/[...slug].astro | 0 .../netserver-scripting/[...slug].astro | 0 {src => ClientApp/src}/pages/index.astro | 0 .../src}/pages/nl/[...slug].astro | 0 .../src}/pages/nl/[...subcategory].astro | 0 .../src}/pages/nl/[category].astro | 0 .../src}/pages/no/[...slug].astro | 0 .../src}/pages/no/[...subcategory].astro | 0 .../src}/pages/no/[category].astro | 0 .../src}/pages/release-notes/[...slug].astro | 86 +-- {src => ClientApp/src}/pages/search.astro | 0 .../src}/pages/sv/[...slug].astro | 0 .../src}/pages/sv/[...subcategory].astro | 0 .../src}/pages/sv/[category].astro | 0 .../src}/plugins/AddIncludesToMarkdown.js | 0 .../src}/plugins/RestyleDirectives.js | 0 .../src}/reuse/code/hello-world.cs | 6 +- .../src}/scripts/getLastUpdatedFromGitHub.js | 56 +- .../src}/styles/IncludeDirectiveStyles.css | 0 .../src}/styles/VideoEmbeddingStyles.css | 0 {src => ClientApp/src}/styles/main.css | 146 ++--- .../styles/pagefind/customPagefindStyles.css | 0 {src => ClientApp/src}/styles/pagefind/ui.css | 0 .../src}/types/CategoryPageTypes.ts | 0 {src => ClientApp/src}/types/DocsTypes.ts | 0 .../src}/types/OnThisArticleTypes.ts | 0 .../src}/types/SubCategoryPageTypes.ts | 0 .../src}/types/TableOfContentTypes.ts | 0 {src => ClientApp/src}/types/WebAPITypes.ts | 0 .../types/YamlManagedReferencesLayoutTypes.ts | 0 .../src}/types/YamlManagedReferencesTypes.ts | 0 .../src}/types/pagefind-default-ui.d.ts | 0 {src => ClientApp/src}/types/pagefind.d.ts | 0 {src => ClientApp/src}/utils/contentUtils.ts | 0 {src => ClientApp/src}/utils/headerUtils.ts | 76 +-- {src => ClientApp/src}/utils/slugUtils.ts | 0 {src => ClientApp/src}/utils/tocUtils.ts | 0 .../tailwind.config.mjs | 0 tsconfig.json => ClientApp/tsconfig.json | 0 Docs-Next-Solution.sln | 34 ++ Server/Program.cs | 41 ++ Server/Properties/launchSettings.json | 23 + Server/Server.csproj | 13 + Server/Server.csproj.user | 6 + Server/Server.http | 6 + Server/appsettings.Development.json | 8 + Server/appsettings.json | 9 + ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 + .../obj/Debug/net9.0/Server.AssemblyInfo.cs | 23 + .../net9.0/Server.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 21 + .../obj/Debug/net9.0/Server.GlobalUsings.g.cs | 17 + Server/obj/Debug/net9.0/Server.assets.cache | Bin 0 -> 1889 bytes .../Server.csproj.AssemblyReference.cache | Bin 0 -> 1234 bytes .../Debug/net9.0/staticwebassets.removed.txt | 0 ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 + .../obj/Release/net9.0/Server.AssemblyInfo.cs | 23 + .../net9.0/Server.AssemblyInfoInputs.cache | 1 + ....GeneratedMSBuildEditorConfig.editorconfig | 21 + .../Release/net9.0/Server.GlobalUsings.g.cs | 17 + Server/obj/Release/net9.0/Server.assets.cache | Bin 0 -> 1889 bytes .../Server.csproj.AssemblyReference.cache | Bin 0 -> 1234 bytes Server/obj/Server.csproj.nuget.dgspec.json | 82 +++ Server/obj/Server.csproj.nuget.g.props | 16 + Server/obj/Server.csproj.nuget.g.targets | 2 + Server/obj/project.assets.json | 155 +++++ Server/obj/project.nuget.cache | 11 + 203 files changed, 1953 insertions(+), 1413 deletions(-) rename {.github => ClientApp/.github}/ISSUE_TEMPLATE/bug_report.md (100%) rename {.github => ClientApp/.github}/ISSUE_TEMPLATE/epic.md (100%) rename {.github => ClientApp/.github}/ISSUE_TEMPLATE/feature.md (100%) rename {.github => ClientApp/.github}/ISSUE_TEMPLATE/user-story.md (100%) rename {.github => ClientApp/.github}/workflows/deploy.yml (100%) rename {.github => ClientApp/.github}/workflows/main_docs-next.yml (97%) rename LICENSE => ClientApp/LICENSE (100%) rename README.md => ClientApp/README.md (100%) rename astro.config.mjs => ClientApp/astro.config.mjs (100%) rename {build => ClientApp/build}/detect-duplicate-frontmatter.js (100%) rename {build => ClientApp/build}/local-build-script.mjs (100%) rename {e2e-tests => ClientApp/e2e-tests}/package-lock.json (100%) rename {e2e-tests => ClientApp/e2e-tests}/package.json (100%) rename {e2e-tests => ClientApp/e2e-tests}/playwright.config.ts (100%) rename {e2e-tests => ClientApp/e2e-tests}/tests/index.spec.ts (100%) rename {e2e-tests => ClientApp/e2e-tests}/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-chromium-win32.png (100%) rename {e2e-tests => ClientApp/e2e-tests}/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-firefox-win32.png (100%) rename {e2e-tests => ClientApp/e2e-tests}/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-webkit-win32.png (100%) rename package-lock.json => ClientApp/package-lock.json (100%) rename package.json => ClientApp/package.json (100%) rename {public => ClientApp/public}/favicon.ico (100%) rename {src => ClientApp/src}/assets/404_Hugo.svg (100%) rename {src => ClientApp/src}/assets/favicon.ico (100%) rename {src => ClientApp/src}/assets/logo.svg (99%) rename {src => ClientApp/src}/assets/suo-logo.svg (100%) rename {src => ClientApp/src}/components/AreasOfInterest.astro (96%) rename {src => ClientApp/src}/components/Audience.astro (97%) rename {src => ClientApp/src}/components/CategoryLandingAdditionalContentCard.astro (100%) rename {src => ClientApp/src}/components/CategoryLandingCard.astro (100%) rename {src => ClientApp/src}/components/CheckBox.tsx (100%) rename {src => ClientApp/src}/components/EditPage.astro (95%) rename {src => ClientApp/src}/components/Feedback.astro (95%) rename {src => ClientApp/src}/components/Footer.tsx (100%) rename {src => ClientApp/src}/components/GradientBanner.astro (96%) rename {src => ClientApp/src}/components/Hamburger.astro (95%) rename {src => ClientApp/src}/components/Header.astro (97%) rename {src => ClientApp/src}/components/Hero.astro (96%) rename {src => ClientApp/src}/components/IconSelection.tsx (100%) rename {src => ClientApp/src}/components/LanguageSelect.tsx (100%) rename {src => ClientApp/src}/components/Link.astro (100%) rename {src => ClientApp/src}/components/OnThisArticle.tsx (100%) rename {src => ClientApp/src}/components/OnThisPage.astro (96%) rename {src => ClientApp/src}/components/PageHeader.astro (96%) rename {src => ClientApp/src}/components/QuickAccessShortcuts.astro (100%) rename {src => ClientApp/src}/components/Search.astro (100%) rename {src => ClientApp/src}/components/SearchPage.tsx (100%) rename {src => ClientApp/src}/components/Share.astro (97%) rename {src => ClientApp/src}/components/SubCategoryCard.astro (100%) rename {src => ClientApp/src}/components/TableOfContentList.tsx (100%) rename {src => ClientApp/src}/components/YamlClass.astro (100%) rename {src => ClientApp/src}/components/YamlItem.astro (100%) rename {src => ClientApp/src}/components/YamlNamespace.astro (100%) rename {src => ClientApp/src}/content.config.ts (100%) rename {src => ClientApp/src}/content.schema.ts (100%) rename {src => ClientApp/src}/data/audience.ts (97%) rename {src => ClientApp/src}/data/navigation.ts (96%) rename {src => ClientApp/src}/env.d.ts (100%) rename {src => ClientApp/src}/layouts/Base.astro (96%) rename {src => ClientApp/src}/layouts/CategoryLandingLayout.astro (100%) rename {src => ClientApp/src}/layouts/ContentLayout.astro (96%) rename {src => ClientApp/src}/layouts/SubCategoryLandingLayout.astro (100%) rename {src => ClientApp/src}/layouts/YamlLayoutPage.astro (100%) rename {src => ClientApp/src}/media/contribute/add-suggestion-icon.png (100%) rename {src => ClientApp/src}/media/contribute/checkout-pr.png (100%) rename {src => ClientApp/src}/media/contribute/comment.png (100%) rename {src => ClientApp/src}/media/contribute/commit-suggestion.png (100%) rename {src => ClientApp/src}/media/contribute/commit-to-patch.png (100%) rename {src => ClientApp/src}/media/contribute/conversation-view-changes.png (100%) rename {src => ClientApp/src}/media/contribute/copy-branch-name.png (100%) rename {src => ClientApp/src}/media/contribute/copy-path.png (100%) rename {src => ClientApp/src}/media/contribute/create-issue-on-github.png (100%) rename {src => ClientApp/src}/media/contribute/create-patch.png (100%) rename {src => ClientApp/src}/media/contribute/create-pull-request-on-github.png (100%) rename {src => ClientApp/src}/media/contribute/edit-article-on-github.png (100%) rename {src => ClientApp/src}/media/contribute/edit-file-in-pr.png (100%) rename {src => ClientApp/src}/media/contribute/edit-in-patch.png (100%) rename {src => ClientApp/src}/media/contribute/edit-markdown-on-github.png (100%) rename {src => ClientApp/src}/media/contribute/enter-suggestion.png (100%) rename {src => ClientApp/src}/media/contribute/fork-repo-on-github.png (100%) rename {src => ClientApp/src}/media/contribute/gitbash-pull.png (100%) rename {src => ClientApp/src}/media/contribute/github-clone.png (100%) rename {src => ClientApp/src}/media/contribute/github-create-pr.png (100%) rename {src => ClientApp/src}/media/contribute/github-open-pr.png (100%) rename {src => ClientApp/src}/media/contribute/how-to-create-tutorial-a-overview.png (100%) rename {src => ClientApp/src}/media/contribute/line-comment.png (100%) rename {src => ClientApp/src}/media/contribute/mdlint-list-hover.png (100%) rename {src => ClientApp/src}/media/contribute/mdlint-list-quickfix.png (100%) rename {src => ClientApp/src}/media/contribute/mdlint-list-warning.png (100%) rename {src => ClientApp/src}/media/contribute/plain-action-buttons.PNG (100%) rename {src => ClientApp/src}/media/contribute/preview-suggestion.png (100%) rename {src => ClientApp/src}/media/contribute/propose-changes-on-github.png (100%) rename {src => ClientApp/src}/media/contribute/review-changes.png (100%) rename {src => ClientApp/src}/media/contribute/select-branch.png (100%) rename {src => ClientApp/src}/media/contribute/submit-review.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-branch-menu.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-branches.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-clone.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-commit-menu.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-confirm-commit.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-create-branch.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-push-commit.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-push.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-source-control-menu.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-stage-all-changes.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-stash.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-switch-branch.png (100%) rename {src => ClientApp/src}/media/contribute/vscode-sync-changes.png (100%) rename {src => ClientApp/src}/media/edit-action-button.png (100%) rename {src => ClientApp/src}/media/feedback-action-button.png (100%) rename {src => ClientApp/src}/media/github-superoffice-docs.png (100%) rename {src => ClientApp/src}/media/mobile/mobile-add-email-address.png (100%) rename {src => ClientApp/src}/media/mobile/mobile-add-email-as-attendee.png (100%) rename {src => ClientApp/src}/media/mobile/mobile-crm-follow-up-description-to-title-agenda-internal-notes.png (100%) rename {src => ClientApp/src}/media/mobile/mobile-crm-follow-up-show-links.png (100%) rename {src => ClientApp/src}/media/mobile/mobile-crm-gif-prev-02.gif (100%) rename {src => ClientApp/src}/media/share-action-button.png (100%) rename {src => ClientApp/src}/pages/404.astro (97%) rename {src => ClientApp/src}/pages/_migrate.md (93%) rename {src => ClientApp/src}/pages/contribute/[...slug].astro (100%) rename {src => ClientApp/src}/pages/contribute/index.astro (100%) rename {src => ClientApp/src}/pages/da/[...slug].astro (100%) rename {src => ClientApp/src}/pages/da/[...subcategory].astro (100%) rename {src => ClientApp/src}/pages/da/[category].astro (100%) rename {src => ClientApp/src}/pages/de/[...slug].astro (100%) rename {src => ClientApp/src}/pages/de/[...subcategory].astro (100%) rename {src => ClientApp/src}/pages/de/[category].astro (100%) rename {src => ClientApp/src}/pages/en/[...category].astro (100%) rename {src => ClientApp/src}/pages/en/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/[...subcategory].astro (100%) rename {src => ClientApp/src}/pages/en/api/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/api/reference/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/api/reference/netserver/core/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/api/reference/netserver/services/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/api/reference/web/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/api/reference/webapi/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/automation/crmscript/[...slug].astro (100%) rename {src => ClientApp/src}/pages/en/automation/netserver-scripting/[...slug].astro (100%) rename {src => ClientApp/src}/pages/index.astro (100%) rename {src => ClientApp/src}/pages/nl/[...slug].astro (100%) rename {src => ClientApp/src}/pages/nl/[...subcategory].astro (100%) rename {src => ClientApp/src}/pages/nl/[category].astro (100%) rename {src => ClientApp/src}/pages/no/[...slug].astro (100%) rename {src => ClientApp/src}/pages/no/[...subcategory].astro (100%) rename {src => ClientApp/src}/pages/no/[category].astro (100%) rename {src => ClientApp/src}/pages/release-notes/[...slug].astro (96%) rename {src => ClientApp/src}/pages/search.astro (100%) rename {src => ClientApp/src}/pages/sv/[...slug].astro (100%) rename {src => ClientApp/src}/pages/sv/[...subcategory].astro (100%) rename {src => ClientApp/src}/pages/sv/[category].astro (100%) rename {src => ClientApp/src}/plugins/AddIncludesToMarkdown.js (100%) rename {src => ClientApp/src}/plugins/RestyleDirectives.js (100%) rename {src => ClientApp/src}/reuse/code/hello-world.cs (97%) rename {src => ClientApp/src}/scripts/getLastUpdatedFromGitHub.js (97%) rename {src => ClientApp/src}/styles/IncludeDirectiveStyles.css (100%) rename {src => ClientApp/src}/styles/VideoEmbeddingStyles.css (100%) rename {src => ClientApp/src}/styles/main.css (94%) rename {src => ClientApp/src}/styles/pagefind/customPagefindStyles.css (100%) rename {src => ClientApp/src}/styles/pagefind/ui.css (100%) rename {src => ClientApp/src}/types/CategoryPageTypes.ts (100%) rename {src => ClientApp/src}/types/DocsTypes.ts (100%) rename {src => ClientApp/src}/types/OnThisArticleTypes.ts (100%) rename {src => ClientApp/src}/types/SubCategoryPageTypes.ts (100%) rename {src => ClientApp/src}/types/TableOfContentTypes.ts (100%) rename {src => ClientApp/src}/types/WebAPITypes.ts (100%) rename {src => ClientApp/src}/types/YamlManagedReferencesLayoutTypes.ts (100%) rename {src => ClientApp/src}/types/YamlManagedReferencesTypes.ts (100%) rename {src => ClientApp/src}/types/pagefind-default-ui.d.ts (100%) rename {src => ClientApp/src}/types/pagefind.d.ts (100%) rename {src => ClientApp/src}/utils/contentUtils.ts (100%) rename {src => ClientApp/src}/utils/headerUtils.ts (97%) rename {src => ClientApp/src}/utils/slugUtils.ts (100%) rename {src => ClientApp/src}/utils/tocUtils.ts (100%) rename tailwind.config.mjs => ClientApp/tailwind.config.mjs (100%) rename tsconfig.json => ClientApp/tsconfig.json (100%) create mode 100644 Docs-Next-Solution.sln create mode 100644 Server/Program.cs create mode 100644 Server/Properties/launchSettings.json create mode 100644 Server/Server.csproj create mode 100644 Server/Server.csproj.user create mode 100644 Server/Server.http create mode 100644 Server/appsettings.Development.json create mode 100644 Server/appsettings.json create mode 100644 Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs create mode 100644 Server/obj/Debug/net9.0/Server.AssemblyInfo.cs create mode 100644 Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache create mode 100644 Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs create mode 100644 Server/obj/Debug/net9.0/Server.assets.cache create mode 100644 Server/obj/Debug/net9.0/Server.csproj.AssemblyReference.cache create mode 100644 Server/obj/Debug/net9.0/staticwebassets.removed.txt create mode 100644 Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs create mode 100644 Server/obj/Release/net9.0/Server.AssemblyInfo.cs create mode 100644 Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache create mode 100644 Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig create mode 100644 Server/obj/Release/net9.0/Server.GlobalUsings.g.cs create mode 100644 Server/obj/Release/net9.0/Server.assets.cache create mode 100644 Server/obj/Release/net9.0/Server.csproj.AssemblyReference.cache create mode 100644 Server/obj/Server.csproj.nuget.dgspec.json create mode 100644 Server/obj/Server.csproj.nuget.g.props create mode 100644 Server/obj/Server.csproj.nuget.g.targets create mode 100644 Server/obj/project.assets.json create mode 100644 Server/obj/project.nuget.cache diff --git a/.gitignore b/.gitignore index 9b80b5ba..237fc158 100644 --- a/.gitignore +++ b/.gitignore @@ -1,15 +1,17 @@ +.vs + # build output -dist/ +ClientApp/dist/ -.distA/ -.distB/ +ClientApp/.distA/ +ClientApp/.distB/ # generated types -.astro/ +ClientApp/.astro/ # dependencies -node_modules/ +ClientApp/node_modules/ # logs npm-debug.log* @@ -19,8 +21,8 @@ pnpm-debug.log* # environment variables -.env -.env.production +ClientApp/.env +ClientApp/.env.production # macOS-specific files .DS_Store @@ -32,12 +34,12 @@ pnpm-debug.log* .vscode/settings.json # Playwright -e2e-tests/test-results/ -e2e-tests/playwright-report/ -e2e-tests/blob-report/ -e2e-tests/playwright/.cache/ +ClientApp/e2e-tests/test-results/ +ClientApp/e2e-tests/playwright-report/ +ClientApp/e2e-tests/blob-report/ +ClientApp/e2e-tests/playwright/.cache/ # External content (other GitHub repos) -external-content/ -public/downloads/ \ No newline at end of file +ClientApp/external-content/ +ClientApp/public/downloads/ \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/ClientApp/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from .github/ISSUE_TEMPLATE/bug_report.md rename to ClientApp/.github/ISSUE_TEMPLATE/bug_report.md diff --git a/.github/ISSUE_TEMPLATE/epic.md b/ClientApp/.github/ISSUE_TEMPLATE/epic.md similarity index 100% rename from .github/ISSUE_TEMPLATE/epic.md rename to ClientApp/.github/ISSUE_TEMPLATE/epic.md diff --git a/.github/ISSUE_TEMPLATE/feature.md b/ClientApp/.github/ISSUE_TEMPLATE/feature.md similarity index 100% rename from .github/ISSUE_TEMPLATE/feature.md rename to ClientApp/.github/ISSUE_TEMPLATE/feature.md diff --git a/.github/ISSUE_TEMPLATE/user-story.md b/ClientApp/.github/ISSUE_TEMPLATE/user-story.md similarity index 100% rename from .github/ISSUE_TEMPLATE/user-story.md rename to ClientApp/.github/ISSUE_TEMPLATE/user-story.md diff --git a/.github/workflows/deploy.yml b/ClientApp/.github/workflows/deploy.yml similarity index 100% rename from .github/workflows/deploy.yml rename to ClientApp/.github/workflows/deploy.yml diff --git a/.github/workflows/main_docs-next.yml b/ClientApp/.github/workflows/main_docs-next.yml similarity index 97% rename from .github/workflows/main_docs-next.yml rename to ClientApp/.github/workflows/main_docs-next.yml index dab07fd8..4f4adccd 100644 --- a/.github/workflows/main_docs-next.yml +++ b/ClientApp/.github/workflows/main_docs-next.yml @@ -1,52 +1,52 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - -name: Build and deploy ASP.Net Core app to Azure Web App - docs-next - -on: - push: - branches: - - main - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read #This is required for actions/checkout - - steps: - - uses: actions/checkout@v4 - - - name: Set up .NET Core - uses: actions/setup-dotnet@v4 - with: - dotnet-version: '8.x' - - - name: Build with dotnet - run: dotnet build --configuration Release - - - name: dotnet publish - run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp - - - name: Upload artifact for deployment job - uses: actions/upload-artifact@v4 - with: - name: .net-app - path: ${{env.DOTNET_ROOT}}/myapp - - deploy: - runs-on: ubuntu-latest - needs: build +# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy +# More GitHub Actions for Azure: https://github.com/Azure/actions + +name: Build and deploy ASP.Net Core app to Azure Web App - docs-next + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read #This is required for actions/checkout + + steps: + - uses: actions/checkout@v4 + + - name: Set up .NET Core + uses: actions/setup-dotnet@v4 + with: + dotnet-version: '8.x' + + - name: Build with dotnet + run: dotnet build --configuration Release + + - name: dotnet publish + run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp + + - name: Upload artifact for deployment job + uses: actions/upload-artifact@v4 + with: + name: .net-app + path: ${{env.DOTNET_ROOT}}/myapp + + deploy: + runs-on: ubuntu-latest + needs: build permissions: id-token: write #This is required for requesting the JWT contents: read #This is required for actions/checkout - - steps: - - name: Download artifact from build job - uses: actions/download-artifact@v4 - with: - name: .net-app + + steps: + - name: Download artifact from build job + uses: actions/download-artifact@v4 + with: + name: .net-app - name: Login to Azure uses: azure/login@v2 @@ -54,12 +54,12 @@ jobs: client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_7D6201BE9CBA4102A67082079FA9D045 }} tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_E5F979726F2140149EE71D82B31CE225 }} subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_3F73E186A6F2462480840A28C77242B0 }} - - - name: Deploy to Azure Web App - id: deploy-to-webapp - uses: azure/webapps-deploy@v3 - with: - app-name: 'docs-next' - slot-name: 'Production' - package: . + + - name: Deploy to Azure Web App + id: deploy-to-webapp + uses: azure/webapps-deploy@v3 + with: + app-name: 'docs-next' + slot-name: 'Production' + package: . \ No newline at end of file diff --git a/LICENSE b/ClientApp/LICENSE similarity index 100% rename from LICENSE rename to ClientApp/LICENSE diff --git a/README.md b/ClientApp/README.md similarity index 100% rename from README.md rename to ClientApp/README.md diff --git a/astro.config.mjs b/ClientApp/astro.config.mjs similarity index 100% rename from astro.config.mjs rename to ClientApp/astro.config.mjs diff --git a/build/detect-duplicate-frontmatter.js b/ClientApp/build/detect-duplicate-frontmatter.js similarity index 100% rename from build/detect-duplicate-frontmatter.js rename to ClientApp/build/detect-duplicate-frontmatter.js diff --git a/build/local-build-script.mjs b/ClientApp/build/local-build-script.mjs similarity index 100% rename from build/local-build-script.mjs rename to ClientApp/build/local-build-script.mjs diff --git a/e2e-tests/package-lock.json b/ClientApp/e2e-tests/package-lock.json similarity index 100% rename from e2e-tests/package-lock.json rename to ClientApp/e2e-tests/package-lock.json diff --git a/e2e-tests/package.json b/ClientApp/e2e-tests/package.json similarity index 100% rename from e2e-tests/package.json rename to ClientApp/e2e-tests/package.json diff --git a/e2e-tests/playwright.config.ts b/ClientApp/e2e-tests/playwright.config.ts similarity index 100% rename from e2e-tests/playwright.config.ts rename to ClientApp/e2e-tests/playwright.config.ts diff --git a/e2e-tests/tests/index.spec.ts b/ClientApp/e2e-tests/tests/index.spec.ts similarity index 100% rename from e2e-tests/tests/index.spec.ts rename to ClientApp/e2e-tests/tests/index.spec.ts diff --git a/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-chromium-win32.png b/ClientApp/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-chromium-win32.png similarity index 100% rename from e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-chromium-win32.png rename to ClientApp/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-chromium-win32.png diff --git a/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-firefox-win32.png b/ClientApp/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-firefox-win32.png similarity index 100% rename from e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-firefox-win32.png rename to ClientApp/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-firefox-win32.png diff --git a/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-webkit-win32.png b/ClientApp/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-webkit-win32.png similarity index 100% rename from e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-webkit-win32.png rename to ClientApp/e2e-tests/tests/index.spec.ts-snapshots/Index-page-snapshot-test-1-webkit-win32.png diff --git a/package-lock.json b/ClientApp/package-lock.json similarity index 100% rename from package-lock.json rename to ClientApp/package-lock.json diff --git a/package.json b/ClientApp/package.json similarity index 100% rename from package.json rename to ClientApp/package.json diff --git a/public/favicon.ico b/ClientApp/public/favicon.ico similarity index 100% rename from public/favicon.ico rename to ClientApp/public/favicon.ico diff --git a/src/assets/404_Hugo.svg b/ClientApp/src/assets/404_Hugo.svg similarity index 100% rename from src/assets/404_Hugo.svg rename to ClientApp/src/assets/404_Hugo.svg diff --git a/src/assets/favicon.ico b/ClientApp/src/assets/favicon.ico similarity index 100% rename from src/assets/favicon.ico rename to ClientApp/src/assets/favicon.ico diff --git a/src/assets/logo.svg b/ClientApp/src/assets/logo.svg similarity index 99% rename from src/assets/logo.svg rename to ClientApp/src/assets/logo.svg index be0fc35e..4fe2cd63 100644 --- a/src/assets/logo.svg +++ b/ClientApp/src/assets/logo.svg @@ -1,8 +1,8 @@ -

{heading}

-
- { - links?.length - ? links.map(({ href, text }) => ( - -

{text}

-
- )) - : "" - } -
- +--- +interface Link { + text?: string; + href?: string; +} + +export interface Props { + links: Array; + heading: String; +} + +const { links = [], heading } = Astro.props; +const base = import.meta.env.BASE_URL; +--- + +
+

{heading}

+
+ { + links?.length + ? links.map(({ href, text }) => ( + +

{text}

+
+ )) + : "" + } +
+
diff --git a/src/components/Audience.astro b/ClientApp/src/components/Audience.astro similarity index 97% rename from src/components/Audience.astro rename to ClientApp/src/components/Audience.astro index 5820f994..61d6fb42 100644 --- a/src/components/Audience.astro +++ b/ClientApp/src/components/Audience.astro @@ -1,30 +1,30 @@ ---- -import { audienceTypes } from "../data/audience"; - -const { audience = [] } = audienceTypes; -const { heading } = Astro.props; ---- - -
-

{heading}

-
- { - audience?.length - ? audience.map(({ href, title, description, color }) => ( -
-
-

{title}

-

{description}

- -
-
-
- )) - : "" - } -
-
+--- +import { audienceTypes } from "../data/audience"; + +const { audience = [] } = audienceTypes; +const { heading } = Astro.props; +--- + +
+

{heading}

+
+ { + audience?.length + ? audience.map(({ href, title, description, color }) => ( +
+
+

{title}

+

{description}

+ +
+
+
+ )) + : "" + } +
+
diff --git a/src/components/CategoryLandingAdditionalContentCard.astro b/ClientApp/src/components/CategoryLandingAdditionalContentCard.astro similarity index 100% rename from src/components/CategoryLandingAdditionalContentCard.astro rename to ClientApp/src/components/CategoryLandingAdditionalContentCard.astro diff --git a/src/components/CategoryLandingCard.astro b/ClientApp/src/components/CategoryLandingCard.astro similarity index 100% rename from src/components/CategoryLandingCard.astro rename to ClientApp/src/components/CategoryLandingCard.astro diff --git a/src/components/CheckBox.tsx b/ClientApp/src/components/CheckBox.tsx similarity index 100% rename from src/components/CheckBox.tsx rename to ClientApp/src/components/CheckBox.tsx diff --git a/src/components/EditPage.astro b/ClientApp/src/components/EditPage.astro similarity index 95% rename from src/components/EditPage.astro rename to ClientApp/src/components/EditPage.astro index 54a7dd26..bf31ebc4 100644 --- a/src/components/EditPage.astro +++ b/ClientApp/src/components/EditPage.astro @@ -1,12 +1,12 @@ ---- -import { getEditHref } from "@utils/headerUtils"; - -export interface Props { - docurl: string; -} - -const { docurl } = Astro.props; -const href = getEditHref(docurl); ---- - - Edit +--- +import { getEditHref } from "@utils/headerUtils"; + +export interface Props { + docurl: string; +} + +const { docurl } = Astro.props; +const href = getEditHref(docurl); +--- + + Edit diff --git a/src/components/Feedback.astro b/ClientApp/src/components/Feedback.astro similarity index 95% rename from src/components/Feedback.astro rename to ClientApp/src/components/Feedback.astro index 9e495c8b..3fb0f740 100644 --- a/src/components/Feedback.astro +++ b/ClientApp/src/components/Feedback.astro @@ -1,14 +1,14 @@ ---- -import { getFeedbackHref } from "@utils/headerUtils"; - -export interface Props { - docurl: string; - title: string; - uid: string; -} - -const { docurl, title, uid } = Astro.props; -const href = getFeedbackHref(docurl, title, uid); ---- - - Feedback +--- +import { getFeedbackHref } from "@utils/headerUtils"; + +export interface Props { + docurl: string; + title: string; + uid: string; +} + +const { docurl, title, uid } = Astro.props; +const href = getFeedbackHref(docurl, title, uid); +--- + + Feedback diff --git a/src/components/Footer.tsx b/ClientApp/src/components/Footer.tsx similarity index 100% rename from src/components/Footer.tsx rename to ClientApp/src/components/Footer.tsx diff --git a/src/components/GradientBanner.astro b/ClientApp/src/components/GradientBanner.astro similarity index 96% rename from src/components/GradientBanner.astro rename to ClientApp/src/components/GradientBanner.astro index 7db01993..38c8397c 100644 --- a/src/components/GradientBanner.astro +++ b/ClientApp/src/components/GradientBanner.astro @@ -1,19 +1,19 @@ ---- -const tagline = - "The official documentation site for the SuperOffice Platform - the leading CRM & Customer Service available."; - ---- - -
-
-

docs.superoffice.com

-

{tagline}

-
-
- - +--- +const tagline = + "The official documentation site for the SuperOffice Platform - the leading CRM & Customer Service available."; + +--- + +
+
+

docs.superoffice.com

+

{tagline}

+
+
+ + diff --git a/src/components/Hamburger.astro b/ClientApp/src/components/Hamburger.astro similarity index 95% rename from src/components/Hamburger.astro rename to ClientApp/src/components/Hamburger.astro index a6ffcd09..5b701cc3 100644 --- a/src/components/Hamburger.astro +++ b/ClientApp/src/components/Hamburger.astro @@ -1,23 +1,23 @@ ---- - ---- - +--- + +--- + diff --git a/src/components/Header.astro b/ClientApp/src/components/Header.astro similarity index 97% rename from src/components/Header.astro rename to ClientApp/src/components/Header.astro index 38a08faf..67eb6a99 100644 --- a/src/components/Header.astro +++ b/ClientApp/src/components/Header.astro @@ -1,170 +1,170 @@ ---- -import { Icon } from "astro-icon/components"; -import Hamburger from "./Hamburger.astro"; -import logo from "@assets/logo.svg"; -import { trimSlash } from "@utils/headerUtils"; - -const base = import.meta.env.BASE_URL; - -interface Link { - text?: string; - href?: string; - ariaLabel?: string; - icon?: string; - links?: Link[]; -} - -export interface Props { - links?: Link[]; -} - -const { links = [] } = Astro.props; -const currentPath = `/${trimSlash(new URL(Astro.url).pathname)}`; ---- - - - - - - +--- +import { Icon } from "astro-icon/components"; +import Hamburger from "./Hamburger.astro"; +import logo from "@assets/logo.svg"; +import { trimSlash } from "@utils/headerUtils"; + +const base = import.meta.env.BASE_URL; + +interface Link { + text?: string; + href?: string; + ariaLabel?: string; + icon?: string; + links?: Link[]; +} + +export interface Props { + links?: Link[]; +} + +const { links = [] } = Astro.props; +const currentPath = `/${trimSlash(new URL(Astro.url).pathname)}`; +--- + + + + + + diff --git a/src/components/Hero.astro b/ClientApp/src/components/Hero.astro similarity index 96% rename from src/components/Hero.astro rename to ClientApp/src/components/Hero.astro index f8c0a60f..8521fd0e 100644 --- a/src/components/Hero.astro +++ b/ClientApp/src/components/Hero.astro @@ -1,41 +1,41 @@ ---- -import { Icon } from "astro-icon/components"; -import { heroItems } from "../data/navigation"; -import GradientBanner from "./GradientBanner.astro"; -const { links = [] } = heroItems; -const base = import.meta.env.BASE_URL; ---- - -
- - - -
+--- +import { Icon } from "astro-icon/components"; +import { heroItems } from "../data/navigation"; +import GradientBanner from "./GradientBanner.astro"; +const { links = [] } = heroItems; +const base = import.meta.env.BASE_URL; +--- + +
+ + + +
diff --git a/src/components/IconSelection.tsx b/ClientApp/src/components/IconSelection.tsx similarity index 100% rename from src/components/IconSelection.tsx rename to ClientApp/src/components/IconSelection.tsx diff --git a/src/components/LanguageSelect.tsx b/ClientApp/src/components/LanguageSelect.tsx similarity index 100% rename from src/components/LanguageSelect.tsx rename to ClientApp/src/components/LanguageSelect.tsx diff --git a/src/components/Link.astro b/ClientApp/src/components/Link.astro similarity index 100% rename from src/components/Link.astro rename to ClientApp/src/components/Link.astro diff --git a/src/components/OnThisArticle.tsx b/ClientApp/src/components/OnThisArticle.tsx similarity index 100% rename from src/components/OnThisArticle.tsx rename to ClientApp/src/components/OnThisArticle.tsx diff --git a/src/components/OnThisPage.astro b/ClientApp/src/components/OnThisPage.astro similarity index 96% rename from src/components/OnThisPage.astro rename to ClientApp/src/components/OnThisPage.astro index f2e0bcab..6ea6ff36 100644 --- a/src/components/OnThisPage.astro +++ b/ClientApp/src/components/OnThisPage.astro @@ -1,157 +1,157 @@ - + diff --git a/src/components/PageHeader.astro b/ClientApp/src/components/PageHeader.astro similarity index 96% rename from src/components/PageHeader.astro rename to ClientApp/src/components/PageHeader.astro index 407807a0..e550f9e1 100644 --- a/src/components/PageHeader.astro +++ b/ClientApp/src/components/PageHeader.astro @@ -1,77 +1,77 @@ ---- -import { Breadcrumbs } from "astro-breadcrumbs"; -import Feedback from "./Feedback.astro"; -import Edit from "./EditPage.astro"; -import Share from "./Share.astro"; -import LanguageSelect from "./LanguageSelect"; -const currentLocale = Astro.currentLocale; -const liveUrl = Astro.url.pathname; - -import "astro-breadcrumbs/breadcrumbs.css"; -const ariaLabel = "Breadcrumb navigation and social links"; - -export interface Props { - filePath?: string; - metadata?: { - title?: string; - description?: string; - uid?: string; - }; - isLearnCategoryPage: boolean; -} - -const { filePath, metadata, isLearnCategoryPage } = Astro.props; -const { title, description, uid } = metadata ?? {}; -const isHelp = uid?.split("-")[0] == "help"; -const filePathUrl = filePath?.replace("external-content/superoffice-docs/",""); - ---- - -
-
-
- - - - -
- -
-
+--- +import { Breadcrumbs } from "astro-breadcrumbs"; +import Feedback from "./Feedback.astro"; +import Edit from "./EditPage.astro"; +import Share from "./Share.astro"; +import LanguageSelect from "./LanguageSelect"; +const currentLocale = Astro.currentLocale; +const liveUrl = Astro.url.pathname; + +import "astro-breadcrumbs/breadcrumbs.css"; +const ariaLabel = "Breadcrumb navigation and social links"; + +export interface Props { + filePath?: string; + metadata?: { + title?: string; + description?: string; + uid?: string; + }; + isLearnCategoryPage: boolean; +} + +const { filePath, metadata, isLearnCategoryPage } = Astro.props; +const { title, description, uid } = metadata ?? {}; +const isHelp = uid?.split("-")[0] == "help"; +const filePathUrl = filePath?.replace("external-content/superoffice-docs/",""); + +--- + +
+
+
+ + + + +
+ +
+
diff --git a/src/components/QuickAccessShortcuts.astro b/ClientApp/src/components/QuickAccessShortcuts.astro similarity index 100% rename from src/components/QuickAccessShortcuts.astro rename to ClientApp/src/components/QuickAccessShortcuts.astro diff --git a/src/components/Search.astro b/ClientApp/src/components/Search.astro similarity index 100% rename from src/components/Search.astro rename to ClientApp/src/components/Search.astro diff --git a/src/components/SearchPage.tsx b/ClientApp/src/components/SearchPage.tsx similarity index 100% rename from src/components/SearchPage.tsx rename to ClientApp/src/components/SearchPage.tsx diff --git a/src/components/Share.astro b/ClientApp/src/components/Share.astro similarity index 97% rename from src/components/Share.astro rename to ClientApp/src/components/Share.astro index 443947da..b8eb67fc 100644 --- a/src/components/Share.astro +++ b/ClientApp/src/components/Share.astro @@ -1,65 +1,65 @@ ---- -import { TwitterShareButton, LinkedInShareButton, FacebookShareButton, EmailShareButton } from "astro-social-share"; - -const { description, title } = Astro.props; ---- - - - - - - +--- +import { TwitterShareButton, LinkedInShareButton, FacebookShareButton, EmailShareButton } from "astro-social-share"; + +const { description, title } = Astro.props; +--- + + + + + + diff --git a/src/components/SubCategoryCard.astro b/ClientApp/src/components/SubCategoryCard.astro similarity index 100% rename from src/components/SubCategoryCard.astro rename to ClientApp/src/components/SubCategoryCard.astro diff --git a/src/components/TableOfContentList.tsx b/ClientApp/src/components/TableOfContentList.tsx similarity index 100% rename from src/components/TableOfContentList.tsx rename to ClientApp/src/components/TableOfContentList.tsx diff --git a/src/components/YamlClass.astro b/ClientApp/src/components/YamlClass.astro similarity index 100% rename from src/components/YamlClass.astro rename to ClientApp/src/components/YamlClass.astro diff --git a/src/components/YamlItem.astro b/ClientApp/src/components/YamlItem.astro similarity index 100% rename from src/components/YamlItem.astro rename to ClientApp/src/components/YamlItem.astro diff --git a/src/components/YamlNamespace.astro b/ClientApp/src/components/YamlNamespace.astro similarity index 100% rename from src/components/YamlNamespace.astro rename to ClientApp/src/components/YamlNamespace.astro diff --git a/src/content.config.ts b/ClientApp/src/content.config.ts similarity index 100% rename from src/content.config.ts rename to ClientApp/src/content.config.ts diff --git a/src/content.schema.ts b/ClientApp/src/content.schema.ts similarity index 100% rename from src/content.schema.ts rename to ClientApp/src/content.schema.ts diff --git a/src/data/audience.ts b/ClientApp/src/data/audience.ts similarity index 97% rename from src/data/audience.ts rename to ClientApp/src/data/audience.ts index 0c2fbf69..c318ebf9 100644 --- a/src/data/audience.ts +++ b/ClientApp/src/data/audience.ts @@ -1,30 +1,30 @@ -const base = import.meta.env.BASE_URL; - -export const audienceTypes = { - audience: [ - { - "title": "SuperUser", - "description": "A person who has system administrative privilege's and special functional and data access rights for managing how SuperOffice behaves. The friend you need to tweak the system!", - "href": `${base}/en/learn/customization`, - "color": "bg-seaFoamGreen" - }, - { - "title": "Administrator", - "description": "A person who is primarily responsible for the setup, configuration, maintenance of operation of SuperOffice in an organization. The guy you call when shit hits the fan!", - "href": `${base}/en/onsite`, - "color": "bg-mistBlue" - }, - { - "title": "Consultant", - "description": "A person who works with companies to improve their use of SuperOffice to achieve business goals and an expert in all technical aspects of SuperOffice. Hired to provide advice, solve problems and increase efficiency.", - "href": `${base}/en/automation`, - "color": "bg-lightTealGray" - }, - { - "title": "Developer", - "description": "A software engineer responsible for the implementation of requirements for an application or integration, or provides advice (consultancy) as to how the an integration should be implemented using current industry trends.", - "href": `${base}/en/api`, - "color": "bg-deepTeal" - } - ], +const base = import.meta.env.BASE_URL; + +export const audienceTypes = { + audience: [ + { + "title": "SuperUser", + "description": "A person who has system administrative privilege's and special functional and data access rights for managing how SuperOffice behaves. The friend you need to tweak the system!", + "href": `${base}/en/learn/customization`, + "color": "bg-seaFoamGreen" + }, + { + "title": "Administrator", + "description": "A person who is primarily responsible for the setup, configuration, maintenance of operation of SuperOffice in an organization. The guy you call when shit hits the fan!", + "href": `${base}/en/onsite`, + "color": "bg-mistBlue" + }, + { + "title": "Consultant", + "description": "A person who works with companies to improve their use of SuperOffice to achieve business goals and an expert in all technical aspects of SuperOffice. Hired to provide advice, solve problems and increase efficiency.", + "href": `${base}/en/automation`, + "color": "bg-lightTealGray" + }, + { + "title": "Developer", + "description": "A software engineer responsible for the implementation of requirements for an application or integration, or provides advice (consultancy) as to how the an integration should be implemented using current industry trends.", + "href": `${base}/en/api`, + "color": "bg-deepTeal" + } + ], }; \ No newline at end of file diff --git a/src/data/navigation.ts b/ClientApp/src/data/navigation.ts similarity index 96% rename from src/data/navigation.ts rename to ClientApp/src/data/navigation.ts index 0952c6f8..cb008b1a 100644 --- a/src/data/navigation.ts +++ b/ClientApp/src/data/navigation.ts @@ -1,276 +1,276 @@ -const base = import.meta.env.BASE_URL; - - -export const headerData = { - links: [ - { - text: 'Learn', - href: "/en/learn" - }, - { - text: 'Areas', - links: [ - { - text: 'Company', - href: '/en/company', - }, - { - text: 'Contact', - href: '/en/contact', - }, - { - text: 'Diary', - href: '/en/diary', - }, - { - text: 'Document', - href: '/en/document', - }, - { - text: 'Email', - href: '/en/email', - }, - { - text: 'Project', - href: '/en/project', - }, - { - text: 'Request', - href: '/en/request', - }, - { - text: 'Sale', - href: '/en/sale', - }, - ], - }, - { - text: 'CRM Online', - href: '/en/online', - }, - { - text: 'CRM Onsite', - href: '/en/onsite', - }, - { - text: 'Developer Guide', - links: [ - { - text: 'Overview', - href: '/en/api', - }, - { - text: 'Introduction to APIs', - href: '/en/api/overview', - }, - { - text: 'Automaton / CRMScript', - href: '/en/automation', - }, - { - text: 'Configurable screens (Sales)', - href: '/en/ui/screen-designer/learn', - }, - { - text: 'Custom screens (Service)', - href: '/en/ui/blogic/custom-screens', - }, - { - text: 'Database overview', - href: '/en/database/getting-started', - }, - { - text: 'Developer Portal', - href: '/en/developer-portal', - }, - { - text: 'Search APIs', - href: '/en/api/netserver/search', - }, - { - text: 'Webhooks', - href: '/en/automation/webhook', - }, - { - text: 'Web Services', - href: '/en/api/netserver/web-services', - }, - ], - }, - ], -}; - -export const heroItems = { - links: [ - { - title: "Learn", - description: "Product knowledge-base to learn concepts, features and solve issues.", - icon: "mdi:learn-outline", - url: "/en/learn" - }, - { - title: "CRM Online", - description: "Learn all about SuperOffice CRM offering for the cloud.", - icon: "fluent:phone-laptop-32-regular", - url: "/en/online" - }, - { - title: "CRM Onsite", - description: "Learn how to install SuperOffice in your on premise organization.", - icon: "mdi:business", - url: "/en/onsite" - }, - { - title: "Release Notes", - description: "Contains the history of product and API changes.", - icon: "material-symbols-light:release-alert-outline", - url: "/release-notes" - }, - { - title: "SuperOffice APIs", - description: "Introduction to all extensibility and integration points.", - icon: "material-symbols-light:api", - url: "/en/api" - }, - { - title: "Developer Portal", - description: "Learn how to create online applications.", - icon: "material-symbols-light:developer-mode-tv-outline", - url: "/en/developer-portal" - }, - { - title: "Customer Service", - description: "Learn all about SuperOffice Service.", - icon: "material-symbols-light:support-agent-outline", - url: "/en/service" - }, - { - title: "Email and communication", - description: "Great customer relations start with great communication.", - icon: "mdi:email-outline", - url: "/en/email" - } - ], -}; - -export const areasOfInterest = { - "links": [ - { "text": "Admin", "href": "/en/admin/overview" }, - { "text": "Artificial Intelligence", "href": "/en/ai" }, - { "text": "Automation", "href": "/en/automation" }, - { "text": "Company", "href": "/en/company" }, - { "text": "Contact", "href": "/en/contact" }, - { "text": "CRMScript", "href": "/en/automation/crmscript" }, - { "text": "Customer Service", "href": "/en/service" }, - { "text": "Database Mirroring", "href": "/en/online/mirroring/overview" }, - { "text": "Diary", "href": "/en/diary" }, - { "text": "Document", "href": "/en/document" }, - { "text": "Globalization", "href": "/en/globalization-and-localization" }, - { "text": "Mobile", "href": "/en/mobile" }, - { "text": "Project", "href": "/en/project" }, - { "text": "Request Management", "href": "/en/request" }, - { "text": "Sale", "href": "/en/sale" }, - { "text": "Security", "href": "/en/security" }, - { "text": "Video Meetings", "href": "/en/diary/video-meeting" }, - { "text": "WebTools", "href": "/en/document/webtools" } - ] -}; - - -export const quickAccessShortcuts = { - cards: [ - { - title : "Getting Started", - subLinks : [ - { - title : "System requirements", - link : `${base}/en/onsite/requirements` - }, - { - title : "Security concerns", - link : `${base}/en/onsite/security` - }, - { - title : "Onsite topics", - link : `${base}/en/onsite` - }, - { - title : "Online migration", - link : `${base}/en/online/migrate` - } - ] - }, - { - title : "Installation", - subLinks : [ - { - title : "CRM Server", - link : `${base}/en/onsite/install/server` - }, - { - title : "Web applications", - link : `${base}/en/onsite/install/web-client` - }, - { - title : "Web tools", - link : `${base}/en/document/webtools` - }, - { - title : "Mobile application", - link : `${base}/en/mobile/overview` - } - ] - }, - { - title : "Configuration", - subLinks : [ - { - title : "NetServer Configuration", - link : `${base}/en/api/netserver/config` - }, - { - title : "Document template variables", - link : `${base}/en/document/templates/variables` - }, - { - title : "Service reply templates", - link : `${base}/en/request/reply-templates` - }, - { - title : "Batch task service", - link : `${base}/en/onsite/batch-task-server` - }, - { - title : "INI files", - link : `${base}/en/onsite/config` - } - ] - }, - { - title : "Online development", - subLinks : [ - { - title : "Register online developer account", - link : `${base}/en/onsite/requirements` - }, - { - title : "Developer portal", - link : `${base}/en/onsite/security` - }, - ] - }, - ] -}; - -export const footerData = { - links: [ - { text: 'SuperOffice', href: 'https://www.superoffice.com/' }, - { text: 'Community', href: 'https://community.superoffice.com' }, - { text: 'Release Notes', href: `${base}/release-notes` }, - { text: 'Privacy', href: 'https://www.superoffice.com/company/privacy/' }, - { text: 'Site feedback', href: 'https://github.com/SuperOfficeDocs/feedback/issues/new?title=Feedback%20for%20SuperOffice%20Docs&body=%0A%0A%5BEnter%20feedback%20here%5D%0A%0A%0A---%0A%23%23%23%23%20Document%20Details%0A%0A%E2%9A%A0%20*Do%20not%20edit%20this%20section.%20It%20is%20required%20for%20docs.superOffice.com%20%E2%9E%9F%20Docs%20Team%20processing.*%0A%0A*%20Content%20Source%3A%20%5BSuperOffice%20Docs%5D(https%3A%2F%2Fdocs.superoffice.com)'}, - { text: 'About', href: `${base}/about` }, - { text: 'Contribute', href:`${base}/contribute/overview`}, - { text: 'Back to top', href:'#'} - ], -}; +const base = import.meta.env.BASE_URL; + + +export const headerData = { + links: [ + { + text: 'Learn', + href: "/en/learn" + }, + { + text: 'Areas', + links: [ + { + text: 'Company', + href: '/en/company', + }, + { + text: 'Contact', + href: '/en/contact', + }, + { + text: 'Diary', + href: '/en/diary', + }, + { + text: 'Document', + href: '/en/document', + }, + { + text: 'Email', + href: '/en/email', + }, + { + text: 'Project', + href: '/en/project', + }, + { + text: 'Request', + href: '/en/request', + }, + { + text: 'Sale', + href: '/en/sale', + }, + ], + }, + { + text: 'CRM Online', + href: '/en/online', + }, + { + text: 'CRM Onsite', + href: '/en/onsite', + }, + { + text: 'Developer Guide', + links: [ + { + text: 'Overview', + href: '/en/api', + }, + { + text: 'Introduction to APIs', + href: '/en/api/overview', + }, + { + text: 'Automaton / CRMScript', + href: '/en/automation', + }, + { + text: 'Configurable screens (Sales)', + href: '/en/ui/screen-designer/learn', + }, + { + text: 'Custom screens (Service)', + href: '/en/ui/blogic/custom-screens', + }, + { + text: 'Database overview', + href: '/en/database/getting-started', + }, + { + text: 'Developer Portal', + href: '/en/developer-portal', + }, + { + text: 'Search APIs', + href: '/en/api/netserver/search', + }, + { + text: 'Webhooks', + href: '/en/automation/webhook', + }, + { + text: 'Web Services', + href: '/en/api/netserver/web-services', + }, + ], + }, + ], +}; + +export const heroItems = { + links: [ + { + title: "Learn", + description: "Product knowledge-base to learn concepts, features and solve issues.", + icon: "mdi:learn-outline", + url: "/en/learn" + }, + { + title: "CRM Online", + description: "Learn all about SuperOffice CRM offering for the cloud.", + icon: "fluent:phone-laptop-32-regular", + url: "/en/online" + }, + { + title: "CRM Onsite", + description: "Learn how to install SuperOffice in your on premise organization.", + icon: "mdi:business", + url: "/en/onsite" + }, + { + title: "Release Notes", + description: "Contains the history of product and API changes.", + icon: "material-symbols-light:release-alert-outline", + url: "/release-notes" + }, + { + title: "SuperOffice APIs", + description: "Introduction to all extensibility and integration points.", + icon: "material-symbols-light:api", + url: "/en/api" + }, + { + title: "Developer Portal", + description: "Learn how to create online applications.", + icon: "material-symbols-light:developer-mode-tv-outline", + url: "/en/developer-portal" + }, + { + title: "Customer Service", + description: "Learn all about SuperOffice Service.", + icon: "material-symbols-light:support-agent-outline", + url: "/en/service" + }, + { + title: "Email and communication", + description: "Great customer relations start with great communication.", + icon: "mdi:email-outline", + url: "/en/email" + } + ], +}; + +export const areasOfInterest = { + "links": [ + { "text": "Admin", "href": "/en/admin/overview" }, + { "text": "Artificial Intelligence", "href": "/en/ai" }, + { "text": "Automation", "href": "/en/automation" }, + { "text": "Company", "href": "/en/company" }, + { "text": "Contact", "href": "/en/contact" }, + { "text": "CRMScript", "href": "/en/automation/crmscript" }, + { "text": "Customer Service", "href": "/en/service" }, + { "text": "Database Mirroring", "href": "/en/online/mirroring/overview" }, + { "text": "Diary", "href": "/en/diary" }, + { "text": "Document", "href": "/en/document" }, + { "text": "Globalization", "href": "/en/globalization-and-localization" }, + { "text": "Mobile", "href": "/en/mobile" }, + { "text": "Project", "href": "/en/project" }, + { "text": "Request Management", "href": "/en/request" }, + { "text": "Sale", "href": "/en/sale" }, + { "text": "Security", "href": "/en/security" }, + { "text": "Video Meetings", "href": "/en/diary/video-meeting" }, + { "text": "WebTools", "href": "/en/document/webtools" } + ] +}; + + +export const quickAccessShortcuts = { + cards: [ + { + title : "Getting Started", + subLinks : [ + { + title : "System requirements", + link : `${base}/en/onsite/requirements` + }, + { + title : "Security concerns", + link : `${base}/en/onsite/security` + }, + { + title : "Onsite topics", + link : `${base}/en/onsite` + }, + { + title : "Online migration", + link : `${base}/en/online/migrate` + } + ] + }, + { + title : "Installation", + subLinks : [ + { + title : "CRM Server", + link : `${base}/en/onsite/install/server` + }, + { + title : "Web applications", + link : `${base}/en/onsite/install/web-client` + }, + { + title : "Web tools", + link : `${base}/en/document/webtools` + }, + { + title : "Mobile application", + link : `${base}/en/mobile/overview` + } + ] + }, + { + title : "Configuration", + subLinks : [ + { + title : "NetServer Configuration", + link : `${base}/en/api/netserver/config` + }, + { + title : "Document template variables", + link : `${base}/en/document/templates/variables` + }, + { + title : "Service reply templates", + link : `${base}/en/request/reply-templates` + }, + { + title : "Batch task service", + link : `${base}/en/onsite/batch-task-server` + }, + { + title : "INI files", + link : `${base}/en/onsite/config` + } + ] + }, + { + title : "Online development", + subLinks : [ + { + title : "Register online developer account", + link : `${base}/en/onsite/requirements` + }, + { + title : "Developer portal", + link : `${base}/en/onsite/security` + }, + ] + }, + ] +}; + +export const footerData = { + links: [ + { text: 'SuperOffice', href: 'https://www.superoffice.com/' }, + { text: 'Community', href: 'https://community.superoffice.com' }, + { text: 'Release Notes', href: `${base}/release-notes` }, + { text: 'Privacy', href: 'https://www.superoffice.com/company/privacy/' }, + { text: 'Site feedback', href: 'https://github.com/SuperOfficeDocs/feedback/issues/new?title=Feedback%20for%20SuperOffice%20Docs&body=%0A%0A%5BEnter%20feedback%20here%5D%0A%0A%0A---%0A%23%23%23%23%20Document%20Details%0A%0A%E2%9A%A0%20*Do%20not%20edit%20this%20section.%20It%20is%20required%20for%20docs.superOffice.com%20%E2%9E%9F%20Docs%20Team%20processing.*%0A%0A*%20Content%20Source%3A%20%5BSuperOffice%20Docs%5D(https%3A%2F%2Fdocs.superoffice.com)'}, + { text: 'About', href: `${base}/about` }, + { text: 'Contribute', href:`${base}/contribute/overview`}, + { text: 'Back to top', href:'#'} + ], +}; diff --git a/src/env.d.ts b/ClientApp/src/env.d.ts similarity index 100% rename from src/env.d.ts rename to ClientApp/src/env.d.ts diff --git a/src/layouts/Base.astro b/ClientApp/src/layouts/Base.astro similarity index 96% rename from src/layouts/Base.astro rename to ClientApp/src/layouts/Base.astro index 6da73419..35b60f67 100644 --- a/src/layouts/Base.astro +++ b/ClientApp/src/layouts/Base.astro @@ -1,43 +1,43 @@ ---- -import favIcon from "@assets/favicon.ico"; -import Header from "@components/Header.astro"; -import Footer from "@components/Footer"; -import { footerData, headerData } from "../data/navigation"; -import { ClientRouter } from "astro:transitions"; -import "@styles/main.css"; - -export interface Props { - metadata: { - title: string; - }; - lang: string; - scroll?: boolean; -} - -const { metadata, lang = "en", scroll = true } = Astro.props; ---- - - - - - - - - - - {metadata.title} - - - -
-
-
- -
-
-
- - +--- +import favIcon from "@assets/favicon.ico"; +import Header from "@components/Header.astro"; +import Footer from "@components/Footer"; +import { footerData, headerData } from "../data/navigation"; +import { ClientRouter } from "astro:transitions"; +import "@styles/main.css"; + +export interface Props { + metadata: { + title: string; + }; + lang: string; + scroll?: boolean; +} + +const { metadata, lang = "en", scroll = true } = Astro.props; +--- + + + + + + + + + + {metadata.title} + + + +
+
+
+ +
+
+
+ + diff --git a/src/layouts/CategoryLandingLayout.astro b/ClientApp/src/layouts/CategoryLandingLayout.astro similarity index 100% rename from src/layouts/CategoryLandingLayout.astro rename to ClientApp/src/layouts/CategoryLandingLayout.astro diff --git a/src/layouts/ContentLayout.astro b/ClientApp/src/layouts/ContentLayout.astro similarity index 96% rename from src/layouts/ContentLayout.astro rename to ClientApp/src/layouts/ContentLayout.astro index 08237cd1..50beecf6 100644 --- a/src/layouts/ContentLayout.astro +++ b/ClientApp/src/layouts/ContentLayout.astro @@ -1,81 +1,81 @@ ---- -import { type CollectionEntry, type DataEntryMap } from "astro:content"; -import type { TocData } from "~/types/TableOfContentTypes"; -import type { Heading } from "~/types/OnThisArticleTypes"; -import PageHeader from "@components/PageHeader.astro"; -import OnThisArticle from "@components/OnThisArticle"; -import TableOfContentList from "@components/TableOfContentList"; -import Base from "./Base.astro"; - -export interface Props { - /** Accept an entry from *any* collection our site defines */ - entry?: CollectionEntry; - toc: TocData; - isLearn?: boolean; - language?: string; - TOCBasePath?: string; - htmlEntry?: any; - headings: Heading[]; -} - -const { - entry, - toc, - isLearn = false, - language = "en", - TOCBasePath, - htmlEntry, - headings, -} = Astro.props; - -const { data: frontmatter, filePath, collection, id } = entry ?? htmlEntry; - -// Determine TOC path: use fixed segment for release notes, if a TOCBasePath is available, use it as TOCPath, otherwise build from language + category -const getTOCPath = (): string => { - if (TOCBasePath != undefined) return TOCBasePath; - else return `${language}/${isLearn ? "learn" : id.split("/")[0]}`; -}; - -const TOCPath = getTOCPath(); ---- - - -
- -
-
-
- - -
- -
-
- -
- +--- +import { type CollectionEntry, type DataEntryMap } from "astro:content"; +import type { TocData } from "~/types/TableOfContentTypes"; +import type { Heading } from "~/types/OnThisArticleTypes"; +import PageHeader from "@components/PageHeader.astro"; +import OnThisArticle from "@components/OnThisArticle"; +import TableOfContentList from "@components/TableOfContentList"; +import Base from "./Base.astro"; + +export interface Props { + /** Accept an entry from *any* collection our site defines */ + entry?: CollectionEntry; + toc: TocData; + isLearn?: boolean; + language?: string; + TOCBasePath?: string; + htmlEntry?: any; + headings: Heading[]; +} + +const { + entry, + toc, + isLearn = false, + language = "en", + TOCBasePath, + htmlEntry, + headings, +} = Astro.props; + +const { data: frontmatter, filePath, collection, id } = entry ?? htmlEntry; + +// Determine TOC path: use fixed segment for release notes, if a TOCBasePath is available, use it as TOCPath, otherwise build from language + category +const getTOCPath = (): string => { + if (TOCBasePath != undefined) return TOCBasePath; + else return `${language}/${isLearn ? "learn" : id.split("/")[0]}`; +}; + +const TOCPath = getTOCPath(); +--- + + +
+ +
+
+
+ + +
+ +
+
+ +
+ diff --git a/src/layouts/SubCategoryLandingLayout.astro b/ClientApp/src/layouts/SubCategoryLandingLayout.astro similarity index 100% rename from src/layouts/SubCategoryLandingLayout.astro rename to ClientApp/src/layouts/SubCategoryLandingLayout.astro diff --git a/src/layouts/YamlLayoutPage.astro b/ClientApp/src/layouts/YamlLayoutPage.astro similarity index 100% rename from src/layouts/YamlLayoutPage.astro rename to ClientApp/src/layouts/YamlLayoutPage.astro diff --git a/src/media/contribute/add-suggestion-icon.png b/ClientApp/src/media/contribute/add-suggestion-icon.png similarity index 100% rename from src/media/contribute/add-suggestion-icon.png rename to ClientApp/src/media/contribute/add-suggestion-icon.png diff --git a/src/media/contribute/checkout-pr.png b/ClientApp/src/media/contribute/checkout-pr.png similarity index 100% rename from src/media/contribute/checkout-pr.png rename to ClientApp/src/media/contribute/checkout-pr.png diff --git a/src/media/contribute/comment.png b/ClientApp/src/media/contribute/comment.png similarity index 100% rename from src/media/contribute/comment.png rename to ClientApp/src/media/contribute/comment.png diff --git a/src/media/contribute/commit-suggestion.png b/ClientApp/src/media/contribute/commit-suggestion.png similarity index 100% rename from src/media/contribute/commit-suggestion.png rename to ClientApp/src/media/contribute/commit-suggestion.png diff --git a/src/media/contribute/commit-to-patch.png b/ClientApp/src/media/contribute/commit-to-patch.png similarity index 100% rename from src/media/contribute/commit-to-patch.png rename to ClientApp/src/media/contribute/commit-to-patch.png diff --git a/src/media/contribute/conversation-view-changes.png b/ClientApp/src/media/contribute/conversation-view-changes.png similarity index 100% rename from src/media/contribute/conversation-view-changes.png rename to ClientApp/src/media/contribute/conversation-view-changes.png diff --git a/src/media/contribute/copy-branch-name.png b/ClientApp/src/media/contribute/copy-branch-name.png similarity index 100% rename from src/media/contribute/copy-branch-name.png rename to ClientApp/src/media/contribute/copy-branch-name.png diff --git a/src/media/contribute/copy-path.png b/ClientApp/src/media/contribute/copy-path.png similarity index 100% rename from src/media/contribute/copy-path.png rename to ClientApp/src/media/contribute/copy-path.png diff --git a/src/media/contribute/create-issue-on-github.png b/ClientApp/src/media/contribute/create-issue-on-github.png similarity index 100% rename from src/media/contribute/create-issue-on-github.png rename to ClientApp/src/media/contribute/create-issue-on-github.png diff --git a/src/media/contribute/create-patch.png b/ClientApp/src/media/contribute/create-patch.png similarity index 100% rename from src/media/contribute/create-patch.png rename to ClientApp/src/media/contribute/create-patch.png diff --git a/src/media/contribute/create-pull-request-on-github.png b/ClientApp/src/media/contribute/create-pull-request-on-github.png similarity index 100% rename from src/media/contribute/create-pull-request-on-github.png rename to ClientApp/src/media/contribute/create-pull-request-on-github.png diff --git a/src/media/contribute/edit-article-on-github.png b/ClientApp/src/media/contribute/edit-article-on-github.png similarity index 100% rename from src/media/contribute/edit-article-on-github.png rename to ClientApp/src/media/contribute/edit-article-on-github.png diff --git a/src/media/contribute/edit-file-in-pr.png b/ClientApp/src/media/contribute/edit-file-in-pr.png similarity index 100% rename from src/media/contribute/edit-file-in-pr.png rename to ClientApp/src/media/contribute/edit-file-in-pr.png diff --git a/src/media/contribute/edit-in-patch.png b/ClientApp/src/media/contribute/edit-in-patch.png similarity index 100% rename from src/media/contribute/edit-in-patch.png rename to ClientApp/src/media/contribute/edit-in-patch.png diff --git a/src/media/contribute/edit-markdown-on-github.png b/ClientApp/src/media/contribute/edit-markdown-on-github.png similarity index 100% rename from src/media/contribute/edit-markdown-on-github.png rename to ClientApp/src/media/contribute/edit-markdown-on-github.png diff --git a/src/media/contribute/enter-suggestion.png b/ClientApp/src/media/contribute/enter-suggestion.png similarity index 100% rename from src/media/contribute/enter-suggestion.png rename to ClientApp/src/media/contribute/enter-suggestion.png diff --git a/src/media/contribute/fork-repo-on-github.png b/ClientApp/src/media/contribute/fork-repo-on-github.png similarity index 100% rename from src/media/contribute/fork-repo-on-github.png rename to ClientApp/src/media/contribute/fork-repo-on-github.png diff --git a/src/media/contribute/gitbash-pull.png b/ClientApp/src/media/contribute/gitbash-pull.png similarity index 100% rename from src/media/contribute/gitbash-pull.png rename to ClientApp/src/media/contribute/gitbash-pull.png diff --git a/src/media/contribute/github-clone.png b/ClientApp/src/media/contribute/github-clone.png similarity index 100% rename from src/media/contribute/github-clone.png rename to ClientApp/src/media/contribute/github-clone.png diff --git a/src/media/contribute/github-create-pr.png b/ClientApp/src/media/contribute/github-create-pr.png similarity index 100% rename from src/media/contribute/github-create-pr.png rename to ClientApp/src/media/contribute/github-create-pr.png diff --git a/src/media/contribute/github-open-pr.png b/ClientApp/src/media/contribute/github-open-pr.png similarity index 100% rename from src/media/contribute/github-open-pr.png rename to ClientApp/src/media/contribute/github-open-pr.png diff --git a/src/media/contribute/how-to-create-tutorial-a-overview.png b/ClientApp/src/media/contribute/how-to-create-tutorial-a-overview.png similarity index 100% rename from src/media/contribute/how-to-create-tutorial-a-overview.png rename to ClientApp/src/media/contribute/how-to-create-tutorial-a-overview.png diff --git a/src/media/contribute/line-comment.png b/ClientApp/src/media/contribute/line-comment.png similarity index 100% rename from src/media/contribute/line-comment.png rename to ClientApp/src/media/contribute/line-comment.png diff --git a/src/media/contribute/mdlint-list-hover.png b/ClientApp/src/media/contribute/mdlint-list-hover.png similarity index 100% rename from src/media/contribute/mdlint-list-hover.png rename to ClientApp/src/media/contribute/mdlint-list-hover.png diff --git a/src/media/contribute/mdlint-list-quickfix.png b/ClientApp/src/media/contribute/mdlint-list-quickfix.png similarity index 100% rename from src/media/contribute/mdlint-list-quickfix.png rename to ClientApp/src/media/contribute/mdlint-list-quickfix.png diff --git a/src/media/contribute/mdlint-list-warning.png b/ClientApp/src/media/contribute/mdlint-list-warning.png similarity index 100% rename from src/media/contribute/mdlint-list-warning.png rename to ClientApp/src/media/contribute/mdlint-list-warning.png diff --git a/src/media/contribute/plain-action-buttons.PNG b/ClientApp/src/media/contribute/plain-action-buttons.PNG similarity index 100% rename from src/media/contribute/plain-action-buttons.PNG rename to ClientApp/src/media/contribute/plain-action-buttons.PNG diff --git a/src/media/contribute/preview-suggestion.png b/ClientApp/src/media/contribute/preview-suggestion.png similarity index 100% rename from src/media/contribute/preview-suggestion.png rename to ClientApp/src/media/contribute/preview-suggestion.png diff --git a/src/media/contribute/propose-changes-on-github.png b/ClientApp/src/media/contribute/propose-changes-on-github.png similarity index 100% rename from src/media/contribute/propose-changes-on-github.png rename to ClientApp/src/media/contribute/propose-changes-on-github.png diff --git a/src/media/contribute/review-changes.png b/ClientApp/src/media/contribute/review-changes.png similarity index 100% rename from src/media/contribute/review-changes.png rename to ClientApp/src/media/contribute/review-changes.png diff --git a/src/media/contribute/select-branch.png b/ClientApp/src/media/contribute/select-branch.png similarity index 100% rename from src/media/contribute/select-branch.png rename to ClientApp/src/media/contribute/select-branch.png diff --git a/src/media/contribute/submit-review.png b/ClientApp/src/media/contribute/submit-review.png similarity index 100% rename from src/media/contribute/submit-review.png rename to ClientApp/src/media/contribute/submit-review.png diff --git a/src/media/contribute/vscode-branch-menu.png b/ClientApp/src/media/contribute/vscode-branch-menu.png similarity index 100% rename from src/media/contribute/vscode-branch-menu.png rename to ClientApp/src/media/contribute/vscode-branch-menu.png diff --git a/src/media/contribute/vscode-branches.png b/ClientApp/src/media/contribute/vscode-branches.png similarity index 100% rename from src/media/contribute/vscode-branches.png rename to ClientApp/src/media/contribute/vscode-branches.png diff --git a/src/media/contribute/vscode-clone.png b/ClientApp/src/media/contribute/vscode-clone.png similarity index 100% rename from src/media/contribute/vscode-clone.png rename to ClientApp/src/media/contribute/vscode-clone.png diff --git a/src/media/contribute/vscode-commit-menu.png b/ClientApp/src/media/contribute/vscode-commit-menu.png similarity index 100% rename from src/media/contribute/vscode-commit-menu.png rename to ClientApp/src/media/contribute/vscode-commit-menu.png diff --git a/src/media/contribute/vscode-confirm-commit.png b/ClientApp/src/media/contribute/vscode-confirm-commit.png similarity index 100% rename from src/media/contribute/vscode-confirm-commit.png rename to ClientApp/src/media/contribute/vscode-confirm-commit.png diff --git a/src/media/contribute/vscode-create-branch.png b/ClientApp/src/media/contribute/vscode-create-branch.png similarity index 100% rename from src/media/contribute/vscode-create-branch.png rename to ClientApp/src/media/contribute/vscode-create-branch.png diff --git a/src/media/contribute/vscode-push-commit.png b/ClientApp/src/media/contribute/vscode-push-commit.png similarity index 100% rename from src/media/contribute/vscode-push-commit.png rename to ClientApp/src/media/contribute/vscode-push-commit.png diff --git a/src/media/contribute/vscode-push.png b/ClientApp/src/media/contribute/vscode-push.png similarity index 100% rename from src/media/contribute/vscode-push.png rename to ClientApp/src/media/contribute/vscode-push.png diff --git a/src/media/contribute/vscode-source-control-menu.png b/ClientApp/src/media/contribute/vscode-source-control-menu.png similarity index 100% rename from src/media/contribute/vscode-source-control-menu.png rename to ClientApp/src/media/contribute/vscode-source-control-menu.png diff --git a/src/media/contribute/vscode-stage-all-changes.png b/ClientApp/src/media/contribute/vscode-stage-all-changes.png similarity index 100% rename from src/media/contribute/vscode-stage-all-changes.png rename to ClientApp/src/media/contribute/vscode-stage-all-changes.png diff --git a/src/media/contribute/vscode-stash.png b/ClientApp/src/media/contribute/vscode-stash.png similarity index 100% rename from src/media/contribute/vscode-stash.png rename to ClientApp/src/media/contribute/vscode-stash.png diff --git a/src/media/contribute/vscode-switch-branch.png b/ClientApp/src/media/contribute/vscode-switch-branch.png similarity index 100% rename from src/media/contribute/vscode-switch-branch.png rename to ClientApp/src/media/contribute/vscode-switch-branch.png diff --git a/src/media/contribute/vscode-sync-changes.png b/ClientApp/src/media/contribute/vscode-sync-changes.png similarity index 100% rename from src/media/contribute/vscode-sync-changes.png rename to ClientApp/src/media/contribute/vscode-sync-changes.png diff --git a/src/media/edit-action-button.png b/ClientApp/src/media/edit-action-button.png similarity index 100% rename from src/media/edit-action-button.png rename to ClientApp/src/media/edit-action-button.png diff --git a/src/media/feedback-action-button.png b/ClientApp/src/media/feedback-action-button.png similarity index 100% rename from src/media/feedback-action-button.png rename to ClientApp/src/media/feedback-action-button.png diff --git a/src/media/github-superoffice-docs.png b/ClientApp/src/media/github-superoffice-docs.png similarity index 100% rename from src/media/github-superoffice-docs.png rename to ClientApp/src/media/github-superoffice-docs.png diff --git a/src/media/mobile/mobile-add-email-address.png b/ClientApp/src/media/mobile/mobile-add-email-address.png similarity index 100% rename from src/media/mobile/mobile-add-email-address.png rename to ClientApp/src/media/mobile/mobile-add-email-address.png diff --git a/src/media/mobile/mobile-add-email-as-attendee.png b/ClientApp/src/media/mobile/mobile-add-email-as-attendee.png similarity index 100% rename from src/media/mobile/mobile-add-email-as-attendee.png rename to ClientApp/src/media/mobile/mobile-add-email-as-attendee.png diff --git a/src/media/mobile/mobile-crm-follow-up-description-to-title-agenda-internal-notes.png b/ClientApp/src/media/mobile/mobile-crm-follow-up-description-to-title-agenda-internal-notes.png similarity index 100% rename from src/media/mobile/mobile-crm-follow-up-description-to-title-agenda-internal-notes.png rename to ClientApp/src/media/mobile/mobile-crm-follow-up-description-to-title-agenda-internal-notes.png diff --git a/src/media/mobile/mobile-crm-follow-up-show-links.png b/ClientApp/src/media/mobile/mobile-crm-follow-up-show-links.png similarity index 100% rename from src/media/mobile/mobile-crm-follow-up-show-links.png rename to ClientApp/src/media/mobile/mobile-crm-follow-up-show-links.png diff --git a/src/media/mobile/mobile-crm-gif-prev-02.gif b/ClientApp/src/media/mobile/mobile-crm-gif-prev-02.gif similarity index 100% rename from src/media/mobile/mobile-crm-gif-prev-02.gif rename to ClientApp/src/media/mobile/mobile-crm-gif-prev-02.gif diff --git a/src/media/share-action-button.png b/ClientApp/src/media/share-action-button.png similarity index 100% rename from src/media/share-action-button.png rename to ClientApp/src/media/share-action-button.png diff --git a/src/pages/404.astro b/ClientApp/src/pages/404.astro similarity index 97% rename from src/pages/404.astro rename to ClientApp/src/pages/404.astro index 5660b10c..b1442ba8 100644 --- a/src/pages/404.astro +++ b/ClientApp/src/pages/404.astro @@ -1,33 +1,33 @@ ---- -import Layout from "@layouts/Base.astro"; -import GradientBanner from "@components/GradientBanner.astro"; -import { Image } from "astro:assets"; -import hugoImg from "@assets/404_Hugo.svg"; -const title = `Error 404`; -const base = import.meta.env.BASE_URL; -const liveUrl = Astro.url.toString(); ---- - - -
- -
- Hugo - the SuperOffice owl mascot -
-
-
-

- - 404! -

-

- Sorry, the page you requested was not found. -

-

{liveUrl}

- - Back to homepage - -
-
-
-
+--- +import Layout from "@layouts/Base.astro"; +import GradientBanner from "@components/GradientBanner.astro"; +import { Image } from "astro:assets"; +import hugoImg from "@assets/404_Hugo.svg"; +const title = `Error 404`; +const base = import.meta.env.BASE_URL; +const liveUrl = Astro.url.toString(); +--- + + +
+ +
+ Hugo - the SuperOffice owl mascot +
+
+
+

+ + 404! +

+

+ Sorry, the page you requested was not found. +

+

{liveUrl}

+ + Back to homepage + +
+
+
+
diff --git a/src/pages/_migrate.md b/ClientApp/src/pages/_migrate.md similarity index 93% rename from src/pages/_migrate.md rename to ClientApp/src/pages/_migrate.md index a2345e66..86109cd1 100644 --- a/src/pages/_migrate.md +++ b/ClientApp/src/pages/_migrate.md @@ -1,53 +1,53 @@ -# Hacks for migrating Markdown content - -* Turn off Learn lint - -## Frontmatter - -* Add layout prop (if using regex do this before commenting out H1) - -## Admonitions - -Regex search for - -```html -> \[!(NOTE|TIP|CAUTION|WARNING)\]\s*(?:\r?\n)(?:(?:> (.*))(?:\r?\n|$))+ -``` - -Replace with - -```html -:::note{.\L$1} -$2 -::: - -``` - -(yes blank line below ending triple colon) - -Need a custom run to deal with indented notes! - -## Comment out H1 - -Regex search for - -```html -^# (.*) -``` - -Exclude content code samples, then replace with - -```html - -``` - -## Headings - -Change self-closing anchor tags to `` - -(NA. Solved in issue 1285) - -## Media - -* Move images to central folder -* Update paths accordingly +# Hacks for migrating Markdown content + +* Turn off Learn lint + +## Frontmatter + +* Add layout prop (if using regex do this before commenting out H1) + +## Admonitions + +Regex search for + +```html +> \[!(NOTE|TIP|CAUTION|WARNING)\]\s*(?:\r?\n)(?:(?:> (.*))(?:\r?\n|$))+ +``` + +Replace with + +```html +:::note{.\L$1} +$2 +::: + +``` + +(yes blank line below ending triple colon) + +Need a custom run to deal with indented notes! + +## Comment out H1 + +Regex search for + +```html +^# (.*) +``` + +Exclude content code samples, then replace with + +```html + +``` + +## Headings + +Change self-closing anchor tags to `` + +(NA. Solved in issue 1285) + +## Media + +* Move images to central folder +* Update paths accordingly diff --git a/src/pages/contribute/[...slug].astro b/ClientApp/src/pages/contribute/[...slug].astro similarity index 100% rename from src/pages/contribute/[...slug].astro rename to ClientApp/src/pages/contribute/[...slug].astro diff --git a/src/pages/contribute/index.astro b/ClientApp/src/pages/contribute/index.astro similarity index 100% rename from src/pages/contribute/index.astro rename to ClientApp/src/pages/contribute/index.astro diff --git a/src/pages/da/[...slug].astro b/ClientApp/src/pages/da/[...slug].astro similarity index 100% rename from src/pages/da/[...slug].astro rename to ClientApp/src/pages/da/[...slug].astro diff --git a/src/pages/da/[...subcategory].astro b/ClientApp/src/pages/da/[...subcategory].astro similarity index 100% rename from src/pages/da/[...subcategory].astro rename to ClientApp/src/pages/da/[...subcategory].astro diff --git a/src/pages/da/[category].astro b/ClientApp/src/pages/da/[category].astro similarity index 100% rename from src/pages/da/[category].astro rename to ClientApp/src/pages/da/[category].astro diff --git a/src/pages/de/[...slug].astro b/ClientApp/src/pages/de/[...slug].astro similarity index 100% rename from src/pages/de/[...slug].astro rename to ClientApp/src/pages/de/[...slug].astro diff --git a/src/pages/de/[...subcategory].astro b/ClientApp/src/pages/de/[...subcategory].astro similarity index 100% rename from src/pages/de/[...subcategory].astro rename to ClientApp/src/pages/de/[...subcategory].astro diff --git a/src/pages/de/[category].astro b/ClientApp/src/pages/de/[category].astro similarity index 100% rename from src/pages/de/[category].astro rename to ClientApp/src/pages/de/[category].astro diff --git a/src/pages/en/[...category].astro b/ClientApp/src/pages/en/[...category].astro similarity index 100% rename from src/pages/en/[...category].astro rename to ClientApp/src/pages/en/[...category].astro diff --git a/src/pages/en/[...slug].astro b/ClientApp/src/pages/en/[...slug].astro similarity index 100% rename from src/pages/en/[...slug].astro rename to ClientApp/src/pages/en/[...slug].astro diff --git a/src/pages/en/[...subcategory].astro b/ClientApp/src/pages/en/[...subcategory].astro similarity index 100% rename from src/pages/en/[...subcategory].astro rename to ClientApp/src/pages/en/[...subcategory].astro diff --git a/src/pages/en/api/[...slug].astro b/ClientApp/src/pages/en/api/[...slug].astro similarity index 100% rename from src/pages/en/api/[...slug].astro rename to ClientApp/src/pages/en/api/[...slug].astro diff --git a/src/pages/en/api/reference/[...slug].astro b/ClientApp/src/pages/en/api/reference/[...slug].astro similarity index 100% rename from src/pages/en/api/reference/[...slug].astro rename to ClientApp/src/pages/en/api/reference/[...slug].astro diff --git a/src/pages/en/api/reference/netserver/core/[...slug].astro b/ClientApp/src/pages/en/api/reference/netserver/core/[...slug].astro similarity index 100% rename from src/pages/en/api/reference/netserver/core/[...slug].astro rename to ClientApp/src/pages/en/api/reference/netserver/core/[...slug].astro diff --git a/src/pages/en/api/reference/netserver/services/[...slug].astro b/ClientApp/src/pages/en/api/reference/netserver/services/[...slug].astro similarity index 100% rename from src/pages/en/api/reference/netserver/services/[...slug].astro rename to ClientApp/src/pages/en/api/reference/netserver/services/[...slug].astro diff --git a/src/pages/en/api/reference/web/[...slug].astro b/ClientApp/src/pages/en/api/reference/web/[...slug].astro similarity index 100% rename from src/pages/en/api/reference/web/[...slug].astro rename to ClientApp/src/pages/en/api/reference/web/[...slug].astro diff --git a/src/pages/en/api/reference/webapi/[...slug].astro b/ClientApp/src/pages/en/api/reference/webapi/[...slug].astro similarity index 100% rename from src/pages/en/api/reference/webapi/[...slug].astro rename to ClientApp/src/pages/en/api/reference/webapi/[...slug].astro diff --git a/src/pages/en/automation/crmscript/[...slug].astro b/ClientApp/src/pages/en/automation/crmscript/[...slug].astro similarity index 100% rename from src/pages/en/automation/crmscript/[...slug].astro rename to ClientApp/src/pages/en/automation/crmscript/[...slug].astro diff --git a/src/pages/en/automation/netserver-scripting/[...slug].astro b/ClientApp/src/pages/en/automation/netserver-scripting/[...slug].astro similarity index 100% rename from src/pages/en/automation/netserver-scripting/[...slug].astro rename to ClientApp/src/pages/en/automation/netserver-scripting/[...slug].astro diff --git a/src/pages/index.astro b/ClientApp/src/pages/index.astro similarity index 100% rename from src/pages/index.astro rename to ClientApp/src/pages/index.astro diff --git a/src/pages/nl/[...slug].astro b/ClientApp/src/pages/nl/[...slug].astro similarity index 100% rename from src/pages/nl/[...slug].astro rename to ClientApp/src/pages/nl/[...slug].astro diff --git a/src/pages/nl/[...subcategory].astro b/ClientApp/src/pages/nl/[...subcategory].astro similarity index 100% rename from src/pages/nl/[...subcategory].astro rename to ClientApp/src/pages/nl/[...subcategory].astro diff --git a/src/pages/nl/[category].astro b/ClientApp/src/pages/nl/[category].astro similarity index 100% rename from src/pages/nl/[category].astro rename to ClientApp/src/pages/nl/[category].astro diff --git a/src/pages/no/[...slug].astro b/ClientApp/src/pages/no/[...slug].astro similarity index 100% rename from src/pages/no/[...slug].astro rename to ClientApp/src/pages/no/[...slug].astro diff --git a/src/pages/no/[...subcategory].astro b/ClientApp/src/pages/no/[...subcategory].astro similarity index 100% rename from src/pages/no/[...subcategory].astro rename to ClientApp/src/pages/no/[...subcategory].astro diff --git a/src/pages/no/[category].astro b/ClientApp/src/pages/no/[category].astro similarity index 100% rename from src/pages/no/[category].astro rename to ClientApp/src/pages/no/[category].astro diff --git a/src/pages/release-notes/[...slug].astro b/ClientApp/src/pages/release-notes/[...slug].astro similarity index 96% rename from src/pages/release-notes/[...slug].astro rename to ClientApp/src/pages/release-notes/[...slug].astro index 138a64a2..1b6a6b6c 100644 --- a/src/pages/release-notes/[...slug].astro +++ b/ClientApp/src/pages/release-notes/[...slug].astro @@ -1,43 +1,43 @@ ---- -import { render } from "astro:content"; -import { getCollection } from "astro:content"; -import { stripFilePathAndExtension } from "@utils/slugUtils"; -import { getTocByPath } from "@utils/tocUtils"; -import ContentLayout from "@layouts/ContentLayout.astro"; - -//const language = "en" as const; - -const tocData = await getTocByPath("superoffice-docs/release-notes"); - -// Generate static paths from release-notes collection -export async function getStaticPaths() { - const collection = "release-notes"; - const docEntries = await getCollection(collection, ({ data }) => { - return !(data as { redirect_url?: string }).redirect_url; - }); - - return docEntries.map((entry) => { - const generatedSlug = stripFilePathAndExtension( - entry.filePath!, - `superoffice-docs/${collection}` - ); - - return { - params: { slug: generatedSlug }, - props: { entry }, - }; - }); -} - -const { entry } = Astro.props; -const { Content, headings } = await render(entry); ---- - - - {Content && } - +--- +import { render } from "astro:content"; +import { getCollection } from "astro:content"; +import { stripFilePathAndExtension } from "@utils/slugUtils"; +import { getTocByPath } from "@utils/tocUtils"; +import ContentLayout from "@layouts/ContentLayout.astro"; + +//const language = "en" as const; + +const tocData = await getTocByPath("superoffice-docs/release-notes"); + +// Generate static paths from release-notes collection +export async function getStaticPaths() { + const collection = "release-notes"; + const docEntries = await getCollection(collection, ({ data }) => { + return !(data as { redirect_url?: string }).redirect_url; + }); + + return docEntries.map((entry) => { + const generatedSlug = stripFilePathAndExtension( + entry.filePath!, + `superoffice-docs/${collection}` + ); + + return { + params: { slug: generatedSlug }, + props: { entry }, + }; + }); +} + +const { entry } = Astro.props; +const { Content, headings } = await render(entry); +--- + + + {Content && } + diff --git a/src/pages/search.astro b/ClientApp/src/pages/search.astro similarity index 100% rename from src/pages/search.astro rename to ClientApp/src/pages/search.astro diff --git a/src/pages/sv/[...slug].astro b/ClientApp/src/pages/sv/[...slug].astro similarity index 100% rename from src/pages/sv/[...slug].astro rename to ClientApp/src/pages/sv/[...slug].astro diff --git a/src/pages/sv/[...subcategory].astro b/ClientApp/src/pages/sv/[...subcategory].astro similarity index 100% rename from src/pages/sv/[...subcategory].astro rename to ClientApp/src/pages/sv/[...subcategory].astro diff --git a/src/pages/sv/[category].astro b/ClientApp/src/pages/sv/[category].astro similarity index 100% rename from src/pages/sv/[category].astro rename to ClientApp/src/pages/sv/[category].astro diff --git a/src/plugins/AddIncludesToMarkdown.js b/ClientApp/src/plugins/AddIncludesToMarkdown.js similarity index 100% rename from src/plugins/AddIncludesToMarkdown.js rename to ClientApp/src/plugins/AddIncludesToMarkdown.js diff --git a/src/plugins/RestyleDirectives.js b/ClientApp/src/plugins/RestyleDirectives.js similarity index 100% rename from src/plugins/RestyleDirectives.js rename to ClientApp/src/plugins/RestyleDirectives.js diff --git a/src/reuse/code/hello-world.cs b/ClientApp/src/reuse/code/hello-world.cs similarity index 97% rename from src/reuse/code/hello-world.cs rename to ClientApp/src/reuse/code/hello-world.cs index 0f16fe9a..50d26c67 100644 --- a/src/reuse/code/hello-world.cs +++ b/ClientApp/src/reuse/code/hello-world.cs @@ -1,4 +1,4 @@ -Console.WriteLine("Hello World!"); - -string greeting = " Hello World! "; +Console.WriteLine("Hello World!"); + +string greeting = " Hello World! "; Console.WriteLine($"[{greeting}]"); \ No newline at end of file diff --git a/src/scripts/getLastUpdatedFromGitHub.js b/ClientApp/src/scripts/getLastUpdatedFromGitHub.js similarity index 97% rename from src/scripts/getLastUpdatedFromGitHub.js rename to ClientApp/src/scripts/getLastUpdatedFromGitHub.js index 7a70a5e0..c9baf104 100644 --- a/src/scripts/getLastUpdatedFromGitHub.js +++ b/ClientApp/src/scripts/getLastUpdatedFromGitHub.js @@ -1,28 +1,28 @@ -import fetch from 'node-fetch'; - -const GITHUB_API_URL = 'https://api.github.com'; -const REPO_OWNER = 'digitaldiina'; -const REPO_NAME = 'docs-next'; -const GITHUB_TOKEN = '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'; - -export async function getLastUpdatedFromGitHub(filePath) { - const url = `${GITHUB_API_URL}/repos/${REPO_OWNER}/${REPO_NAME}/commits?path=${filePath}&per_page=1`; - - try { - const response = await fetch(url, { - headers: { - 'Accept': 'application/vnd.github.v3+json', - 'Authorization': `token ${GITHUB_TOKEN}`, - }, - }); - const data = await response.json(); - if (data && data[0] && data[0].commit && data[0].commit.committer) { - const lastUpdated = new Date(data[0].commit.committer.date).toLocaleDateString(); - return lastUpdated; - } - return null; - } catch (error) { - console.error('Error fetching last updated date from GitHub:', error); - return null; - } -} +import fetch from 'node-fetch'; + +const GITHUB_API_URL = 'https://api.github.com'; +const REPO_OWNER = 'digitaldiina'; +const REPO_NAME = 'docs-next'; +const GITHUB_TOKEN = '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'; + +export async function getLastUpdatedFromGitHub(filePath) { + const url = `${GITHUB_API_URL}/repos/${REPO_OWNER}/${REPO_NAME}/commits?path=${filePath}&per_page=1`; + + try { + const response = await fetch(url, { + headers: { + 'Accept': 'application/vnd.github.v3+json', + 'Authorization': `token ${GITHUB_TOKEN}`, + }, + }); + const data = await response.json(); + if (data && data[0] && data[0].commit && data[0].commit.committer) { + const lastUpdated = new Date(data[0].commit.committer.date).toLocaleDateString(); + return lastUpdated; + } + return null; + } catch (error) { + console.error('Error fetching last updated date from GitHub:', error); + return null; + } +} diff --git a/src/styles/IncludeDirectiveStyles.css b/ClientApp/src/styles/IncludeDirectiveStyles.css similarity index 100% rename from src/styles/IncludeDirectiveStyles.css rename to ClientApp/src/styles/IncludeDirectiveStyles.css diff --git a/src/styles/VideoEmbeddingStyles.css b/ClientApp/src/styles/VideoEmbeddingStyles.css similarity index 100% rename from src/styles/VideoEmbeddingStyles.css rename to ClientApp/src/styles/VideoEmbeddingStyles.css diff --git a/src/styles/main.css b/ClientApp/src/styles/main.css similarity index 94% rename from src/styles/main.css rename to ClientApp/src/styles/main.css index 11b271bd..5dfcd596 100644 --- a/src/styles/main.css +++ b/ClientApp/src/styles/main.css @@ -1,73 +1,73 @@ -@import "tailwindcss/base"; -@import "tailwindcss/components"; -@import "tailwindcss/utilities"; -@import "@phosphor-icons/web/regular"; -@import "./VideoEmbeddingStyles.css"; -@import "./IncludeDirectiveStyles.css"; -@import "./pagefind/customPagefindStyles.css"; - -body { - font-family: "Segoe UI", Tahoma, Helvetica, sans-serif; - font-size: 16px; -} - -body, -html { - margin: 0 auto; - width: 100%; - line-height: 1.5; -} - -* { - box-sizing: border-box; -} - -h1 { - margin: 1rem 0; - font-size: 2.5rem; -} - -.text-primary { - color: #0c5d58; -} - -.text-inverse { - color: #fff; -} - -.text-dark { - color: #222; -} - -[astro-icon].icon-light>* { - stroke-width: 1.2; -} - -[astro-icon].icon-bold>* { - stroke-width: 2.4; -} - -/* Add border to screenshots explicitly marked as such in the alt tag */ - -.article img[alt$="-screenshot"], -.tab-content img[alt$="-screenshot"] { - border: 2px solid #176457; - padding: 4px; - /* max-width: 600px; prevent image size issues on small screens */ - height: auto; - margin-top: 25px; - margin-bottom: 25px; -} - -/* Like -screenshot but no zoom and max height for images of mobile devices*/ - -.article img[alt$="-app-screen"], -.tab-content img[alt$="-app-screen"] { - border: 2px solid #176457; - padding: 4px; - max-height: 498px; - width: auto; - margin-top: 25px; - margin-bottom: 25px; -} - +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; +@import "@phosphor-icons/web/regular"; +@import "./VideoEmbeddingStyles.css"; +@import "./IncludeDirectiveStyles.css"; +@import "./pagefind/customPagefindStyles.css"; + +body { + font-family: "Segoe UI", Tahoma, Helvetica, sans-serif; + font-size: 16px; +} + +body, +html { + margin: 0 auto; + width: 100%; + line-height: 1.5; +} + +* { + box-sizing: border-box; +} + +h1 { + margin: 1rem 0; + font-size: 2.5rem; +} + +.text-primary { + color: #0c5d58; +} + +.text-inverse { + color: #fff; +} + +.text-dark { + color: #222; +} + +[astro-icon].icon-light>* { + stroke-width: 1.2; +} + +[astro-icon].icon-bold>* { + stroke-width: 2.4; +} + +/* Add border to screenshots explicitly marked as such in the alt tag */ + +.article img[alt$="-screenshot"], +.tab-content img[alt$="-screenshot"] { + border: 2px solid #176457; + padding: 4px; + /* max-width: 600px; prevent image size issues on small screens */ + height: auto; + margin-top: 25px; + margin-bottom: 25px; +} + +/* Like -screenshot but no zoom and max height for images of mobile devices*/ + +.article img[alt$="-app-screen"], +.tab-content img[alt$="-app-screen"] { + border: 2px solid #176457; + padding: 4px; + max-height: 498px; + width: auto; + margin-top: 25px; + margin-bottom: 25px; +} + diff --git a/src/styles/pagefind/customPagefindStyles.css b/ClientApp/src/styles/pagefind/customPagefindStyles.css similarity index 100% rename from src/styles/pagefind/customPagefindStyles.css rename to ClientApp/src/styles/pagefind/customPagefindStyles.css diff --git a/src/styles/pagefind/ui.css b/ClientApp/src/styles/pagefind/ui.css similarity index 100% rename from src/styles/pagefind/ui.css rename to ClientApp/src/styles/pagefind/ui.css diff --git a/src/types/CategoryPageTypes.ts b/ClientApp/src/types/CategoryPageTypes.ts similarity index 100% rename from src/types/CategoryPageTypes.ts rename to ClientApp/src/types/CategoryPageTypes.ts diff --git a/src/types/DocsTypes.ts b/ClientApp/src/types/DocsTypes.ts similarity index 100% rename from src/types/DocsTypes.ts rename to ClientApp/src/types/DocsTypes.ts diff --git a/src/types/OnThisArticleTypes.ts b/ClientApp/src/types/OnThisArticleTypes.ts similarity index 100% rename from src/types/OnThisArticleTypes.ts rename to ClientApp/src/types/OnThisArticleTypes.ts diff --git a/src/types/SubCategoryPageTypes.ts b/ClientApp/src/types/SubCategoryPageTypes.ts similarity index 100% rename from src/types/SubCategoryPageTypes.ts rename to ClientApp/src/types/SubCategoryPageTypes.ts diff --git a/src/types/TableOfContentTypes.ts b/ClientApp/src/types/TableOfContentTypes.ts similarity index 100% rename from src/types/TableOfContentTypes.ts rename to ClientApp/src/types/TableOfContentTypes.ts diff --git a/src/types/WebAPITypes.ts b/ClientApp/src/types/WebAPITypes.ts similarity index 100% rename from src/types/WebAPITypes.ts rename to ClientApp/src/types/WebAPITypes.ts diff --git a/src/types/YamlManagedReferencesLayoutTypes.ts b/ClientApp/src/types/YamlManagedReferencesLayoutTypes.ts similarity index 100% rename from src/types/YamlManagedReferencesLayoutTypes.ts rename to ClientApp/src/types/YamlManagedReferencesLayoutTypes.ts diff --git a/src/types/YamlManagedReferencesTypes.ts b/ClientApp/src/types/YamlManagedReferencesTypes.ts similarity index 100% rename from src/types/YamlManagedReferencesTypes.ts rename to ClientApp/src/types/YamlManagedReferencesTypes.ts diff --git a/src/types/pagefind-default-ui.d.ts b/ClientApp/src/types/pagefind-default-ui.d.ts similarity index 100% rename from src/types/pagefind-default-ui.d.ts rename to ClientApp/src/types/pagefind-default-ui.d.ts diff --git a/src/types/pagefind.d.ts b/ClientApp/src/types/pagefind.d.ts similarity index 100% rename from src/types/pagefind.d.ts rename to ClientApp/src/types/pagefind.d.ts diff --git a/src/utils/contentUtils.ts b/ClientApp/src/utils/contentUtils.ts similarity index 100% rename from src/utils/contentUtils.ts rename to ClientApp/src/utils/contentUtils.ts diff --git a/src/utils/headerUtils.ts b/ClientApp/src/utils/headerUtils.ts similarity index 97% rename from src/utils/headerUtils.ts rename to ClientApp/src/utils/headerUtils.ts index 52185bbc..d8c72d72 100644 --- a/src/utils/headerUtils.ts +++ b/ClientApp/src/utils/headerUtils.ts @@ -1,39 +1,39 @@ -export const githubBaseUrl = 'https://github.com/SuperOfficeDocs/'; -export const baseGithubUrl = `${githubBaseUrl}superoffice-docs/blob/main/`; -export const newIssueUrl = `${githubBaseUrl}feedback/issues/new`; - -export const trim = (str = '', ch?: string) => { - let start = 0, - end = str.length || 0; - while (start < end && str[start] === ch) ++start; - while (end > start && str[end - 1] === ch) --end; - return start > 0 || end < str.length ? str.substring(start, end) : str; -}; - -export const trimSlash = (s: string) => trim(trim(s, '/')); - -export function formatDate(d?: Date) { - if (!d) { - return ''; - } - - return new Date(d).toLocaleDateString('en-US', { - month: 'short', - day: '2-digit', - year: 'numeric', - }); -} - -export function getFeedbackHref(docurl:string, title:string, uid:string) { - if (!docurl) return ''; - title = 'Feedback for ' + title; - var body = '%0A%0A%5BEnter%20feedback%20here%5D%0A%0A%0A---%0A%23%23%23%23%20Document%20Details%0A%0A%E2%9A%A0%20*Do%20not%20edit%20this%20section.%20It%20is%20required%20for%20docs.superOffice.com%20%E2%9E%9F%20Docs%20Team%20processing.*%0A%0A*%20Content%20Source%3A%20%5B' + encodeURIComponent(uid) + '%5D(' + encodeURIComponent(baseGithubUrl + docurl) + ')'; - return newIssueUrl + '?title=' + title + '&body=' + body; -} - -export function getEditHref(docurl?: string | null): string { - if (!docurl) return ''; - - // Construct the full GitHub URL to the file - return `${baseGithubUrl}${docurl.replace(/^\//, '')}`; +export const githubBaseUrl = 'https://github.com/SuperOfficeDocs/'; +export const baseGithubUrl = `${githubBaseUrl}superoffice-docs/blob/main/`; +export const newIssueUrl = `${githubBaseUrl}feedback/issues/new`; + +export const trim = (str = '', ch?: string) => { + let start = 0, + end = str.length || 0; + while (start < end && str[start] === ch) ++start; + while (end > start && str[end - 1] === ch) --end; + return start > 0 || end < str.length ? str.substring(start, end) : str; +}; + +export const trimSlash = (s: string) => trim(trim(s, '/')); + +export function formatDate(d?: Date) { + if (!d) { + return ''; + } + + return new Date(d).toLocaleDateString('en-US', { + month: 'short', + day: '2-digit', + year: 'numeric', + }); +} + +export function getFeedbackHref(docurl:string, title:string, uid:string) { + if (!docurl) return ''; + title = 'Feedback for ' + title; + var body = '%0A%0A%5BEnter%20feedback%20here%5D%0A%0A%0A---%0A%23%23%23%23%20Document%20Details%0A%0A%E2%9A%A0%20*Do%20not%20edit%20this%20section.%20It%20is%20required%20for%20docs.superOffice.com%20%E2%9E%9F%20Docs%20Team%20processing.*%0A%0A*%20Content%20Source%3A%20%5B' + encodeURIComponent(uid) + '%5D(' + encodeURIComponent(baseGithubUrl + docurl) + ')'; + return newIssueUrl + '?title=' + title + '&body=' + body; +} + +export function getEditHref(docurl?: string | null): string { + if (!docurl) return ''; + + // Construct the full GitHub URL to the file + return `${baseGithubUrl}${docurl.replace(/^\//, '')}`; } \ No newline at end of file diff --git a/src/utils/slugUtils.ts b/ClientApp/src/utils/slugUtils.ts similarity index 100% rename from src/utils/slugUtils.ts rename to ClientApp/src/utils/slugUtils.ts diff --git a/src/utils/tocUtils.ts b/ClientApp/src/utils/tocUtils.ts similarity index 100% rename from src/utils/tocUtils.ts rename to ClientApp/src/utils/tocUtils.ts diff --git a/tailwind.config.mjs b/ClientApp/tailwind.config.mjs similarity index 100% rename from tailwind.config.mjs rename to ClientApp/tailwind.config.mjs diff --git a/tsconfig.json b/ClientApp/tsconfig.json similarity index 100% rename from tsconfig.json rename to ClientApp/tsconfig.json diff --git a/Docs-Next-Solution.sln b/Docs-Next-Solution.sln new file mode 100644 index 00000000..635abeba --- /dev/null +++ b/Docs-Next-Solution.sln @@ -0,0 +1,34 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Server\Server.csproj", "{7E46C9BE-8B62-41C2-938E-36BF1703453E}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Debug|x64.ActiveCfg = Debug|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Debug|x64.Build.0 = Debug|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Debug|x86.ActiveCfg = Debug|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Debug|x86.Build.0 = Debug|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Release|Any CPU.Build.0 = Release|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Release|x64.ActiveCfg = Release|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Release|x64.Build.0 = Release|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Release|x86.ActiveCfg = Release|Any CPU + {7E46C9BE-8B62-41C2-938E-36BF1703453E}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/Server/Program.cs b/Server/Program.cs new file mode 100644 index 00000000..ee9d65d6 --- /dev/null +++ b/Server/Program.cs @@ -0,0 +1,41 @@ +var builder = WebApplication.CreateBuilder(args); + +// Add services to the container. +// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi +builder.Services.AddOpenApi(); + +var app = builder.Build(); + +// Configure the HTTP request pipeline. +if (app.Environment.IsDevelopment()) +{ + app.MapOpenApi(); +} + +app.UseHttpsRedirection(); + +var summaries = new[] +{ + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" +}; + +app.MapGet("/weatherforecast", () => +{ + var forecast = Enumerable.Range(1, 5).Select(index => + new WeatherForecast + ( + DateOnly.FromDateTime(DateTime.Now.AddDays(index)), + Random.Shared.Next(-20, 55), + summaries[Random.Shared.Next(summaries.Length)] + )) + .ToArray(); + return forecast; +}) +.WithName("GetWeatherForecast"); + +app.Run(); + +record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) +{ + public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); +} diff --git a/Server/Properties/launchSettings.json b/Server/Properties/launchSettings.json new file mode 100644 index 00000000..81dceacb --- /dev/null +++ b/Server/Properties/launchSettings.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://json.schemastore.org/launchsettings.json", + "profiles": { + "http": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "http://localhost:5215", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "https": { + "commandName": "Project", + "dotnetRunMessages": true, + "launchBrowser": false, + "applicationUrl": "https://localhost:7185;http://localhost:5215", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} diff --git a/Server/Server.csproj b/Server/Server.csproj new file mode 100644 index 00000000..06f4aab1 --- /dev/null +++ b/Server/Server.csproj @@ -0,0 +1,13 @@ + + + + net9.0 + enable + enable + + + + + + + diff --git a/Server/Server.csproj.user b/Server/Server.csproj.user new file mode 100644 index 00000000..9ff5820a --- /dev/null +++ b/Server/Server.csproj.user @@ -0,0 +1,6 @@ + + + + https + + \ No newline at end of file diff --git a/Server/Server.http b/Server/Server.http new file mode 100644 index 00000000..a40ff099 --- /dev/null +++ b/Server/Server.http @@ -0,0 +1,6 @@ +@Server_HostAddress = http://localhost:5215 + +GET {{Server_HostAddress}}/weatherforecast/ +Accept: application/json + +### diff --git a/Server/appsettings.Development.json b/Server/appsettings.Development.json new file mode 100644 index 00000000..0c208ae9 --- /dev/null +++ b/Server/appsettings.Development.json @@ -0,0 +1,8 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + } +} diff --git a/Server/appsettings.json b/Server/appsettings.json new file mode 100644 index 00000000..10f68b8c --- /dev/null +++ b/Server/appsettings.json @@ -0,0 +1,9 @@ +{ + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft.AspNetCore": "Warning" + } + }, + "AllowedHosts": "*" +} diff --git a/Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs new file mode 100644 index 00000000..feda5e9f --- /dev/null +++ b/Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/Server/obj/Debug/net9.0/Server.AssemblyInfo.cs b/Server/obj/Debug/net9.0/Server.AssemblyInfo.cs new file mode 100644 index 00000000..a7cb7b76 --- /dev/null +++ b/Server/obj/Debug/net9.0/Server.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Server")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+628aaa28d624617fa99246a08ba27d1e41ad1224")] +[assembly: System.Reflection.AssemblyProductAttribute("Server")] +[assembly: System.Reflection.AssemblyTitleAttribute("Server")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache b/Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache new file mode 100644 index 00000000..c326bbb8 --- /dev/null +++ b/Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +b4ea2d3bfbdae508984e3090a38d5f71ef7c8d5b9fc0070c38a17a649a2642b0 diff --git a/Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig b/Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..36da3aa3 --- /dev/null +++ b/Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,21 @@ +is_global = true +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = true +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Server +build_property.RootNamespace = Server +build_property.ProjectDir = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.RazorLangVersion = 9.0 +build_property.SupportLocalizedComponentNames = +build_property.GenerateRazorMetadataSourceChecksumAttributes = +build_property.MSBuildProjectDirectory = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server +build_property._RazorSourceGeneratorDebug = +build_property.EffectiveAnalysisLevelStyle = 9.0 +build_property.EnableCodeStyleSeverity = diff --git a/Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs b/Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs new file mode 100644 index 00000000..025530a2 --- /dev/null +++ b/Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs @@ -0,0 +1,17 @@ +// +global using global::Microsoft.AspNetCore.Builder; +global using global::Microsoft.AspNetCore.Hosting; +global using global::Microsoft.AspNetCore.Http; +global using global::Microsoft.AspNetCore.Routing; +global using global::Microsoft.Extensions.Configuration; +global using global::Microsoft.Extensions.DependencyInjection; +global using global::Microsoft.Extensions.Hosting; +global using global::Microsoft.Extensions.Logging; +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Net.Http.Json; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/Server/obj/Debug/net9.0/Server.assets.cache b/Server/obj/Debug/net9.0/Server.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..25cc42157b9d1af6a9f1a6a6bc118d93aa241370 GIT binary patch literal 1889 zcmc(gK~EDw6vvCUl&T<5(UO?hn2;DHTWMkiJvAjXjanO9IgmLp?Y@=?yF25~EYgGv zi8nrn2S12kz)#@ai$}fr9&G6-6@!QJlK<|`?wi@)zW3&B<3+W6BauiGINI>Q<)K^r4Qm9;B)*$i(kNn? zLXi>USecaDCJr*2iN?f|8yVcPQsh8Jlkbjniocqi=7tW|U0VPC@X6Wa6^>I)Y099; z{ThnWcO6A_IE|V?-9*izh{m~CN^wS_ic=b)?1kLVZwL=`eyO;+zgk)it!FI+Lpt?j9r&C_uL(twS70SNedaIjpAS?4~aW1MVF*L>xPjxb(- z9l9a_H?_e%4O4GGOK%U{WGjpyNx+SZH30wg_wl!%O{T0hm{wmwI*bA%e8^O!>c5m7 e?j;Src77eS5dk+Cxn|TRi2T1Iv@mqAzWNuw<2s1| literal 0 HcmV?d00001 diff --git a/Server/obj/Debug/net9.0/Server.csproj.AssemblyReference.cache b/Server/obj/Debug/net9.0/Server.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..ecc4b443190094a32926c781be5463cd70b1b9aa GIT binary patch literal 1234 zcmZQ$WMW`oV61VriU}=FEh>&F$S=#xODWYWPRva#N-R#z29hy)d8O&8B{2nw$=QkN zsl_q5naM@@#rbI^dWppad8sAI`9-OE`30$Yi3OQ4mU;$yW-&RLNijefAScEbuG+D< zz%RAL8Kl}DsM@h0Q!gbahmjHJ1ctt=t!-29axgM7%HY$$$O%#m1Z)tB0i+p>>wyfG z1}LY6F)cGE)k@$6AKGTQzOdsYmeSALC2m4GP=retY&-C#*6zsDF3_zd) zan}?elMNKwKz>lLqagze$gPYFpRF`m{8wIgIJsHTYVy;XmMujm{J6XLq@MJpul(`t z-rV?l+n_bdPr8muFn+u3h7LgJ^UibNE>fN}ftlksPC-1h&+F@U` z+G_nvTmHj`OuEbb*KgQ(pxE}QNaVWJZV}8a`{$M%dDNJ){p=(69}{=6cgoCd*SfTu zkpt+awL2>eEH&$9&wg`Rcf(SoDRe_TvD1`}voeND=Acv!* zvT{lj8Po&%5D&nT7Lo^$k{GfF7J!^ZAYDzZ+0xv;Y3W!0n8%YsKlZC#*0P+*yQ$_& zyZQQKdy-0Lubj4H(f)0vS02x|WqY$VO1xXz!SK$e<>`-Rmfz?(*XG45w*TPfeY^SY z&wteVk^ldJ74eg=rTk)D&;D!is!LB@C3N>!)Y)Iw4qLM__T%Cs&tu<+dD%<(q}ooG zX8eD6-sU6VbY&mzJSDm8gA-#YMi?U!6U6t#q$cAuQ*#qzOA|9=bF(x96C+SCprs}N Dvl6Dy literal 0 HcmV?d00001 diff --git a/Server/obj/Debug/net9.0/staticwebassets.removed.txt b/Server/obj/Debug/net9.0/staticwebassets.removed.txt new file mode 100644 index 00000000..e69de29b diff --git a/Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs new file mode 100644 index 00000000..feda5e9f --- /dev/null +++ b/Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs @@ -0,0 +1,4 @@ +// +using System; +using System.Reflection; +[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/Server/obj/Release/net9.0/Server.AssemblyInfo.cs b/Server/obj/Release/net9.0/Server.AssemblyInfo.cs new file mode 100644 index 00000000..90069913 --- /dev/null +++ b/Server/obj/Release/net9.0/Server.AssemblyInfo.cs @@ -0,0 +1,23 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +using System; +using System.Reflection; + +[assembly: System.Reflection.AssemblyCompanyAttribute("Server")] +[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] +[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+628aaa28d624617fa99246a08ba27d1e41ad1224")] +[assembly: System.Reflection.AssemblyProductAttribute("Server")] +[assembly: System.Reflection.AssemblyTitleAttribute("Server")] +[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] + +// Generated by the MSBuild WriteCodeFragment class. + diff --git a/Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache b/Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache new file mode 100644 index 00000000..18e564e4 --- /dev/null +++ b/Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache @@ -0,0 +1 @@ +d1ead1308e8f75765129c077da2a072b566e809c3026fff8f716d77b45387aa5 diff --git a/Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig b/Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig new file mode 100644 index 00000000..36da3aa3 --- /dev/null +++ b/Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig @@ -0,0 +1,21 @@ +is_global = true +build_property.TargetFramework = net9.0 +build_property.TargetPlatformMinVersion = +build_property.UsingMicrosoftNETSdkWeb = true +build_property.ProjectTypeGuids = +build_property.InvariantGlobalization = +build_property.PlatformNeutralAssembly = +build_property.EnforceExtendedAnalyzerRules = +build_property._SupportedPlatformList = Linux,macOS,Windows +build_property.RootNamespace = Server +build_property.RootNamespace = Server +build_property.ProjectDir = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server\ +build_property.EnableComHosting = +build_property.EnableGeneratedComInterfaceComImportInterop = +build_property.RazorLangVersion = 9.0 +build_property.SupportLocalizedComponentNames = +build_property.GenerateRazorMetadataSourceChecksumAttributes = +build_property.MSBuildProjectDirectory = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server +build_property._RazorSourceGeneratorDebug = +build_property.EffectiveAnalysisLevelStyle = 9.0 +build_property.EnableCodeStyleSeverity = diff --git a/Server/obj/Release/net9.0/Server.GlobalUsings.g.cs b/Server/obj/Release/net9.0/Server.GlobalUsings.g.cs new file mode 100644 index 00000000..025530a2 --- /dev/null +++ b/Server/obj/Release/net9.0/Server.GlobalUsings.g.cs @@ -0,0 +1,17 @@ +// +global using global::Microsoft.AspNetCore.Builder; +global using global::Microsoft.AspNetCore.Hosting; +global using global::Microsoft.AspNetCore.Http; +global using global::Microsoft.AspNetCore.Routing; +global using global::Microsoft.Extensions.Configuration; +global using global::Microsoft.Extensions.DependencyInjection; +global using global::Microsoft.Extensions.Hosting; +global using global::Microsoft.Extensions.Logging; +global using global::System; +global using global::System.Collections.Generic; +global using global::System.IO; +global using global::System.Linq; +global using global::System.Net.Http; +global using global::System.Net.Http.Json; +global using global::System.Threading; +global using global::System.Threading.Tasks; diff --git a/Server/obj/Release/net9.0/Server.assets.cache b/Server/obj/Release/net9.0/Server.assets.cache new file mode 100644 index 0000000000000000000000000000000000000000..62ac05fe946644ad038270dd6a8f8deadb0b0ec9 GIT binary patch literal 1889 zcmc(g&2G~`5XS>JO;Tu~4J|z&6cCk)kTxWhLd%ILRip3`A`*Jq%O>8YtFFB(@49Lv zPQVHA4BSBC!i_6Wz=3z*#9J`aI?X~uQ8}a|{cW#3yZ(7*cHDYguU<-}Qtuz$_`0&n zKEC;W`}L<+n*1oe`}ui#wX=BhOZLv&Z;w8t!6~uxaDG{PKwlUh8LHKu2>qBC7O;pJ zz6(c6!nn^Z)vUM6`rOb!^de={wk6EyklUV$I8mC1ObfbB?vVy&&oI?at7oV&RGt1ziSR0U-@JT}oj_st!|Hk?Kb*C~OMJO<}pbw!c zOpDo_MwpcMUFf;R!=76_Y1?AYJ-*|o4m;&avWU|uoyD9^=`~rvGYL+MQCB<;C%HjWu`gI literal 0 HcmV?d00001 diff --git a/Server/obj/Release/net9.0/Server.csproj.AssemblyReference.cache b/Server/obj/Release/net9.0/Server.csproj.AssemblyReference.cache new file mode 100644 index 0000000000000000000000000000000000000000..ecc4b443190094a32926c781be5463cd70b1b9aa GIT binary patch literal 1234 zcmZQ$WMW`oV61VriU}=FEh>&F$S=#xODWYWPRva#N-R#z29hy)d8O&8B{2nw$=QkN zsl_q5naM@@#rbI^dWppad8sAI`9-OE`30$Yi3OQ4mU;$yW-&RLNijefAScEbuG+D< zz%RAL8Kl}DsM@h0Q!gbahmjHJ1ctt=t!-29axgM7%HY$$$O%#m1Z)tB0i+p>>wyfG z1}LY6F)cGE)k@$6AKGTQzOdsYmeSALC2m4GP=retY&-C#*6zsDF3_zd) zan}?elMNKwKz>lLqagze$gPYFpRF`m{8wIgIJsHTYVy;XmMujm{J6XLq@MJpul(`t z-rV?l+n_bdPr8muFn+u3h7LgJ^UibNE>fN}ftlksPC-1h&+F@U` z+G_nvTmHj`OuEbb*KgQ(pxE}QNaVWJZV}8a`{$M%dDNJ){p=(69}{=6cgoCd*SfTu zkpt+awL2>eEH&$9&wg`Rcf(SoDRe_TvD1`}voeND=Acv!* zvT{lj8Po&%5D&nT7Lo^$k{GfF7J!^ZAYDzZ+0xv;Y3W!0n8%YsKlZC#*0P+*yQ$_& zyZQQKdy-0Lubj4H(f)0vS02x|WqY$VO1xXz!SK$e<>`-Rmfz?(*XG45w*TPfeY^SY z&wteVk^ldJ74eg=rTk)D&;D!is!LB@C3N>!)Y)Iw4qLM__T%Cs&tu<+dD%<(q}ooG zX8eD6-sU6VbY&mzJSDm8gA-#YMi?U!6U6t#q$cAuQ*#qzOA|9=bF(x96C+SCprs}N Dvl6Dy literal 0 HcmV?d00001 diff --git a/Server/obj/Server.csproj.nuget.dgspec.json b/Server/obj/Server.csproj.nuget.dgspec.json new file mode 100644 index 00000000..3d02cfbf --- /dev/null +++ b/Server/obj/Server.csproj.nuget.dgspec.json @@ -0,0 +1,82 @@ +{ + "format": 1, + "restore": { + "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj": {} + }, + "projects": { + "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", + "projectName": "Server", + "projectPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", + "packagesPath": "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\", + "outputPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\povindu.samarasekara\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.200" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "Microsoft.AspNetCore.OpenApi": { + "target": "Package", + "version": "[9.0.6, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.205/PortableRuntimeIdentifierGraph.json" + } + } + } + } +} \ No newline at end of file diff --git a/Server/obj/Server.csproj.nuget.g.props b/Server/obj/Server.csproj.nuget.g.props new file mode 100644 index 00000000..a54028f1 --- /dev/null +++ b/Server/obj/Server.csproj.nuget.g.props @@ -0,0 +1,16 @@ + + + + True + NuGet + $(MSBuildThisFileDirectory)project.assets.json + $(UserProfile)\.nuget\packages\ + C:\Users\povindu.samarasekara\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages + PackageReference + 6.13.2 + + + + + + \ No newline at end of file diff --git a/Server/obj/Server.csproj.nuget.g.targets b/Server/obj/Server.csproj.nuget.g.targets new file mode 100644 index 00000000..3dc06ef3 --- /dev/null +++ b/Server/obj/Server.csproj.nuget.g.targets @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/Server/obj/project.assets.json b/Server/obj/project.assets.json new file mode 100644 index 00000000..9ace5663 --- /dev/null +++ b/Server/obj/project.assets.json @@ -0,0 +1,155 @@ +{ + "version": 3, + "targets": { + "net9.0": { + "Microsoft.AspNetCore.OpenApi/9.0.6": { + "type": "package", + "dependencies": { + "Microsoft.OpenApi": "1.6.17" + }, + "compile": { + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { + "related": ".xml" + } + }, + "frameworkReferences": [ + "Microsoft.AspNetCore.App" + ] + }, + "Microsoft.OpenApi/1.6.17": { + "type": "package", + "compile": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "related": ".pdb;.xml" + } + }, + "runtime": { + "lib/netstandard2.0/Microsoft.OpenApi.dll": { + "related": ".pdb;.xml" + } + } + } + } + }, + "libraries": { + "Microsoft.AspNetCore.OpenApi/9.0.6": { + "sha512": "MOJ4DG1xd3NlWMYh+JdGNT9uvBtEk1XQU/FQlpNZFlAzM8t0oB5IimvnGlnK7jmyY4vQagLPB1xw1HjJ8CHrZg==", + "type": "package", + "path": "microsoft.aspnetcore.openapi/9.0.6", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll", + "lib/net9.0/Microsoft.AspNetCore.OpenApi.xml", + "microsoft.aspnetcore.openapi.9.0.6.nupkg.sha512", + "microsoft.aspnetcore.openapi.nuspec" + ] + }, + "Microsoft.OpenApi/1.6.17": { + "sha512": "Le+kehlmrlQfuDFUt1zZ2dVwrhFQtKREdKBo+rexOwaCoYP0/qpgT9tLxCsZjsgR5Itk1UKPcbgO+FyaNid/bA==", + "type": "package", + "path": "microsoft.openapi/1.6.17", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "lib/netstandard2.0/Microsoft.OpenApi.dll", + "lib/netstandard2.0/Microsoft.OpenApi.pdb", + "lib/netstandard2.0/Microsoft.OpenApi.xml", + "microsoft.openapi.1.6.17.nupkg.sha512", + "microsoft.openapi.nuspec" + ] + } + }, + "projectFileDependencyGroups": { + "net9.0": [ + "Microsoft.AspNetCore.OpenApi >= 9.0.6" + ] + }, + "packageFolders": { + "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\": {}, + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} + }, + "project": { + "version": "1.0.0", + "restore": { + "projectUniqueName": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", + "projectName": "Server", + "projectPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", + "packagesPath": "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\", + "outputPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\obj\\", + "projectStyle": "PackageReference", + "fallbackFolders": [ + "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" + ], + "configFilePaths": [ + "C:\\Users\\povindu.samarasekara\\AppData\\Roaming\\NuGet\\NuGet.Config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", + "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" + ], + "originalTargetFrameworks": [ + "net9.0" + ], + "sources": { + "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, + "https://api.nuget.org/v3/index.json": {} + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "projectReferences": {} + } + }, + "warningProperties": { + "warnAsError": [ + "NU1605" + ] + }, + "restoreAuditProperties": { + "enableAudit": "true", + "auditLevel": "low", + "auditMode": "direct" + }, + "SdkAnalysisLevel": "9.0.200" + }, + "frameworks": { + "net9.0": { + "targetAlias": "net9.0", + "dependencies": { + "Microsoft.AspNetCore.OpenApi": { + "target": "Package", + "version": "[9.0.6, )" + } + }, + "imports": [ + "net461", + "net462", + "net47", + "net471", + "net472", + "net48", + "net481" + ], + "assetTargetFallback": true, + "warn": true, + "frameworkReferences": { + "Microsoft.AspNetCore.App": { + "privateAssets": "none" + }, + "Microsoft.NETCore.App": { + "privateAssets": "all" + } + }, + "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.205/PortableRuntimeIdentifierGraph.json" + } + } + } +} \ No newline at end of file diff --git a/Server/obj/project.nuget.cache b/Server/obj/project.nuget.cache new file mode 100644 index 00000000..0540ce9a --- /dev/null +++ b/Server/obj/project.nuget.cache @@ -0,0 +1,11 @@ +{ + "version": 2, + "dgSpecHash": "Fc1c9yve6dc=", + "success": true, + "projectFilePath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", + "expectedPackageFiles": [ + "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\microsoft.aspnetcore.openapi\\9.0.6\\microsoft.aspnetcore.openapi.9.0.6.nupkg.sha512", + "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\microsoft.openapi\\1.6.17\\microsoft.openapi.1.6.17.nupkg.sha512" + ], + "logs": [] +} \ No newline at end of file From c447abaff37033c8264e62e8526aed96873c10ad Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 10:58:11 +0530 Subject: [PATCH 02/49] Remove obj folder from repo and update .gitignore --- ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 - .../obj/Debug/net9.0/Server.AssemblyInfo.cs | 23 --- .../net9.0/Server.AssemblyInfoInputs.cache | 1 - ....GeneratedMSBuildEditorConfig.editorconfig | 21 --- .../obj/Debug/net9.0/Server.GlobalUsings.g.cs | 17 -- Server/obj/Debug/net9.0/Server.assets.cache | Bin 1889 -> 0 bytes .../Server.csproj.AssemblyReference.cache | Bin 1234 -> 0 bytes .../Debug/net9.0/staticwebassets.removed.txt | 0 ...CoreApp,Version=v9.0.AssemblyAttributes.cs | 4 - .../obj/Release/net9.0/Server.AssemblyInfo.cs | 23 --- .../net9.0/Server.AssemblyInfoInputs.cache | 1 - ....GeneratedMSBuildEditorConfig.editorconfig | 21 --- .../Release/net9.0/Server.GlobalUsings.g.cs | 17 -- Server/obj/Release/net9.0/Server.assets.cache | Bin 1889 -> 0 bytes .../Server.csproj.AssemblyReference.cache | Bin 1234 -> 0 bytes Server/obj/Server.csproj.nuget.dgspec.json | 82 --------- Server/obj/Server.csproj.nuget.g.props | 16 -- Server/obj/Server.csproj.nuget.g.targets | 2 - Server/obj/project.assets.json | 155 ------------------ Server/obj/project.nuget.cache | 11 -- 20 files changed, 398 deletions(-) delete mode 100644 Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs delete mode 100644 Server/obj/Debug/net9.0/Server.AssemblyInfo.cs delete mode 100644 Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache delete mode 100644 Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig delete mode 100644 Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs delete mode 100644 Server/obj/Debug/net9.0/Server.assets.cache delete mode 100644 Server/obj/Debug/net9.0/Server.csproj.AssemblyReference.cache delete mode 100644 Server/obj/Debug/net9.0/staticwebassets.removed.txt delete mode 100644 Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs delete mode 100644 Server/obj/Release/net9.0/Server.AssemblyInfo.cs delete mode 100644 Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache delete mode 100644 Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig delete mode 100644 Server/obj/Release/net9.0/Server.GlobalUsings.g.cs delete mode 100644 Server/obj/Release/net9.0/Server.assets.cache delete mode 100644 Server/obj/Release/net9.0/Server.csproj.AssemblyReference.cache delete mode 100644 Server/obj/Server.csproj.nuget.dgspec.json delete mode 100644 Server/obj/Server.csproj.nuget.g.props delete mode 100644 Server/obj/Server.csproj.nuget.g.targets delete mode 100644 Server/obj/project.assets.json delete mode 100644 Server/obj/project.nuget.cache diff --git a/Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs deleted file mode 100644 index feda5e9f..00000000 --- a/Server/obj/Debug/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/Server/obj/Debug/net9.0/Server.AssemblyInfo.cs b/Server/obj/Debug/net9.0/Server.AssemblyInfo.cs deleted file mode 100644 index a7cb7b76..00000000 --- a/Server/obj/Debug/net9.0/Server.AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("Server")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+628aaa28d624617fa99246a08ba27d1e41ad1224")] -[assembly: System.Reflection.AssemblyProductAttribute("Server")] -[assembly: System.Reflection.AssemblyTitleAttribute("Server")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] - -// Generated by the MSBuild WriteCodeFragment class. - diff --git a/Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache b/Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache deleted file mode 100644 index c326bbb8..00000000 --- a/Server/obj/Debug/net9.0/Server.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -b4ea2d3bfbdae508984e3090a38d5f71ef7c8d5b9fc0070c38a17a649a2642b0 diff --git a/Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig b/Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 36da3aa3..00000000 --- a/Server/obj/Debug/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -is_global = true -build_property.TargetFramework = net9.0 -build_property.TargetPlatformMinVersion = -build_property.UsingMicrosoftNETSdkWeb = true -build_property.ProjectTypeGuids = -build_property.InvariantGlobalization = -build_property.PlatformNeutralAssembly = -build_property.EnforceExtendedAnalyzerRules = -build_property._SupportedPlatformList = Linux,macOS,Windows -build_property.RootNamespace = Server -build_property.RootNamespace = Server -build_property.ProjectDir = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server\ -build_property.EnableComHosting = -build_property.EnableGeneratedComInterfaceComImportInterop = -build_property.RazorLangVersion = 9.0 -build_property.SupportLocalizedComponentNames = -build_property.GenerateRazorMetadataSourceChecksumAttributes = -build_property.MSBuildProjectDirectory = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server -build_property._RazorSourceGeneratorDebug = -build_property.EffectiveAnalysisLevelStyle = 9.0 -build_property.EnableCodeStyleSeverity = diff --git a/Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs b/Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs deleted file mode 100644 index 025530a2..00000000 --- a/Server/obj/Debug/net9.0/Server.GlobalUsings.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -global using global::Microsoft.AspNetCore.Builder; -global using global::Microsoft.AspNetCore.Hosting; -global using global::Microsoft.AspNetCore.Http; -global using global::Microsoft.AspNetCore.Routing; -global using global::Microsoft.Extensions.Configuration; -global using global::Microsoft.Extensions.DependencyInjection; -global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Net.Http.Json; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/Server/obj/Debug/net9.0/Server.assets.cache b/Server/obj/Debug/net9.0/Server.assets.cache deleted file mode 100644 index 25cc42157b9d1af6a9f1a6a6bc118d93aa241370..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1889 zcmc(gK~EDw6vvCUl&T<5(UO?hn2;DHTWMkiJvAjXjanO9IgmLp?Y@=?yF25~EYgGv zi8nrn2S12kz)#@ai$}fr9&G6-6@!QJlK<|`?wi@)zW3&B<3+W6BauiGINI>Q<)K^r4Qm9;B)*$i(kNn? zLXi>USecaDCJr*2iN?f|8yVcPQsh8Jlkbjniocqi=7tW|U0VPC@X6Wa6^>I)Y099; z{ThnWcO6A_IE|V?-9*izh{m~CN^wS_ic=b)?1kLVZwL=`eyO;+zgk)it!FI+Lpt?j9r&C_uL(twS70SNedaIjpAS?4~aW1MVF*L>xPjxb(- z9l9a_H?_e%4O4GGOK%U{WGjpyNx+SZH30wg_wl!%O{T0hm{wmwI*bA%e8^O!>c5m7 e?j;Src77eS5dk+Cxn|TRi2T1Iv@mqAzWNuw<2s1| diff --git a/Server/obj/Debug/net9.0/Server.csproj.AssemblyReference.cache b/Server/obj/Debug/net9.0/Server.csproj.AssemblyReference.cache deleted file mode 100644 index ecc4b443190094a32926c781be5463cd70b1b9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1234 zcmZQ$WMW`oV61VriU}=FEh>&F$S=#xODWYWPRva#N-R#z29hy)d8O&8B{2nw$=QkN zsl_q5naM@@#rbI^dWppad8sAI`9-OE`30$Yi3OQ4mU;$yW-&RLNijefAScEbuG+D< zz%RAL8Kl}DsM@h0Q!gbahmjHJ1ctt=t!-29axgM7%HY$$$O%#m1Z)tB0i+p>>wyfG z1}LY6F)cGE)k@$6AKGTQzOdsYmeSALC2m4GP=retY&-C#*6zsDF3_zd) zan}?elMNKwKz>lLqagze$gPYFpRF`m{8wIgIJsHTYVy;XmMujm{J6XLq@MJpul(`t z-rV?l+n_bdPr8muFn+u3h7LgJ^UibNE>fN}ftlksPC-1h&+F@U` z+G_nvTmHj`OuEbb*KgQ(pxE}QNaVWJZV}8a`{$M%dDNJ){p=(69}{=6cgoCd*SfTu zkpt+awL2>eEH&$9&wg`Rcf(SoDRe_TvD1`}voeND=Acv!* zvT{lj8Po&%5D&nT7Lo^$k{GfF7J!^ZAYDzZ+0xv;Y3W!0n8%YsKlZC#*0P+*yQ$_& zyZQQKdy-0Lubj4H(f)0vS02x|WqY$VO1xXz!SK$e<>`-Rmfz?(*XG45w*TPfeY^SY z&wteVk^ldJ74eg=rTk)D&;D!is!LB@C3N>!)Y)Iw4qLM__T%Cs&tu<+dD%<(q}ooG zX8eD6-sU6VbY&mzJSDm8gA-#YMi?U!6U6t#q$cAuQ*#qzOA|9=bF(x96C+SCprs}N Dvl6Dy diff --git a/Server/obj/Debug/net9.0/staticwebassets.removed.txt b/Server/obj/Debug/net9.0/staticwebassets.removed.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs b/Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs deleted file mode 100644 index feda5e9f..00000000 --- a/Server/obj/Release/net9.0/.NETCoreApp,Version=v9.0.AssemblyAttributes.cs +++ /dev/null @@ -1,4 +0,0 @@ -// -using System; -using System.Reflection; -[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v9.0", FrameworkDisplayName = ".NET 9.0")] diff --git a/Server/obj/Release/net9.0/Server.AssemblyInfo.cs b/Server/obj/Release/net9.0/Server.AssemblyInfo.cs deleted file mode 100644 index 90069913..00000000 --- a/Server/obj/Release/net9.0/Server.AssemblyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -using System; -using System.Reflection; - -[assembly: System.Reflection.AssemblyCompanyAttribute("Server")] -[assembly: System.Reflection.AssemblyConfigurationAttribute("Release")] -[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+628aaa28d624617fa99246a08ba27d1e41ad1224")] -[assembly: System.Reflection.AssemblyProductAttribute("Server")] -[assembly: System.Reflection.AssemblyTitleAttribute("Server")] -[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] - -// Generated by the MSBuild WriteCodeFragment class. - diff --git a/Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache b/Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache deleted file mode 100644 index 18e564e4..00000000 --- a/Server/obj/Release/net9.0/Server.AssemblyInfoInputs.cache +++ /dev/null @@ -1 +0,0 @@ -d1ead1308e8f75765129c077da2a072b566e809c3026fff8f716d77b45387aa5 diff --git a/Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig b/Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig deleted file mode 100644 index 36da3aa3..00000000 --- a/Server/obj/Release/net9.0/Server.GeneratedMSBuildEditorConfig.editorconfig +++ /dev/null @@ -1,21 +0,0 @@ -is_global = true -build_property.TargetFramework = net9.0 -build_property.TargetPlatformMinVersion = -build_property.UsingMicrosoftNETSdkWeb = true -build_property.ProjectTypeGuids = -build_property.InvariantGlobalization = -build_property.PlatformNeutralAssembly = -build_property.EnforceExtendedAnalyzerRules = -build_property._SupportedPlatformList = Linux,macOS,Windows -build_property.RootNamespace = Server -build_property.RootNamespace = Server -build_property.ProjectDir = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server\ -build_property.EnableComHosting = -build_property.EnableGeneratedComInterfaceComImportInterop = -build_property.RazorLangVersion = 9.0 -build_property.SupportLocalizedComponentNames = -build_property.GenerateRazorMetadataSourceChecksumAttributes = -build_property.MSBuildProjectDirectory = C:\Users\povindu.samarasekara\SuperOffice\docs-next\Server -build_property._RazorSourceGeneratorDebug = -build_property.EffectiveAnalysisLevelStyle = 9.0 -build_property.EnableCodeStyleSeverity = diff --git a/Server/obj/Release/net9.0/Server.GlobalUsings.g.cs b/Server/obj/Release/net9.0/Server.GlobalUsings.g.cs deleted file mode 100644 index 025530a2..00000000 --- a/Server/obj/Release/net9.0/Server.GlobalUsings.g.cs +++ /dev/null @@ -1,17 +0,0 @@ -// -global using global::Microsoft.AspNetCore.Builder; -global using global::Microsoft.AspNetCore.Hosting; -global using global::Microsoft.AspNetCore.Http; -global using global::Microsoft.AspNetCore.Routing; -global using global::Microsoft.Extensions.Configuration; -global using global::Microsoft.Extensions.DependencyInjection; -global using global::Microsoft.Extensions.Hosting; -global using global::Microsoft.Extensions.Logging; -global using global::System; -global using global::System.Collections.Generic; -global using global::System.IO; -global using global::System.Linq; -global using global::System.Net.Http; -global using global::System.Net.Http.Json; -global using global::System.Threading; -global using global::System.Threading.Tasks; diff --git a/Server/obj/Release/net9.0/Server.assets.cache b/Server/obj/Release/net9.0/Server.assets.cache deleted file mode 100644 index 62ac05fe946644ad038270dd6a8f8deadb0b0ec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1889 zcmc(g&2G~`5XS>JO;Tu~4J|z&6cCk)kTxWhLd%ILRip3`A`*Jq%O>8YtFFB(@49Lv zPQVHA4BSBC!i_6Wz=3z*#9J`aI?X~uQ8}a|{cW#3yZ(7*cHDYguU<-}Qtuz$_`0&n zKEC;W`}L<+n*1oe`}ui#wX=BhOZLv&Z;w8t!6~uxaDG{PKwlUh8LHKu2>qBC7O;pJ zz6(c6!nn^Z)vUM6`rOb!^de={wk6EyklUV$I8mC1ObfbB?vVy&&oI?at7oV&RGt1ziSR0U-@JT}oj_st!|Hk?Kb*C~OMJO<}pbw!c zOpDo_MwpcMUFf;R!=76_Y1?AYJ-*|o4m;&avWU|uoyD9^=`~rvGYL+MQCB<;C%HjWu`gI diff --git a/Server/obj/Release/net9.0/Server.csproj.AssemblyReference.cache b/Server/obj/Release/net9.0/Server.csproj.AssemblyReference.cache deleted file mode 100644 index ecc4b443190094a32926c781be5463cd70b1b9aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1234 zcmZQ$WMW`oV61VriU}=FEh>&F$S=#xODWYWPRva#N-R#z29hy)d8O&8B{2nw$=QkN zsl_q5naM@@#rbI^dWppad8sAI`9-OE`30$Yi3OQ4mU;$yW-&RLNijefAScEbuG+D< zz%RAL8Kl}DsM@h0Q!gbahmjHJ1ctt=t!-29axgM7%HY$$$O%#m1Z)tB0i+p>>wyfG z1}LY6F)cGE)k@$6AKGTQzOdsYmeSALC2m4GP=retY&-C#*6zsDF3_zd) zan}?elMNKwKz>lLqagze$gPYFpRF`m{8wIgIJsHTYVy;XmMujm{J6XLq@MJpul(`t z-rV?l+n_bdPr8muFn+u3h7LgJ^UibNE>fN}ftlksPC-1h&+F@U` z+G_nvTmHj`OuEbb*KgQ(pxE}QNaVWJZV}8a`{$M%dDNJ){p=(69}{=6cgoCd*SfTu zkpt+awL2>eEH&$9&wg`Rcf(SoDRe_TvD1`}voeND=Acv!* zvT{lj8Po&%5D&nT7Lo^$k{GfF7J!^ZAYDzZ+0xv;Y3W!0n8%YsKlZC#*0P+*yQ$_& zyZQQKdy-0Lubj4H(f)0vS02x|WqY$VO1xXz!SK$e<>`-Rmfz?(*XG45w*TPfeY^SY z&wteVk^ldJ74eg=rTk)D&;D!is!LB@C3N>!)Y)Iw4qLM__T%Cs&tu<+dD%<(q}ooG zX8eD6-sU6VbY&mzJSDm8gA-#YMi?U!6U6t#q$cAuQ*#qzOA|9=bF(x96C+SCprs}N Dvl6Dy diff --git a/Server/obj/Server.csproj.nuget.dgspec.json b/Server/obj/Server.csproj.nuget.dgspec.json deleted file mode 100644 index 3d02cfbf..00000000 --- a/Server/obj/Server.csproj.nuget.dgspec.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "format": 1, - "restore": { - "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj": {} - }, - "projects": { - "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", - "projectName": "Server", - "projectPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", - "packagesPath": "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\", - "outputPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\povindu.samarasekara\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.200" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.AspNetCore.OpenApi": { - "target": "Package", - "version": "[9.0.6, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.AspNetCore.App": { - "privateAssets": "none" - }, - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.205/PortableRuntimeIdentifierGraph.json" - } - } - } - } -} \ No newline at end of file diff --git a/Server/obj/Server.csproj.nuget.g.props b/Server/obj/Server.csproj.nuget.g.props deleted file mode 100644 index a54028f1..00000000 --- a/Server/obj/Server.csproj.nuget.g.props +++ /dev/null @@ -1,16 +0,0 @@ - - - - True - NuGet - $(MSBuildThisFileDirectory)project.assets.json - $(UserProfile)\.nuget\packages\ - C:\Users\povindu.samarasekara\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages - PackageReference - 6.13.2 - - - - - - \ No newline at end of file diff --git a/Server/obj/Server.csproj.nuget.g.targets b/Server/obj/Server.csproj.nuget.g.targets deleted file mode 100644 index 3dc06ef3..00000000 --- a/Server/obj/Server.csproj.nuget.g.targets +++ /dev/null @@ -1,2 +0,0 @@ - - \ No newline at end of file diff --git a/Server/obj/project.assets.json b/Server/obj/project.assets.json deleted file mode 100644 index 9ace5663..00000000 --- a/Server/obj/project.assets.json +++ /dev/null @@ -1,155 +0,0 @@ -{ - "version": 3, - "targets": { - "net9.0": { - "Microsoft.AspNetCore.OpenApi/9.0.6": { - "type": "package", - "dependencies": { - "Microsoft.OpenApi": "1.6.17" - }, - "compile": { - "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { - "related": ".xml" - } - }, - "runtime": { - "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll": { - "related": ".xml" - } - }, - "frameworkReferences": [ - "Microsoft.AspNetCore.App" - ] - }, - "Microsoft.OpenApi/1.6.17": { - "type": "package", - "compile": { - "lib/netstandard2.0/Microsoft.OpenApi.dll": { - "related": ".pdb;.xml" - } - }, - "runtime": { - "lib/netstandard2.0/Microsoft.OpenApi.dll": { - "related": ".pdb;.xml" - } - } - } - } - }, - "libraries": { - "Microsoft.AspNetCore.OpenApi/9.0.6": { - "sha512": "MOJ4DG1xd3NlWMYh+JdGNT9uvBtEk1XQU/FQlpNZFlAzM8t0oB5IimvnGlnK7jmyY4vQagLPB1xw1HjJ8CHrZg==", - "type": "package", - "path": "microsoft.aspnetcore.openapi/9.0.6", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "Icon.png", - "PACKAGE.md", - "THIRD-PARTY-NOTICES.TXT", - "lib/net9.0/Microsoft.AspNetCore.OpenApi.dll", - "lib/net9.0/Microsoft.AspNetCore.OpenApi.xml", - "microsoft.aspnetcore.openapi.9.0.6.nupkg.sha512", - "microsoft.aspnetcore.openapi.nuspec" - ] - }, - "Microsoft.OpenApi/1.6.17": { - "sha512": "Le+kehlmrlQfuDFUt1zZ2dVwrhFQtKREdKBo+rexOwaCoYP0/qpgT9tLxCsZjsgR5Itk1UKPcbgO+FyaNid/bA==", - "type": "package", - "path": "microsoft.openapi/1.6.17", - "files": [ - ".nupkg.metadata", - ".signature.p7s", - "README.md", - "lib/netstandard2.0/Microsoft.OpenApi.dll", - "lib/netstandard2.0/Microsoft.OpenApi.pdb", - "lib/netstandard2.0/Microsoft.OpenApi.xml", - "microsoft.openapi.1.6.17.nupkg.sha512", - "microsoft.openapi.nuspec" - ] - } - }, - "projectFileDependencyGroups": { - "net9.0": [ - "Microsoft.AspNetCore.OpenApi >= 9.0.6" - ] - }, - "packageFolders": { - "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\": {}, - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {} - }, - "project": { - "version": "1.0.0", - "restore": { - "projectUniqueName": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", - "projectName": "Server", - "projectPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", - "packagesPath": "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\", - "outputPath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\obj\\", - "projectStyle": "PackageReference", - "fallbackFolders": [ - "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages" - ], - "configFilePaths": [ - "C:\\Users\\povindu.samarasekara\\AppData\\Roaming\\NuGet\\NuGet.Config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config", - "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config" - ], - "originalTargetFrameworks": [ - "net9.0" - ], - "sources": { - "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {}, - "https://api.nuget.org/v3/index.json": {} - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "projectReferences": {} - } - }, - "warningProperties": { - "warnAsError": [ - "NU1605" - ] - }, - "restoreAuditProperties": { - "enableAudit": "true", - "auditLevel": "low", - "auditMode": "direct" - }, - "SdkAnalysisLevel": "9.0.200" - }, - "frameworks": { - "net9.0": { - "targetAlias": "net9.0", - "dependencies": { - "Microsoft.AspNetCore.OpenApi": { - "target": "Package", - "version": "[9.0.6, )" - } - }, - "imports": [ - "net461", - "net462", - "net47", - "net471", - "net472", - "net48", - "net481" - ], - "assetTargetFallback": true, - "warn": true, - "frameworkReferences": { - "Microsoft.AspNetCore.App": { - "privateAssets": "none" - }, - "Microsoft.NETCore.App": { - "privateAssets": "all" - } - }, - "runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.205/PortableRuntimeIdentifierGraph.json" - } - } - } -} \ No newline at end of file diff --git a/Server/obj/project.nuget.cache b/Server/obj/project.nuget.cache deleted file mode 100644 index 0540ce9a..00000000 --- a/Server/obj/project.nuget.cache +++ /dev/null @@ -1,11 +0,0 @@ -{ - "version": 2, - "dgSpecHash": "Fc1c9yve6dc=", - "success": true, - "projectFilePath": "C:\\Users\\povindu.samarasekara\\SuperOffice\\docs-next\\Server\\Server.csproj", - "expectedPackageFiles": [ - "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\microsoft.aspnetcore.openapi\\9.0.6\\microsoft.aspnetcore.openapi.9.0.6.nupkg.sha512", - "C:\\Users\\povindu.samarasekara\\.nuget\\packages\\microsoft.openapi\\1.6.17\\microsoft.openapi.1.6.17.nupkg.sha512" - ], - "logs": [] -} \ No newline at end of file From c4f1647af8b6e2471f7aa1edc4d7fa9233bf052b Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 11:01:57 +0530 Subject: [PATCH 03/49] feat: updated astro build script and baseurl --- ClientApp/astro.config.mjs | 2 +- ClientApp/build/local-build-script.mjs | 23 +++++++++++++++++++---- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/ClientApp/astro.config.mjs b/ClientApp/astro.config.mjs index df572459..49a6fc1f 100644 --- a/ClientApp/astro.config.mjs +++ b/ClientApp/astro.config.mjs @@ -130,6 +130,6 @@ export default defineConfig({ }, logLevel: process.env.CI ? 'error' : 'info', site: "https://superofficedocs.github.io", - base: "/docs-next", + // base: "/", trailingSlash: "never", }); diff --git a/ClientApp/build/local-build-script.mjs b/ClientApp/build/local-build-script.mjs index 210d346e..af2a9b99 100644 --- a/ClientApp/build/local-build-script.mjs +++ b/ClientApp/build/local-build-script.mjs @@ -1,6 +1,15 @@ import { execSync } from "child_process"; import { cpSync, rmSync, existsSync } from "fs"; import path from "path"; +import { fileURLToPath } from "url"; + +// Work out project root +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const clientRoot = path.resolve(__dirname, ".."); + +// Paths to local binaries +const astroBin = path.join(clientRoot, "node_modules", ".bin", "astro"); +const pagefindBin = path.join(clientRoot, "node_modules", ".bin", "pagefind"); // Paths const distDir = path.resolve("dist"); @@ -14,12 +23,18 @@ const distB = path.resolve(".distB"); // First build with API_ONLY=true console.log("Building with API_ONLY=true"); -execSync("cross-env API_ONLY=false astro build", { stdio: "inherit" }); +execSync(`"${astroBin}" build`, { + stdio: "inherit", + env: { ...process.env, API_ONLY: "true" }, +}); cpSync(distDir, distA, { recursive: true }); // Second build with API_ONLY=false console.log("Building with API_ONLY=false"); -execSync("cross-env API_ONLY=false astro build", { stdio: "inherit" }); +execSync(`"${astroBin}" build`, { + stdio: "inherit", + env: { ...process.env, API_ONLY: "false" }, +}); cpSync(distDir, distB, { recursive: true }); // Merge outputs @@ -27,13 +42,13 @@ console.log("Merging distA and distB into dist..."); cpSync(distA, distDir, { recursive: true }); cpSync(distB, distDir, { recursive: true }); -// Cleanup tempory dir adter merging +// Cleanup temporary dirs after merging [distA, distB].forEach((dir) => { if (existsSync(dir)) rmSync(dir, { recursive: true, force: true }); }); // Pagefind Indexing console.log("Indexing with Pagefind"); -execSync("npx pagefind --site dist", { stdio: "inherit" }); +execSync(`"${pagefindBin}" --site dist`, { stdio: "inherit" }); console.log("Completed. Final merged build is in dist/"); From ebe76283de03922f8d9ea135b17d94d35171377d Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 11:02:48 +0530 Subject: [PATCH 04/49] feat: updated landing page links --- ClientApp/src/data/audience.ts | 10 +-- ClientApp/src/data/navigation.ts | 130 +++++++++++++++---------------- 2 files changed, 69 insertions(+), 71 deletions(-) diff --git a/ClientApp/src/data/audience.ts b/ClientApp/src/data/audience.ts index c318ebf9..31f0e53e 100644 --- a/ClientApp/src/data/audience.ts +++ b/ClientApp/src/data/audience.ts @@ -1,29 +1,27 @@ -const base = import.meta.env.BASE_URL; - export const audienceTypes = { audience: [ { "title": "SuperUser", "description": "A person who has system administrative privilege's and special functional and data access rights for managing how SuperOffice behaves. The friend you need to tweak the system!", - "href": `${base}/en/learn/customization`, + "href": `en/learn/customization`, "color": "bg-seaFoamGreen" }, { "title": "Administrator", "description": "A person who is primarily responsible for the setup, configuration, maintenance of operation of SuperOffice in an organization. The guy you call when shit hits the fan!", - "href": `${base}/en/onsite`, + "href": `en/onsite`, "color": "bg-mistBlue" }, { "title": "Consultant", "description": "A person who works with companies to improve their use of SuperOffice to achieve business goals and an expert in all technical aspects of SuperOffice. Hired to provide advice, solve problems and increase efficiency.", - "href": `${base}/en/automation`, + "href": `en/automation`, "color": "bg-lightTealGray" }, { "title": "Developer", "description": "A software engineer responsible for the implementation of requirements for an application or integration, or provides advice (consultancy) as to how the an integration should be implemented using current industry trends.", - "href": `${base}/en/api`, + "href": `en/api`, "color": "bg-deepTeal" } ], diff --git a/ClientApp/src/data/navigation.ts b/ClientApp/src/data/navigation.ts index cb008b1a..b7cf0a4c 100644 --- a/ClientApp/src/data/navigation.ts +++ b/ClientApp/src/data/navigation.ts @@ -5,95 +5,95 @@ export const headerData = { links: [ { text: 'Learn', - href: "/en/learn" + href: "en/learn" }, { text: 'Areas', links: [ { text: 'Company', - href: '/en/company', + href: 'en/company', }, { text: 'Contact', - href: '/en/contact', + href: 'en/contact', }, { text: 'Diary', - href: '/en/diary', + href: 'en/diary', }, { text: 'Document', - href: '/en/document', + href: 'en/document', }, { text: 'Email', - href: '/en/email', + href: 'en/email', }, { text: 'Project', - href: '/en/project', + href: 'en/project', }, { text: 'Request', - href: '/en/request', + href: 'en/request', }, { text: 'Sale', - href: '/en/sale', + href: 'en/sale', }, ], }, { text: 'CRM Online', - href: '/en/online', + href: 'en/online', }, { text: 'CRM Onsite', - href: '/en/onsite', + href: 'en/onsite', }, { text: 'Developer Guide', links: [ { text: 'Overview', - href: '/en/api', + href: 'en/api', }, { text: 'Introduction to APIs', - href: '/en/api/overview', + href: 'en/api/overview', }, { text: 'Automaton / CRMScript', - href: '/en/automation', + href: 'en/automation', }, { text: 'Configurable screens (Sales)', - href: '/en/ui/screen-designer/learn', + href: 'en/ui/screen-designer/learn', }, { text: 'Custom screens (Service)', - href: '/en/ui/blogic/custom-screens', + href: 'en/ui/blogic/custom-screens', }, { text: 'Database overview', - href: '/en/database/getting-started', + href: 'en/database/getting-started', }, { text: 'Developer Portal', - href: '/en/developer-portal', + href: 'en/developer-portal', }, { text: 'Search APIs', - href: '/en/api/netserver/search', + href: 'en/api/netserver/search', }, { text: 'Webhooks', - href: '/en/automation/webhook', + href: 'en/automation/webhook', }, { text: 'Web Services', - href: '/en/api/netserver/web-services', + href: 'en/api/netserver/web-services', }, ], }, @@ -106,73 +106,73 @@ export const heroItems = { title: "Learn", description: "Product knowledge-base to learn concepts, features and solve issues.", icon: "mdi:learn-outline", - url: "/en/learn" + url: "en/learn" }, { title: "CRM Online", description: "Learn all about SuperOffice CRM offering for the cloud.", icon: "fluent:phone-laptop-32-regular", - url: "/en/online" + url: "en/online" }, { title: "CRM Onsite", description: "Learn how to install SuperOffice in your on premise organization.", icon: "mdi:business", - url: "/en/onsite" + url: "en/onsite" }, { title: "Release Notes", description: "Contains the history of product and API changes.", icon: "material-symbols-light:release-alert-outline", - url: "/release-notes" + url: "release-notes" }, { title: "SuperOffice APIs", description: "Introduction to all extensibility and integration points.", icon: "material-symbols-light:api", - url: "/en/api" + url: "en/api" }, { title: "Developer Portal", description: "Learn how to create online applications.", icon: "material-symbols-light:developer-mode-tv-outline", - url: "/en/developer-portal" + url: "en/developer-portal" }, { title: "Customer Service", description: "Learn all about SuperOffice Service.", icon: "material-symbols-light:support-agent-outline", - url: "/en/service" + url: "en/service" }, { title: "Email and communication", description: "Great customer relations start with great communication.", icon: "mdi:email-outline", - url: "/en/email" + url: "en/email" } ], }; export const areasOfInterest = { "links": [ - { "text": "Admin", "href": "/en/admin/overview" }, - { "text": "Artificial Intelligence", "href": "/en/ai" }, - { "text": "Automation", "href": "/en/automation" }, - { "text": "Company", "href": "/en/company" }, - { "text": "Contact", "href": "/en/contact" }, - { "text": "CRMScript", "href": "/en/automation/crmscript" }, - { "text": "Customer Service", "href": "/en/service" }, - { "text": "Database Mirroring", "href": "/en/online/mirroring/overview" }, - { "text": "Diary", "href": "/en/diary" }, - { "text": "Document", "href": "/en/document" }, - { "text": "Globalization", "href": "/en/globalization-and-localization" }, - { "text": "Mobile", "href": "/en/mobile" }, - { "text": "Project", "href": "/en/project" }, - { "text": "Request Management", "href": "/en/request" }, - { "text": "Sale", "href": "/en/sale" }, - { "text": "Security", "href": "/en/security" }, - { "text": "Video Meetings", "href": "/en/diary/video-meeting" }, - { "text": "WebTools", "href": "/en/document/webtools" } + { "text": "Admin", "href": "en/admin/overview" }, + { "text": "Artificial Intelligence", "href": "en/ai" }, + { "text": "Automation", "href": "en/automation" }, + { "text": "Company", "href": "en/company" }, + { "text": "Contact", "href": "en/contact" }, + { "text": "CRMScript", "href": "en/automation/crmscript" }, + { "text": "Customer Service", "href": "en/service" }, + { "text": "Database Mirroring", "href": "en/online/mirroring/overview" }, + { "text": "Diary", "href": "en/diary" }, + { "text": "Document", "href": "en/document" }, + { "text": "Globalization", "href": "en/globalization-and-localization" }, + { "text": "Mobile", "href": "en/mobile" }, + { "text": "Project", "href": "en/project" }, + { "text": "Request Management", "href": "en/request" }, + { "text": "Sale", "href": "en/sale" }, + { "text": "Security", "href": "en/security" }, + { "text": "Video Meetings", "href": "en/diary/video-meeting" }, + { "text": "WebTools", "href": "en/document/webtools" } ] }; @@ -184,19 +184,19 @@ export const quickAccessShortcuts = { subLinks : [ { title : "System requirements", - link : `${base}/en/onsite/requirements` + link : `en/onsite/requirements` }, { title : "Security concerns", - link : `${base}/en/onsite/security` + link : `en/onsite/security` }, { title : "Onsite topics", - link : `${base}/en/onsite` + link : `en/onsite` }, { title : "Online migration", - link : `${base}/en/online/migrate` + link : `en/online/migrate` } ] }, @@ -205,19 +205,19 @@ export const quickAccessShortcuts = { subLinks : [ { title : "CRM Server", - link : `${base}/en/onsite/install/server` + link : `en/onsite/install/server` }, { title : "Web applications", - link : `${base}/en/onsite/install/web-client` + link : `en/onsite/install/web-client` }, { title : "Web tools", - link : `${base}/en/document/webtools` + link : `en/document/webtools` }, { title : "Mobile application", - link : `${base}/en/mobile/overview` + link : `en/mobile/overview` } ] }, @@ -226,23 +226,23 @@ export const quickAccessShortcuts = { subLinks : [ { title : "NetServer Configuration", - link : `${base}/en/api/netserver/config` + link : `en/api/netserver/config` }, { title : "Document template variables", - link : `${base}/en/document/templates/variables` + link : `en/document/templates/variables` }, { title : "Service reply templates", - link : `${base}/en/request/reply-templates` + link : `en/request/reply-templates` }, { title : "Batch task service", - link : `${base}/en/onsite/batch-task-server` + link : `en/onsite/batch-task-server` }, { title : "INI files", - link : `${base}/en/onsite/config` + link : `en/onsite/config` } ] }, @@ -251,11 +251,11 @@ export const quickAccessShortcuts = { subLinks : [ { title : "Register online developer account", - link : `${base}/en/onsite/requirements` + link : `en/onsite/requirements` }, { title : "Developer portal", - link : `${base}/en/onsite/security` + link : `en/onsite/security` }, ] }, @@ -266,11 +266,11 @@ export const footerData = { links: [ { text: 'SuperOffice', href: 'https://www.superoffice.com/' }, { text: 'Community', href: 'https://community.superoffice.com' }, - { text: 'Release Notes', href: `${base}/release-notes` }, + { text: 'Release Notes', href: `release-notes` }, { text: 'Privacy', href: 'https://www.superoffice.com/company/privacy/' }, { text: 'Site feedback', href: 'https://github.com/SuperOfficeDocs/feedback/issues/new?title=Feedback%20for%20SuperOffice%20Docs&body=%0A%0A%5BEnter%20feedback%20here%5D%0A%0A%0A---%0A%23%23%23%23%20Document%20Details%0A%0A%E2%9A%A0%20*Do%20not%20edit%20this%20section.%20It%20is%20required%20for%20docs.superOffice.com%20%E2%9E%9F%20Docs%20Team%20processing.*%0A%0A*%20Content%20Source%3A%20%5BSuperOffice%20Docs%5D(https%3A%2F%2Fdocs.superoffice.com)'}, - { text: 'About', href: `${base}/about` }, - { text: 'Contribute', href:`${base}/contribute/overview`}, + { text: 'About', href: `about` }, + { text: 'Contribute', href:`contribute/overview`}, { text: 'Back to top', href:'#'} ], }; From d023795962fe7fa68b9a71abdad85bcd6af5c5ed Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 11:05:05 +0530 Subject: [PATCH 05/49] feat: setup controllers and test health api endpoint --- Server/Controllers/Health.cs | 19 +++++++++++++ Server/Program.cs | 52 +++++++++++++++--------------------- Server/Server.csproj | 25 ++++++++++++++++- Server/Server.csproj.user | 2 ++ Server/Server.http | 5 ---- 5 files changed, 67 insertions(+), 36 deletions(-) create mode 100644 Server/Controllers/Health.cs diff --git a/Server/Controllers/Health.cs b/Server/Controllers/Health.cs new file mode 100644 index 00000000..5ea96d38 --- /dev/null +++ b/Server/Controllers/Health.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Mvc; + +namespace Server.Controllers +{ + [ApiController] + [Route("api")] + public class TestController : ControllerBase + { + [HttpGet("health")] + public IActionResult Health() { + return Ok( + new { + status = "ok", + now = DateTime.UtcNow + } + ); + } + } +} \ No newline at end of file diff --git a/Server/Program.cs b/Server/Program.cs index ee9d65d6..fcb315e9 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -1,41 +1,33 @@ var builder = WebApplication.CreateBuilder(args); -// Add services to the container. -// Learn more about configuring OpenAPI at https://aka.ms/aspnet/openapi -builder.Services.AddOpenApi(); +builder.Services.AddControllers(); var app = builder.Build(); -// Configure the HTTP request pipeline. -if (app.Environment.IsDevelopment()) -{ - app.MapOpenApi(); -} - app.UseHttpsRedirection(); +app.UseRouting(); +app.UseAuthorization(); +app.MapControllers(); -var summaries = new[] -{ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" -}; -app.MapGet("/weatherforecast", () => +if (app.Environment.IsDevelopment()) { - var forecast = Enumerable.Range(1, 5).Select(index => - new WeatherForecast - ( - DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - Random.Shared.Next(-20, 55), - summaries[Random.Shared.Next(summaries.Length)] - )) - .ToArray(); - return forecast; -}) -.WithName("GetWeatherForecast"); - -app.Run(); - -record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary) + app.UseWhen( + context => !context.Request.Path.StartsWithSegments("/api"), + spaApp => + { + spaApp.UseSpa(spa => + { + spa.Options.SourcePath = "../ClientApp"; + spa.UseProxyToSpaDevelopmentServer("http://localhost:4321"); + }); + }); +} +else { - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); + app.UseDefaultFiles(); + app.UseStaticFiles(); + app.MapFallbackToFile("/index.html"); } + +app.Run(); diff --git a/Server/Server.csproj b/Server/Server.csproj index 06f4aab1..90c7d420 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -4,10 +4,33 @@ net9.0 enable enable + + + $(MSBuildThisFileDirectory)..\ClientApp\ + $(ClientAppDir)dist\ + wwwroot\ + + + + + + + + + - + + + + + + + + + + diff --git a/Server/Server.csproj.user b/Server/Server.csproj.user index 9ff5820a..031db340 100644 --- a/Server/Server.csproj.user +++ b/Server/Server.csproj.user @@ -2,5 +2,7 @@ https + MvcControllerEmptyScaffolder + root/Common/MVC/Controller \ No newline at end of file diff --git a/Server/Server.http b/Server/Server.http index a40ff099..484f22e7 100644 --- a/Server/Server.http +++ b/Server/Server.http @@ -1,6 +1 @@ @Server_HostAddress = http://localhost:5215 - -GET {{Server_HostAddress}}/weatherforecast/ -Accept: application/json - -### From 60d94f708f36055eb11b2e174ed89ab22427d5e3 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 11:05:27 +0530 Subject: [PATCH 06/49] feat: added readme --- README.md | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..2a77d1ca --- /dev/null +++ b/README.md @@ -0,0 +1,91 @@ +# ASP.NET Core Backend + Astro Frontend + +This repository contains two main projects: + +- **Backend**: ASP.NET Core Web API (serves APIs in Development and frontend + API's in Production). +- **Frontend**: Astro application (served via dev server in development; built and served from `wwwroot` in production). + +## Project Structure +``` +/docs-next +├──ClientApp/ # Astro frontend +├──Server/ # ASP.NET Core Backend +└──... +``` + +## Development Setup + +### 1. Prerequisites +- [.NET 9 SDK](https://dotnet.microsoft.com/download) +- [Node.js (LTS or latest)](https://nodejs.org/en/) +- [npm](https://www.npmjs.com/) + + +### 2. Install dependencies + +#### Backend + +```bash +cd Server +dotnet restore +``` + +Frontend +```bash +cd ClientApp +npm install +``` + +### 3. Run Development Servers + +#### Backend (with API and proxy to frontend) + +From docs-next/Server: +```bash +dotnet run +``` + +By default API runs at: http://localhost:5215/api. Any non-API request is proxied to the frontend dev server. + +#### Frontend (Astro dev server) + +From docs-next/ClientApp: + +```bash +npm run dev +``` + +By default Frontend dev server runs at: http://localhost:4321. The backend proxies requests to it, so you only need to visit: http://localhost:5215 + +/api/... → handled by backend. + +Any other path → served by Astro dev server. + +### 4. Run Production Build + +1. Build Backend (includes frontend) + +From root: +```bash +dotnet publish -c Release -o out +``` + +2. Run Published App + +```bash +cd out +dotnet docs-next.dll +``` + + +API: https://localhost:5001/api/... +Frontend: served from wwwroot + +### Notes +In development, run both servers: + + dotnet run (backend + proxy) + + npm run dev (frontend) + +In production run only the backend. It serves the built frontend automatically from wwwroot. From 18b35e6345cb386306d9e57a4ce564b7c564c872 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 15:49:40 +0530 Subject: [PATCH 07/49] feat: updated server.csproj --- Server/Server.csproj | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/Server/Server.csproj b/Server/Server.csproj index 90c7d420..470b53a5 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -11,26 +11,26 @@ wwwroot\ - - - - - - - - - - - - - + + + + + + + + + + + + - + From ac004fec21d306e858e1744622ece25f07d63b6a Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 15:50:17 +0530 Subject: [PATCH 08/49] cicd: moved and updated workflows --- .../ISSUE_TEMPLATE/bug_report.md | 0 .../ISSUE_TEMPLATE/epic.md | 0 .../ISSUE_TEMPLATE/feature.md | 0 .../ISSUE_TEMPLATE/user-story.md | 0 .../.github => .github}/workflows/deploy.yml | 42 ++++++++----------- .../workflows/main_docs-next.yml | 32 ++++++++------ 6 files changed, 36 insertions(+), 38 deletions(-) rename {ClientApp/.github => .github}/ISSUE_TEMPLATE/bug_report.md (100%) rename {ClientApp/.github => .github}/ISSUE_TEMPLATE/epic.md (100%) rename {ClientApp/.github => .github}/ISSUE_TEMPLATE/feature.md (100%) rename {ClientApp/.github => .github}/ISSUE_TEMPLATE/user-story.md (100%) rename {ClientApp/.github => .github}/workflows/deploy.yml (75%) rename {ClientApp/.github => .github}/workflows/main_docs-next.yml (70%) diff --git a/ClientApp/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md similarity index 100% rename from ClientApp/.github/ISSUE_TEMPLATE/bug_report.md rename to .github/ISSUE_TEMPLATE/bug_report.md diff --git a/ClientApp/.github/ISSUE_TEMPLATE/epic.md b/.github/ISSUE_TEMPLATE/epic.md similarity index 100% rename from ClientApp/.github/ISSUE_TEMPLATE/epic.md rename to .github/ISSUE_TEMPLATE/epic.md diff --git a/ClientApp/.github/ISSUE_TEMPLATE/feature.md b/.github/ISSUE_TEMPLATE/feature.md similarity index 100% rename from ClientApp/.github/ISSUE_TEMPLATE/feature.md rename to .github/ISSUE_TEMPLATE/feature.md diff --git a/ClientApp/.github/ISSUE_TEMPLATE/user-story.md b/.github/ISSUE_TEMPLATE/user-story.md similarity index 100% rename from ClientApp/.github/ISSUE_TEMPLATE/user-story.md rename to .github/ISSUE_TEMPLATE/user-story.md diff --git a/ClientApp/.github/workflows/deploy.yml b/.github/workflows/deploy.yml similarity index 75% rename from ClientApp/.github/workflows/deploy.yml rename to .github/workflows/deploy.yml index 5440660f..0a5ab69c 100644 --- a/ClientApp/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,39 +1,25 @@ -# workflow for deploying astro project to GitHub Pages name: Build & Deploy docs-next to Github Pages on: - # Runs on pull requests and manual invocations for targeted bran pull_request: - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: inputs: target_branch: description: 'Branch to run the workflow on' required: false default: '' - - # Runs on pushes targeting the default branch push: branches: ["main"] -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do not cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false -# Application is built using 2 jobs which focuses on different content files. -# build-main is built using every content except en/api and build-api only build with en/api content. -# Both build jobs clones 3 repos - SuperOfficeDocs/docs-next, SuperOfficeDocs/superoffice-docs, SuperOfficeDocs/contribution -# Both build jobs outputs respective artifacts - artifact-main and artifact-api - jobs: build-main: runs-on: ubuntu-latest @@ -48,29 +34,33 @@ jobs: with: fetch-depth: 1 repository: SuperOfficeDocs/contribution - path: external-content/contribution + path: ClientApp/external-content/contribution + - name: Checkout SuperOfficeDocs repo uses: actions/checkout@v4 with: fetch-depth: 1 repository: SuperOfficeDocs/superoffice-docs - path: external-content/superoffice-docs + path: ClientApp/external-content/superoffice-docs - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: 'npm' + cache-dependency-path: ClientApp/package-lock.json - run: npm ci + working-directory: ClientApp - name: Build Astro excluding API + working-directory: ClientApp env: API_ONLY: 'false' run: | npm run build - mkdir -p dist-out - cp -r dist/* dist-out/ + mkdir -p ../dist-out + cp -r dist/* ../dist-out/ - name: Upload main artifact uses: actions/upload-artifact@v4 @@ -93,30 +83,33 @@ jobs: with: fetch-depth: 1 repository: SuperOfficeDocs/contribution - path: external-content/contribution + path: ClientApp/external-content/contribution - name: Checkout SuperOfficeDocs repo uses: actions/checkout@v4 with: fetch-depth: 1 repository: SuperOfficeDocs/superoffice-docs - path: external-content/superoffice-docs + path: ClientApp/external-content/superoffice-docs - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: 'npm' + cache-dependency-path: ClientApp/package-lock.json - run: npm ci + working-directory: ClientApp - name: Build Astro API only + working-directory: ClientApp env: API_ONLY: 'true' run: | npm run build - mkdir -p dist-out - cp -r dist/* dist-out/ + mkdir -p ../dist-out + cp -r dist/* ../dist-out/ - name: Upload API artifact uses: actions/upload-artifact@v4 @@ -124,7 +117,6 @@ jobs: name: artifact-api path: dist-out - # deploy job downloads artifacts from build jobs, merge them in to one directory, create search index, and deploy to github pages deploy: needs: [build-main, build-api] runs-on: ubuntu-latest @@ -163,7 +155,7 @@ jobs: - name: Index pages using Pagefind run: npx pagefind --site final-dist - + - name: Check if the PR originates from source repo id: check_pr_source run: | @@ -188,4 +180,4 @@ jobs: - name: Deploy to GitHub Pages if: steps.check_pr_source.outputs.skip_deploy == 'false' id: deployment - uses: actions/deploy-pages@v4 \ No newline at end of file + uses: actions/deploy-pages@v4 diff --git a/ClientApp/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml similarity index 70% rename from ClientApp/.github/workflows/main_docs-next.yml rename to .github/workflows/main_docs-next.yml index 4f4adccd..2c981877 100644 --- a/ClientApp/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -1,6 +1,3 @@ -# Docs for the Azure Web Apps Deploy action: https://github.com/Azure/webapps-deploy -# More GitHub Actions for Azure: https://github.com/Azure/actions - name: Build and deploy ASP.Net Core app to Azure Web App - docs-next on: @@ -13,20 +10,30 @@ jobs: build: runs-on: ubuntu-latest permissions: - contents: read #This is required for actions/checkout + contents: read steps: - uses: actions/checkout@v4 - - name: Set up .NET Core + # Set up .NET + - name: Set up .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: '8.x' + dotnet-version: '9.x' + + # Set up Node.js (for Astro build) + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.x' + cache: 'npm' + cache-dependency-path: 'ClientApp/package-lock.json' - - name: Build with dotnet + # Build backend + frontend + - name: Restore and Build run: dotnet build --configuration Release - - name: dotnet publish + - name: Publish project (runs npm + copies frontend via MSBuild target) run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp - name: Upload artifact for deployment job @@ -39,15 +46,15 @@ jobs: runs-on: ubuntu-latest needs: build permissions: - id-token: write #This is required for requesting the JWT - contents: read #This is required for actions/checkout + id-token: write + contents: read steps: - name: Download artifact from build job uses: actions/download-artifact@v4 with: name: .net-app - + - name: Login to Azure uses: azure/login@v2 with: @@ -61,5 +68,4 @@ jobs: with: app-name: 'docs-next' slot-name: 'Production' - package: . - \ No newline at end of file + package: .net-app From 7c36cab842642ad7ecf015fc4a1b2024794b0506 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 2 Sep 2025 11:01:24 +0530 Subject: [PATCH 09/49] feat: updated gitignore --- .gitignore | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.gitignore b/.gitignore index 237fc158..05f242e2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ .vs +.vscode/ # build output +out + ClientApp/dist/ ClientApp/.distA/ @@ -13,6 +16,13 @@ ClientApp/.astro/ # dependencies ClientApp/node_modules/ + +# .NET +Server/bin/ +Server/obj/ +Server/wwwroot/ + + # logs npm-debug.log* yarn-debug.log* From d5bcb33b06857617d438a9945f82beae61cbf4cb Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 3 Sep 2025 11:26:16 +0530 Subject: [PATCH 10/49] fix: updated normalized oath in api/reference --- ClientApp/src/pages/en/api/reference/[...slug].astro | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ClientApp/src/pages/en/api/reference/[...slug].astro b/ClientApp/src/pages/en/api/reference/[...slug].astro index 1f384ece..99d6d497 100644 --- a/ClientApp/src/pages/en/api/reference/[...slug].astro +++ b/ClientApp/src/pages/en/api/reference/[...slug].astro @@ -85,9 +85,11 @@ export async function getStaticPaths() { // Convert relative path to absolute path for file reading const absoluteFilePath = path.resolve(baseContentPath, relativePath); + const normalizedPath = relativePath.replace(/\\/g, "/"); + // Generate slug from the relative path, removing base and extension // Remove "superoffice-docs/docs/en/api/reference/" and file extension to get clean slug - const cleanPath = relativePath + const cleanPath = normalizedPath .replace("superoffice-docs/docs/en/api/reference", "") .replace(/\.(md|mdx)$/, ""); const slug = cleanPath; From 9f9bc04e27d2aff0f8714f02a2c9d4e283d83d00 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 3 Sep 2025 11:27:26 +0530 Subject: [PATCH 11/49] cicd: updated gh pages workflow to on run on specific branch --- .github/workflows/{deploy.yml => gh-pages-deploy.yml} | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) rename .github/workflows/{deploy.yml => gh-pages-deploy.yml} (95%) diff --git a/.github/workflows/deploy.yml b/.github/workflows/gh-pages-deploy.yml similarity index 95% rename from .github/workflows/deploy.yml rename to .github/workflows/gh-pages-deploy.yml index 0a5ab69c..bb32fa3b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/gh-pages-deploy.yml @@ -1,15 +1,23 @@ name: Build & Deploy docs-next to Github Pages on: + # Runs only when a pull request targets deploy-to-github-pages pull_request: + branches: + - deploy-to-github-pages + + # Allows manual run workflow_dispatch: inputs: target_branch: description: 'Branch to run the workflow on' required: false default: '' + + # Runs only on pushes to deploy-to-github-pages push: - branches: ["main"] + branches: + - deploy-to-github-pages permissions: contents: read From 662605391230b313036fbd011541d19c9a812d5c Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 3 Sep 2025 14:08:38 +0530 Subject: [PATCH 12/49] feat: updated .net version to 8.0 --- Server/Server.csproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Server/Server.csproj b/Server/Server.csproj index 470b53a5..164a96d8 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -1,7 +1,7 @@ - net9.0 + net8.0 enable enable @@ -12,7 +12,7 @@ - + From c2baa5080e97754084a5231ae3375ab759eb611a Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 3 Sep 2025 14:13:17 +0530 Subject: [PATCH 13/49] cicd: updated appservice workflow --- .github/workflows/main_docs-next.yml | 34 ++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml index 2c981877..5f45e79f 100644 --- a/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -1,5 +1,4 @@ name: Build and deploy ASP.Net Core app to Azure Web App - docs-next - on: push: branches: @@ -13,13 +12,28 @@ jobs: contents: read steps: - - uses: actions/checkout@v4 + - name: Checkout docs-next + uses: actions/checkout@v4 + + - name: Checkout contribution repo + uses: actions/checkout@v4 + with: + fetch-depth: 1 + repository: SuperOfficeDocs/contribution + path: ClientApp/external-content/contribution + + - name: Checkout SuperOfficeDocs repo + uses: actions/checkout@v4 + with: + fetch-depth: 1 + repository: SuperOfficeDocs/superoffice-docs + path: ClientApp/external-content/superoffice-docs # Set up .NET - name: Set up .NET uses: actions/setup-dotnet@v4 with: - dotnet-version: '9.x' + dotnet-version: '8.x' # Set up Node.js (for Astro build) - name: Set up Node.js @@ -30,17 +44,19 @@ jobs: cache-dependency-path: 'ClientApp/package-lock.json' # Build backend + frontend - - name: Restore and Build - run: dotnet build --configuration Release + # - name: Restore and Build + # working-directory: ./Server + # run: dotnet build --configuration Release - name: Publish project (runs npm + copies frontend via MSBuild target) - run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/myapp + working-directory: ./Server + run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/out - name: Upload artifact for deployment job uses: actions/upload-artifact@v4 with: name: .net-app - path: ${{env.DOTNET_ROOT}}/myapp + path: ${{env.DOTNET_ROOT}}/out deploy: runs-on: ubuntu-latest @@ -67,5 +83,5 @@ jobs: uses: azure/webapps-deploy@v3 with: app-name: 'docs-next' - slot-name: 'Production' - package: .net-app + # slot-name: 'Production' + package: . \ No newline at end of file From 2c092c0a552fbe55c11f5e2eed50d927e6f705c8 Mon Sep 17 00:00:00 2001 From: Developer Network Date: Wed, 3 Sep 2025 14:34:17 +0200 Subject: [PATCH 14/49] Change trigger branch for workflow to feat/povindu/setup-dotnet-project --- .github/workflows/main_docs-next.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml index 5f45e79f..18b18d38 100644 --- a/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -2,7 +2,7 @@ name: Build and deploy ASP.Net Core app to Azure Web App - docs-next on: push: branches: - - main + - feat/povindu/setup-dotnet-project workflow_dispatch: jobs: @@ -84,4 +84,4 @@ jobs: with: app-name: 'docs-next' # slot-name: 'Production' - package: . \ No newline at end of file + package: . From 294031dac519abebe243ccb386226e3c01b18b9d Mon Sep 17 00:00:00 2001 From: Developer Network Date: Thu, 4 Sep 2025 09:15:40 +0200 Subject: [PATCH 15/49] Add id-token permission to build job --- .github/workflows/main_docs-next.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml index 18b18d38..291e2cd2 100644 --- a/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -9,7 +9,9 @@ jobs: build: runs-on: ubuntu-latest permissions: + id-token: write contents: read + steps: - name: Checkout docs-next From f694d5e2c1d6dea624e6d2509b23a4b3a1959efa Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 4 Sep 2025 15:02:17 +0530 Subject: [PATCH 16/49] feat: setup zip deployment --- .github/workflows/main_docs-next.yml | 28 ++++++++++++++-------------- .gitignore | 4 ++++ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml index 291e2cd2..403eea67 100644 --- a/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -45,19 +45,14 @@ jobs: cache: 'npm' cache-dependency-path: 'ClientApp/package-lock.json' - # Build backend + frontend - # - name: Restore and Build - # working-directory: ./Server - # run: dotnet build --configuration Release - - name: Publish project (runs npm + copies frontend via MSBuild target) working-directory: ./Server run: dotnet publish -c Release -o ${{env.DOTNET_ROOT}}/out - - name: Upload artifact for deployment job + - name: Upload artifact uses: actions/upload-artifact@v4 with: - name: .net-app + name: dotnet-artifact path: ${{env.DOTNET_ROOT}}/out deploy: @@ -68,22 +63,27 @@ jobs: contents: read steps: - - name: Download artifact from build job + - name: Download build artifact uses: actions/download-artifact@v4 with: - name: .net-app + name: dotnet-artifact + path: ./publish + + - name: Create deployment ZIP + run: | + cd publish + zip -r ../app.zip . + cd .. - - name: Login to Azure + - name: Azure Login (OIDC) uses: azure/login@v2 with: client-id: ${{ secrets.AZUREAPPSERVICE_CLIENTID_7D6201BE9CBA4102A67082079FA9D045 }} tenant-id: ${{ secrets.AZUREAPPSERVICE_TENANTID_E5F979726F2140149EE71D82B31CE225 }} subscription-id: ${{ secrets.AZUREAPPSERVICE_SUBSCRIPTIONID_3F73E186A6F2462480840A28C77242B0 }} - - name: Deploy to Azure Web App - id: deploy-to-webapp + - name: Deploy ZIP to Azure Web App uses: azure/webapps-deploy@v3 with: app-name: 'docs-next' - # slot-name: 'Production' - package: . + package: ./app.zip diff --git a/.gitignore b/.gitignore index 05f242e2..566f1e29 100644 --- a/.gitignore +++ b/.gitignore @@ -16,11 +16,15 @@ ClientApp/.astro/ # dependencies ClientApp/node_modules/ +# Build Log +ClientApp/build.log + # .NET Server/bin/ Server/obj/ Server/wwwroot/ +Server/publish/ # logs From f7371b5b7daa126edddf4e97f60f18a8c8e7a3a9 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 4 Sep 2025 17:12:28 +0530 Subject: [PATCH 17/49] fix: updated static file serving methid in program.cs --- Server/Program.cs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Server/Program.cs b/Server/Program.cs index fcb315e9..ec89fd96 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -25,9 +25,21 @@ } else { - app.UseDefaultFiles(); + // Serve the static Astro files + app.UseDefaultFiles(); app.UseStaticFiles(); - app.MapFallbackToFile("/index.html"); + + app.Use(async (context, next) => + { + await next(); + + if (context.Response.StatusCode == 404 && + !context.Request.Path.StartsWithSegments("/api")) + { + context.Request.Path = "/index.html"; + await next(); + } + }); } app.Run(); From 3a49516b5290858e647fdfe026ff236448deffcc Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 8 Sep 2025 17:42:28 +0530 Subject: [PATCH 18/49] fix: added redirects to .html extenstion when routing --- Server/Program.cs | 15 +++++++++++++-- Server/Server.csproj | 4 ++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Server/Program.cs b/Server/Program.cs index ec89fd96..7c971987 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -1,3 +1,5 @@ +using Microsoft.AspNetCore.Rewrite; + var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllers(); @@ -25,10 +27,19 @@ } else { - // Serve the static Astro files - app.UseDefaultFiles(); + var rewriteOptions = new RewriteOptions() + // Redirect /something.html -> /something (permanent redirect) + .AddRedirect(@"^(.*)\.html$", "$1", statusCode: 301) + // Rewrite /something -> /something.html (internal rewrite, no redirect) + .AddRewrite(@"^([^.]+)$", "$1.html", skipRemainingRules: true); + + app.UseRewriter(rewriteOptions); + + // Serve static Astro files + app.UseDefaultFiles(); app.UseStaticFiles(); + app.Use(async (context, next) => { await next(); diff --git a/Server/Server.csproj b/Server/Server.csproj index 164a96d8..fbb5bd8b 100644 --- a/Server/Server.csproj +++ b/Server/Server.csproj @@ -12,6 +12,7 @@ + @@ -29,8 +30,7 @@ - + From 199b486bbd9eb10085e0eb37b9f11393fc1fccce Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 4 Sep 2025 15:02:54 +0530 Subject: [PATCH 19/49] test build --- ClientApp/src/pages/en/api/reference/[...slug].astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientApp/src/pages/en/api/reference/[...slug].astro b/ClientApp/src/pages/en/api/reference/[...slug].astro index 99d6d497..09b24098 100644 --- a/ClientApp/src/pages/en/api/reference/[...slug].astro +++ b/ClientApp/src/pages/en/api/reference/[...slug].astro @@ -9,7 +9,7 @@ import ContentLayout from "@layouts/ContentLayout.astro"; import { renderMarkdownWithHeadingIds } from "@utils/contentUtils"; export async function getStaticPaths() { - const apiOnly = process.env.API_ONLY === "true"; + const apiOnly = process.env.API_ONLY === 'true'; if (!apiOnly) { return []; From 58ac41feaf69aa50a9ed598f28c186e81c4a5577 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 10 Sep 2025 12:14:57 +0530 Subject: [PATCH 20/49] feat: removed baseUrl variables --- ClientApp/src/components/Header.astro | 2 +- ClientApp/src/components/Search.astro | 2 +- ClientApp/src/components/TableOfContentList.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ClientApp/src/components/Header.astro b/ClientApp/src/components/Header.astro index 67eb6a99..421fc22c 100644 --- a/ClientApp/src/components/Header.astro +++ b/ClientApp/src/components/Header.astro @@ -104,7 +104,7 @@ const currentPath = `/${trimSlash(new URL(Astro.url).pathname)}`;
Date: Wed, 10 Sep 2025 13:42:37 +0530 Subject: [PATCH 21/49] feat: updated middlewware piepline in program.cs --- Server/Program.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Server/Program.cs b/Server/Program.cs index 7c971987..706f7dd0 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -1,4 +1,5 @@ using Microsoft.AspNetCore.Rewrite; +using Microsoft.AspNetCore.SpaServices; var builder = WebApplication.CreateBuilder(args); @@ -7,13 +8,14 @@ var app = builder.Build(); app.UseHttpsRedirection(); -app.UseRouting(); -app.UseAuthorization(); -app.MapControllers(); - if (app.Environment.IsDevelopment()) { + app.UseRouting(); + app.UseAuthorization(); + app.MapControllers(); + + // Proxy to Astro dev server for frontend app.UseWhen( context => !context.Request.Path.StartsWithSegments("/api"), spaApp => @@ -35,11 +37,15 @@ app.UseRewriter(rewriteOptions); - // Serve static Astro files app.UseDefaultFiles(); app.UseStaticFiles(); + app.UseRouting(); + app.UseAuthorization(); + + app.MapControllers(); + // SPA fallback for non-API paths app.Use(async (context, next) => { await next(); From 21f46158b919d3d0f1fcdcd38f253574c823e864 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 12:37:38 +0530 Subject: [PATCH 22/49] feat: updated html rewrite to exclude api paths --- Server/Program.cs | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/Server/Program.cs b/Server/Program.cs index 706f7dd0..f6c0a500 100644 --- a/Server/Program.cs +++ b/Server/Program.cs @@ -35,7 +35,13 @@ // Rewrite /something -> /something.html (internal rewrite, no redirect) .AddRewrite(@"^([^.]+)$", "$1.html", skipRemainingRules: true); - app.UseRewriter(rewriteOptions); + app.UseWhen( + context => !context.Request.Path.StartsWithSegments("/api"), + branch => + { + branch.UseRewriter(rewriteOptions); + } + ); app.UseDefaultFiles(); app.UseStaticFiles(); @@ -46,17 +52,17 @@ app.MapControllers(); // SPA fallback for non-API paths - app.Use(async (context, next) => - { - await next(); + // app.Use(async (context, next) => + // { + // await next(); - if (context.Response.StatusCode == 404 && - !context.Request.Path.StartsWithSegments("/api")) - { - context.Request.Path = "/index.html"; - await next(); - } - }); + // if (context.Response.StatusCode == 404 && + // !context.Request.Path.StartsWithSegments("/api")) + // { + // context.Request.Path = "/index.html"; + // await next(); + // } + // }); } app.Run(); From 87888b24b22e79338974a02b91809e461070927a Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 12:40:24 +0530 Subject: [PATCH 23/49] cicd: updated deployment branch --- .github/workflows/main_docs-next.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml index 403eea67..332a2b09 100644 --- a/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -2,7 +2,10 @@ name: Build and deploy ASP.Net Core app to Azure Web App - docs-next on: push: branches: - - feat/povindu/setup-dotnet-project + - main + pull_request: + branches: + - main workflow_dispatch: jobs: From 15da28f4ab9cbbdd82c54ba22f794fd25471e43c Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 10 Sep 2025 16:56:36 +0530 Subject: [PATCH 24/49] feat: updated rendering method of YAML managed reference --- ClientApp/package-lock.json | 9 ++ ClientApp/package.json | 4 +- ClientApp/src/components/YamlNamespace.astro | 7 +- ClientApp/src/content.config.ts | 7 +- ClientApp/src/layouts/YamlLayoutPage.astro | 80 ++++++------ .../{[...slug].astro => [...mdslug].astro} | 5 +- .../en/api/reference/[...yamlslug].astro | 122 ++++++++++++++++++ .../reference/netserver/core/[...slug].astro | 32 ----- .../netserver/services/[...slug].astro | 32 ----- .../en/api/reference/web/[...slug].astro | 28 ---- .../en/api/reference/webapi/[...slug].astro | 28 ---- ClientApp/src/utils/slugUtils.ts | 2 +- ClientApp/src/utils/transformXref.ts | 11 ++ 13 files changed, 201 insertions(+), 166 deletions(-) rename ClientApp/src/pages/en/api/reference/{[...slug].astro => [...mdslug].astro} (97%) create mode 100644 ClientApp/src/pages/en/api/reference/[...yamlslug].astro delete mode 100644 ClientApp/src/pages/en/api/reference/netserver/core/[...slug].astro delete mode 100644 ClientApp/src/pages/en/api/reference/netserver/services/[...slug].astro delete mode 100644 ClientApp/src/pages/en/api/reference/web/[...slug].astro delete mode 100644 ClientApp/src/pages/en/api/reference/webapi/[...slug].astro create mode 100644 ClientApp/src/utils/transformXref.ts diff --git a/ClientApp/package-lock.json b/ClientApp/package-lock.json index 85f280b5..19e27831 100644 --- a/ClientApp/package-lock.json +++ b/ClientApp/package-lock.json @@ -35,6 +35,7 @@ "astro-social-share": "^2.0.2", "dayjs": "^1.11.12", "github-slugger": "^2.0.0", + "js-yaml": "^4.1.0", "marked": "^16.1.2", "mdast-util-from-markdown": "^2.0.2", "node-fetch": "^3.3.2", @@ -54,6 +55,7 @@ }, "devDependencies": { "@tailwindcss/typography": "^0.5.14", + "@types/js-yaml": "^4.0.9", "@types/node": "^22.14.1", "cross-env": "^7.0.3", "pagefind": "^1.3.0", @@ -2547,6 +2549,13 @@ "@types/unist": "*" } }, + "node_modules/@types/js-yaml": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mdast": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", diff --git a/ClientApp/package.json b/ClientApp/package.json index 3566c7cf..124cb240 100644 --- a/ClientApp/package.json +++ b/ClientApp/package.json @@ -7,7 +7,7 @@ "start": "astro dev", "build": "cross-env NODE_OPTIONS=\"--max-old-space-size=12288\" astro check && astro build", "build:default": "astro check && astro build", - "build:local" : "node build/local-build-script.mjs", + "build:local": "node build/local-build-script.mjs", "preview": "astro preview", "astro": "astro", "test:e2e": "npm run test --workspace=e2e-tests" @@ -40,6 +40,7 @@ "astro-social-share": "^2.0.2", "dayjs": "^1.11.12", "github-slugger": "^2.0.0", + "js-yaml": "^4.1.0", "marked": "^16.1.2", "mdast-util-from-markdown": "^2.0.2", "node-fetch": "^3.3.2", @@ -59,6 +60,7 @@ }, "devDependencies": { "@tailwindcss/typography": "^0.5.14", + "@types/js-yaml": "^4.0.9", "@types/node": "^22.14.1", "cross-env": "^7.0.3", "pagefind": "^1.3.0", diff --git a/ClientApp/src/components/YamlNamespace.astro b/ClientApp/src/components/YamlNamespace.astro index cd3f88b3..e106caab 100644 --- a/ClientApp/src/components/YamlNamespace.astro +++ b/ClientApp/src/components/YamlNamespace.astro @@ -6,6 +6,9 @@ type Props = { }; const { namespaceData } = Astro.props; +import { transformXref } from "../utils/transformXref"; + + ---
@@ -16,7 +19,7 @@ const { namespaceData } = Astro.props; id={conversionList[typeName as keyof typeof conversionList]} class="text-2xl mb-5" > - {typeName} + {conversionList[typeName as keyof typeof conversionList]} {items.map((item) => { return ( @@ -28,7 +31,7 @@ const { namespaceData } = Astro.props; {item.id} {item.summary && ( -

+

)} ); diff --git a/ClientApp/src/content.config.ts b/ClientApp/src/content.config.ts index 1a622625..82ac1374 100644 --- a/ClientApp/src/content.config.ts +++ b/ClientApp/src/content.config.ts @@ -74,8 +74,7 @@ const WebAPI = defineCollection({ const Web = defineCollection({ loader: glob({ pattern: apiOnly ? [ - "SuperOffice.Cache.*.yml", - "SuperOffice.Cache.yml" + "*.yml", ] : [], base: `${API_BASE}/reference/web` }), @@ -84,7 +83,7 @@ const Web = defineCollection({ const NetserverCore = defineCollection({ loader: glob({ pattern: apiOnly ? [ - "Microsoft.Extensions.DependencyInjection.*.yml", + "*.yml", ] : [], base: `${API_BASE}/reference/netserver/core` }), @@ -93,7 +92,7 @@ const NetserverCore = defineCollection({ const NetserverServices = defineCollection({ loader: glob({ pattern: apiOnly ? [ - "SuperOffice.CRM.ArchiveLists.*.yml", + "*.yml", ] : [], base: `${API_BASE}/reference/netserver/services` }), diff --git a/ClientApp/src/layouts/YamlLayoutPage.astro b/ClientApp/src/layouts/YamlLayoutPage.astro index 1bfaa572..86bfd775 100644 --- a/ClientApp/src/layouts/YamlLayoutPage.astro +++ b/ClientApp/src/layouts/YamlLayoutPage.astro @@ -1,5 +1,7 @@ --- -import { getEntry, type CollectionEntry } from "astro:content"; +import { readFile } from "fs/promises"; +import path from "path"; +import yaml from "js-yaml"; import type { headingsListProps, namespaceClassifiedDataProps, @@ -10,21 +12,16 @@ import YamlClass from "@components/YamlClass.astro"; import type { TocData } from "~/types/TableOfContentTypes"; import ContentLayout from "@layouts/ContentLayout.astro"; -import type { CollectionKey } from "astro:content"; - interface Props { - entry: CollectionEntry< - "webapi" | "crmscript" | "web" | "netserver-core" | "netserver-services" - >; + entry: any; tocData: TocData; - collection: CollectionKey; + collection: string; } const { entry, tocData, collection } = Astro.props; const pageTitle = entry.data.items[0].type + " " + entry.data.items[0].id; -// Use to get the plural forms of the name export const conversionList = { Class: "Classes", Constructor: "Constructors", @@ -36,7 +33,6 @@ export const conversionList = { Enum: "Enums", }; -// Generate heading from yml data const headingList: headingsListProps = {}; const namespaceData: namespaceClassifiedDataProps = {}; @@ -57,41 +53,53 @@ function appendIntoHeadingList(key: keyof headingsListProps, dataItem: Item) { } const documentType = entry.data.items[0].type; -if (documentType == "Namespace") { - const promises = entry.data.items[0].children?.map( - async (childName: string) => { - const formattedItem = childName.replaceAll(".", "").toLowerCase(); - const childrenItemEntry = await getEntry(collection, formattedItem); - if (childrenItemEntry) { - const dataItem = childrenItemEntry?.data.items[0]; - const key = dataItem.type as keyof namespaceClassifiedDataProps; - if (!namespaceData[key]) { - namespaceData[key] = []; - } - namespaceData[key].push({ - uid: dataItem.uid, - id: dataItem.id, - summary: dataItem.summary, - }); - appendIntoHeadingList(key, dataItem); + +if (documentType === "Namespace") { + const promises = entry.data.items[0].children?.map(async (childName: string) => { + + // Build absolute path for the child YAML file + const baseContentPath = "external-content"; + const childFilePath = path.join( + baseContentPath, + "superoffice-docs/docs/en/api/reference", + collection, + `${childName}.yml` + ); + + try { + const raw = await readFile(childFilePath, "utf8"); + const parsed: any = yaml.load(raw); + const dataItem = parsed.items[0]; + const key = dataItem.type as keyof namespaceClassifiedDataProps; + + if (!namespaceData[key]) { + namespaceData[key] = []; } + namespaceData[key].push({ + uid: dataItem.uid, + id: dataItem.id, + summary: dataItem.summary, + }); + + appendIntoHeadingList(key, dataItem); + } catch (e) { + console.warn(`Failed to load child entry for ${childName}`, e); } - ); + }); await Promise.all(promises || []); -} else if (["Class", "Interface", "Enum"].includes(documentType)) { - // Append headings of every other item except parent item to headingsList - const otherItemsExceptParentItem = entry.data.items.slice(1); - otherItemsExceptParentItem.forEach((dataItem: Item) => { +} + +else if (["Class", "Interface", "Enum"].includes(documentType)) { + const otherItems = entry.data.items.slice(1); + otherItems.forEach((dataItem: Item) => { const key = dataItem.type as keyof headingsListProps; appendIntoHeadingList(key, dataItem); }); + // Check if implements exist and add them to headingList - if ( - entry.data.items[0].implements && - entry.data.items[0].implements.length > 0 - ) { + if (entry.data.items[0].implements?.length > 0) { const key = "Implement" as keyof headingsListProps; entry.data.items[0].implements.forEach((item: string) => { if (!(key in headingList)) { @@ -133,7 +141,7 @@ for (ItemType in headingList) {

{pageTitle}

{ - documentType == "Namespace" && ( + documentType === "Namespace" && ( ) } diff --git a/ClientApp/src/pages/en/api/reference/[...slug].astro b/ClientApp/src/pages/en/api/reference/[...mdslug].astro similarity index 97% rename from ClientApp/src/pages/en/api/reference/[...slug].astro rename to ClientApp/src/pages/en/api/reference/[...mdslug].astro index 09b24098..f553f1c1 100644 --- a/ClientApp/src/pages/en/api/reference/[...slug].astro +++ b/ClientApp/src/pages/en/api/reference/[...mdslug].astro @@ -26,11 +26,12 @@ export async function getStaticPaths() { return async () => { const rawContent = await readFile(filePath, "utf8"); const { data, content } = matter(rawContent); - // Create a more complete entry object that matches content collection structure + const relativePath = filePath.replace( "external-content/superoffice-docs/docs/", "" ); + const slug = relativePath.replace(/\.(md|mdx)$/, ""); const { html, headings } = await renderMarkdownWithHeadingIds(content); @@ -103,7 +104,7 @@ export async function getStaticPaths() { } return { - params: { slug: slug }, + params: { mdslug: slug }, props: { loadEntry: loadMarkdownContent(absoluteFilePath), loadTocData: tocLoaderCache.get(apiType)!, diff --git a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro new file mode 100644 index 00000000..b121fa14 --- /dev/null +++ b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro @@ -0,0 +1,122 @@ +--- +import { readFile } from "fs/promises"; +import { glob } from "glob"; +import path from "path"; +import yaml from "js-yaml"; +import { getTocByPath } from "@utils/tocUtils"; +import { getYamlReferenceSlug } from "@utils/slugUtils"; +import YamlLayoutPage from "@layouts/YamlLayoutPage.astro"; +import type { TocData } from "~/types/TableOfContentTypes"; + +export async function getStaticPaths() { + + const apiOnly = true; + + if (!apiOnly) { + return []; + } + + + const baseContentPath = "external-content"; + + const apiCollections = [ + "webapi", + "web", + "netserver/core", + "netserver/services", + ]; + + // Lazy loader for YAML entry + function loadYamlContent(filePath: string, collection: string) { + return async () => { + const rawContent = await readFile(filePath, "utf8"); + const parsedYAMLData = yaml.load(rawContent); + return { + data: parsedYAMLData, + filePath, + id: getYamlReferenceSlug(filePath, collection), + collection, + }; + }; + } + + // Lazy loader for TOC + function loadTocData(apiPath: string) { + return async () => { + try { + return await getTocByPath(apiPath); + } catch (error) { + console.warn(`Failed to load TOC for ${apiPath}`, error); + return { items: [] } as TocData; + } + }; + } + + function getApiType(path:string):string{ + if(path.startsWith("netserver")){ + return path + } + else{ + return path.split("/")[0] + } + } + + try { + const patterns = apiCollections.map( + (c) => `superoffice-docs/docs/en/api/reference/${c}/*.{yaml,yml}` + ); + + const filePaths = await glob(patterns, { + cwd: baseContentPath, + absolute: false, + }); + + if (filePaths.length === 0) { + console.error("No YAML files found under reference path!"); + return []; + } + + const tocLoaderCache = new Map Promise>(); + + const paths = filePaths.map((relativePath) => { + const absoluteFilePath = path.resolve(baseContentPath, relativePath); + const normalizedPath = relativePath.replace(/\\/g, "/"); + const match = normalizedPath.match( + /superoffice-docs\/docs\/en\/api\/reference\/([^/]+(?:\/[^/]+)?)/ + ); + + const apiType = getApiType(match ? match[1] : "unknown"); + const cleanPath = normalizedPath + .replace("superoffice-docs/docs/en/api/reference", "") + .replace(/\.(yml|yaml)$/, ""); + const slug = cleanPath; + const tocCollectionPath = `superoffice-docs/docs/en/api/reference/${apiType}`; + + if (!tocLoaderCache.has(apiType)) { + tocLoaderCache.set(apiType, loadTocData(tocCollectionPath)); + } + + return { + params: { yamlslug: slug }, + props: { + loadEntry: loadYamlContent(absoluteFilePath, apiType), + loadTocData: tocLoaderCache.get(apiType)!, + collection: apiType, + }, + }; + }); + + return paths; + } catch (error) { + console.error("Error in getStaticPaths for YAML:", error); + return []; + } +} + +const { loadEntry, loadTocData, collection } = Astro.props; + +const entry = await loadEntry(); +const tocData = await loadTocData(); +--- + + diff --git a/ClientApp/src/pages/en/api/reference/netserver/core/[...slug].astro b/ClientApp/src/pages/en/api/reference/netserver/core/[...slug].astro deleted file mode 100644 index 4928ffed..00000000 --- a/ClientApp/src/pages/en/api/reference/netserver/core/[...slug].astro +++ /dev/null @@ -1,32 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import { getTocByPath } from "@utils/tocUtils"; -import { getYamlReferenceSlug } from "@utils/slugUtils"; -import YamlLayoutPage from "@layouts/YamlLayoutPage.astro"; - - -const collectionPath = `superoffice-docs/docs/en/api/reference/netserver/core`; - -const tocData = await getTocByPath(collectionPath); - -// Generates static paths from netserver/core collection -export async function getStaticPaths() { - const collection = "netserver-core" as const; - const yamlEntries = await getCollection(collection); - return yamlEntries.map((entry) => { - const generatedSlug = getYamlReferenceSlug(entry.filePath!, "netserver/core"); - console.log("entry", generatedSlug) - return { - params: { slug: `${generatedSlug}` }, - props: { entry }, - }; - }); -} - -const { entry } = Astro.props; - - - ---- - - diff --git a/ClientApp/src/pages/en/api/reference/netserver/services/[...slug].astro b/ClientApp/src/pages/en/api/reference/netserver/services/[...slug].astro deleted file mode 100644 index 8620e011..00000000 --- a/ClientApp/src/pages/en/api/reference/netserver/services/[...slug].astro +++ /dev/null @@ -1,32 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import { getTocByPath } from "@utils/tocUtils"; -import { getYamlReferenceSlug } from "@utils/slugUtils"; -import YamlLayoutPage from "@layouts/YamlLayoutPage.astro"; - - -const collectionPath = `superoffice-docs/docs/en/api/reference/netserver/services`; - -const tocData = await getTocByPath(collectionPath); - -// Generates static paths from netserver/services collection -export async function getStaticPaths() { - const collection = "netserver-services" as const; - const yamlEntries = await getCollection(collection); - return yamlEntries.map((entry) => { - const generatedSlug = getYamlReferenceSlug(entry.filePath!, "netserver/services"); - console.log("entry", generatedSlug) - return { - params: { slug: `${generatedSlug}` }, - props: { entry }, - }; - }); -} - -const { entry } = Astro.props; - - - ---- - - diff --git a/ClientApp/src/pages/en/api/reference/web/[...slug].astro b/ClientApp/src/pages/en/api/reference/web/[...slug].astro deleted file mode 100644 index b093d0e3..00000000 --- a/ClientApp/src/pages/en/api/reference/web/[...slug].astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import { getTocByPath } from "@utils/tocUtils"; -import { getYamlReferenceSlug } from "@utils/slugUtils"; -import YamlLayoutPage from "@layouts/YamlLayoutPage.astro"; - - -const collectionPath = `superoffice-docs/docs/en/api/reference/web`; -const tocData = await getTocByPath(collectionPath); - -// Generates static paths from web collection -export async function getStaticPaths() { - const collection = "web" as const; - const yamlEntries = await getCollection(collection); - return yamlEntries.map((entry) => { - const generatedSlug = getYamlReferenceSlug(entry.filePath!, collection); - return { - params: { slug: `${generatedSlug}` }, - props: { entry }, - }; - }); -} - -const { entry } = Astro.props; - ---- - - diff --git a/ClientApp/src/pages/en/api/reference/webapi/[...slug].astro b/ClientApp/src/pages/en/api/reference/webapi/[...slug].astro deleted file mode 100644 index 0da1bb3f..00000000 --- a/ClientApp/src/pages/en/api/reference/webapi/[...slug].astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import { getCollection } from "astro:content"; -import { getTocByPath } from "@utils/tocUtils"; -import { getYamlReferenceSlug } from "@utils/slugUtils"; -import YamlLayoutPage from "@layouts/YamlLayoutPage.astro"; - - -const collectionPath = `superoffice-docs/docs/en/api/reference/webapi`; -const tocData = await getTocByPath(collectionPath); - -// Generates static paths from webapi collection -export async function getStaticPaths() { - const collection = "webapi" as const; - const yamlEntries = await getCollection(collection); - return yamlEntries.map((entry) => { - const generatedSlug = getYamlReferenceSlug(entry.filePath!, collection); - return { - params: { slug: `${generatedSlug}` }, - props: { entry }, - }; - }); -} - -const { entry } = Astro.props; - ---- - - diff --git a/ClientApp/src/utils/slugUtils.ts b/ClientApp/src/utils/slugUtils.ts index 2cbf164f..18de7081 100644 --- a/ClientApp/src/utils/slugUtils.ts +++ b/ClientApp/src/utils/slugUtils.ts @@ -108,7 +108,7 @@ export function getYamlReferenceSlug( ): string { const basePath = `superoffice-docs/docs/en/api/reference` as const; - return stripFilePathAndExtension(filePath, `${basePath}/${api}`); + return stripFilePathAndExtension(filePath, `${basePath}`); } /** diff --git a/ClientApp/src/utils/transformXref.ts b/ClientApp/src/utils/transformXref.ts new file mode 100644 index 00000000..cc8a2b98 --- /dev/null +++ b/ClientApp/src/utils/transformXref.ts @@ -0,0 +1,11 @@ +export function transformXref(html: string) { + return html.replace( + /]*><\/xref>/g, + (_match, href) => { + const segments = href.split("."); + const linkText = segments[segments.length - 1]; + const url = `/${href.replace(/\./g, "/")}`; + return `${linkText}`; + } + ); +} From 10d23daf3e6e9eff5264d5758b0a211f86c3a3a0 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 19:10:04 +0530 Subject: [PATCH 25/49] fix: minor styling and functional fixes in YAML managed references --- ClientApp/src/components/YamlClass.astro | 17 +++++++++-------- ClientApp/src/components/YamlItem.astro | 8 ++++---- ClientApp/src/components/YamlNamespace.astro | 4 ++-- ClientApp/src/utils/transformXref.ts | 5 ++--- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/ClientApp/src/components/YamlClass.astro b/ClientApp/src/components/YamlClass.astro index f1b6540b..bb056b02 100644 --- a/ClientApp/src/components/YamlClass.astro +++ b/ClientApp/src/components/YamlClass.astro @@ -4,6 +4,7 @@ import type { ManagedReferenceType, Reference } from "../types/YamlManagedRefere import type {indexDictionaryProps} from "../types/YamlManagedReferencesLayoutTypes" import YamlItem from "@components/YamlItem.astro" import { conversionList } from "@layouts/YamlLayoutPage.astro"; +import { transformXref } from "../utils/transformXref"; type Props = { data: ManagedReferenceType; }; @@ -33,17 +34,17 @@ const selectedKeys = ["Constructor", "Method", "Property"];
-

+ {data.items[0].summary &&

} {/* Inheritance */} {data.items[0].inheritance &&

Inheritance

↳ {data.items[0].id}

-
    {data.items[0].derivedClasses && data.items[0].derivedClasses.map( (inheritClass :string) => { +
      {data.items[0].derivedClasses && data.items[0].derivedClasses.map( (inheritClass :string) => { return
    • ↳ {inheritClass.split(".").pop()}
    • })}
@@ -55,7 +56,7 @@ const selectedKeys = ["Constructor", "Method", "Property"];

Inherited Members

@@ -66,14 +67,14 @@ const selectedKeys = ["Constructor", "Method", "Property"]; data.items[0].implements && (

Implements

-

{data.items[0].implements?.map( (implementItem :string) => { +

{data.items[0].implements?.map( (implementItem :string) => { return implementItem.split(".").pop()})}

) } - { data.items[0].namespace &&

Namespace: {data.items[0].namespace}

} + { data.items[0].namespace &&

Namespace: {data.items[0].namespace}

} { data.items[0].assemblies &&

Assembly:{data.items[0].assemblies}.dll

} { data.items[0].syntax && ( @@ -151,7 +152,7 @@ const selectedKeys = ["Constructor", "Method", "Property"]; { data.items[0].implements?.map( (itemUid) => { return ( - {getDataFromReference(itemUid).name} ) @@ -168,7 +169,7 @@ const selectedKeys = ["Constructor", "Method", "Property"];

Extension Methods

diff --git a/ClientApp/src/components/YamlItem.astro b/ClientApp/src/components/YamlItem.astro index a8f4d103..cac22b46 100644 --- a/ClientApp/src/components/YamlItem.astro +++ b/ClientApp/src/components/YamlItem.astro @@ -43,15 +43,15 @@ const itemTypeKey = { { item.syntax?.parameters && item.syntax?.parameters.length > 0 && (

Parameters

- - +
+ {item.syntax?.parameters?.map( (row, index)=>{ return - + @@ -70,7 +70,7 @@ const itemTypeKey = { + {getDataFromReference(item.syntax.return.type)?.name}
Type Name Description
{getDataFromReference(row.type)?.name}{getDataFromReference(row.type)?.name} {row.id} {row.description}
- {getDataFromReference(item.syntax.return.type)?.name} {item.syntax?.return?.description}
diff --git a/ClientApp/src/components/YamlNamespace.astro b/ClientApp/src/components/YamlNamespace.astro index e106caab..fba36378 100644 --- a/ClientApp/src/components/YamlNamespace.astro +++ b/ClientApp/src/components/YamlNamespace.astro @@ -25,13 +25,13 @@ import { transformXref } from "../utils/transformXref"; return ( <> {item.id} {item.summary && ( -

+

)} ); diff --git a/ClientApp/src/utils/transformXref.ts b/ClientApp/src/utils/transformXref.ts index cc8a2b98..e073ddbf 100644 --- a/ClientApp/src/utils/transformXref.ts +++ b/ClientApp/src/utils/transformXref.ts @@ -1,11 +1,10 @@ export function transformXref(html: string) { - return html.replace( + return html?.replace( /]*><\/xref>/g, (_match, href) => { const segments = href.split("."); const linkText = segments[segments.length - 1]; - const url = `/${href.replace(/\./g, "/")}`; - return `${linkText}`; + return `${linkText}`; } ); } From d2e845dedf4b89506fe21cf980dddf4f3c8b6caf Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 19:10:58 +0530 Subject: [PATCH 26/49] feat: remove YAML managed references content collections --- ClientApp/src/content.config.ts | 76 ++++++++++++++++----------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/ClientApp/src/content.config.ts b/ClientApp/src/content.config.ts index 82ac1374..25b0631f 100644 --- a/ClientApp/src/content.config.ts +++ b/ClientApp/src/content.config.ts @@ -64,39 +64,39 @@ const NSScriptingRef = defineCollection({ schema: DocsSchema, }); -const WebAPI = defineCollection({ - loader: glob({ - pattern: apiOnly ? ["**/!(*toc).yml"] : [], - base: `${API_BASE}/reference/webapi` - }), -}); - -const Web = defineCollection({ - loader: glob({ - pattern: apiOnly ? [ - "*.yml", - ] : [], - base: `${API_BASE}/reference/web` - }), -}); - -const NetserverCore = defineCollection({ - loader: glob({ - pattern: apiOnly ? [ - "*.yml", - ] : [], - base: `${API_BASE}/reference/netserver/core` - }), -}); - -const NetserverServices = defineCollection({ - loader: glob({ - pattern: apiOnly ? [ - "*.yml", - ] : [], - base: `${API_BASE}/reference/netserver/services` - }), -}); +// const WebAPI = defineCollection({ +// loader: glob({ +// pattern: false ? ["**/!(*toc).yml"] : [], +// base: `${API_BASE}/reference/webapi` +// }), +// }); + +// const Web = defineCollection({ +// loader: glob({ +// pattern: apiOnly ? [ +// "*.yml", +// ] : [], +// base: `${API_BASE}/reference/web` +// }), +// }); + +// const NetserverCore = defineCollection({ +// loader: glob({ +// pattern: apiOnly ? [ +// "*.yml", +// ] : [], +// base: `${API_BASE}/reference/netserver/core` +// }), +// }); + +// const NetserverServices = defineCollection({ +// loader: glob({ +// pattern: apiOnly ? [ +// "*.yml", +// ] : [], +// base: `${API_BASE}/reference/netserver/services` +// }), +// }); /** * TRANSLATIONS @@ -193,7 +193,7 @@ const tocFiles = defineCollection({ ], base: "./external-content", }), - schema: TocYamlSchema, + // schema: TocYamlSchema, }); const landingPages = defineCollection({ @@ -220,10 +220,10 @@ export const collections = { "api-docs": apiDocs, "crmscript": CRMScript, "nsscripting": NSScriptingRef, - "netserver-core": NetserverCore, - "netserver-services": NetserverServices, - webapi: WebAPI, - web: Web, + // "netserver-core": NetserverCore, + // "netserver-services": NetserverServices, + // webapi: WebAPI, + // web: Web, contribute: contribution, "release-notes": releaseNotes, cats: landingPages, From 8fd66db3f3b38c09aa13aa431473857ed074c3b6 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 19:15:56 +0530 Subject: [PATCH 27/49] cicd: updated workflow to only trigger manually for PR's --- .github/workflows/main_docs-next.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/main_docs-next.yml b/.github/workflows/main_docs-next.yml index 332a2b09..af4b6f14 100644 --- a/.github/workflows/main_docs-next.yml +++ b/.github/workflows/main_docs-next.yml @@ -61,6 +61,7 @@ jobs: deploy: runs-on: ubuntu-latest needs: build + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' permissions: id-token: write contents: read From f0c09e25e8087b55cfe8d1b6481eb32d6d2b4bc3 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 19:19:18 +0530 Subject: [PATCH 28/49] fix: setup yamlslug to run only on apiOnly step --- ClientApp/src/pages/en/api/reference/[...yamlslug].astro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro index b121fa14..c3579c29 100644 --- a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro @@ -10,7 +10,7 @@ import type { TocData } from "~/types/TableOfContentTypes"; export async function getStaticPaths() { - const apiOnly = true; + const apiOnly = process.env.API_ONLY === 'true'; if (!apiOnly) { return []; From e1c2c0c37e0659166b98021bc0b48076fbed1f94 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Thu, 11 Sep 2025 19:40:58 +0530 Subject: [PATCH 29/49] fix: added conditional check for href --- ClientApp/src/components/YamlClass.astro | 6 +++--- ClientApp/src/utils/tocUtils.ts | 2 +- ClientApp/src/utils/transformXref.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ClientApp/src/components/YamlClass.astro b/ClientApp/src/components/YamlClass.astro index bb056b02..8d07a1ad 100644 --- a/ClientApp/src/components/YamlClass.astro +++ b/ClientApp/src/components/YamlClass.astro @@ -41,7 +41,7 @@ const selectedKeys = ["Constructor", "Method", "Property"];

Inheritance

↳ {data.items[0].id}

@@ -169,7 +169,7 @@ const selectedKeys = ["Constructor", "Method", "Property"];

Extension Methods

diff --git a/ClientApp/src/utils/tocUtils.ts b/ClientApp/src/utils/tocUtils.ts index 9a457e79..e9c6daae 100644 --- a/ClientApp/src/utils/tocUtils.ts +++ b/ClientApp/src/utils/tocUtils.ts @@ -52,7 +52,7 @@ export async function getTableOfContentsFromCollection( // Recursively resolve nested toc.yml references function resolveItems(items: any[], currentDir = rootCollectionName): any[] { for (const item of items) { - const href = item.href; + const href = item?.href; if (href && isNestedTocFile(href)) { const resolved = path.posix.normalize(path.posix.join(currentDir, href)); const subId = normalizePath(resolved); diff --git a/ClientApp/src/utils/transformXref.ts b/ClientApp/src/utils/transformXref.ts index e073ddbf..d0fa520b 100644 --- a/ClientApp/src/utils/transformXref.ts +++ b/ClientApp/src/utils/transformXref.ts @@ -2,8 +2,8 @@ export function transformXref(html: string) { return html?.replace( /]*><\/xref>/g, (_match, href) => { - const segments = href.split("."); - const linkText = segments[segments.length - 1]; + const segments = href?.split("."); + const linkText = segments[segments?.length - 1]; return `${linkText}`; } ); From 3a1b1b15dbd2910269782ed5182ceee616f84f1d Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 11:00:38 +0530 Subject: [PATCH 30/49] Update azure pipelines - setup build job --- build/azure-pipelines-docs-next.yml | 103 ++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 build/azure-pipelines-docs-next.yml diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml new file mode 100644 index 00000000..f4fab09f --- /dev/null +++ b/build/azure-pipelines-docs-next.yml @@ -0,0 +1,103 @@ +trigger: + branches: + include: + - main + +pr: + branches: + include: + - main + +resources: + repositories: + - repository: self + type: git + ref: main + # - repository: contributionRepo + # type: github + # name: SuperOfficeDocs/contribution + # ref: main # always pull main, adjust if needed + # - repository: superofficeDocsRepo + # type: github + # name: SuperOfficeDocs/superoffice-docs + # ref: main + +stages: + - stage: Build + displayName: "Build and Package" + jobs: + - job: Build + displayName: "Build .NET + Astro frontend" + pool: + name: Default # Uses Agent Pool named 'Default' + demands: + - agent.os -equals Linux + steps: + # Checkout your main repo + - checkout: self + + # Checkout external repos + - script: | + git clone https://github.com/SuperOfficeDocs/contribution.git ClientApp/external-content/contribution + git clone https://github.com/SuperOfficeDocs/superoffice-docs.git ClientApp/external-content/superoffice-docs + displayName: "Clone external GitHub repos" + + # Install .NET SDK + - task: UseDotNet@2 + inputs: + packageType: 'sdk' + version: '8.x' + + # Install Node.js + - task: NodeTool@0 + inputs: + versionSpec: '22.x' + + # Build & publish the .NET project (includes front-end build if wired in MSBuild targets) + - script: | + cd Server + dotnet publish -c Release -o $(Build.ArtifactStagingDirectory)/out + displayName: "Publish .NET & Astro project" + + # Zip the published output + - task: ArchiveFiles@2 + inputs: + rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/out' + includeRootFolder: false + archiveType: 'zip' + archiveFile: '$(Build.ArtifactStagingDirectory)/app.zip' + replaceExistingArchive: true + + # Publish the zip as a pipeline artifact + - publish: $(Build.ArtifactStagingDirectory)/app.zip + artifact: docs-nect-artifact + + # - stage: Deploy + # displayName: "Deploy to Azure Web App" + # dependsOn: Build + # condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), + # eq(variables['Build.Reason'], 'Manual')) + # jobs: + # - deployment: DeployJob + # environment: 'production' + # pool: + # vmImage: 'ubuntu-latest' + # strategy: + # runOnce: + # deploy: + # steps: + # # Download artifact from Build stage + # - download: current + # artifact: docs-nect-artifact + + # # Deploy the artifact to Azure App Service + # - task: AzureWebApp@1 + # displayName: "Deploy ZIP to Azure Web App" + # inputs: + # azureSubscription: '' # ARM service connection in DevOps + # appName: 'docs-next' # Azure App Service name + # package: '$(Pipeline.Workspace)/drop/app.zip' + # appType: 'webAppLinux' + + + From f02ecf33a76565943b0afda6d1a8e7dcba1ce63c Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 14:32:50 +0530 Subject: [PATCH 31/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 50 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index f4fab09f..712ebcbc 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -72,32 +72,32 @@ stages: - publish: $(Build.ArtifactStagingDirectory)/app.zip artifact: docs-nect-artifact - # - stage: Deploy - # displayName: "Deploy to Azure Web App" - # dependsOn: Build - # condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), - # eq(variables['Build.Reason'], 'Manual')) - # jobs: - # - deployment: DeployJob - # environment: 'production' - # pool: - # vmImage: 'ubuntu-latest' - # strategy: - # runOnce: - # deploy: - # steps: - # # Download artifact from Build stage - # - download: current - # artifact: docs-nect-artifact + - stage: Deploy + displayName: "Deploy to Azure Web App" + dependsOn: Build + condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), + eq(variables['Build.Reason'], 'Manual')) + jobs: + - deployment: DeployJob + environment: 'production' + pool: + vmImage: 'ubuntu-latest' + strategy: + runOnce: + deploy: + steps: + # Download artifact from Build stage + - download: current + artifact: docs-nect-artifact - # # Deploy the artifact to Azure App Service - # - task: AzureWebApp@1 - # displayName: "Deploy ZIP to Azure Web App" - # inputs: - # azureSubscription: '' # ARM service connection in DevOps - # appName: 'docs-next' # Azure App Service name - # package: '$(Pipeline.Workspace)/drop/app.zip' - # appType: 'webAppLinux' + # Deploy the artifact to Azure App Service + - task: AzureWebApp@1 + displayName: "Deploy ZIP to Azure Web App" + inputs: + azureSubscription: 'DocsNextServiceConnector' # ARM service connection in DevOps + appName: 'docs-next' # Azure App Service name + package: '$(Pipeline.Workspace)/drop/app.zip' + appType: 'webAppLinux' From 34f6fbcfbb416bdef9fc842c59073064c4aed227 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 15:45:41 +0530 Subject: [PATCH 32/49] test: disable redirect-from plugin --- ClientApp/astro.config.mjs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ClientApp/astro.config.mjs b/ClientApp/astro.config.mjs index 49a6fc1f..19d141bf 100644 --- a/ClientApp/astro.config.mjs +++ b/ClientApp/astro.config.mjs @@ -98,10 +98,10 @@ export default defineConfig({ mdx(), // pagefind(), react(), - redirectFrom({ - contentDir: './external-content', - getSlug: getRedirectFromSlug, // Function to get the slug for redirect_from - }), + // redirectFrom({ + // contentDir: './external-content', + // getSlug: getRedirectFromSlug, // Function to get the slug for redirect_from + // }), robots(), sitemap(), ], From e1fe679428187c07ca9626336953c86c818122aa Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 16:07:51 +0530 Subject: [PATCH 33/49] fix: updated error logging in YamlLayoutPage --- ClientApp/src/layouts/YamlLayoutPage.astro | 68 +++++++++++----------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/ClientApp/src/layouts/YamlLayoutPage.astro b/ClientApp/src/layouts/YamlLayoutPage.astro index 86bfd775..370233e8 100644 --- a/ClientApp/src/layouts/YamlLayoutPage.astro +++ b/ClientApp/src/layouts/YamlLayoutPage.astro @@ -55,49 +55,51 @@ function appendIntoHeadingList(key: keyof headingsListProps, dataItem: Item) { const documentType = entry.data.items[0].type; if (documentType === "Namespace") { - const promises = entry.data.items[0].children?.map(async (childName: string) => { - - // Build absolute path for the child YAML file - const baseContentPath = "external-content"; - const childFilePath = path.join( - baseContentPath, - "superoffice-docs/docs/en/api/reference", - collection, - `${childName}.yml` - ); - - try { - const raw = await readFile(childFilePath, "utf8"); - const parsed: any = yaml.load(raw); - const dataItem = parsed.items[0]; - const key = dataItem.type as keyof namespaceClassifiedDataProps; - - if (!namespaceData[key]) { - namespaceData[key] = []; + const promises = entry.data.items[0].children?.map( + async (childName: string) => { + // Build absolute path for the child YAML file + const baseContentPath = "external-content"; + const childFilePath = path.join( + baseContentPath, + "superoffice-docs/docs/en/api/reference", + collection, + `${childName}.yml` + ); + + try { + const raw = await readFile(childFilePath, "utf8"); + const parsed: any = yaml.load(raw); + const dataItem = parsed.items[0]; + const key = dataItem.type as keyof namespaceClassifiedDataProps; + + if (!namespaceData[key]) { + namespaceData[key] = []; + } + namespaceData[key].push({ + uid: dataItem.uid, + id: dataItem.id, + summary: dataItem.summary, + }); + + appendIntoHeadingList(key, dataItem); + } catch (e: any) { + if (e.code === "ENOENT") { + console.warn(`Skipped missing file: ${childFilePath}`); + } else { + console.warn(`[warn] Problem loading ${childFilePath}: ${e.message}`); + } } - namespaceData[key].push({ - uid: dataItem.uid, - id: dataItem.id, - summary: dataItem.summary, - }); - - appendIntoHeadingList(key, dataItem); - } catch (e) { - console.warn(`Failed to load child entry for ${childName}`, e); } - }); + ); await Promise.all(promises || []); -} - -else if (["Class", "Interface", "Enum"].includes(documentType)) { +} else if (["Class", "Interface", "Enum"].includes(documentType)) { const otherItems = entry.data.items.slice(1); otherItems.forEach((dataItem: Item) => { const key = dataItem.type as keyof headingsListProps; appendIntoHeadingList(key, dataItem); }); - // Check if implements exist and add them to headingList if (entry.data.items[0].implements?.length > 0) { const key = "Implement" as keyof headingsListProps; From d9da6f014acdd1c60f4e926077305dcd769ca736 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:42:59 +0530 Subject: [PATCH 34/49] temp: temporarily reduce rendering content --- ClientApp/src/content.config.ts | 4 ++-- ClientApp/src/pages/en/api/reference/[...mdslug].astro | 2 +- ClientApp/src/pages/en/api/reference/[...yamlslug].astro | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ClientApp/src/content.config.ts b/ClientApp/src/content.config.ts index 25b0631f..ef9f92c4 100644 --- a/ClientApp/src/content.config.ts +++ b/ClientApp/src/content.config.ts @@ -4,7 +4,7 @@ import { glob } from "astro/loaders"; import { DocsSchema, SimplifiedYamlSchema, TocYamlSchema, YamlManagedReferenceSchema } from "~/content.schema" // apiOnly variable is used in the split build to isolate docs/en/api folder content -const apiOnly = process.env.API_ONLY === 'true'; +const apiOnly = true; const DOCS_BASE = "external-content/superoffice-docs/docs"; const API_BASE = `${DOCS_BASE}/en/api`; @@ -45,7 +45,7 @@ const apiDocs = defineCollection({ const CRMScript = defineCollection({ loader: glob({ - pattern: apiOnly ? [ + pattern: false ? [ "**/!(*toc).yml", "!**/includes/**", ] : [], diff --git a/ClientApp/src/pages/en/api/reference/[...mdslug].astro b/ClientApp/src/pages/en/api/reference/[...mdslug].astro index f553f1c1..bd64aff8 100644 --- a/ClientApp/src/pages/en/api/reference/[...mdslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...mdslug].astro @@ -9,7 +9,7 @@ import ContentLayout from "@layouts/ContentLayout.astro"; import { renderMarkdownWithHeadingIds } from "@utils/contentUtils"; export async function getStaticPaths() { - const apiOnly = process.env.API_ONLY === 'true'; + const apiOnly = false; if (!apiOnly) { return []; diff --git a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro index c3579c29..5611e26f 100644 --- a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro @@ -10,7 +10,7 @@ import type { TocData } from "~/types/TableOfContentTypes"; export async function getStaticPaths() { - const apiOnly = process.env.API_ONLY === 'true'; + const apiOnly = false; if (!apiOnly) { return []; From abe1035013bdd48da4720f126d1bec22f898f94f Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:44:06 +0530 Subject: [PATCH 35/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index 712ebcbc..bad65a1f 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -64,7 +64,6 @@ stages: inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/out' includeRootFolder: false - archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/app.zip' replaceExistingArchive: true From ce2801f84e8a330186ee19bca1f7f456b48650e7 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:50:30 +0530 Subject: [PATCH 36/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index bad65a1f..b57f7087 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -31,7 +31,8 @@ stages: pool: name: Default # Uses Agent Pool named 'Default' demands: - - agent.os -equals Linux + # - agent.os -equals Linux + - Agent.ComputerName -equals tfs-build-23 steps: # Checkout your main repo - checkout: self From 85be9f8547b755bbb644bd25431ab781badcd9f1 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:56:11 +0530 Subject: [PATCH 37/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index b57f7087..f89bbeb4 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -70,7 +70,7 @@ stages: # Publish the zip as a pipeline artifact - publish: $(Build.ArtifactStagingDirectory)/app.zip - artifact: docs-nect-artifact + artifact: docs-next-artifact - stage: Deploy displayName: "Deploy to Azure Web App" @@ -88,7 +88,7 @@ stages: steps: # Download artifact from Build stage - download: current - artifact: docs-nect-artifact + artifact: docs-next-artifact # Deploy the artifact to Azure App Service - task: AzureWebApp@1 @@ -96,7 +96,7 @@ stages: inputs: azureSubscription: 'DocsNextServiceConnector' # ARM service connection in DevOps appName: 'docs-next' # Azure App Service name - package: '$(Pipeline.Workspace)/drop/app.zip' + package: '$(Pipeline.Workspace)/docs-next-artifact/app.zip' appType: 'webAppLinux' From 15514463f8a7dd73cce0bfc78ef49b10a5c2a460 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 18:13:40 +0530 Subject: [PATCH 38/49] Revert "temp: temporarily reduce rendering content" This reverts commit d9da6f014acdd1c60f4e926077305dcd769ca736. --- ClientApp/src/content.config.ts | 4 ++-- ClientApp/src/pages/en/api/reference/[...mdslug].astro | 2 +- ClientApp/src/pages/en/api/reference/[...yamlslug].astro | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ClientApp/src/content.config.ts b/ClientApp/src/content.config.ts index ef9f92c4..25b0631f 100644 --- a/ClientApp/src/content.config.ts +++ b/ClientApp/src/content.config.ts @@ -4,7 +4,7 @@ import { glob } from "astro/loaders"; import { DocsSchema, SimplifiedYamlSchema, TocYamlSchema, YamlManagedReferenceSchema } from "~/content.schema" // apiOnly variable is used in the split build to isolate docs/en/api folder content -const apiOnly = true; +const apiOnly = process.env.API_ONLY === 'true'; const DOCS_BASE = "external-content/superoffice-docs/docs"; const API_BASE = `${DOCS_BASE}/en/api`; @@ -45,7 +45,7 @@ const apiDocs = defineCollection({ const CRMScript = defineCollection({ loader: glob({ - pattern: false ? [ + pattern: apiOnly ? [ "**/!(*toc).yml", "!**/includes/**", ] : [], diff --git a/ClientApp/src/pages/en/api/reference/[...mdslug].astro b/ClientApp/src/pages/en/api/reference/[...mdslug].astro index bd64aff8..f553f1c1 100644 --- a/ClientApp/src/pages/en/api/reference/[...mdslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...mdslug].astro @@ -9,7 +9,7 @@ import ContentLayout from "@layouts/ContentLayout.astro"; import { renderMarkdownWithHeadingIds } from "@utils/contentUtils"; export async function getStaticPaths() { - const apiOnly = false; + const apiOnly = process.env.API_ONLY === 'true'; if (!apiOnly) { return []; diff --git a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro index 5611e26f..c3579c29 100644 --- a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro @@ -10,7 +10,7 @@ import type { TocData } from "~/types/TableOfContentTypes"; export async function getStaticPaths() { - const apiOnly = false; + const apiOnly = process.env.API_ONLY === 'true'; if (!apiOnly) { return []; From 3611f8a93765418d268a215ea5f73de3cfd0c8b3 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 18:16:27 +0530 Subject: [PATCH 39/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index f89bbeb4..1f95d1bc 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -75,8 +75,11 @@ stages: - stage: Deploy displayName: "Deploy to Azure Web App" dependsOn: Build - condition: or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), - eq(variables['Build.Reason'], 'Manual')) + condition: and( + succeeded(), + or(eq(variables['Build.SourceBranch'], 'refs/heads/main'), eq(variables['Build.Reason'], 'Manual')) + ) + jobs: - deployment: DeployJob environment: 'production' From 49367e5dd4374ed8bb34db1612d270bbe989628c Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 18:13:40 +0530 Subject: [PATCH 40/49] Revert "temp: temporarily reduce rendering content" This reverts commit d9da6f014acdd1c60f4e926077305dcd769ca736. --- ClientApp/src/content.config.ts | 4 ++-- ClientApp/src/pages/en/api/reference/[...mdslug].astro | 2 +- ClientApp/src/pages/en/api/reference/[...yamlslug].astro | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ClientApp/src/content.config.ts b/ClientApp/src/content.config.ts index ef9f92c4..25b0631f 100644 --- a/ClientApp/src/content.config.ts +++ b/ClientApp/src/content.config.ts @@ -4,7 +4,7 @@ import { glob } from "astro/loaders"; import { DocsSchema, SimplifiedYamlSchema, TocYamlSchema, YamlManagedReferenceSchema } from "~/content.schema" // apiOnly variable is used in the split build to isolate docs/en/api folder content -const apiOnly = true; +const apiOnly = process.env.API_ONLY === 'true'; const DOCS_BASE = "external-content/superoffice-docs/docs"; const API_BASE = `${DOCS_BASE}/en/api`; @@ -45,7 +45,7 @@ const apiDocs = defineCollection({ const CRMScript = defineCollection({ loader: glob({ - pattern: false ? [ + pattern: apiOnly ? [ "**/!(*toc).yml", "!**/includes/**", ] : [], diff --git a/ClientApp/src/pages/en/api/reference/[...mdslug].astro b/ClientApp/src/pages/en/api/reference/[...mdslug].astro index bd64aff8..f553f1c1 100644 --- a/ClientApp/src/pages/en/api/reference/[...mdslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...mdslug].astro @@ -9,7 +9,7 @@ import ContentLayout from "@layouts/ContentLayout.astro"; import { renderMarkdownWithHeadingIds } from "@utils/contentUtils"; export async function getStaticPaths() { - const apiOnly = false; + const apiOnly = process.env.API_ONLY === 'true'; if (!apiOnly) { return []; diff --git a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro index 5611e26f..c3579c29 100644 --- a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro @@ -10,7 +10,7 @@ import type { TocData } from "~/types/TableOfContentTypes"; export async function getStaticPaths() { - const apiOnly = false; + const apiOnly = process.env.API_ONLY === 'true'; if (!apiOnly) { return []; From 9b2da7c4a2687de3d59f962d2951678a3627555f Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:44:06 +0530 Subject: [PATCH 41/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index 712ebcbc..bad65a1f 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -64,7 +64,6 @@ stages: inputs: rootFolderOrFile: '$(Build.ArtifactStagingDirectory)/out' includeRootFolder: false - archiveType: 'zip' archiveFile: '$(Build.ArtifactStagingDirectory)/app.zip' replaceExistingArchive: true From 6e2091badfcfbb7b5fae732c0b8247138b06e5de Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:50:30 +0530 Subject: [PATCH 42/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index bad65a1f..b57f7087 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -31,7 +31,8 @@ stages: pool: name: Default # Uses Agent Pool named 'Default' demands: - - agent.os -equals Linux + # - agent.os -equals Linux + - Agent.ComputerName -equals tfs-build-23 steps: # Checkout your main repo - checkout: self From 0910d4cdc5c5c61ae46910ac8758d88c32b68a66 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Mon, 15 Sep 2025 17:56:11 +0530 Subject: [PATCH 43/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index b57f7087..f89bbeb4 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -70,7 +70,7 @@ stages: # Publish the zip as a pipeline artifact - publish: $(Build.ArtifactStagingDirectory)/app.zip - artifact: docs-nect-artifact + artifact: docs-next-artifact - stage: Deploy displayName: "Deploy to Azure Web App" @@ -88,7 +88,7 @@ stages: steps: # Download artifact from Build stage - download: current - artifact: docs-nect-artifact + artifact: docs-next-artifact # Deploy the artifact to Azure App Service - task: AzureWebApp@1 @@ -96,7 +96,7 @@ stages: inputs: azureSubscription: 'DocsNextServiceConnector' # ARM service connection in DevOps appName: 'docs-next' # Azure App Service name - package: '$(Pipeline.Workspace)/drop/app.zip' + package: '$(Pipeline.Workspace)/docs-next-artifact/app.zip' appType: 'webAppLinux' From 20a6f07c0123ab14ccc6a0246ff70089820505c2 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 16 Sep 2025 09:47:07 +0530 Subject: [PATCH 44/49] Update azure-pipelines-docs-next.yml for Azure Pipelines --- build/azure-pipelines-docs-next.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index 1f95d1bc..a71e4555 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -27,6 +27,7 @@ stages: displayName: "Build and Package" jobs: - job: Build + timeoutInMinutes: 120 displayName: "Build .NET + Astro frontend" pool: name: Default # Uses Agent Pool named 'Default' From 2840ae85b61a09894700a28b225ff6b5189be018 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 16 Sep 2025 09:54:50 +0530 Subject: [PATCH 45/49] Update build agent in azure pipeline --- build/azure-pipelines-docs-next.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index a71e4555..bb9dc829 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -32,8 +32,8 @@ stages: pool: name: Default # Uses Agent Pool named 'Default' demands: - # - agent.os -equals Linux - - Agent.ComputerName -equals tfs-build-23 + - agent.os -equals Linux + # - Agent.ComputerName -equals tfs-build-23 steps: # Checkout your main repo - checkout: self From 5ec12497dba6c2e5d4758cf51609c85c5d483f91 Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Tue, 16 Sep 2025 10:14:53 +0530 Subject: [PATCH 46/49] Update build agent azure pipelines --- build/azure-pipelines-docs-next.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/azure-pipelines-docs-next.yml b/build/azure-pipelines-docs-next.yml index bb9dc829..a71e4555 100644 --- a/build/azure-pipelines-docs-next.yml +++ b/build/azure-pipelines-docs-next.yml @@ -32,8 +32,8 @@ stages: pool: name: Default # Uses Agent Pool named 'Default' demands: - - agent.os -equals Linux - # - Agent.ComputerName -equals tfs-build-23 + # - agent.os -equals Linux + - Agent.ComputerName -equals tfs-build-23 steps: # Checkout your main repo - checkout: self From 67e5997ae4271d37ea0c3dc53fc6033a03b86fba Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 17 Sep 2025 17:12:08 +0530 Subject: [PATCH 47/49] fix: updated YAML managed reference template --- ClientApp/src/layouts/YamlLayoutPage.astro | 19 +++++++--- .../en/api/reference/[...yamlslug].astro | 36 +++++++++++++++++-- .../en/automation/crmscript/[...slug].astro | 6 ++-- 3 files changed, 51 insertions(+), 10 deletions(-) diff --git a/ClientApp/src/layouts/YamlLayoutPage.astro b/ClientApp/src/layouts/YamlLayoutPage.astro index 370233e8..f2e15848 100644 --- a/ClientApp/src/layouts/YamlLayoutPage.astro +++ b/ClientApp/src/layouts/YamlLayoutPage.astro @@ -16,9 +16,10 @@ interface Props { entry: any; tocData: TocData; collection: string; + contentPath: string; } -const { entry, tocData, collection } = Astro.props; +const { entry, tocData, collection, contentPath } = Astro.props; const pageTitle = entry.data.items[0].type + " " + entry.data.items[0].id; @@ -47,11 +48,20 @@ function appendIntoHeadingList(key: keyof headingsListProps, dataItem: Item) { headingList[key] = []; } headingList[key].push({ - text: dataItem.id, + text: getDataItemID(dataItem), slug: dataItem.uid, }); } +/** + * Extracts the ID from a data item by returning either its 'id' property or the last segment of its 'uid' property. + * @param {any} dataItem - The data item object containing either an 'id' or 'uid' property + * @returns {string} The ID value from the data item + */ +function getDataItemID(dataItem: any): string { + return dataItem.id ?? dataItem.uid?.split(".").pop(); +} + const documentType = entry.data.items[0].type; if (documentType === "Namespace") { @@ -61,8 +71,7 @@ if (documentType === "Namespace") { const baseContentPath = "external-content"; const childFilePath = path.join( baseContentPath, - "superoffice-docs/docs/en/api/reference", - collection, + contentPath, `${childName}.yml` ); @@ -77,7 +86,7 @@ if (documentType === "Namespace") { } namespaceData[key].push({ uid: dataItem.uid, - id: dataItem.id, + id: getDataItemID(dataItem), summary: dataItem.summary, }); diff --git a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro index c3579c29..4d919091 100644 --- a/ClientApp/src/pages/en/api/reference/[...yamlslug].astro +++ b/ClientApp/src/pages/en/api/reference/[...yamlslug].astro @@ -26,6 +26,21 @@ export async function getStaticPaths() { "netserver/services", ]; + /** + * Creates a lazy loader function for YAML content. + * + * @param {string} filePath - The path to the YAML file to be loaded + * @param {string} collection - The collection name associated with the YAML content + * @returns {Function} An async function that when called: + * - Reads the YAML file from the provided path + * - Parses the YAML content + * - Returns an object containing: + * - data: The parsed YAML data + * - filePath: The original file path + * - id: Generated reference slug based on file path and collection + * - collection: The provided collection name + * + */ // Lazy loader for YAML entry function loadYamlContent(filePath: string, collection: string) { return async () => { @@ -40,7 +55,16 @@ export async function getStaticPaths() { }; } - // Lazy loader for TOC + /** + * Creates a lazy loader function for Table of Contents (TOC) data. + * + * @param {string} apiPath - The API path used to fetch the TOC data + * @returns {Function} An async function that: + * - Attempts to fetch TOC data using getTocByPath + * - Returns the TOC data if successful + * - Returns an empty TOC structure ({items: []}) if fetch fails + * + */ function loadTocData(apiPath: string) { return async () => { try { @@ -52,6 +76,14 @@ export async function getStaticPaths() { }; } + /** + * Determines the API type based on the provided path. + * + * @param {string} path - The file path to analyze + * @returns {string} - Returns either the full path if it starts with "netserver", + * or the first segment of the path (split by "/") + * + */ function getApiType(path:string):string{ if(path.startsWith("netserver")){ return path @@ -119,4 +151,4 @@ const entry = await loadEntry(); const tocData = await loadTocData(); --- - + diff --git a/ClientApp/src/pages/en/automation/crmscript/[...slug].astro b/ClientApp/src/pages/en/automation/crmscript/[...slug].astro index 7cfdc296..6ada6003 100644 --- a/ClientApp/src/pages/en/automation/crmscript/[...slug].astro +++ b/ClientApp/src/pages/en/automation/crmscript/[...slug].astro @@ -1,5 +1,5 @@ --- -import { getCollection } from "astro:content"; +import { getCollection, type CollectionEntry } from "astro:content"; import { getSegmentToc } from "@utils/tocUtils"; import { stripFilePathAndExtension } from "~/utils/slugUtils"; import YamlLayoutPage from "@layouts/YamlLayoutPage.astro"; @@ -16,7 +16,7 @@ export async function getStaticPaths() { const referencePath = "superoffice-docs/docs/en/automation/crmscript" as const; const docEntries = await getCollection(collection); - return docEntries.map((entry) => { + return docEntries.map((entry: CollectionEntry<"crmscript">) => { const generatedSlug = stripFilePathAndExtension( entry.filePath!, referencePath, @@ -32,4 +32,4 @@ export async function getStaticPaths() { const { entry } = Astro.props; --- - \ No newline at end of file + \ No newline at end of file From 2181bf80bab3bbc082b431f11589f073c688aa0f Mon Sep 17 00:00:00 2001 From: Povindu Samarasekara Date: Wed, 17 Sep 2025 17:12:38 +0530 Subject: [PATCH 48/49] style: updated styling in InThisArticle component --- ClientApp/src/components/OnThisArticle.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ClientApp/src/components/OnThisArticle.tsx b/ClientApp/src/components/OnThisArticle.tsx index a9b0e86a..71a9bb5c 100644 --- a/ClientApp/src/components/OnThisArticle.tsx +++ b/ClientApp/src/components/OnThisArticle.tsx @@ -51,9 +51,9 @@ const OnThisArticle: React.FC = ({ headings, showSubHeading = true }) isActive(mainSlug) || subSlugs.includes(activeSlug ?? ""); return ( -