commit 48eb1b040abf5c3ce1ea9f882619f2fb73d3fab1 Author: Snoweuph Date: Sun Jul 28 10:38:31 2024 +0200 Create diff --git a/.gitea/workflows/qs.yml b/.gitea/workflows/qs.yml new file mode 100644 index 0000000..204a573 --- /dev/null +++ b/.gitea/workflows/qs.yml @@ -0,0 +1,18 @@ +name: "QS" + +on: + push: + branches: + - main + +jobs: + qs: + name: "QS" + runs-on: "ubuntu-latest" + container: + image: "git.euph.dev/actions/runner-js-latest:latest" + steps: + - name: "Checkout" + uses: "https://git.euph.dev/actions/checkout@v3" + - name: "Prettier" + run: npm_config_yes=true npx prettier src/ types/ --check --log-level=error diff --git a/Readme.md b/Readme.md new file mode 100644 index 0000000..eb79262 --- /dev/null +++ b/Readme.md @@ -0,0 +1,7 @@ +# CCNA Autofill UserScript +Simple Userscript to Create Tabletop Cards from Armyforge Cards + +[![Install USerscript](https://img.shields.io/badge/Install_Userscript-Install_Userscript?style=for-the-badge&logo=greasyfork&logoColor=black&color=brown)](https://git.euph.dev/Snoweuph/Armyfroge_Cards_Userscript/raw/branch/main/main.user.js) + +## Usage +Press `CTRL` + `s` to Save the Current Cards. diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..2e36c72 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "checkJs": true, + "target": "es6", + "lib": ["dom", "es6"] + } +} + diff --git a/main.user.js b/main.user.js new file mode 100644 index 0000000..97fc593 --- /dev/null +++ b/main.user.js @@ -0,0 +1,64 @@ +// ==UserScript== +// @name Armyfroge Cards +// @namespace https://git.euph.dev/Snoweuph +// @match https://army-forge.onepagerules.com/view* +// @grant none +// @version 1.0.0 +// @author Snoweuph +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js +// @require https://html2canvas.hertzen.com/dist/html2canvas.min.js +// ==/UserScript== + +// Bind to Ctrl + S +document.addEventListener("keydown", (event) => { + if (event.ctrlKey && event.key === "s") { + event.preventDefault(); + generate(); + } +}); + +function generate() { + const cards_root = + document.getElementsByClassName("MuiContainer-root")[0].firstElementChild; + + Array.from(cards_root.children).forEach((child) => { + const card = child.firstElementChild; + const header = card.firstElementChild; + + const marker_section = document.createElement("div"); + marker_section.style.display = "flex"; + marker_section.style.gap = "0.5rem"; + marker_section.style.padding = "0.5rem"; + marker_section.style.marginBottom = "0.5rem"; + for (let i = 0; i < 10; i++) { + const maker_space = document.createElement("div"); + maker_space.style.width = "3rem"; + maker_space.style.aspectRatio = "1"; + maker_space.style.borderRadius = "100%"; + maker_space.style.border = "dashed 1px lightgray"; + marker_section.appendChild(maker_space); + } + card.insertBefore(marker_section, header.nextSibling); + + html2canvas(card, { scale: 15, backgroundColor: null }).then((canvas) => { + const link = document.createElement("a"); + link.download = getHeaderTitle(header) + ".png"; + link.href = canvas.toDataURL(); + document.body.appendChild(link); + link.click(); + }); + }); +} + +// Extract Title of Card +function getHeaderTitle(pElement) { + let textContent = ""; + pElement.firstElementChild.firstElementChild.firstElementChild.childNodes.forEach( + (node) => { + if (node.nodeType === Node.TEXT_NODE) { + textContent += node.textContent; + } + } + ); + return textContent; +} diff --git a/prettierrc.json b/prettierrc.json new file mode 100644 index 0000000..37ddf7a --- /dev/null +++ b/prettierrc.json @@ -0,0 +1,10 @@ +{ + "useTabs": false, + "tabWidth": 4, + "arrowParens": "avoid", + "bracketSameLine": false, + "singleQuote": true, + "semi": true, + "trailingComma": "none", + "endOfLine": "lf" +}