diff options
Diffstat (limited to 'docusaurus')
47 files changed, 1959 insertions, 0 deletions
diff --git a/docusaurus/.dockerignore b/docusaurus/.dockerignore new file mode 100644 index 0000000..019391a --- /dev/null +++ b/docusaurus/.dockerignore @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# This file is part of Wolfree. +# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +package-lock.json diff --git a/docusaurus/.gitignore b/docusaurus/.gitignore new file mode 100644 index 0000000..019391a --- /dev/null +++ b/docusaurus/.gitignore @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: AGPL-3.0-or-later +# This file is part of Wolfree. +# This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +package-lock.json diff --git a/docusaurus/babel.config.js b/docusaurus/babel.config.js new file mode 100644 index 0000000..e4fb2e2 --- /dev/null +++ b/docusaurus/babel.config.js @@ -0,0 +1,12 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +module.exports = { + presets: [require.resolve("@docusaurus/core/lib/babel/preset")], +}; diff --git a/docusaurus/docs/acknowledgment.mdx b/docusaurus/docs/acknowledgment.mdx new file mode 100644 index 0000000..e711148 --- /dev/null +++ b/docusaurus/docs/acknowledgment.mdx @@ -0,0 +1,87 @@ +# Acknowledgment + +We extend our heartfelt gratitude to the communities and projects that promote diversity, equity, and inclusion on the Internet. Their efforts have been instrumental in distributing our free and open-source software. + +## The Fediverse + +Our community distributes source code on the Fediverse. + +The Fediverse is a federation of numerous independently hosted servers that connect various social media platforms. It enables seamless interactions across compatible platforms, encompassing social media services for blogging, photo sharing, and video sharing. + +Discover the Fediverse with these resources: + +- [**Fediverse Info**](https://fediverse.info/): A beginner-friendly introduction to the Fediverse. +- [**FediDB**](https://fedidb.org/): Visualized network statistics of the Fediverse. +- [**Mastodon Documentation**](https://docs.joinmastodon.org/): Comprehensive documentation for Mastodon, a self-hosted social networking service similar to Twitter. +- [**JoinFediverse Wiki**](https://joinfediverse.wiki/): An informative encyclopedia for the Fediverse. +- [**FediList**](http://demo.fedilist.com/): A simple website to explore instances on the Fediverse and facilitate discovery and connections. +- [**The Federation**](https://the-federation.info/): Indexed instances and statistics for the Fediverse. + +## ForgeFed + +Our community hosts source code on web services compatible with ForgeFed. + +ForgeFed specifies an essential federation protocol for version control services, promoting collaboration and cooperation. + +Explore ForgeFed and related projects: + +- [**ForgeFed**](https://forgefed.org/): The canonical website to learn more about the benefits and workings of ForgeFed. +- [**Gitea**](https://about.gitea.com/): A self-hosted Git service powering numerous instances across the Fediverse. +- [**Forgejo**](https://forgejo.org/): A soft fork of Gitea maintained by an inclusive community. + +## Copyleft + +Our community releases source code under a copyleft license. + +Copyleft is a legal technique that safeguards the freedom to copy and modify derivative works. + +Discover the significance of copyleft through these resources: + +- [**Blue Oak Council**](https://blueoakcouncil.org/primer): A comprehensive guide to open software licensing, making it accessible and understandable. +- [**What is Copyleft**](https://www.gnu.org/licenses/copyleft.html.en): An explanation of copyleft, reinforcing the importance of free software. +- [**Why Copyleft**](https://www.gnu.org/philosophy/why-copyleft.html.en): A showcase of the benefits of copyleft licenses to inspire more creators to embrace copyleft licensing. +- [**Why I Use the GPL and Not Cuck Licenses**](https://lukesmith.xyz/articles/why-i-use-the-gpl-and-not-cuck-licenses/): An elaboration on the advantages of copyleft. + +## Anna's Archive + +Anna's Archive is a non-profit online shadow library metasearch engine that provides access to a curated collection of book resources managed by anonymous archivists. Anna's Archive keeps backups of popular shadow libraries like Sci-Hub, Library Genesis, and Z-Library. + +- [**Anna's Archive - Wikipedia**](https://en.wikipedia.org/wiki/Anna's_Archive): A wiki page about Anna's Archive on the free encyclopedia. + +## The Internet Archive + +Our community archives source code on the Internet Archive. + +The Internet Archive is a non-profit library that lends digital copies of books. Despite facing challenges related to copyright issues, they continue to fight for the rights of libraries to own and lend ebooks. + +Learn more about their ongoing efforts through these articles: + +- [**Hachette v. Internet Archive**](https://www.eff.org/cases/hachette-v-Internet-archive) +- [**Fair Use Creep Is A Feature, Not a Bug**](https://www.eff.org/deeplinks/2023/01/fair-use-creep-feature-not-bug) +- [**The Fight Continues**](https://blog.archive.org/2023/03/25/the-fight-continues/) + +## Censorship Circumvention + +Safely circumventing censorship is crucial in fostering diversity, equity, and inclusion on the Internet. + +Enhance your knowledge of safety measures for censorship circumvention with these resources: + +- [**Privacy Guides**](https://privacyguides.org/): A user-friendly guide promoting data security and privacy. +- [**Mullvad Browser**](https://mullvad.net/en/browser): A privacy-focused web browser developed in collaboration between Mullvad VPN and the Tor Project. +- [**Tor Browser**](https://torproject.org/): A web browser capable of accessing the Tor network. +- [**Tails**](https://tails.net/): A Linux distribution aimed at preserving privacy and anonymity. +- [**Qubes OS**](https://qubes-os.org/): A Linux distribution that provides security through isolation. +- [**The Hitchhiker's Guide to Online Anonymity**](https://anonymousplanet.org/): An in-depth guide detailing online anonymity methods. + +## Net Neutrality + +Upholding net neutrality is pivotal in nurturing diversity, equity, and inclusion on the Internet. It ensures that broadband Internet access services do not impair or degrade lawful Internet traffic based on content, application, or service, subject to reasonable network management. + +Learn more about net neutrality and its importance through these articles: + +- [**We Need to Talk About Infrastructure**](https://www.eff.org/deeplinks/2022/12/we-need-talk-about-infrastructure): The importance of content-neutral essential Internet infrastructure and the challenges in defining what falls under this category. +- [**The Internet Is Not Facebook: Why Infrastructure Providers Should Stay Out of Content Policing**](https://www.eff.org/deeplinks/2022/10/Internet-not-facebook-why-infrastructure-providers-should-stay-out-content): The content policing of infrastructure providers due to complex challenges and potential harm to marginalized communities. +- [**International Coalition of Rights Groups Call on Internet Infrastructure Providers to Avoid Content Policing**](https://www.eff.org/press/releases/international-coalition-rights-groups-call-Internet-infrastructure-providers-avoid): Urging Internet infrastructure providers to avoid content policing, citing harm to users and human rights risks. +- [**Where the Sidewalk Ends: The Death of the Internet**](https://madattheInternet.substack.com/p/where-the-sidewalk-ends-the-death): The fragmenting of the Internet as national borders and government regulations stifle its openness and connectivity. + +<!-- SPDX-License-Identifier: AGPL-3.0-or-later --> diff --git a/docusaurus/docs/community.mdx b/docusaurus/docs/community.mdx new file mode 100644 index 0000000..aebf053 --- /dev/null +++ b/docusaurus/docs/community.mdx @@ -0,0 +1,41 @@ +# Community + +Welcome to our diverse and inclusive community! We encourage open discussions and warmly invite you to join the conversations. 🎉 + +:::note + +Our community thrives on the Fediverse, a decentralized social network that encompasses various platforms such as: + +- [Mastodon](https://joinmastodon.org/) +- [Pleroma](https://pleroma.social/) +- [Gitea](https://about.gitea.com/) +- [Forgejo](https://forgejo.org/) + +::: + +## Mastodon and Pleroma + +We would love to hear your thoughts! Express yourself freely on Mastodon and Pleroma. + +1. https://poa.st/@wolfree +2. https://sb.bae.st/@wolfree +3. https://kiwifarms.cc/wolfree +4. https://spinster.xyz/@wolfree +5. https://freespeechextremist.com/wolfree + +## Gitea and Forgejo + +Feel free to contribute and [report issues](https://docs.github.com/en/issues) on Gitea and Forgejo. + +1. https://try.gitea.io/wolfree/issues/issues +2. https://codeberg.org/wolfree/issues/issues +3. https://git.disroot.org/wolfree/issues/issues +4. https://next.forgejo.org/wolfree/issues/issues +5. https://git.kiwifarms.net/wolfree/issues/issues +6. http://it7otdanqu7ktntxzm427cba6i53w6wlanlh23v5i3siqmos47pzhvyd.onion/wolfree/issues/issues + +## Diversity, Equity, and Inclusion + +At our core, we strive to cultivate an environment that celebrates diversity, promotes equity, and upholds inclusion on the Internet. ❤️ We value and respect every voice. Let's connect and build a healthy, supportive community! + +<!-- SPDX-License-Identifier: AGPL-3.0-or-later --> diff --git a/docusaurus/docs/dmca.mdx b/docusaurus/docs/dmca.mdx new file mode 100644 index 0000000..4bffc1e --- /dev/null +++ b/docusaurus/docs/dmca.mdx @@ -0,0 +1,12 @@ +# DMCA takedown + +Below are some of the DMCA takedown notices issued by Wolfram Alpha LLC: + +1. [2021-08-11-wolfram.md](https://github.com/github/dmca/blob/master/2021/08/2021-08-11-wolfram.md) +2. [2021-08-16-wolfram.md](https://github.com/github/dmca/blob/master/2021/08/2021-08-16-wolfram.md) +3. [2022-09-22-wolfram.md](https://github.com/github/dmca/blob/master/2022/09/2022-09-22-wolfram.md) + +If you believe someone is using your copyrighted content unauthorizedly on GitHub or npm.js, please fill out the [Copyright claims form](https://github.com/contact/dmca) to submit a DMCA takedown notice to request that the content be changed or removed. +Before you begin, please read [GitHub's Copyright - DMCA Takedown Policy](https://docs.github.com/en/site-policy/content-removal-policies/dmca-takedown-policy). + +As with all legal matters, it is always best to consult a professional about your questions or situation. We strongly encourage you to do so before taking action that might impact your rights. This guide isn't legal advice. diff --git a/docusaurus/docs/index.mdx b/docusaurus/docs/index.mdx new file mode 100644 index 0000000..487c0b8 --- /dev/null +++ b/docusaurus/docs/index.mdx @@ -0,0 +1,109 @@ +--- +slug: / +title: Home page +--- + +# <br /> Free Wolfram Alpha Step-by-Step Solutions + +Get free access to **step-by-step** solutions. Unlock the power of **Wolfram|Alpha Pro** for free. Wolfree is **free** and **open-source** software. Thousands of learners use Wolfree to bypass paywalls. + +import FormCTA from "../src/components/FormCTA.tsx"; +import FormQuickStart from "../src/components/FormQuickStart.tsx"; +import ButtonLink from "../src/components/ButtonLink.tsx"; + +<FormCTA autoFocus={true} /> + +<br /> +<br /> + +## How To Use Wolfree + +<FormQuickStart /> + +<br /> +<br /> + +## Mirror Sites + +Wolfree operates through a network of mirror sites to ensure uninterrupted access to step-by-step solutions. If you can't access this web page, visit one of our [mirror sites](/mirror) to continue your learning journey. + +<p> + <ButtonLink to="./mirror" text="Access Mirror Sites" /> +</p> + +<br /> +<br /> + +## Source Code + +Wolfree is **free** and **open-source** software. Our inclusive community welcomes individuals from diverse backgrounds to collaborate on our [source code](/source). Let's foster diversity, equity, and inclusion on the Internet. ❤️ + +<p> + <ButtonLink to="./source" text="Explore Source Code" /> +</p> + +<br /> +<br /> + +## How Wolfree Works + +Here's a simplified breakdown of how Wolfree works: + +1. Programmers distribute the Dockerfile on Fediverse, including platforms compatible with ForgeFed, like Forgejo and Gitea. +2. Website operators install and run Docker. +3. Docker automatically downloads the Dockerfile from Fediverse and builds a Docker image. +4. Web hosting service providers deploy Wolfree mirror sites. +5. Internet service providers allow your web browser to connect to Wolfree mirror sites. +6. You gain **free** access to the computational capabilities of **Wolfram|Alpha Pro**. 🎉 + +Wolfree leverages a [shadow library](https://en.wikipedia.org/wiki/Shadow_library) that shares **step-by-step** solutions, ensuring you have free access to the learning resources you need. + +<br /> +<br /> + +## Testimonials + +Here's what our community has to say about Wolfree: + +> "Wolfree has been a transformative addition to my academic journey. The **step-by-step** solutions powered by **Wolfram|Alpha Pro** have profoundly enriched my understanding of complex math concepts. Thanks to Wolfree, my grades have seen remarkable improvement. I now approach math confidently." - Olivia (they/them), Student. + +> "As a math teacher, I wholeheartedly endorse Wolfree for my students. The **step-by-step** solutions promote genuine comprehension of math concepts. By incorporating the computational capabilities of **Wolfram|Alpha Pro** into my classroom, Wolfree has significantly elevated my students' learning experiences." - Mx. Smith (they/them), Educator. + +<br /> +<br /> + +## What You'll Get with Wolfree + +By using Wolfree, you'll get **free** access to the full potential of **Wolfram|Alpha Pro**, including: + +- Get answers and hints for your math homework problems. +- Use **step-by-step** calculators for chemistry, calculus, algebra, trigonometry, and equation solving. +- Develop a deeper understanding of your homework with detailed steps and hints guiding you from problems to answers. + +Unleash the full potential of your learning with Wolfree and elevate your studies to a whole new level. 🚀 + +It's **free**! Type your math problem and click "**Show Steps**" now! + +<FormCTA /> + +<br /> +<br /> + +<!-- + What Is a Landing Page? Landing Pages Explained | Unbounce + https://unbounce.com/landing-page-articles/what-is-a-landing-page/ + Is Your Landing Page Good Enough to get into Y Combinator? + https://yourlandingpagesucks.com/startup-landing-page-teardown-yc/ +--> + +<!-- + Diversity, equity, and inclusion - Wikipedia + https://en.wikipedia.org/wiki/Diversity,_equity,_and_inclusion +--> + +<!-- + My pronouns are: they/them • Pronouns.page + https://en.pronouns.page/they +--> + +<!-- SPDX-License-Identifier: AGPL-3.0-or-later --> diff --git a/docusaurus/docs/mirror.mdx b/docusaurus/docs/mirror.mdx new file mode 100644 index 0000000..8af5f77 --- /dev/null +++ b/docusaurus/docs/mirror.mdx @@ -0,0 +1,50 @@ +--- +title: Mirror site +--- + +# Mirror Sites: Alternative Instances + +Wolfree operates through a network of mirror sites to ensure uninterrupted access to step-by-step solutions. If you can't access this web page, visit one of our mirror sites to continue your learning journey. + +1. https://wolfree.chickenkiller.com/ +2. https://wolfree.crabdance.com/ +3. https://wolfree.gitlab.io/ +4. https://wolfree.glitch.me/ +5. https://wolfree.ignorelist.com/ +6. https://wolfree.jumpingcrab.com/ +7. https://wolfree.my.to/ +8. https://wolfree.netlify.app/ +9. https://wolfree.on.fleek.co/ +10. https://wolfree.onrender.com/ +11. https://wolfree.pages.dev/ +12. https://wolfree.privatedns.org/ +13. https://wolfree.strangled.net/ +14. https://wolfree.twilightparadox.com/ +15. https://wolfree.uk.to/ +16. https://wolfree.us.to/ +17. https://wolfreealpha.chickenkiller.com/ +18. https://wolfreealpha.crabdance.com/ +19. https://wolfreealpha.gitlab.io/ +20. https://wolfreealpha.glitch.me/ +21. https://wolfreealpha.ignorelist.com/ +22. https://wolfreealpha.jumpingcrab.com/ +23. https://wolfreealpha.my.to/ +24. https://wolfreealpha.netlify.app/ +25. https://wolfreealpha.on.fleek.co/ +26. https://wolfreealpha.onrender.com/ +27. https://wolfreealpha.pages.dev/ +28. https://wolfreealpha.privatedns.org/ +29. https://wolfreealpha.strangled.net/ +30. https://wolfreealpha.twilightparadox.com/ +31. https://wolfreealpha.uk.to/ +32. https://wolfreealpha.us.to/ + +:::note +Please note that Internet Service Providers may block access to this website without prior notice. Therefore, we recommend bookmarking the mirror sites in advance to ensure easier access. +::: + +If you cannot access any of the mirror sites, we recommend installing the [Tor Browser](https://www.torproject.org/) to bypass censorship. + +If you have programming knowledge, you can deserialize the [instances.json](pathname://../instances.json) file. + +<!-- SPDX-License-Identifier: AGPL-3.0-or-later --> diff --git a/docusaurus/docs/source.mdx b/docusaurus/docs/source.mdx new file mode 100644 index 0000000..e9d0192 --- /dev/null +++ b/docusaurus/docs/source.mdx @@ -0,0 +1,32 @@ +--- +title: Source code +--- + +# Access and Download the Source Code of Wolfree + +Wolfree is free and open-source software. You can access and download the source code from the following websites: + +1. https://try.gitea.io/wolfree +2. https://codeberg.org/wolfree +3. https://git.disroot.org/wolfree +4. https://next.forgejo.org/wolfree +5. https://git.kiwifarms.net/wolfree +6. http://it7otdanqu7ktntxzm427cba6i53w6wlanlh23v5i3siqmos47pzhvyd.onion/wolfree + +## The Unreliability of GitHub + +We do not recommend pushing the source code to GitHub. Their [DMCA Takedown Policy](https://docs.github.com/en/site-policy/content-removal-policies/dmca-takedown-policy) makes storing the source code on GitHub unreliable. + +## The High Availability of ForgeFed + +For a more reliable and collaborative development experience, we recommend using [Gitea](https://about.gitea.com/) and [Forgejo](https://forgejo.org/). These platforms support [ActivityPub](https://www.w3.org/TR/activitypub/) and [ForgeFed](https://forgefed.org/) protocols, enabling seamless collaboration and communication among developers. + +:::note +If you cannot access Gitea or Forgejo, we recommend installing the [Tor Browser](https://www.torproject.org/). The Tor Browser is a reputable tool designed to bypass censorship. +::: + +## License + +SPDX-License-Identifier: AGPL-3.0-or-later + +This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. diff --git a/docusaurus/docusaurus.config.js b/docusaurus/docusaurus.config.js new file mode 100644 index 0000000..1cb19b7 --- /dev/null +++ b/docusaurus/docusaurus.config.js @@ -0,0 +1,102 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +/** @type {import('@docusaurus/types').Config} */ +module.exports = { + title: "Wolfree - Free WolframAlpha step-by-step solution", + url: "http://example.com", + baseUrl: "/", + favicon: "data:,", + presets: [ + [ + "classic", + /** @type {import('@docusaurus/preset-classic').Options} */ + { + docs: { + sidebarPath: require.resolve("./sidebars.js"), + routeBasePath: "/", + breadcrumbs: false, + }, + blog: false, + pages: false, + theme: { + customCss: [require.resolve("./src/css/custom.css")], + }, + }, + ], + ], + /** @type {import('@docusaurus/preset-classic').ThemeConfig} */ + themeConfig: { + colorMode: { + disableSwitch: true, + }, + docs: { + sidebar: { + hideable: true, + }, + }, + navbar: { + hideOnScroll: true, + items: [ + { + to: "/", + label: "Wolfree", + position: "left", + }, + { + to: "pathname:///input/", + label: "Input", + position: "right", + target: "_self", + }, + { + to: "/mirror", + label: "Mirror", + position: "right", + }, + { + to: "/source", + label: "Source", + position: "right", + }, + ], + }, + footer: { + links: [ + { + label: "Home page", + href: "/", + }, + { + html: '<a class="footer__link-item" href="/input/">Input math problems</a>', + }, + { + label: "Mirror site", + href: "/mirror", + }, + { + label: "Source code", + href: "/source", + }, + { + label: "Community", + href: "/community", + }, + { + label: "Acknowledgment", + href: "/acknowledgment", + }, + { + label: "DMCA takedown", + href: "/dmca", + }, + ], + }, + }, +}; diff --git a/docusaurus/package.json b/docusaurus/package.json new file mode 100644 index 0000000..2e58a5e --- /dev/null +++ b/docusaurus/package.json @@ -0,0 +1,51 @@ +{ + "name": "docusaurus", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "2.4.1", + "@docusaurus/preset-classic": "2.4.1", + "@emotion/react": "^11.11.1", + "@emotion/styled": "^11.11.0", + "@mdx-js/react": "^1.6.22", + "@mui/material": "^5.14.1", + "@types/dompurify": "^3.0.2", + "@types/jquery": "^3.5.16", + "clsx": "^1.2.1", + "prism-react-renderer": "^1.3.5", + "react": "^17.0.2", + "react-dom": "^17.0.2" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "2.4.1", + "@tsconfig/docusaurus": "^1.0.5", + "typescript": "^4.7.4" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 1 chrome version", + "last 1 firefox version", + "last 1 safari version" + ] + }, + "engines": { + "node": ">=16.14" + } +} diff --git a/docusaurus/sidebars.js b/docusaurus/sidebars.js new file mode 100644 index 0000000..3a62009 --- /dev/null +++ b/docusaurus/sidebars.js @@ -0,0 +1,29 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +module.exports = { + sidebarId: [ + "index", + { + type: "html", + value: '<a class="menu__link" href="/input/">Input math problems</a>', + className: "menu__list-item", + }, + "mirror", + "source", + { + type: "category", + label: "Detail", + collapsible: true, + collapsed: true, + items: ["community", "acknowledgment", "dmca"], + }, + ], +}; diff --git a/docusaurus/src/components/ButtonLink.tsx b/docusaurus/src/components/ButtonLink.tsx new file mode 100644 index 0000000..12fc559 --- /dev/null +++ b/docusaurus/src/components/ButtonLink.tsx @@ -0,0 +1,27 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import Link from "@docusaurus/Link"; +import { Button } from "@mui/material"; + +const ButtonLink = ({ to = String(), text = String() }) => ( + <Link to={to}> + <Button size="large" sx={{ textTransform: "capitalize" }}> + <strong>{text}</strong> + » + </Button> + </Link> +); + +export default ButtonLink; + +// Typography - MUI System +// https://mui.com/system/typography/ + +// Docusaurus Client API | Docusaurus +// https://docusaurus.io/docs/docusaurus-core#link diff --git a/docusaurus/src/components/FormCTA.tsx b/docusaurus/src/components/FormCTA.tsx new file mode 100644 index 0000000..1b5a81e --- /dev/null +++ b/docusaurus/src/components/FormCTA.tsx @@ -0,0 +1,23 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import submitMathInputForm from "../functions/submitMathInputForm"; +import InputMathProblems from "./InputMathProblems"; +import ShowStepButton from "./ShowStepButton"; + +const FormCTA = ({ autoFocus = Boolean() }) => ( + <form onSubmit={submitMathInputForm}> + <p></p> + <InputMathProblems autoFocus={autoFocus} /> + <p></p> + <ShowStepButton /> + <p></p> + </form> +); + +export default FormCTA; diff --git a/docusaurus/src/components/FormQuickStart.tsx b/docusaurus/src/components/FormQuickStart.tsx new file mode 100644 index 0000000..60589fb --- /dev/null +++ b/docusaurus/src/components/FormQuickStart.tsx @@ -0,0 +1,35 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import submitMathInputForm from "../functions/submitMathInputForm"; +import InputMathProblems from "./InputMathProblems"; +import ShowStepButton from "./ShowStepButton"; + +const FormQuickStart = () => ( + <form onSubmit={submitMathInputForm}> + <ol> + <li> + <p>Type your math problem in the text box.</p> + <InputMathProblems defaultValue="y'=y" /> + </li> + <li> + <p> + Click the "Show Steps" button. + </p> + <ShowStepButton /> + </li> + <li> + <p> + Explore the step-by-step solution provided. 🎉 + </p> + </li> + </ol> + </form> +); + +export default FormQuickStart; diff --git a/docusaurus/src/components/InputMathProblems.tsx b/docusaurus/src/components/InputMathProblems.tsx new file mode 100644 index 0000000..c7b49ce --- /dev/null +++ b/docusaurus/src/components/InputMathProblems.tsx @@ -0,0 +1,33 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import TextField from "@mui/material/TextField"; +// TextField API - Material UI +// https://mui.com/material-ui/api/text-field/ + +const InputMathProblems = ({ + autoFocus = Boolean(), + defaultValue = String(), +}) => ( + <TextField + name="i" + type="search" + autoCapitalize="off" + autoComplete="off" + autoCorrect="off" + spellCheck="false" + inputProps={{ enterkeyhint: "go" }} + autoFocus={autoFocus} + label=" Input math problems" + variant="outlined" + fullWidth + defaultValue={defaultValue} + /> +); + +export default InputMathProblems; diff --git a/docusaurus/src/components/ShowStepButton.tsx b/docusaurus/src/components/ShowStepButton.tsx new file mode 100644 index 0000000..3ae7ba3 --- /dev/null +++ b/docusaurus/src/components/ShowStepButton.tsx @@ -0,0 +1,25 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import { Button } from "@mui/material"; + +const ShowStepButton = () => ( + <Button + type="submit" + size="large" + variant="contained" + sx={{ textTransform: "capitalize" }} + > + Show Steps + </Button> +); + +export default ShowStepButton; + +// Typography - MUI System +// https://mui.com/system/typography/ diff --git a/docusaurus/src/css/custom.css b/docusaurus/src/css/custom.css new file mode 100644 index 0000000..a027863 --- /dev/null +++ b/docusaurus/src/css/custom.css @@ -0,0 +1,21 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +:root { + --ifm-menu-link-padding-vertical: calc(var(--ifm-menu-link-padding-horizontal) * 1.5); + --ifm-color-primary: blue; + --ifm-color-gray-900: var(--ifm-color-gray-900); + --ifm-color-secondary-contrast-foreground: var(--ifm-color-gray-900); +} + +.footer__link-item { + line-height: 3; +} + +.alert { + --ifm-link-color: unset; +}
\ No newline at end of file diff --git a/docusaurus/src/functions/submitMathInputForm.tsx b/docusaurus/src/functions/submitMathInputForm.tsx new file mode 100644 index 0000000..a90894e --- /dev/null +++ b/docusaurus/src/functions/submitMathInputForm.tsx @@ -0,0 +1,23 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import { FormEventHandler } from "react"; + +const submitMathInputForm: FormEventHandler<HTMLFormElement> = (event) => { + event.preventDefault(); + const form = event.currentTarget; + const formData = new FormData(form); + + const i = formData.get("i") || ""; + if (i instanceof File) return; + + const url = new URL("/input/", window.location.href); + url.searchParams.set("i", i); + window.location.href = url.href; +}; + +export default submitMathInputForm; diff --git a/docusaurus/src/theme/Footer/InputPreloader.tsx b/docusaurus/src/theme/Footer/InputPreloader.tsx new file mode 100644 index 0000000..325f8a7 --- /dev/null +++ b/docusaurus/src/theme/Footer/InputPreloader.tsx @@ -0,0 +1,43 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React, { useEffect, useState } from "react"; + +const InputPreloader = () => { + const [showIframe, setShowIframe] = useState(false); + + useEffect(() => { + const handleIframeLoad = () => { + // Show the iframe after a 3000ms delay + const timerId = setTimeout(() => setShowIframe(true), 3000); + // Cleanup the timer when the component unmounts + return () => clearTimeout(timerId); + }; + + window.scroll(0, 0); + + window.addEventListener("load", handleIframeLoad); + + // Cleanup the event listener when the component unmounts + return () => window.removeEventListener("load", handleIframeLoad); + }, []); // Empty dependency array means the effect runs only once after initial render + + return ( + <> + {/* Use a descriptive title for accessibility */} + {showIframe && ( + <iframe + title="Input Page Preloader" + src="/input/" + style={{ display: "none" }} + /> + )} + </> + ); +}; + +export default InputPreloader; diff --git a/docusaurus/src/theme/Footer/index.tsx b/docusaurus/src/theme/Footer/index.tsx new file mode 100644 index 0000000..2edef40 --- /dev/null +++ b/docusaurus/src/theme/Footer/index.tsx @@ -0,0 +1,21 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import Footer from "@theme-original/Footer"; +import InputPreloader from "./InputPreloader"; + +const FooterWrapper = (props: React.JSX.IntrinsicAttributes) => { + return ( + <> + <Footer {...props} /> + <InputPreloader /> + </> + ); +}; + +export default FooterWrapper; diff --git a/docusaurus/src/theme/NotFound/DDoSProtection.tsx b/docusaurus/src/theme/NotFound/DDoSProtection.tsx new file mode 100644 index 0000000..6cd8c04 --- /dev/null +++ b/docusaurus/src/theme/NotFound/DDoSProtection.tsx @@ -0,0 +1,34 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; + +const DDoSProtection = () => ( + <center + style={{ + display: "flex", + justifyContent: "center", + alignItems: "center", + height: 100 + "vh", + }} + > + <center> + <h1>Checking your browser before accessing Wolfree</h1> + <p> + This process is automatic. Your browser will redirect to your requested + content shortly. + </p> + <p>Please allow up to 5 seconds...</p> + <p> + <br /> + </p> + <p>DDoS Protection by Wolfree</p> + </center> + </center> +); + +export default DDoSProtection; diff --git a/docusaurus/src/theme/NotFound/index.tsx b/docusaurus/src/theme/NotFound/index.tsx new file mode 100644 index 0000000..d5e0208 --- /dev/null +++ b/docusaurus/src/theme/NotFound/index.tsx @@ -0,0 +1,28 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import React from "react"; +import NotFound from "@theme-original/NotFound"; +import redirectInput from "./redirectInput"; +import DDoSProtection from "./DDoSProtection"; + +const NotFoundWrapper = (props: React.JSX.IntrinsicAttributes) => { + redirectInput(); + return ( + <> + <DDoSProtection /> + <div style={{ display: "none" }}> + <NotFound {...props} /> + </div> + </> + ); +}; + +export default NotFoundWrapper; + +// How can I customize the 404 page? · facebook/docusaurus · Discussion #6030 +// https://github.com/facebook/docusaurus/discussions/6030 diff --git a/docusaurus/src/theme/NotFound/redirectInput.tsx b/docusaurus/src/theme/NotFound/redirectInput.tsx new file mode 100644 index 0000000..4e29b4a --- /dev/null +++ b/docusaurus/src/theme/NotFound/redirectInput.tsx @@ -0,0 +1,70 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +import { useEffect } from "react"; + +const redirectInput = () => { + useEffect(() => { + const redirectToInputPage = () => { + const pathname = window.location.pathname; + + const isExample = pathname.includes("/example"); + if (!isExample) { + window.location.href = "/"; + return; + } + + const filename = pathname.split("/").pop(); + if (!filename) { + window.location.href = "/"; + return; + } + + const topic = "topic " + filename.replace(/-/g, " "); + const url = new URL("/input/", window.location.href); + url.searchParams.set("i", topic); + window.location.href = url.href; + }; + + redirectToInputPage(); + }, []); // The effect runs only once on mount +}; + +export default redirectInput; + +/* + * test case: + * + * - Passing + * - elementary-math + * - Goal: https://www.wolframalpha.com/examples/mathematics/elementary-math + * - Doesn't work: http://localhost/input?i=elementary+math + * - Does work: http://localhost/input?i=topic+elementary+math + * - common-core-math-functions + * - Goal: https://wc.wolframalpha.com/examples/mathematics/common-core-math/common-core-math-functions + * - Doesn't work: http://localhost/input?i=common+core+math+functions + * - Does work: http://localhost/input?i=topic+common+core+math+functions + * + * - Failing + * - continuity + * - Goal: https://www.wolframalpha.com/examples/mathematics/calculus-and-analysis/continuity + * - Does not work: http://localhost/input?i=topic+continuity + * - Does work: (not found yet) + * - neuroscience + * - Goal: https://www.wolframalpha.com/examples/science-and-technology/life-sciences/neuroscience + * - Does not work: http://localhost/input?i=topic+neuroscience + * - Does work: (not found yet) + * - molecular-biology + * - Goal: https://wc.wolframalpha.com/examples/science-and-technology/life-sciences/molecular-biology + * - Does not work: http://localhost/input?i=topic+molecular+biology + * - Does work: (not found yet) + * - personal-finance + * - Goal: https://www.wolframalpha.com/examples/everyday-life/personal-finance + * - Does not work: http://localhost/input?i=topic+personal+finance + * - Does work: (not found yet) + * + */ diff --git a/docusaurus/static/.gitlab-ci.yml b/docusaurus/static/.gitlab-ci.yml new file mode 100644 index 0000000..9f3ba6d --- /dev/null +++ b/docusaurus/static/.gitlab-ci.yml @@ -0,0 +1,19 @@ +# To contribute improvements to CI/CD templates, please follow the Development guide at: +# https://docs.gitlab.com/ee/development/cicd/templates.html +# This specific template is located at: +# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Pages/HTML.gitlab-ci.yml + +# Full project: https://gitlab.com/pages/plain-html +pages: + stage: deploy + environment: production + script: + - mkdir .public + - cp -r ./* .public + - rm -rf public + - mv .public public + artifacts: + paths: + - public + rules: + - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH diff --git a/docusaurus/static/.nojekyll b/docusaurus/static/.nojekyll new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/.nojekyll diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/css/Placeholder.css b/docusaurus/static/ajax/libs/wolfree/23.7.8/css/Placeholder.css new file mode 100644 index 0000000..b7553e2 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/css/Placeholder.css @@ -0,0 +1,90 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +.wolfree-placeholder { + display: flex; + width: 100%; + justify-content: center; + /* padding: 26px 40px 20px; */ + padding: 26px 0 0; +} + +.wolfree-placeholder>div { + position: relative; +} + +.wolfree-placeholder>div { + max-width: 780px; + width: 100%; +} + +.wolfree-placeholder>div>div { + box-shadow: 0 0 10px 0 hsla(0, 0%, 80%, 0.5), 0 0 1px 0 hsla(0, 0%, 80%, 0.5); + border-radius: 5px; +} + +.wolfree-placeholder>div>div>div { + min-height: 16vh; + background: #fdfdfd; + opacity: 1; + border-bottom: 1px solid transparent; +} + +.wolfree-placeholder>div>div>div:nth-of-type(1)>div { + background-image: linear-gradient(90deg, + #f5f5f5 50%, + #ebebeb 60%, + #f5f5f5 70%); + border-top-left-radius: 5px; + border-top-right-radius: 5px; +} + +.wolfree-placeholder>div>div>div:nth-of-type(2)>div { + background-image: linear-gradient(90deg, + #f5f5f5 30%, + #ebebeb 40%, + #f5f5f5 50%); +} + +.wolfree-placeholder>div>div>div:nth-of-type(3)>div { + background-image: linear-gradient(90deg, + #f5f5f5 10%, + #ebebeb 20%, + #f5f5f5 30%); +} + +.wolfree-placeholder>div>div>div>div { + height: 30px; + width: 100%; + display: flex; + flex-direction: row; + align-items: center; +} + +.wolfree-placeholder>div>div>div>div { + background-size: 1200%; + -webkit-animation-duration: 3.5s; + animation-duration: 3.5s; + -webkit-animation-fill-mode: forwards; + animation-fill-mode: forwards; + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; + -webkit-animation-name: _QC3H; + animation-name: _QC3H; + -webkit-animation-timing-function: cubic-bezier(0.55, 0.45, 1, 1); + animation-timing-function: cubic-bezier(0.55, 0.45, 1, 1); +} + +@keyframes _QC3H { + 0% { + background-position: 100% 0; + } + + to { + background-position: -100% 0; + } +}
\ No newline at end of file diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/css/PodsParser.css b/docusaurus/static/ajax/libs/wolfree/23.7.8/css/PodsParser.css new file mode 100644 index 0000000..179b1c6 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/css/PodsParser.css @@ -0,0 +1,125 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +.wolfree-pods { + display: flex; + width: 100%; + justify-content: center; + /* padding: 26px 0 20px; */ + padding: 26px 0 0; +} + +.wolfree-pods>div { + position: relative; +} + +.wolfree-pods>div { + max-width: 780px; + width: 100%; +} + +.wolfree-pods>div>div { + position: relative; +} + +.wolfree-pods>div>div>section { + box-shadow: 0 0 10px 0 hsla(0, 0%, 80%, 0.5), 0 0 1px 0 hsla(0, 0%, 80%, 0.5); + border-radius: 5px; + /* margin-bottom: 20px; */ + margin-bottom: 0; +} + +.wolfree-pods>div>div>section>section { + border-top-color: transparent; +} + +.wolfree-pods>div>div>section>section { + display: flex; + flex-direction: column; + position: relative; + background: #f5f5f5; + outline: none; + border-color: #fff transparent; + border-style: solid; + border-width: 1px; +} + +.wolfree-pods>div>div>section>section:first-child { + border-top-left-radius: inherit; + border-top-right-radius: inherit; +} + +.wolfree-pods>div>div>section>section>div:is(:first-child) { + min-height: 30px; + font-size: 13px; + font-family: WebRoboto, Hiragino Kaku Gothic ProN, ヒラギノ角ゴ ProN, Meiryo, + メイリオ, Arial, Helvetica, sans-serif; + background: #f5f5f5; + display: flex; + justify-content: space-between; + align-items: center; + padding: 6px 20px; +} + +.wolfree-pods>div>div>section>section>div:is(:first-child)>h2 { + color: #678e9c; + margin-right: 20px; +} + +.wolfree-pods>div>div>section>section>div:is(:first-child)>select { + /* We style this element manually. */ + border-radius: 4px; + border-style: solid; + border-width: thin; + min-height: 20px; + cursor: pointer; + color: #ff6c00; + background-color: #fff; + border-color: #ec561a; + touch-action: manipulation; +} + +.wolfree-pods>div>div>section>section>div:not(:first-child) { + display: flex; + align-items: flex-end; + width: 100%; + height: 100%; + background: #fff; + border-radius: inherit; + padding: 6px 20px; +} + +.wolfree-pods>div>div>section>section>div:not(:first-child)>div { + position: relative; + flex: 1 1 auto; +} + +.wolfree-pods>div>div>section>section>div:not(:first-child)>div>img { + max-width: 100%; + /* width: 100%; */ + width: auto; +} + +.wolfree-pods>div>div>section>section>div:not(:first-child)>div>div>details>summary { + /* We style this element manually. */ + cursor: pointer; + touch-action: manipulation; +} + +.wolfree-pods>div>div>section>section>div:not(:first-child)>div>div>details>div { + /* We style this element manually. */ + padding: 1rem; + line-height: 2; + touch-action: manipulation; +} + +.wolfree-pods>div>div>section>section>div:not(:first-child)>div>div>details>textarea { + /* We style this element manually. */ + width: 99%; + height: 50vh; + touch-action: manipulation; +}
\ No newline at end of file diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/AJAX.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/AJAX.js new file mode 100644 index 0000000..465787d --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/AJAX.js @@ -0,0 +1,56 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +import SearchParams from "./SearchParams.js"; + +export default class AJAX { + ajax = async ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + } = {}) => { + try { + const data = new SearchParams().getSearchParams({ + input, + extraPodstates, + i2d, + }); + + const options = { + url: "https://api.wolframalpha.com/v2/query", + dataType: "jsonp", + traditional: true, + data, + }; + + try { + /** + * https://www.npmjs.com/package/@types/jquery + * @type {import('jQuery')} + */ + const response = await jQuery.ajax(options); + return ( + console.assert(response instanceof Object), + console.assert(response.hasOwnProperty("queryresult")), + { response } + ); + } catch (error) { + return ( + console.error( + { error }, + "We encountered an issue while attempting to retrieve a response from the Wolfram Alpha API using the jQuery library." + ), + { error } + ); + } + } catch (error) { + return console.error({ error }), { error }; + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/AppID.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/AppID.js new file mode 100644 index 0000000..070e4e1 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/AppID.js @@ -0,0 +1,57 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +// To generate a new AppID: +// 1. Open Tor Browser and go to: https://products.wolframalpha.com/api/ +// 2. Click the orangish "Get API Access" button. You will go to: https://account.wolfram.com/login/oauth2/sign-in +// 3. Click the reddish "Create one" hyperlink to create a new Wolfram ID. You will go to: https://account.wolfram.com/login/create +// 4. Fill out the form using random alphanumeric characters. +// 5. Click the reddish "Create Wolfram ID" button. You will go to: https://developer.wolframalpha.com/portal/myapps/index.html +// 6. Click the orangish "Sign up to get your first AppID" button. +// 7. Fill out the form using random alphanumeric characters. +// 8. Click the orangish "Sign up" button. +// 9. Click the orangish "Get an AppID" button. +// 10. Fill out the form using random alphanumeric characters. +// 11. Click the orangish "Get AppID" button. + +export default class AppID { + appIDArray = Array(); + + constructor( + appIDArray = ["H9V325-HTALUWHKGK", "AKJTJT-LR5LL8WTG6", "LKY83U-XW6ATU9URU"] + ) { + (this.appIDArray = appIDArray), + Array.from(this.appIDArray).forEach( + (appID) => ( + console.assert(17 === appID.length), + console.assert(/[0-9A-Z]{6}-[0-9A-Z]{10}/.test(appID)) + ) + ); + } + + getAppID = ({ + appID = this.appIDArray[this.getRandomInt() % this.appIDArray.length], + } = {}) => { + try { + return appID; + } catch (error) { + return console.error({ error }), String(); + } + }; + + getRandomInt = ({ + randomInt = crypto.getRandomValues(new Uint32Array(1))[0], + } = {}) => { + try { + return randomInt; + } catch (error) { + return console.error({ error }), Number(); + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Entrypoint.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Entrypoint.js new file mode 100644 index 0000000..0fe9d31 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Entrypoint.js @@ -0,0 +1,26 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +import Processor from "./Processor.js"; +import Preprocessor from "./Preprocessor.js"; +import PostProcessor from "./PostProcessor.js"; + +export default async ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), +} = {}) => { + try { + new Preprocessor().process(); + await new Processor().process({ input, i2d, extraPodstates }); + new PostProcessor().process({ input, i2d }); + } catch (error) { + console.error({ error }); + } +}; diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Placeholder.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Placeholder.js new file mode 100644 index 0000000..d5b45a6 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Placeholder.js @@ -0,0 +1,69 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +export default class Placeholder { + className = "wolfree-placeholder"; + + placeholderHTML = ` + <div class="${this.className}"> + <div> + <div> + <div><div></div></div> + <div><div></div></div> + <div><div></div></div> + </div> + </div> + </div> + `; + + insert = ({ + container = document.querySelector( + "html > body > #__next > div > main > main > div:nth-of-type(1)" + ), + } = {}) => { + try { + return ( + container instanceof HTMLDivElement + ? container.insertAdjacentHTML("afterend", this.placeholderHTML) + : console.error({ container }), + { container } + ); + } catch (error) { + return ( + console.error( + { error }, + "Fail to insert the skeleton placeholder components." + ), + { error } + ); + } + }; + + remove = ({ + allPlaceholders = document.querySelectorAll( + `html > body > #__next > div > main > main > div.${this.className}` + ), + } = {}) => { + try { + return ( + console.assert(allPlaceholders.length === 1), + allPlaceholders.forEach((placeholder) => placeholder.remove()), + { allPlaceholders } + ); + } catch (error) { + return ( + console.error( + { error }, + "Fail to remove the skeleton placeholder components." + ), + { error } + ); + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Pods.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Pods.js new file mode 100644 index 0000000..7b31e48 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Pods.js @@ -0,0 +1,56 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +export default class Pods { + insert = ({ + container = document.querySelector("main > div:nth-of-type(1)"), + html = String(), + } = {}) => { + try { + /** + * https://www.npmjs.com/package/@types/dompurify + * @type {import('DOMPurify')} + */ + return ( + container instanceof HTMLDivElement + ? container.insertAdjacentHTML( + "afterend", + globalThis.DOMPurify.sanitize(html) + ) + : console.error({ container }), + { container, html } + ); + } catch (error) { + return ( + console.error( + { error }, + "Fail to insert the results of the calculation." + ), + { error } + ); + } + }; + + remove = ({ + pods = document.querySelectorAll("main > div.wolfree-pods"), + } = {}) => { + try { + pods.forEach((element) => { + element.remove(); + }); + return { pods }; + } catch (error) { + console.error( + "Fail to remove the results of the previous calculation.", + error + ); + return { error }; + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/PodsParser.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/PodsParser.js new file mode 100644 index 0000000..bfb0ab0 --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/PodsParser.js @@ -0,0 +1,201 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +export default class PodsParser { + parse = ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + response = { queryresult: { pods: Array() } }, + } = {}) => { + try { + return { html: this.buildHTML({ input, i2d, extraPodstates, response }) }; + } catch (error) { + return console.error({ error }), { error }; + } + }; + + buildHTML = ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + response = { queryresult: { pods: Array() } }, + } = {}) => { + return ` + <div class="wolfree-pods"> + <div> + <div> + <section> + ${this.parseQueryResult({ response })} + ${this.buildTechnicalInfo({ + input, + i2d, + extraPodstates, + response, + })} + </section> + </div> + </div> + </div> + `; + }; + + parseQueryResult = ({ response = { queryresult: { pods: Array() } } }) => { + const { queryresult } = response; + const { pods } = queryresult; + if (pods) { + return pods.map(this.parsePod).join(""); + } + return ""; + }; + + parsePod = ( + pod = { + title: String(), + states: Array(), + subpods: Array(), + } + ) => { + return ` + <section> + ${this.buildPodHeader(pod)} + <div></div> + ${pod.subpods.map(this.buildSubpod).join("")} + </section> + `; + }; + + buildPodHeader = (pod = { title: String(), states: Array() }) => { + return ` + <div> + <h2>${this.escapeHTML(pod.title)}</h2> + ${pod.states ? pod.states.map(this.buildSelectElement).join("") : ""} + </div> + `; + }; + + buildSubpod = ( + subpod = { img: { src: String(), alt: String() }, plaintext: String() } + ) => { + return ` + <div><div> + <img + src="${this.escapeHTML(subpod.img.src)}" + alt="${this.escapeHTML(subpod.img.alt)}" + > + </div></div> + <div style="font-family: monospace; overflow: auto;"> + <div><div>${this.buildSubpodDetails(subpod)}</div></div> + </div> + `; + }; + + buildSubpodDetails = (subpod = { plaintext: String() }) => { + return ` + <details> + <summary style="direction: rtl;"></summary> + <div><pre>${this.escapeHTML(subpod.plaintext)}</pre></div> + <br> + </details> + `; + }; + + buildSelectElement = (state = { value: String(), states: Array() }) => { + if (state.states) { + return ` + <select name="pod-states"> + <option>${this.escapeHTML(state.value)}</option> + ${state.states.map(this.buildOption).join("")} + </select> + `; + } + return ""; + }; + + buildOption = (state = { name: String() }) => { + return ` + <option>${this.escapeHTML(state.name)}</option> + `; + }; + + buildTechnicalInfo = ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + response = { queryresult: { pods: Array() } }, + }) => { + return ` + <section> + <div><h2>Technical information</h2></div> + <div></div> + <div><div><div>${this.buildTechnicalInfoDetails({ + input, + i2d, + extraPodstates, + response, + })}</div></div></div> + <div></div> + </section> + `; + }; + + buildTechnicalInfoDetails = ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + response = { queryresult: { pods: Array() } }, + }) => { + return ` + <details> + <div> + If you have programming knowledge, feel free to explore the technical information provided below: + </div> + ${this.buildTextarea({ input, i2d, extraPodstates, response })} + </details> + `; + }; + + buildTextarea = ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + response = { queryresult: { pods: Array() } }, + }) => { + return ` + <textarea name="technical-information">${this.escapeHTML( + JSON.stringify( + { + document, + input, + i2d, + extraPodstates, + response, + }, + null, + 4 + ) + )}</textarea> + `; + }; + + escapeHTML = (unsafe = String()) => { + return unsafe + .replace(/&/g, "&") + .replace(/</g, "<") + .replace(/>/g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + }; +} + +// Can I escape HTML special chars in JavaScript? - Stack Overflow +// https://stackoverflow.com/questions/6234773/can-i-escape-html-special-chars-in-javascript + +// test case: +// https://www.wolframalpha.com/input?i=solve+%7By%27%28x%29+%3D+-2+y%2C+y%280%29%3D1%7D+from+0+to+10+using+r+k+f+algorithm diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/PostProcessor.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/PostProcessor.js new file mode 100644 index 0000000..1061d8a --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/PostProcessor.js @@ -0,0 +1,63 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +import Placeholder from "./Placeholder.js"; +import Entrypoint from "./Entrypoint.js"; + +export default class PostProcessor { + process = ({ input = String(), i2d = Boolean() } = {}) => { + try { + new Placeholder().remove(); + + try { + document + .querySelectorAll( + "html > body > div#__next > div > main > main > div.wolfree-pods > div > div > section > section > div > div > div > details > div" + ) + .forEach((element = new HTMLElement()) => + element.setAttribute("contenteditable", "") + ); + } catch (error) { + console.error( + "Fail to make the plaintext in details tags easy to copy.", + error + ); + } + + try { + document + .querySelectorAll( + "html > body > div#__next > div > main > main > div.wolfree-pods > div > div > section > section > div:is(:first-child) > select" + ) + .forEach((element = new HTMLSelectElement()) => + element.addEventListener( + "change", + async (event = new Event(String())) => + Entrypoint({ + input, + i2d, + extraPodstates: [ + event.target instanceof HTMLSelectElement + ? event.target.value + : (console.error({ event }), String()), + ], + }) + ) + ); + } catch (error) { + console.error( + "Fail to set up the drop-down menu for problem-solving strategies.", + error + ); + } + } catch (error) { + console.error({ error }); + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Preprocessor.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Preprocessor.js new file mode 100644 index 0000000..5d88bbc --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Preprocessor.js @@ -0,0 +1,29 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +import Placeholder from "./Placeholder.js"; +import Pods from "./Pods.js"; + +export default class Preprocessor { + process = () => { + try { + try { + window.scroll(0, 0); + } catch (error) { + console.error({ error }, "Fail to scroll to the top of the webpage."); + } + + new Placeholder().insert(); + + new Pods().remove(); + } catch (error) { + console.error({ error }); + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Processor.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Processor.js new file mode 100644 index 0000000..eaf9c2a --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/Processor.js @@ -0,0 +1,54 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +import AJAX from "./AJAX.js"; +import PodsParser from "./PodsParser.js"; +import Pods from "./Pods.js"; + +export default class Processor { + process = async ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + } = {}) => { + try { + const { response } = await new AJAX().ajax({ + input, + i2d, + extraPodstates, + }); + + try { + const { html } = new PodsParser().parse({ + input, + i2d, + extraPodstates, + /** @type {any} */ + response, + }); + + try { + new Pods().remove(); + } catch (error) { + console.error(error); + } + + try { + new Pods().insert({ html }); + } catch (error) { + console.error(error); + } + } catch (error) { + console.error(error); + } + } catch (error) { + console.error(error); + } + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/SearchParams.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/SearchParams.js new file mode 100644 index 0000000..828d06f --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/SearchParams.js @@ -0,0 +1,44 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +import AppID from "./AppID.js"; + +export default class SearchParams { + constructor({ getAppID = new AppID().getAppID } = {}) { + this.getAppID = getAppID; + } + + getSearchParams = ({ + input = String(), + i2d = Boolean(), + extraPodstates = Array(), + } = {}) => { + const appid = this.getAppID(); + return { + ...(appid && { appid }), + ...(input && { input }), + ...(i2d && { i2d }), + podstate: [ + "Step-by-step solution", + "Step-by-step", + "Show all steps", + ...extraPodstates, + // Note: extraPodstates must be the last item in the array. + // Otherwise, the Wolfram Alpha API may ignore the pod states in extraPodstates. + ], + output: "json", + reinterpret: true, + podtimeout: 30, + scantimeout: 30, + parsetimeout: 30, + totaltimeout: 30, + formattimeout: 30, + }; + }; +} diff --git a/docusaurus/static/ajax/libs/wolfree/23.7.8/js/onload.js b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/onload.js new file mode 100644 index 0000000..5767c4e --- /dev/null +++ b/docusaurus/static/ajax/libs/wolfree/23.7.8/js/onload.js @@ -0,0 +1,51 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +export default addEventListener( + "load", + () => ( + setTimeout( + () => + document + .querySelectorAll( + "html > body > #__next > div > main > main > div > div > section > form > div > div > input" + ) + .forEach((input) => + input instanceof HTMLInputElement + ? input.focus() + : console.error({ input }) + ), + 1000 + ), + [ + () => + document + .querySelectorAll( + 'html > body > #__next > div > main > main > div > div > div > section > section > div:is(:first-child) > ul > li' + ) + .forEach( + (li) => + li.innerHTML.includes("Step-by-step") && + (li instanceof HTMLElement + ? (li.style.display = "none") + : console.error({ li })) + ), + () => + (document.title = document.title.replace( + "- Wolfram|Alpha", + "- Free Wolfram|Alpha Step-by-step Solution - Wolfree" + )), + ].forEach( + (callback) => ( + setInterval(callback, 2000), addEventListener("click", callback) + ) + ), + scroll(0, 0) + ) +); diff --git a/docusaurus/static/instances.json b/docusaurus/static/instances.json new file mode 100644 index 0000000..30ac2ea --- /dev/null +++ b/docusaurus/static/instances.json @@ -0,0 +1,41 @@ +{ + "wolfree": { + "clearnet": [ + "https://wolfree.chickenkiller.com/", + "https://wolfree.crabdance.com/", + "https://wolfree.gitlab.io/", + "https://wolfree.glitch.me/", + "https://wolfree.ignorelist.com/", + "https://wolfree.jumpingcrab.com/", + "https://wolfree.my.to/", + "https://wolfree.netlify.app/", + "https://wolfree.on.fleek.co/", + "https://wolfree.onrender.com/", + "https://wolfree.pages.dev/", + "https://wolfree.privatedns.org/", + "https://wolfree.strangled.net/", + "https://wolfree.twilightparadox.com/", + "https://wolfree.uk.to/", + "https://wolfree.us.to/", + "https://wolfreealpha.chickenkiller.com/", + "https://wolfreealpha.crabdance.com/", + "https://wolfreealpha.gitlab.io/", + "https://wolfreealpha.glitch.me/", + "https://wolfreealpha.ignorelist.com/", + "https://wolfreealpha.jumpingcrab.com/", + "https://wolfreealpha.my.to/", + "https://wolfreealpha.netlify.app/", + "https://wolfreealpha.on.fleek.co/", + "https://wolfreealpha.onrender.com/", + "https://wolfreealpha.pages.dev/", + "https://wolfreealpha.privatedns.org/", + "https://wolfreealpha.strangled.net/", + "https://wolfreealpha.twilightparadox.com/", + "https://wolfreealpha.uk.to/", + "https://wolfreealpha.us.to/" + ], + "tor": [], + "i2p": [], + "loki": [] + } +} diff --git a/docusaurus/static/n/v1/api/autocomplete/index.html b/docusaurus/static/n/v1/api/autocomplete/index.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/n/v1/api/autocomplete/index.html diff --git a/docusaurus/static/n/v1/api/randomizer b/docusaurus/static/n/v1/api/randomizer new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/n/v1/api/randomizer diff --git a/docusaurus/static/n/v1/api/samplefiles/fileinput/examples b/docusaurus/static/n/v1/api/samplefiles/fileinput/examples new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/n/v1/api/samplefiles/fileinput/examples diff --git a/docusaurus/static/n/v1/api/sourcer/dataSources b/docusaurus/static/n/v1/api/sourcer/dataSources new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/n/v1/api/sourcer/dataSources diff --git a/docusaurus/static/n/v1/api/sourcer/index.html b/docusaurus/static/n/v1/api/sourcer/index.html new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/n/v1/api/sourcer/index.html diff --git a/docusaurus/static/users/me/account b/docusaurus/static/users/me/account new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/docusaurus/static/users/me/account diff --git a/docusaurus/tsconfig.json b/docusaurus/tsconfig.json new file mode 100644 index 0000000..50e4989 --- /dev/null +++ b/docusaurus/tsconfig.json @@ -0,0 +1,18 @@ +/** + * @license + * SPDX-License-Identifier: AGPL-3.0-or-later + * This file is part of Wolfree. + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + */ + +// @ts-check + +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@tsconfig/docusaurus/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "strict": true, + "forceConsistentCasingInFileNames": true + } +} |