mirror of
https://git.disroot.org/wolfree/wolfree-dockerfile
synced 2025-06-06 00:49:20 +02:00
2023-09-26
This commit is contained in:
1
docusaurus/static/.htaccess
Normal file
1
docusaurus/static/.htaccess
Normal file
@ -0,0 +1 @@
|
||||
ErrorDocument 404 /404.html
|
@ -1,9 +1,4 @@
|
||||
/**
|
||||
* @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.
|
||||
*/
|
||||
/* SPDX-License-Identifier: AGPL-3.0-or-later */
|
||||
|
||||
.wolfree-placeholder {
|
||||
display: flex;
|
@ -1,9 +1,4 @@
|
||||
/**
|
||||
* @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.
|
||||
*/
|
||||
/* SPDX-License-Identifier: AGPL-3.0-or-later */
|
||||
|
||||
.wolfree-pods {
|
||||
display: flex;
|
@ -1,56 +0,0 @@
|
||||
/**
|
||||
* @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 };
|
||||
}
|
||||
};
|
||||
}
|
@ -1,57 +0,0 @@
|
||||
/**
|
||||
* @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();
|
||||
}
|
||||
};
|
||||
}
|
@ -1,26 +0,0 @@
|
||||
/**
|
||||
* @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 });
|
||||
}
|
||||
};
|
@ -1,69 +0,0 @@
|
||||
/**
|
||||
* @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 }
|
||||
);
|
||||
}
|
||||
};
|
||||
}
|
@ -1,56 +0,0 @@
|
||||
/**
|
||||
* @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 };
|
||||
}
|
||||
};
|
||||
}
|
@ -1,201 +0,0 @@
|
||||
/**
|
||||
* @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
|
@ -1,63 +0,0 @@
|
||||
/**
|
||||
* @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 });
|
||||
}
|
||||
};
|
||||
}
|
@ -1,29 +0,0 @@
|
||||
/**
|
||||
* @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 });
|
||||
}
|
||||
};
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
/**
|
||||
* @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);
|
||||
}
|
||||
};
|
||||
}
|
@ -1,44 +0,0 @@
|
||||
/**
|
||||
* @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,
|
||||
};
|
||||
};
|
||||
}
|
@ -1,51 +0,0 @@
|
||||
/**
|
||||
* @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)
|
||||
)
|
||||
);
|
@ -39,4 +39,4 @@
|
||||
"i2p": [],
|
||||
"loki": []
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"query": "",
|
||||
"instantMath": null,
|
||||
"results": []
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
{
|
||||
"en": {
|
||||
"id": 0,
|
||||
"query": ""
|
||||
},
|
||||
"ja": {
|
||||
"id": 0,
|
||||
"query": ""
|
||||
},
|
||||
"es": {
|
||||
"id": 0,
|
||||
"query": ""
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
[
|
||||
{
|
||||
"name": "",
|
||||
"display": [
|
||||
{
|
||||
"type": "",
|
||||
"value": ""
|
||||
}
|
||||
],
|
||||
"url": ""
|
||||
}
|
||||
]
|
@ -0,0 +1,10 @@
|
||||
[
|
||||
{
|
||||
"name": "",
|
||||
"value": {
|
||||
"primarySourceItems": [],
|
||||
"title": "",
|
||||
"items": []
|
||||
}
|
||||
}
|
||||
]
|
@ -0,0 +1,388 @@
|
||||
{
|
||||
"message": "Invalid request",
|
||||
"internalCode": 1,
|
||||
"httpCode": 500,
|
||||
"arguments": {},
|
||||
"cause": null,
|
||||
"stackTrace": [
|
||||
{
|
||||
"methodName": "filter_aroundBody12",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 47,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "filter_aroundBody13$advice",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 49,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "filter_aroundBody14",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 1,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "filter_aroundBody15$advice",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 28,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "filter_aroundBody16",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 1,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "filter_aroundBody17$advice",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 25,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "filter",
|
||||
"fileName": "AuthFilter.scala",
|
||||
"lineNumber": 1,
|
||||
"className": "com.wolframalpha.common.filters.AuthFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "apply",
|
||||
"fileName": "ContainerFilteringStage.java",
|
||||
"lineNumber": 171,
|
||||
"className": "org.glassfish.jersey.server.ContainerFilteringStage",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "apply",
|
||||
"fileName": "ContainerFilteringStage.java",
|
||||
"lineNumber": 74,
|
||||
"className": "org.glassfish.jersey.server.ContainerFilteringStage",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "Stages.java",
|
||||
"lineNumber": 197,
|
||||
"className": "org.glassfish.jersey.process.internal.Stages",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "run",
|
||||
"fileName": "ServerRuntime.java",
|
||||
"lineNumber": 250,
|
||||
"className": "org.glassfish.jersey.server.ServerRuntime$1",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "call",
|
||||
"fileName": "Errors.java",
|
||||
"lineNumber": 271,
|
||||
"className": "org.glassfish.jersey.internal.Errors$1",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "call",
|
||||
"fileName": "Errors.java",
|
||||
"lineNumber": 267,
|
||||
"className": "org.glassfish.jersey.internal.Errors$1",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "Errors.java",
|
||||
"lineNumber": 315,
|
||||
"className": "org.glassfish.jersey.internal.Errors",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "Errors.java",
|
||||
"lineNumber": 297,
|
||||
"className": "org.glassfish.jersey.internal.Errors",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "Errors.java",
|
||||
"lineNumber": 267,
|
||||
"className": "org.glassfish.jersey.internal.Errors",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "runInScope",
|
||||
"fileName": "RequestScope.java",
|
||||
"lineNumber": 319,
|
||||
"className": "org.glassfish.jersey.process.internal.RequestScope",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "ServerRuntime.java",
|
||||
"lineNumber": 236,
|
||||
"className": "org.glassfish.jersey.server.ServerRuntime",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "handle",
|
||||
"fileName": "ApplicationHandler.java",
|
||||
"lineNumber": 1028,
|
||||
"className": "org.glassfish.jersey.server.ApplicationHandler",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "service",
|
||||
"fileName": "WebComponent.java",
|
||||
"lineNumber": 373,
|
||||
"className": "org.glassfish.jersey.servlet.WebComponent",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "service",
|
||||
"fileName": "ServletContainer.java",
|
||||
"lineNumber": 381,
|
||||
"className": "org.glassfish.jersey.servlet.ServletContainer",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "service",
|
||||
"fileName": "ServletContainer.java",
|
||||
"lineNumber": 344,
|
||||
"className": "org.glassfish.jersey.servlet.ServletContainer",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "service",
|
||||
"fileName": "ServletContainer.java",
|
||||
"lineNumber": 219,
|
||||
"className": "org.glassfish.jersey.servlet.ServletContainer",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "internalDoFilter",
|
||||
"fileName": "ApplicationFilterChain.java",
|
||||
"lineNumber": 303,
|
||||
"className": "org.apache.catalina.core.ApplicationFilterChain",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "doFilter",
|
||||
"fileName": "ApplicationFilterChain.java",
|
||||
"lineNumber": 208,
|
||||
"className": "org.apache.catalina.core.ApplicationFilterChain",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "doFilter",
|
||||
"fileName": "WsFilter.java",
|
||||
"lineNumber": 52,
|
||||
"className": "org.apache.tomcat.websocket.server.WsFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "internalDoFilter",
|
||||
"fileName": "ApplicationFilterChain.java",
|
||||
"lineNumber": 241,
|
||||
"className": "org.apache.catalina.core.ApplicationFilterChain",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "doFilter",
|
||||
"fileName": "ApplicationFilterChain.java",
|
||||
"lineNumber": 208,
|
||||
"className": "org.apache.catalina.core.ApplicationFilterChain",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "doFilter",
|
||||
"fileName": "MonitoringFilter.java",
|
||||
"lineNumber": 232,
|
||||
"className": "net.bull.javamelody.MonitoringFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "doFilter",
|
||||
"fileName": "MonitoringFilter.java",
|
||||
"lineNumber": 209,
|
||||
"className": "net.bull.javamelody.MonitoringFilter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "internalDoFilter",
|
||||
"fileName": "ApplicationFilterChain.java",
|
||||
"lineNumber": 241,
|
||||
"className": "org.apache.catalina.core.ApplicationFilterChain",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "doFilter",
|
||||
"fileName": "ApplicationFilterChain.java",
|
||||
"lineNumber": 208,
|
||||
"className": "org.apache.catalina.core.ApplicationFilterChain",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "StandardWrapperValve.java",
|
||||
"lineNumber": 220,
|
||||
"className": "org.apache.catalina.core.StandardWrapperValve",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "StandardContextValve.java",
|
||||
"lineNumber": 122,
|
||||
"className": "org.apache.catalina.core.StandardContextValve",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "AuthenticatorBase.java",
|
||||
"lineNumber": 501,
|
||||
"className": "org.apache.catalina.authenticator.AuthenticatorBase",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "StandardHostValve.java",
|
||||
"lineNumber": 170,
|
||||
"className": "org.apache.catalina.core.StandardHostValve",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "ErrorReportValve.java",
|
||||
"lineNumber": 98,
|
||||
"className": "org.apache.catalina.valves.ErrorReportValve",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "AccessLogValve.java",
|
||||
"lineNumber": 950,
|
||||
"className": "org.apache.catalina.valves.AccessLogValve",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "invoke",
|
||||
"fileName": "StandardEngineValve.java",
|
||||
"lineNumber": 116,
|
||||
"className": "org.apache.catalina.core.StandardEngineValve",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "service",
|
||||
"fileName": "CoyoteAdapter.java",
|
||||
"lineNumber": 408,
|
||||
"className": "org.apache.catalina.connector.CoyoteAdapter",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "AbstractHttp11Processor.java",
|
||||
"lineNumber": 1040,
|
||||
"className": "org.apache.coyote.http11.AbstractHttp11Processor",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "process",
|
||||
"fileName": "AbstractProtocol.java",
|
||||
"lineNumber": 607,
|
||||
"className": "org.apache.coyote.AbstractProtocol$AbstractConnectionHandler",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "run",
|
||||
"fileName": "AprEndpoint.java",
|
||||
"lineNumber": 2378,
|
||||
"className": "org.apache.tomcat.util.net.AprEndpoint$SocketWithOptionsProcessor",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "runWorker",
|
||||
"fileName": "ThreadPoolExecutor.java",
|
||||
"lineNumber": 1145,
|
||||
"className": "java.util.concurrent.ThreadPoolExecutor",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "run",
|
||||
"fileName": "ThreadPoolExecutor.java",
|
||||
"lineNumber": 615,
|
||||
"className": "java.util.concurrent.ThreadPoolExecutor$Worker",
|
||||
"nativeMethod": false
|
||||
},
|
||||
{
|
||||
"methodName": "run",
|
||||
"fileName": "Thread.java",
|
||||
"lineNumber": 745,
|
||||
"className": "java.lang.Thread",
|
||||
"nativeMethod": false
|
||||
}
|
||||
],
|
||||
"response": {
|
||||
"context": {
|
||||
"headers": {},
|
||||
"entity": null,
|
||||
"entityType": null,
|
||||
"entityAnnotations": [],
|
||||
"entityStream": {
|
||||
"isCommitted": false,
|
||||
"isClosed": false
|
||||
},
|
||||
"mediaType": null,
|
||||
"requestCookies": {},
|
||||
"acceptableMediaTypes": [
|
||||
{
|
||||
"type": "*",
|
||||
"subtype": "*",
|
||||
"parameters": {},
|
||||
"quality": 1000,
|
||||
"wildcardType": true,
|
||||
"wildcardSubtype": true
|
||||
}
|
||||
],
|
||||
"acceptableLanguages": [
|
||||
"*"
|
||||
],
|
||||
"entityClass": null,
|
||||
"allowedMethods": [],
|
||||
"responseCookies": {},
|
||||
"entityTag": null,
|
||||
"links": [],
|
||||
"stringHeaders": {},
|
||||
"length": -1,
|
||||
"language": null,
|
||||
"location": null,
|
||||
"date": null,
|
||||
"lastModified": null,
|
||||
"committed": false
|
||||
},
|
||||
"status": 500,
|
||||
"metadata": {},
|
||||
"mediaType": null,
|
||||
"statusInfo": "INTERNAL_SERVER_ERROR",
|
||||
"allowedMethods": [],
|
||||
"entityTag": null,
|
||||
"links": [],
|
||||
"stringHeaders": {},
|
||||
"entity": null,
|
||||
"length": -1,
|
||||
"language": null,
|
||||
"location": null,
|
||||
"date": null,
|
||||
"lastModified": null,
|
||||
"cookies": {},
|
||||
"headers": {}
|
||||
},
|
||||
"localizedMessage": "Invalid request",
|
||||
"suppressed": []
|
||||
}
|
Reference in New Issue
Block a user