diff --git a/.github/workflows/authorized-changes-detection.yml b/.github/workflows/authorized-changes-detection.yml deleted file mode 100644 index 105e151d..00000000 --- a/.github/workflows/authorized-changes-detection.yml +++ /dev/null @@ -1,55 +0,0 @@ -############################################################################## -############################################################################## -# -# NOTE! -# -# Please read the README.md file in this directory that defines what should -# be placed in this file -# -############################################################################## -############################################################################## - -name: Checking workflow files -on: - pull_request: - branches: - - "**" - -jobs: - Check-Sensitive-Files: - if: ${{ github.actor != 'dependabot[bot]' && !contains(github.event.pull_request.labels.*.name, 'ignore-sensitive-files-pr') }} - name: Checks if sensitive files have been changed without authorization - runs-on: ubuntu-latest - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Get Changed Unauthorized files - id: changed-unauth-files - uses: tj-actions/changed-files@v45 - with: - files: | - .github/** - CNAME - static/CNAME - package.json - sidebar*.js - docusaurus.config.js - babel.config.js - tsconfig.json - .gitignore - .coderabbit.yaml - CODEOWNERS - LICENSE - ./*.md - - - name: List all changed unauthorized files - if: steps.changed-unauth-files.outputs.any_changed == 'true' || steps.changed-unauth-files.outputs.any_deleted == 'true' - env: - CHANGED_UNAUTH_FILES: ${{ steps.changed-unauth-files.outputs.all_changed_files }} - run: | - for file in ${CHANGED_UNAUTH_FILES}; do - echo "$file is unauthorized to change/delete" - echo "To override this, apply the 'ignore-sensitive-files-pr' label" - done - exit 1 diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml index f9c10091..90e8c461 100644 --- a/.github/workflows/pull-request.yml +++ b/.github/workflows/pull-request.yml @@ -63,6 +63,65 @@ jobs: echo "Error: Close this PR and try again." exit 1 + Check-Sensitive-Files: + if: ${{ github.actor != 'dependabot[bot]' && !contains(github.event.pull_request.labels.*.name, 'ignore-sensitive-files-pr') }} + name: Checks if sensitive files have been changed without authorization + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get Changed Unauthorized files + id: changed-unauth-files + run: | + SENSITIVE_FILES=( + ".github/" + "CNAME" + "static/CNAME" + "package.json" + "sidebar" + "docusaurus.config.js" + "babel.config.js" + "CODEOWNERS" + "LICENSE" + "./*.md" + "package-lock.json" + "tsconfig.json" + "pnpm.lock" + "static/.nojekyll" + ".gitignore" + ".prettierignore" + ".prettierrc" + ) + CHANGED_FILES=$(git diff --name-only --diff-filter=ACMRT ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) + DELETED_FILES=$(git diff --name-only --diff-filter=D ${{ github.event.pull_request.base.sha }} ${{ github.event.pull_request.head.sha }}) + SENSITIVE_CHANGED=false + ALL_CHANGED_FILES="" + for FILE in $CHANGED_FILES $DELETED_FILES; do + for PATTERN in "${SENSITIVE_FILES[@]}"; do + if [[ "$FILE" == "$PATTERN" || "$FILE" == "$PATTERN"* || "$FILE" == *"$PATTERN"* ]]; then + ALL_CHANGED_FILES+="$FILE " + SENSITIVE_CHANGED=true + fi + done + done + echo "all_changed_files=$ALL_CHANGED_FILES" >> $GITHUB_OUTPUT + echo "any_changed=$SENSITIVE_CHANGED" >> $GITHUB_OUTPUT + echo "any_deleted=$([ -n "$DELETED_FILES" ] && echo "true" || echo "false")" >> $GITHUB_OUTPUT + + - name: List all changed unauthorized files + if: steps.changed-unauth-files.outputs.any_changed == 'true' || steps.changed-unauth-files.outputs.any_deleted == 'true' + env: + CHANGED_UNAUTH_FILES: ${{ steps.changed-unauth-files.outputs.all_changed_files }} + run: | + for file in ${CHANGED_UNAUTH_FILES}; do + echo "$file is unauthorized to change/delete" + done + echo "To override this, apply the 'ignore-sensitive-files-pr' label" + exit 1 + Test-Docusaurus-Deployment: name: Test Deployment to https://developer.palisadoes.org runs-on: ubuntu-latest diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..02f6b6c4 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,3 @@ +node_modules +# Contains the PDF file of the Tag as JSON string, thus does not need to be formatted +src/components/CheckIn/tagTemplate.ts \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..2c0fc022 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "endOfLine": "auto" +} \ No newline at end of file diff --git a/docs/internships/gsoc-previous/2022.md b/docs/internships/gsoc-previous/2022.md new file mode 100644 index 00000000..ec18aa24 --- /dev/null +++ b/docs/internships/gsoc-previous/2022.md @@ -0,0 +1,143 @@ +--- +id: gsoc-ideas-2022 +title: 2022 +sidebar_position: 1 +--- + +Our GSoC 2022 ideas. + +--- + +There are some well known areas of improvement that we have listed below. It is really important that we complete these over the summer and we would also welcome any other ideas that could use these as a foundation. + +In general we would like to reduce the learning curve for new sysadmins. Our API documentation needs to be clearer, especially as we hope to launch an alpha version of the software this year. It is important that our online documentation is updated as any part of the project. + +Please review the "Desired Features" section of this website for **even more ideas** and further necessary information. + +## Important Note on Testing + +**All code submitted must be tested.** We are working towards getting to 100% test code coverage on all Talawa repositories. This will mean that you will have to write tests for new code you write or modify. + +The test percent code coverage requirement will incrementally rise with each pull request. In some cases you may have to write a few extra tests for code you may not have updated. We hope this will be rare. + +## Primary Idea Areas + +Here are the features we'd like to implement in the coming months. + +### Cloud Service Capability + +Talawa needs to be cloud capable to be universally accepted. This means we'll need to add suitable features to meet this goal. This section outlines some important focus areas. + +#### Portal Plugin Architecture + +We need the ability to control the functionality of the API, and by extension the mobile app, via plugins. The API would need to detect the existence of a plugin, and automatically query the plugin for authorization to do some action. + +The plugins would need to be: + +1. Easy to install and remove either online or the uploading of code +1. Able to be installed, activated and configured at the global and/or per-organization level served by the API. +1. Easy to configure in the Talawa-Admin portal. + +We need to create a working architecture to do this. + +##### Desired Plugins + +We also need specific standard plugins to be created: + +1. A plugin to allow organization administrators to create advertising from local companies and add it to the mobile app news feed. This would require ways to launch and track simple campaigns for fixed periods of time for advertising customers. +1. A plugin to accept donations or membership fees via the mobile app. +1. If Talawa were to be launched as a cloud service, then the ability to install a plugin to define and enforce tiers of service with associated billing would be needed. + +GSoC Proposal Tags: talawa-api, plugins + +We have many areas in which we need good ideas. This section highlights some primary areas of focus. + +### API Dataloaders + +The Talawa API uses a GraphQL API to interact with a MongoDB database. GraphQL has a well-known issue with making repetitive database queries. This is known as `the N+1 problem`. A common solution is to use Dataloaders. These increase efficiency by batching queries and optionally caching the results. + +We need to find a way to adjust all our GraphQL resolvers to take advantage of this feature and cache the results where appropriate. + +Here are some good resources that provide more background. + +1. [GraphQL N+1 Problem](https://www.youtube.com/watch?v=uCbFMZYQbxE) +1. [Using dataloaders](https://sayasuhendra.github.io/graphql-js/7-using-data-loaders/) +1. [GraphQL DataLoader with Node.js](https://www.youtube.com/watch?v=2cSVIWDUSn4) +1. [What is the N+1 Problem in GraphQL?](https://medium.com/the-marcy-lab-school/what-is-the-n-1-problem-in-graphql-dd4921cb3c1a) +1. [How to use DataLoaders in GraphQL](https://medium.com/the-marcy-lab-school/how-to-use-dataloader-js-9727c527efd0) + +### API Multi-tennancy + +As the talawa app will be used by a number of different individuals, it is worth asking: how best can we separate different user instances to best optimise resources? This is at the heart of a concept called Multitenancy. There are in general two ways to go about doing this, namely, instance replication and data segregation. We want to focus on the data segregation method. + +In the data segregation model, the application is shared between tenants but the data of each tenant is stored in separate data stores. Separate data stores could be separate databases or separate schema within the same database. How would you implement this? + +### Event Management + +Community organizations often have many events that need to be managed. Here are some small ideas of what could be done. Expand on these if you can. + +#### Volunteer and Attendee Checkins for Events + +An organization may rely on volunteers for manage events. It would be good to have a simple system for users to be able to let the event coordinators know that they are on site and available. + +The system could also be used to have attendees confirm that they are actually at the event. This would help with capacity planning. + +#### Event Registrations + +There could be a need to limit the number of persons attending an event by setting a maximum number for registrations when they are created. Event organizers would then know who to admit to the event if space were limited. + +#### Facilities Registrations + +Just like with event registrations, there may be a need to reserve a room, building, hall or field for an event. Reserving these areas would be an interesting feature to consider. + +### Membership Management + +There needs to be a way to add members to a group in a trusted way. Many persons in developing regions don't have access to email services, and the organizations may not have the funds to invest in a text based authentication scheme. Also, person may not be literate enough to read detailed instructions. There needs to be a way, that is universally available on all modern feature and smart phones, to allow persons to authenticate themselves when joining an organization. Some mobile apps use a QR code system for example, there could be other methods too. + +### Groups Management + +Groups won't be just for chats and communication. They may also arrange activities and events together. There should be a way to help them do this. For example, automatically inviting all members of a group to a group event. There are many other areas for improvement + +### Notifications and Reminders + +It would be good to be able to send notifications and reminders to selected groups of persons such as: + +1. All members of an organization +1. All persons registered for an event +1. All members of a group + +These could be sent directly and/or part of their news feed. + +### Talawa-Admin Multilingual Support + +We need to ensure that all the functionality in the admin portal have multilingual support. We will need ways for persons to easily switch between languages at installation, on login, on registration and at any time during the operation of the software. A thorough review of how this and more could be implemented will be required. + +A thorough review of the mobile app is needed to make sure that all screens have multilingual support. + +### Donation and Membership Fee Management + +Organizations may need simple ways to track donations and membership fees + +### Multisite Security + +New organizations can only be created using the Talawa-Admin portal. We need to think of ways that this: +1. Can only be done by super-administrator users +1. Can only be done using the Talawa-Admin portal + +GSoC Proposal Tags: multisite + +## Secondary Idea Areas + +We have other areas that need good ideas. This section highlights some primary areas of focus. + +### Backend Improvements + +Take a look at the [Desired Features](https://palisadoesfoundation.github.io/talawa-docs/docs/features/features-introduction) section for guidance on what we'd like to achieve. Use these to create a unique vision of what you think Talawa could become. + +Don't be limited by our desired features. Think of new areas of functionality for the various repos. How could it be better for both the end user and administrators? + +Remember, preparing the backend for future features and creating intuitive ways of user interaction with the backend will be important. + +### Operational Considerations + +Many community hosting their own solution won't have the funds to pay for additional services. They will be using slower, older equipment with limited storage. There will be low technical ability too. In many cases the users may not have completed schooling. Ideas on how to resolve these issues will be helpful. diff --git a/docs/internships/gsoc-previous/2023.md b/docs/internships/gsoc-previous/2023.md index f212018a..c542c48a 100644 --- a/docs/internships/gsoc-previous/2023.md +++ b/docs/internships/gsoc-previous/2023.md @@ -1,11 +1,13 @@ --- id: gsoc-ideas-2023 title: 2023 -sidebar_position: 1 +sidebar_position: 2 --- Our GSoC 2023 ideas. +--- + ## General - Primary Idea Areas This section outlines the primary features we'd like to implement in the coming months with impacts on all the applications. diff --git a/docs/internships/gsoc-previous/2024.md b/docs/internships/gsoc-previous/2024.md index c5ff7e2e..981b0105 100644 --- a/docs/internships/gsoc-previous/2024.md +++ b/docs/internships/gsoc-previous/2024.md @@ -1,11 +1,13 @@ --- id: gsoc-ideas-2024 title: 2024 -sidebar_position: 2 +sidebar_position: 3 --- Our GSoC 2024 ideas. +--- + ## Idea Areas This section outlines the primary features we'd like to implement in the coming months with impacts on all the applications. diff --git a/docs/internships/gsoc-previous/2025.md b/docs/internships/gsoc-previous/2025.md index cdc8c335..8c3a0534 100644 --- a/docs/internships/gsoc-previous/2025.md +++ b/docs/internships/gsoc-previous/2025.md @@ -1,11 +1,13 @@ --- id: gsoc-ideas-2025 title: 2025 -sidebar_position: 3 +sidebar_position: 4 --- Our GSoC 2025 ideas. +--- + ## Talawa Areas Talawa is a suite of applications that is aimed at managing the memberships of community based organizations. This concept may be new to you, and we suggest you research non-profit organization and open source software project management software as a starting point. Talawa needs to have a broader reach and your additions to our ideas will make the difference. We have included links to YouTube videos on this page that will be useful in improving your understanding. diff --git a/docs/internships/gsoc-previous/_2026.md b/docs/internships/gsoc-previous/_2026.md new file mode 100644 index 00000000..e1d1f582 --- /dev/null +++ b/docs/internships/gsoc-previous/_2026.md @@ -0,0 +1,49 @@ + +## Introdduction + +1. Add ideas at the ***very bottom*** of this document +2. Use this as an example: + 1. https://github.com/PalisadoesFoundation/developer-docs/blob/main/docs/internships/gsoc-previous/2025.md +3. Here is the markdown template + +### Repository Name: Add project idea title here + +1. **Description:** Add a description of the project here. + 1. **Sub Project #1**: + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. + 1. **Feature 1** + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. + 1. **Feature 2** + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. + 1. **Sub Project #2**: + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. + 1. **Feature 1** + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. + 1. **Feature 2** + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. +1. **Expected Outcomes:** + 1. Add description 1 here. + 1. Add description 2 here. + 1. Add description N here. +1. **Repos to update:** Talawa, Talawa-API, Talawa-Admin +1. **Skills Required:** Code stacks related to repos above. See introduction section. +1. **Depends on Project:** None +1. **Project Size:** 350 hours (Large) +2. **Possible Mentors:** TBD +3. **Difficulty:** Hard +4. **Impact Definition:** "Low-hanging fruit" OR "Risky/Exploratory" OR "Fun/Peripheral" OR "Core development" OR "Infrastructure/Automation" + +--- +## ADD IDEAS HERE \ No newline at end of file diff --git a/docusaurus.config.ts b/docusaurus.config.ts index 5db86df8..2d263ae4 100644 --- a/docusaurus.config.ts +++ b/docusaurus.config.ts @@ -1,47 +1,47 @@ -import { themes as prismThemes } from "prism-react-renderer"; -import type { Config } from "@docusaurus/types"; -import type * as Preset from "@docusaurus/preset-classic"; +import { themes as prismThemes } from 'prism-react-renderer'; +import type { Config } from '@docusaurus/types'; +import type * as Preset from '@docusaurus/preset-classic'; const config: Config = { - title: "Palisadoes Foundation", - tagline: "Start your open source journey here", - favicon: "img/talawa-logo-200x200.png", + title: 'Palisadoes Foundation', + tagline: 'Start your open source journey here', + favicon: 'img/talawa-logo-200x200.png', - url: "https://developer.palisadoes.org", - baseUrl: "/", - deploymentBranch: "gh-pages", + url: 'https://developer.palisadoes.org', + baseUrl: '/', + deploymentBranch: 'gh-pages', - organizationName: "PalisadoesFoundation", // GitHub org - projectName: "developer-docs", // repo name + organizationName: 'PalisadoesFoundation', // GitHub org + projectName: 'developer-docs', // repo name - onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', i18n: { - defaultLocale: "en", - locales: ["en"], + defaultLocale: 'en', + locales: ['en'], }, presets: [ [ - "classic", + 'classic', { docs: { - sidebarPath: "./sidebars.ts", + sidebarPath: './sidebars.ts', editUrl: - "https://github.com/PalisadoesFoundation/developer-docs/edit/main/", + 'https://github.com/PalisadoesFoundation/developer-docs/edit/main/', }, blog: { showReadingTime: true, feedOptions: { - type: ["rss", "atom"], + type: ['rss', 'atom'], xslt: true, }, editUrl: - "https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/", + 'https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/', }, theme: { - customCss: "./src/css/custom.css", + customCss: './src/css/custom.css', }, } satisfies Preset.Options, ], @@ -56,104 +56,104 @@ const config: Config = { autoCollapseCategories: true, }, }, - image: "img/docusaurus-social-card.jpg", + image: 'img/docusaurus-social-card.jpg', navbar: { - title: "Palisadoes Developers", + title: 'Palisadoes Developers', hideOnScroll: true, - logo: { alt: "My Site Logo", src: "img/talawa-logo-200x200.png" }, + logo: { alt: 'My Site Logo', src: 'img/talawa-logo-200x200.png' }, items: [ - { to: "/docs", label: "Introduction", position: "left" }, + { to: '/docs', label: 'Introduction', position: 'left' }, { - label: "Talawa", - position: "left", - to: "https://docs.talawa.io", - target: "_self", + label: 'Talawa', + position: 'left', + to: 'https://docs.talawa.io', + target: '_self', }, { - label: "Switchmap-NG", - position: "left", - to: "https://docs.switchmap-ng.io", - target: "_self", + label: 'Switchmap-NG', + position: 'left', + to: 'https://docs.switchmap-ng.io', + target: '_self', }, { - label: "Leaderboard", - position: "left", - to: "https://palisadoesfoundation.github.io/leaderboard/", - target: "_self", + label: 'Leaderboard', + position: 'left', + to: 'https://palisadoesfoundation.github.io/leaderboard/', + target: '_self', }, { - href: "https://github.com/PalisadoesFoundation", + href: 'https://github.com/PalisadoesFoundation', html: ' ', - position: "right", - "aria-label": "GitHub Stars", - className: "custom-icon-link", + position: 'right', + 'aria-label': 'GitHub Stars', + className: 'custom-icon-link', }, { - href: "https://www.linkedin.com/company/palisadoes/posts/?feedView=all", + href: 'https://www.linkedin.com/company/palisadoes/posts/?feedView=all', html: '', - position: "right", - "aria-label": "LinkedIn", - className: "custom-icon-link", + position: 'right', + 'aria-label': 'LinkedIn', + className: 'custom-icon-link', }, - { type: "search", position: "right" }, + { type: 'search', position: 'right' }, ], }, footer: { - style: "dark", + style: 'dark', links: [ { - title: "Community", + title: 'Community', items: [ { - label: " Slack", - to: "https://github.com/PalisadoesFoundation", - className: "footer__icon footer__slack", + label: ' Slack', + to: 'https://github.com/PalisadoesFoundation', + className: 'footer__icon footer__slack', }, { - label: " News", - to: "https://www.palisadoes.org/news/", - className: "footer__icon footer__news", + label: ' News', + to: 'https://www.palisadoes.org/news/', + className: 'footer__icon footer__news', }, { - label: " Contact Us", - to: "https://www.palisadoes.org/contact/", - className: "footer__icon footer__contact", + label: ' Contact Us', + to: 'https://www.palisadoes.org/contact/', + className: 'footer__icon footer__contact', }, ], }, { - title: "Social Media", + title: 'Social Media', items: [ { - label: " Twitter", - to: "https://twitter.com/palisadoesorg?lang=en", - className: "footer__icon footer__twitter", + label: ' Twitter', + to: 'https://twitter.com/palisadoesorg?lang=en', + className: 'footer__icon footer__twitter', }, { - label: " Facebook", - to: "https://www.facebook.com/palisadoesproject/", - className: "footer__icon footer__facebook", + label: ' Facebook', + to: 'https://www.facebook.com/palisadoesproject/', + className: 'footer__icon footer__facebook', }, { - label: " Instagram", - to: "https://www.instagram.com/palisadoes/?hl=en", - className: "footer__icon footer__instagram", + label: ' Instagram', + to: 'https://www.instagram.com/palisadoes/?hl=en', + className: 'footer__icon footer__instagram', }, ], }, { - title: "Development", + title: 'Development', items: [ { - label: " GitHub", - to: "https://github.com/PalisadoesFoundation", - className: "footer__icon footer__github", + label: ' GitHub', + to: 'https://github.com/PalisadoesFoundation', + className: 'footer__icon footer__github', }, ], }, diff --git a/package.json b/package.json index 6adaa390..b3399db4 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,8 @@ "swizzle": "docusaurus swizzle", "deploy": "docusaurus deploy", "clear": "docusaurus clear", - "format:fix": "prettier --write \"**/*.{ts,tsx,json,scss,css}\"", - "format:check": "prettier --check \"**/*.{ts,tsx,json,scss,css}\"", + "format:fix": "prettier --write \"**/*.{ts,tsx,json,json5,scss,css}\"", + "format:check": "prettier --check \"**/*.{ts,tsx,json,json5,scss,css}\"", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", "write-heading-ids": "docusaurus write-heading-ids", diff --git a/sidebars.ts b/sidebars.ts index 6f18caa0..7c5b3085 100644 --- a/sidebars.ts +++ b/sidebars.ts @@ -1,4 +1,4 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; +import type { SidebarsConfig } from '@docusaurus/plugin-content-docs'; // This runs in Node.js - Don't use client-side code here (browser APIs, JSX...) @@ -15,110 +15,110 @@ import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; const sidebars: SidebarsConfig = { docs: [ { - type: "category", - label: "Palisadoes", + type: 'category', + label: 'Palisadoes', link: { - type: "doc", - id: "introduction/introduction", + type: 'doc', + id: 'introduction/introduction', }, collapsed: false, - items: [{ type: "autogenerated", dirName: "introduction" }], + items: [{ type: 'autogenerated', dirName: 'introduction' }], }, { - type: "category", - label: "Git Guide", + type: 'category', + label: 'Git Guide', link: { - type: "doc", - id: "git-guide/introduction/quickstart", + type: 'doc', + id: 'git-guide/introduction/quickstart', }, collapsed: true, items: [ - { type: "autogenerated", dirName: "git-guide/introduction" }, + { type: 'autogenerated', dirName: 'git-guide/introduction' }, { - type: "category", - label: "Working Copies", + type: 'category', + label: 'Working Copies', collapsed: true, items: [ - { type: "autogenerated", dirName: "git-guide/working-copies" }, + { type: 'autogenerated', dirName: 'git-guide/working-copies' }, ], }, { - type: "category", - label: "Setup", + type: 'category', + label: 'Setup', collapsed: true, items: [ { - type: "autogenerated", - dirName: "git-guide/git-workflow/setup", + type: 'autogenerated', + dirName: 'git-guide/git-workflow/setup', }, ], }, { - type: "category", - label: "Stage Changes", + type: 'category', + label: 'Stage Changes', collapsed: true, items: [ { - type: "autogenerated", - dirName: "git-guide/git-workflow/stage-changes", + type: 'autogenerated', + dirName: 'git-guide/git-workflow/stage-changes', }, ], }, { - type: "category", - label: "Repository Update", + type: 'category', + label: 'Repository Update', collapsed: true, items: [ { - type: "autogenerated", - dirName: "git-guide/git-workflow/finish", + type: 'autogenerated', + dirName: 'git-guide/git-workflow/finish', }, ], }, ], }, { - type: "category", - label: "Internships", + type: 'category', + label: 'Internships', link: { - type: "doc", - id: "internships/introduction/faq", + type: 'doc', + id: 'internships/introduction/faq', }, collapsed: true, items: [ { - type: "category", - label: "Introduction", + type: 'category', + label: 'Introduction', link: { - type: "doc", - id: "internships/introduction/faq", + type: 'doc', + id: 'internships/introduction/faq', }, items: [ { - type: "autogenerated", - dirName: "internships/introduction", + type: 'autogenerated', + dirName: 'internships/introduction', }, ], }, { - type: "category", - label: "GSoC", + type: 'category', + label: 'GSoC', link: { - type: "doc", - id: "internships/gsoc/gsoc-introduction", + type: 'doc', + id: 'internships/gsoc/gsoc-introduction', }, collapsed: true, items: [ - { type: "autogenerated", dirName: "internships/gsoc" }, + { type: 'autogenerated', dirName: 'internships/gsoc' }, { - type: "category", - label: "Previous Years", + type: 'category', + label: 'Previous Years', collapsed: true, items: [ { - type: "autogenerated", - dirName: "internships/gsoc-previous", + type: 'autogenerated', + dirName: 'internships/gsoc-previous', }, ], }, @@ -126,45 +126,45 @@ const sidebars: SidebarsConfig = { }, { - type: "category", - label: "GSoD", + type: 'category', + label: 'GSoD', collapsed: true, items: [ { - type: "autogenerated", - dirName: "internships/gsod", + type: 'autogenerated', + dirName: 'internships/gsod', }, ], }, { - type: "category", - label: "Calico", + type: 'category', + label: 'Calico', link: { - type: "doc", - id: "internships/calico/calico-introduction", + type: 'doc', + id: 'internships/calico/calico-introduction', }, collapsed: true, items: [ { - type: "autogenerated", - dirName: "internships/calico", + type: 'autogenerated', + dirName: 'internships/calico', }, ], }, { - type: "category", - label: "Other", + type: 'category', + label: 'Other', link: { - type: "doc", - id: "internships/palisadoes/palisadoes-introduction", + type: 'doc', + id: 'internships/palisadoes/palisadoes-introduction', }, collapsed: true, items: [ { - type: "autogenerated", - dirName: "internships/palisadoes", + type: 'autogenerated', + dirName: 'internships/palisadoes', }, ], }, diff --git a/src/components/HomepageHeader/HomepageHeader.tsx b/src/components/HomepageHeader/HomepageHeader.tsx index 28705ac5..25e07ce1 100644 --- a/src/components/HomepageHeader/HomepageHeader.tsx +++ b/src/components/HomepageHeader/HomepageHeader.tsx @@ -1,15 +1,15 @@ -import React from "react"; -import styles from "./styles.module.css"; -import Heading from "@theme/Heading"; -import clsx from "clsx"; -import Link from "@docusaurus/Link"; -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import { MdKeyboardArrowRight } from "react-icons/md"; +import React from 'react'; +import styles from './styles.module.css'; +import Heading from '@theme/Heading'; +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import { MdKeyboardArrowRight } from 'react-icons/md'; const HomepageHeader = () => { const { siteConfig } = useDocusaurusContext(); return ( -
+
@@ -19,7 +19,7 @@ const HomepageHeader = () => {
- Learn More{" "} + Learn More{' '} diff --git a/src/components/HomepageHeader/styles.module.css b/src/components/HomepageHeader/styles.module.css index 76824c81..3b9580d6 100644 --- a/src/components/HomepageHeader/styles.module.css +++ b/src/components/HomepageHeader/styles.module.css @@ -169,9 +169,9 @@ } /* dark mode css */ -[data-theme="dark"] .hero__title { +[data-theme='dark'] .hero__title { color: #c6d6ff; } -[data-theme="dark"] .heroBanner { +[data-theme='dark'] .heroBanner { background: #11111f; } diff --git a/src/css/custom.css b/src/css/custom.css index 1c559a1c..f0a62ae4 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -5,7 +5,7 @@ */ /* You can override the default Infima variables here. */ -@import url("https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"); +@import url('https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css'); /* Light Theme */ :root { @@ -31,7 +31,7 @@ } /* Dark Theme */ -[data-theme="dark"] { +[data-theme='dark'] { --ifm-color-primary: #339dff; /* Slightly lighter blue for dark mode */ --ifm-color-primary-dark: #2b8ae6; --ifm-color-primary-darker: #277fd4; @@ -275,61 +275,61 @@ a:hover { background-color: var(--sidebar-bg-color); } /* dark */ -[data-theme="dark"] .hero { +[data-theme='dark'] .hero { box-shadow: 2px 6px 6px rgba(255, 255, 255, 0.1); } -[data-theme="dark"] .navbar { +[data-theme='dark'] .navbar { box-shadow: 0px 4px 6px rgba(255, 255, 255, 0.1); } -[data-theme="dark"] .menu__list-item:hover { +[data-theme='dark'] .menu__list-item:hover { background-color: #383b502b; } -[data-theme="dark"] main { +[data-theme='dark'] main { background: #11111f; color: #c6d6ff; } -[data-theme="dark"] .container header { +[data-theme='dark'] .container header { color: #c6d6ff; } -[data-theme="dark"] .container { +[data-theme='dark'] .container { color: #c4c4d7; } -[data-theme="dark"] .breadcrumbs__item--active .breadcrumbs__link { +[data-theme='dark'] .breadcrumbs__item--active .breadcrumbs__link { color: #919191; font-weight: 500; } -[data-theme="dark"] .button, +[data-theme='dark'] .button, .button.button--secondary { background: var(--btn-bg-color); color: var(--btn-clr); } -[data-theme="dark"] .button.button--secondary:hover { +[data-theme='dark'] .button.button--secondary:hover { color: var(--btn-clr); } -[data-theme="dark"] .button:hover { +[data-theme='dark'] .button:hover { background: var(--btn-bg-color-hover); color: var(--btn-clr); } -[data-theme="dark"] .footer { +[data-theme='dark'] .footer { background: #11111f; } -[data-theme="dark"] .footer:hover { +[data-theme='dark'] .footer:hover { box-shadow: 0px 4px 30px rgba(255, 255, 255, 0.1); } -[data-theme="dark"] .footer__icon { +[data-theme='dark'] .footer__icon { color: #c6d6ff; } -[data-theme="dark"] .footer__title { +[data-theme='dark'] .footer__title { color: #fff; } -[data-theme="dark"] .table-of-contents__link { +[data-theme='dark'] .table-of-contents__link { color: var(--base-neutral-0); } -[data-theme="dark"] .table-of-contents__link:hover { +[data-theme='dark'] .table-of-contents__link:hover { color: var(--base-neutral-0); } diff --git a/src/css/index.css b/src/css/index.css index 81b4bfec..2264e69b 100644 --- a/src/css/index.css +++ b/src/css/index.css @@ -54,7 +54,7 @@ body { } /* Dark Theme */ -[data-theme="dark"] { +[data-theme='dark'] { --ifm-color-primary: #339dff; /* Slightly lighter blue for dark mode */ --ifm-color-primary-dark: #2b8ae6; --ifm-color-primary-darker: #277fd4; diff --git a/src/pages/index.tsx b/src/pages/index.tsx index 546f1c99..4bd327b5 100644 --- a/src/pages/index.tsx +++ b/src/pages/index.tsx @@ -1,6 +1,6 @@ -import useDocusaurusContext from "@docusaurus/useDocusaurusContext"; -import Layout from "@theme/Layout"; -import HomepageHeader from "../components/HomepageHeader/HomepageHeader"; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import Layout from '@theme/Layout'; +import HomepageHeader from '../components/HomepageHeader/HomepageHeader'; export default function Home(): JSX.Element { const { siteConfig } = useDocusaurusContext(); diff --git a/src/utils/ActionButton.tsx b/src/utils/ActionButton.tsx index f14a3d6e..e29d253a 100644 --- a/src/utils/ActionButton.tsx +++ b/src/utils/ActionButton.tsx @@ -1,8 +1,8 @@ -import React from "react"; +import React from 'react'; interface ActionButtonProps { href: string; - type?: "primary" | "secondary"; + type?: 'primary' | 'secondary'; target?: string; children: React.ReactNode; buttonClassName?: string; @@ -10,7 +10,7 @@ interface ActionButtonProps { function ActionButton({ href, - type = "primary", + type = 'primary', target, children, buttonClassName, diff --git a/src/utils/HomeCallToAction.tsx b/src/utils/HomeCallToAction.tsx index 14e738f0..ea767269 100644 --- a/src/utils/HomeCallToAction.tsx +++ b/src/utils/HomeCallToAction.tsx @@ -1,5 +1,5 @@ -import React from "react"; -import ActionButton from "./ActionButton"; +import React from 'react'; +import ActionButton from './ActionButton'; interface HomeCallToActionProps {} diff --git a/src/utils/Section.tsx b/src/utils/Section.tsx index beab00d6..ce9f232a 100644 --- a/src/utils/Section.tsx +++ b/src/utils/Section.tsx @@ -1,17 +1,17 @@ -import React from "react"; +import React from 'react'; interface SectionProps { element?: keyof JSX.IntrinsicElements; children: React.ReactNode; className?: string; - background?: "light" | "dark" | "tint"; + background?: 'light' | 'dark' | 'tint'; } function Section({ - element = "section", + element = 'section', children, className, - background = "light", + background = 'light', }: SectionProps) { const El = element; return ( diff --git a/src/utils/TwoColumns.tsx b/src/utils/TwoColumns.tsx index 4e4e384e..5c654d3d 100644 --- a/src/utils/TwoColumns.tsx +++ b/src/utils/TwoColumns.tsx @@ -1,4 +1,4 @@ -import React, { FC } from "react"; +import React, { FC } from 'react'; interface Props { columnOne: React.ReactNode; @@ -7,9 +7,9 @@ interface Props { } const TwoColumns: FC = ({ columnOne, columnTwo, reverse = false }) => { - const firstColumnClasses = `column first ${reverse ? "right" : "left"}`; - const lastColumnClasses = `column last ${reverse ? "left" : "right"}`; - const containerClasses = `TwoColumns ${reverse ? "reverse" : ""}`; + const firstColumnClasses = `column first ${reverse ? 'right' : 'left'}`; + const lastColumnClasses = `column last ${reverse ? 'left' : 'right'}`; + const containerClasses = `TwoColumns ${reverse ? 'reverse' : ''}`; return (