From f0a901520322dd8939d765d7089ecc06780947eb Mon Sep 17 00:00:00 2001 From: Axorax <78349410+Axorax@users.noreply.github.com> Date: Fri, 15 Dec 2023 12:45:53 +0600 Subject: [PATCH] CBM --- .code-workspace | 15 + .editorconfig | 14 + .github/FUNDING.yml | 1 + .github/workflows/deldep.yml | 16 + .gitignore | 1 + .npmignore | 16 + .npmrc | 1 + .prettierignore | 6 + .prettierrc.json | 1 + 404.html | 161 ++++++++ CODE_OF_CONDUCT.md | 22 ++ CONTRIBUTING.md | 9 + LICENSE | 21 ++ README.md | 2 + assets/css/theme-template-to-css.css | 107 ++++++ assets/fonts/opensans.ttf | Bin 0 -> 122108 bytes assets/fonts/robotomono.ttf | Bin 0 -> 78996 bytes assets/img/axorax.png | Bin 0 -> 25483 bytes assets/js/theme-template-to-css.js | 52 +++ core.script.js | 55 +++ core.style.css | 531 +++++++++++++++++++++++++++ core.style.min.css | 1 + data/plugin-store.json | 1 + data/template-store.json | 1 + index.html | 117 ++++++ install/install.css | 80 ++++ install/install.js | 22 ++ install/plugin.html | 72 ++++ install/template.html | 65 ++++ install/theme.html | 88 +++++ modules/app.js | 69 ++++ modules/app.plugins.js | 56 +++ modules/app.themes.js | 73 ++++ modules/appvar.js | 38 ++ modules/button.js | 161 ++++++++ modules/db.js | 23 ++ modules/input.js | 49 +++ modules/loader.js | 42 +++ modules/local.js | 35 ++ modules/misc.js | 93 +++++ modules/sidebar.js | 178 +++++++++ modules/str.js | 18 + modules/user.js | 10 + modules/windrag.js | 80 ++++ package.json | 25 ++ plugins/calculator.js | 7 + plugins/code-editor.js | 33 ++ plugins/focus.js | 203 ++++++++++ plugins/hover.js | 203 ++++++++++ plugins/import-export.js | 133 +++++++ plugins/local-storage.js | 82 +++++ plugins/plugin-dev.js | 42 +++ plugins/plugins.js | 38 ++ plugins/settings.js | 30 ++ plugins/static.js | 214 +++++++++++ plugins/store.js | 61 +++ plugins/templates.js | 105 ++++++ plugins/todo-list.js | 30 ++ server.js | 50 +++ templates/default-browser.json | 3 + templates/gradient.json | 3 + themes/daboon.css | 3 + themes/template.toml | 8 + toml-to-css.html | 31 ++ 64 files changed, 3707 insertions(+) create mode 100644 .code-workspace create mode 100644 .editorconfig create mode 100644 .github/FUNDING.yml create mode 100644 .github/workflows/deldep.yml create mode 100644 .gitignore create mode 100644 .npmignore create mode 100644 .npmrc create mode 100644 .prettierignore create mode 100644 .prettierrc.json create mode 100644 404.html create mode 100644 CODE_OF_CONDUCT.md create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 assets/css/theme-template-to-css.css create mode 100644 assets/fonts/opensans.ttf create mode 100644 assets/fonts/robotomono.ttf create mode 100644 assets/img/axorax.png create mode 100644 assets/js/theme-template-to-css.js create mode 100644 core.script.js create mode 100644 core.style.css create mode 100644 core.style.min.css create mode 100644 data/plugin-store.json create mode 100644 data/template-store.json create mode 100644 index.html create mode 100644 install/install.css create mode 100644 install/install.js create mode 100644 install/plugin.html create mode 100644 install/template.html create mode 100644 install/theme.html create mode 100644 modules/app.js create mode 100644 modules/app.plugins.js create mode 100644 modules/app.themes.js create mode 100644 modules/appvar.js create mode 100644 modules/button.js create mode 100644 modules/db.js create mode 100644 modules/input.js create mode 100644 modules/loader.js create mode 100644 modules/local.js create mode 100644 modules/misc.js create mode 100644 modules/sidebar.js create mode 100644 modules/str.js create mode 100644 modules/user.js create mode 100644 modules/windrag.js create mode 100644 package.json create mode 100644 plugins/calculator.js create mode 100644 plugins/code-editor.js create mode 100644 plugins/focus.js create mode 100644 plugins/hover.js create mode 100644 plugins/import-export.js create mode 100644 plugins/local-storage.js create mode 100644 plugins/plugin-dev.js create mode 100644 plugins/plugins.js create mode 100644 plugins/settings.js create mode 100644 plugins/static.js create mode 100644 plugins/store.js create mode 100644 plugins/templates.js create mode 100644 plugins/todo-list.js create mode 100644 server.js create mode 100644 templates/default-browser.json create mode 100644 templates/gradient.json create mode 100644 themes/daboon.css create mode 100644 themes/template.toml create mode 100644 toml-to-css.html diff --git a/.code-workspace b/.code-workspace new file mode 100644 index 0000000..84d3e65 --- /dev/null +++ b/.code-workspace @@ -0,0 +1,15 @@ +{ + "folders": [ + { + "path": "." + } + ], + "settings": { + "editor.cursorBlinking": "smooth", + "editor.tabSize": 4, + "prettier.tabWidth": 4, + "files.insertFinalNewline": true, + "files.trimTrailingWhitespace": true + } +} + \ No newline at end of file diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..69f855f --- /dev/null +++ b/.editorconfig @@ -0,0 +1,14 @@ +root = true + +[*] +indent_style = space +indent_size = 4 + +[*] +insert_final_newline = true + +[*] +end_of_line = lf + +[*.js] +max_line_length = 120 \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..fc26d69 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +patreon: axorax diff --git a/.github/workflows/deldep.yml b/.github/workflows/deldep.yml new file mode 100644 index 0000000..8a5290d --- /dev/null +++ b/.github/workflows/deldep.yml @@ -0,0 +1,16 @@ +name: deldep + +on: push + +jobs: + deldep: + runs-on: ubuntu-latest + permissions: write-all + + steps: + - name: Delete deployment + uses: strumwolf/delete-deployment-environment@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + environment: github-pages + onlyRemoveDeployments: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/.npmignore b/.npmignore new file mode 100644 index 0000000..59dc9c9 --- /dev/null +++ b/.npmignore @@ -0,0 +1,16 @@ +# Folders +node_modules/ +.github/ + +# Ignore Files +.gitignore +.npmignore +.prettierignore + +# Settings Files +.prettierrc.json +.editorconfig +.code-workspace + +# Files +CODE_OF_CONDUCT.md \ No newline at end of file diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..9cf9495 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +package-lock=false \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..3d69d0a --- /dev/null +++ b/.prettierignore @@ -0,0 +1,6 @@ +**/.git +**/.svn +**/.hg +**/node_modules +core.script.min.js +core.style.min.css \ No newline at end of file diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1 @@ +{} diff --git a/404.html b/404.html new file mode 100644 index 0000000..86f4474 --- /dev/null +++ b/404.html @@ -0,0 +1,161 @@ + + + + + + + Page not found! + + + +
+

404

+

PAGE NOT FOUND!

+
+

Type "move" for a secret!

+ IM TIRED OF BEING PRESSED! >:( + + + diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..ceca6e9 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,22 @@ +# Contributor Code of Conduct + +As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. + +We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality. + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery +- Personal attacks +- Trolling or insulting/derogatory comments +- Public or private harassment +- Publishing other's private information, such as physical or electronic addresses, without explicit permission +- Other unethical or unprofessional conduct + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team. + +This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. + +This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 1.2.0, available at https://www.contributor-covenant.org/version/1/2/0/code-of-conduct.html diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..0771657 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,9 @@ +# CSS Button Maker (cbm) contributing guidelines + +**Note:** + +Contributions cannot just be a simple refactor of code or anything similar. + +Contributions must help improve the overall functionality of the code. These can include making themes, plugins, changing the overall app, making modules, etc. + +Make sure your design matches the design of the app or looks good in the app. \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..7ebd144 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Axorax + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..e1eb2a7 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +

css button maker

+

Create stunning buttons in just a few clicks!

diff --git a/assets/css/theme-template-to-css.css b/assets/css/theme-template-to-css.css new file mode 100644 index 0000000..c1f4000 --- /dev/null +++ b/assets/css/theme-template-to-css.css @@ -0,0 +1,107 @@ +@font-face { + font-family: "default"; + src: url("../../assets/fonts/opensans.ttf"); +} + +:root { + color-scheme: dark; +} + +* { + padding: 0; + margin: 0; + font-family: "default", sans-serif; +} + +textarea, +textarea:hover, +textarea:focus, +input, +input:hover, +input:focus { + outline: none; +} + +.flex { + display: flex; + /* flex-wrap: wrap; */ + gap: 3rem; + align-items: center; + overflow: hidden; + justify-content: center; + max-width: 100vw; + padding: 1rem; +} + +h1 { + text-align: center; + font-size: 1.2rem; + padding-top: 1rem; +} + +pre { + white-space: pre-wrap; +} + +.flex .item.controls { + display: flex; + flex-direction: column; + gap: 0.7rem; +} + +.flex .item.controls button { + position: relative; + cursor: pointer; + border-radius: 5px; + border: none; + background-color: #537fe7; + color: #fff; + font-size: 1rem; + padding: 1rem 3rem; + word-break: keep-all; + white-space: nowrap; +} + +.flex .item.controls button:hover, +.flex .item.controls button:focus { + background-color: #4b73d1; + opacity: 0.8; +} + +.input-1 { + margin: 2rem 0; + border-radius: 5px; + padding: 1rem; + font-size: 1.2rem; + border: 1.5px solid #222222; + height: calc(100vh - 1.5rem - 9.6rem); + resize: none; + min-width: 33vw; + max-width: calc(100% - 2rem); + background: #121212; +} + +.input-1:hover, +.input-1:focus { + border-color: #3d3d3d; +} + +@media (max-width: 1052px) { + .input-1 { + min-width: 30vw; + } +} + +@media (max-width: 926px) { + .flex { + display: block; + margin: 0 1.5rem; + } + .flex .item.controls button { + height: 4rem; + font-size: 1.2rem; + } + .input-1 { + width: calc(100% - 2.2rem); + } +} diff --git a/assets/fonts/opensans.ttf b/assets/fonts/opensans.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cafe79820d39581ae717e81eeeeff7847bb53ee4 GIT binary patch literal 122108 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/robotomono.ttf b/assets/fonts/robotomono.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2ab8f34a5bb5fdd2e87ba931bbafc8792fc92bb5 GIT binary patch literal 78996 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 literal 0 HcmV?d00001 diff --git a/assets/img/axorax.png b/assets/img/axorax.png new file mode 100644 index 0000000000000000000000000000000000000000..01f2422d6463e51b31886d025d8f9ab4ce896162 GIT binary patch literal 25483 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 HBIy4Brk { + e.innerText = "📋 Copy CSS"; + }, 2000); +} + +function convert() { + const toml = document.getElementById("toml").value; + const parsedData = parseTOML(toml); + const css = generateCSS(parsedData); + document.getElementById("css").textContent = css; +} + +function parseTOML(toml) { + const result = {}; + const lines = toml.split("\n"); + let currentSelector = null; + + for (let line of lines) { + line = line.trim(); + + if (line.startsWith("[") && line.endsWith("]")) { + currentSelector = line.slice(1, -1).trim(); + result[currentSelector] = {}; + } else if (currentSelector) { + const [property, value] = line.split("="); + if (property && value) { + result[currentSelector][property.trim()] = value.trim(); + } + } + } + + return result; +} + +function generateCSS(parsedData) { + let css = ""; + + for (const [selector, properties] of Object.entries(parsedData)) { + css += `${selector} {`; + + for (const [property, value] of Object.entries(properties)) { + css += `${property}: ${value};`; + } + + css += "}"; + } + + return css; +} diff --git a/core.script.js b/core.script.js new file mode 100644 index 0000000..fed6580 --- /dev/null +++ b/core.script.js @@ -0,0 +1,55 @@ +window.addEventListener("load", function () { + loader.remove(); +}); + +if (localStorage.getItem("theme")) { + app.themes.useWithType(localStorage.getItem("theme")); +} + +if (appvar.urlParams.get("data")) { + button.loadJSON(JSON.parse(atob(appvar.urlParams.get("data")))); +} + +if (appvar.urlParams.get("theme")) { + app.themes.use(appvar.urlParams.get("theme")); +} + +if (appvar.urlParams.get("window")) { + const window = appvar.urlParams.get("window"); + app.plugins.load(window, () => { + app.loadWindow(window); + }, false); +} + +if (appvar.urlParams.get("panel")) { + const panel = appvar.urlParams.get("panel"); + app.plugins.load( + panel, + () => { + app.loadPanel(panel); + }, + false + ); + app.plugins.load("static", null, false); + } else { + app.plugins.load( + "static", + () => { + app.loadPanel("static"); + }, + false + ); + } + +if (localStorage.getItem("template")) { + button.loadJSON(JSON.parse(localStorage.getItem("template"))); + localStorage.removeItem("template"); +} + +if (localStorage.getItem("plugins")) { + JSON.parse(localStorage.getItem("plugins")).forEach((plugin) => { + app.plugins.load(plugin); + }); +} + +appvar.styleMain.innerText = button.getStaticCode() + button.getHoverCode() + button.getFocusCode(); \ No newline at end of file diff --git a/core.style.css b/core.style.css new file mode 100644 index 0000000..a5a552d --- /dev/null +++ b/core.style.css @@ -0,0 +1,531 @@ +@font-face { + font-family: "default"; + src: url("./assets/fonts/opensans.ttf"); +} + +@font-face { + font-family: "mono"; + src: url("./assets/fonts/robotomono.ttf"); +} + +:root { + color-scheme: dark; + --border: #3d3d3d; + --sidebar-border: #3d3d3d; + --sidebar-title-border: #3d3d3d; + --sidebar-title-padding: 0.7rem 1.1rem; + --sidebar-title-font-size: 1.1vw; + --sidebar-content-padding: 1rem 1.1rem; + --sidebar-bg: #121212; +} + +* { + font-family: "default", sans-serif; + box-sizing: border-box; + padding: 0; + margin: 0; +} + +body { + background: #121212; +} + +a { + color: #537fe7; + cursor: pointer; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +/* ======= Loader ======= */ + +.app-loader { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #111111ac; + display: flex; + justify-content: center; + align-items: center; + z-index: 9999; + backdrop-filter: blur(5px); + transition: 200ms; +} + +.app-loader .bottom { + position: fixed; + left: 50%; + transform: translate(-50%); + bottom: 8rem; +} + +.app-loader .loader { + position: relative; + display: flex; + justify-content: center; + align-items: center; +} + +.app-loader .loader:before { + content: ""; + box-sizing: border-box; + position: absolute; + top: 50%; + left: 50%; + width: 60px; + height: 60px; + margin-top: -30px; + margin-left: -30px; + border-radius: 50%; + border: 6px solid #1c1c1c; + border-top-color: #537fe7; + animation: rotate-360 1s linear infinite; +} + +/* ======= Sidebar ======= */ + +.app-sidebar { + position: fixed; + right: 0; + top: 0; + height: 100vh; + width: 33vw; + overflow-y: auto; + border-left: 1.3px solid var(--sidebar-border); + background: var(--sidebar-bg); +} + +.app-sidebar .title { + letter-spacing: 0.1px; + font-size: var(--sidebar-title-font-size); + padding: var(--sidebar-title-padding); + font-family: "mono", monospace, "default", sans-serif; + border-bottom: 1.3px solid var(--sidebar-title-border); +} + +.app-sidebar .title span { + letter-spacing: 0.1px; + font-size: var(--sidebar-title-font-size); + font-family: "mono", monospace, "default", sans-serif; +} + +.app-sidebar .content { + font-size: 1.05vw; + font-family: "mono", monospace; + padding: var(--sidebar-content-padding); +} + +.title-gradient { + -webkit-background-clip: text; + -webkit-text-fill-color: transparent; + color: transparent; + background-clip: text; +} + +/* ======= Preview ======= */ + +.app-preview { + border-bottom: 1.3px solid var(--border); + width: calc(100vw - 33vw); + height: 70vh; + display: flex; + justify-content: center; + align-items: center; + background-position-x: 25px; + background-size: 40px 40px; + background-image: radial-gradient(circle, #414141 1.5px, #121212 1px); + overflow: auto; +} + +/* ======= Tools ======= */ + +.app-tools { + width: calc(100vw - 33vw); + height: calc(100vh - 70vh); + padding: 1rem; +} + +.app-tools .grid { + display: flex; + flex-wrap: wrap; + gap: 0.8rem; +} + +/* ======= Notice ======= */ + +.notice { + padding: 0.8rem; + min-width: 12rem; + text-align: center; + font-size: 1vw; + font-family: "mono", monospace; + position: fixed; + left: 50%; + top: 0%; + background: #3e54ac; + border-radius: 6px; + transform: translate(-50%, -100%); + transition: 300ms; +} + +/* ======= Built-in CSS Library ======= */ + +.w-100p { + width: 100%; +} + +.fcc { + display: flex; + justify-content: center; + align-items: center; +} + +button.s-1 { + cursor: pointer; + padding: 0.5rem; + font-family: "mono", monospace; + border-radius: 5px; + font-size: 1vw; + border: 1.3px solid var(--border); + text-align: center; + min-width: 5rem; + background: transparent; + outline: none; +} + +button.s-1:hover { + background: #2d2d2d45; +} + +button.s-1.pill { + border-radius: 5rem; + padding: 0.4rem 0.8rem; +} + +.input-s1 { + position: relative; + margin-top: 1.2rem; +} + +.input-s1 input, +.input-s1 textarea, +textarea.s-1, +.input-s1 div[contenteditable="true"] { + width: 100%; + outline: none; + background: #202020; + min-height: 2.6rem; + padding: 0.8rem 0.7rem; + padding-top: 1.4rem; + border-radius: 6px; + border: 1.3px solid var(--border); +} + +.input-s1 textarea, +textarea.s-1, +.input-s1 div[contenteditable="true"] { + resize: vertical; + min-height: 7rem; +} + +.input-s1 div[contenteditable="true"]:empty:before { + content: attr(data-placeholder); + opacity: 0.5; +} + +textarea.s-1 { + padding-top: 0.8rem; + margin: 1rem 0; +} + +textarea.s-1:focus { + border-color: #537fe7; +} + +.input-s1 label { + font-size: 10.5px; + background: #202020; + border: 1px solid var(--border); + border-radius: 3px; + left: 10px; + padding: 0.3rem 0.5rem; + position: absolute; + top: -13px; + font-family: "mono", monospace; +} + +hr { + margin: 1rem 0; + border: none; + height: 1.3px; + width: calc(100% + 2.2rem); + margin-left: -1.1rem; + background: #3d3d3d; +} + +.input { + display: flex; + flex-wrap: wrap; + margin-top: 1rem; + gap: 1rem; + align-items: baseline; +} + +.input > input, +.input > div, +.input > select { + margin-left: auto; +} + +select { + outline: none; + appearance: none; + -webkit-appearance: none; + border-radius: 4px; + padding: 0.3rem 0.4rem; + background: #202020; + border: 1.3px solid var(--border); + position: relative; + font-size: 0.9vw; + padding-right: 1.7rem; + color: #fff; + background-image: url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right 0.5rem center; + background-size: 1em; +} + +select option { + appearance: none; + -webkit-appearance: none; + margin: 0; + border-radius: 0; + border: none; + outline: none; + font-size: 1vw; +} + +select::-ms-expand { + display: none; +} + +.input input, +input.s-2 { + border-radius: 5px; + background: #202020; + outline: none; + border: 1px solid #3d3d3d; + padding: 0.5rem; + font-size: 0.9vw; +} + +.input input:focus, +input.s-2:focus { + border-color: #537fe7; +} + +.input > div { + display: flex; + flex-direction: column; + flex-wrap: wrap; + gap: 0.5rem; +} + +h2 { + font-weight: 400; +} + +h3 { + padding-bottom: 1rem; +} + +.table { + overflow-x: auto; + border: 1.3px solid var(--border); +} + +table { + width: 100%; + border-collapse: collapse; +} + +table.mono td { + font-family: "mono", monospace; +} + +table thead td { + font-weight: bold; +} + +table thead tr { + background: #1a1a1a; + border-bottom: 1.3px solid var(--border); +} + +table tr:nth-child(even) { + background: #1a1a1a; +} + +table tr { + background: #202020; +} + +table td { + padding: 0.8rem 1rem; + word-break: break-all; +} + +.input-f1 { + margin-bottom: 1rem; + display: flex; + flex-wrap: wrap; + gap: 0.8rem; +} + +.input-f1 input { + width: calc(100% - 40% - 0.4rem); +} + +.input-f1 button { + width: calc(100% - 60% - 0.4rem); +} + +.box { + padding: 1rem; + border: 1.3px solid var(--border); + border-radius: 5px; + margin: 1rem 0; +} + +.font-mono { + font-family: "mono", monospace; +} + +.span-link { + color: #537fe7; + cursor: pointer; +} + +.span-link:hover { + text-decoration: underline; +} + +.title-s1 { + font-weight: 400; + margin: 0; + padding: 0; +} + +button.s-1.full { + height: 2.8rem; + width: 100%; +} + +/* ======= Settings ======= */ + +#settings-manage-plugins button { + padding-bottom: 0.7rem; + padding-right: 2.5rem; + position: relative; +} + +#settings-manage-plugins button span { + position: absolute; + right: 0.5rem; + font-size: 11px !important; + padding: 0 0.5rem 0.23rem 0.5rem; + border-radius: 5px; + border: 1.3px solid var(--border); + background: #202020; + z-index: 2; +} + +#settings-manage-plugins button span:hover { + border-color: transparent; + background-color: #e21818; +} + +/* ======= Window ======= */ + +.window { + position: absolute; + width: 40%; + height: 50%; + max-width: calc(100% - 2rem); + min-width: 20rem; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: #202020; + border: 1.3px solid var(--border); + border-radius: 5px; + resize: both; + overflow: auto; + min-height: 6rem; + max-height: calc(100% - 2rem); +} + +.window::-webkit-resizer { + background: repeating-linear-gradient( + -45deg, + #202020, + #202020 2px, + #3d3d3d 2px, + #3d3d3d 4px + ); +} + +.window .title { + display: flex; + border-bottom: 1.3px solid var(--border); + cursor: all-scroll; + position: fixed; + width: 100%; +} + +.window .title p { + word-break: break-all; + padding: 0.7rem 0.9rem; + font-family: "mono", monospace; + font-size: 0.8rem; +} + +.window .title .controls { + margin-left: auto; + padding: 0.5rem 0.6rem; +} + +.window .title .controls .close { + display: flex; + justify-content: center; + align-items: center; + cursor: pointer; + line-height: 0; + padding: 0.66rem 0.5rem 0.8rem 0.5rem; + font-family: "mono", monospace; + border-radius: 5px; + border: 1.3px solid var(--border); + font-size: 0.8rem; +} + +.window .title .controls .close:hover { + border-radius: 6px; + background: #e21818; +} + +.window .body { + margin-top: 41.34px; +} + +/* ======= Keyframes ======= */ + +@keyframes rotate-360 { + to { + transform: rotate(360deg); + } +} diff --git a/core.style.min.css b/core.style.min.css new file mode 100644 index 0000000..7032004 --- /dev/null +++ b/core.style.min.css @@ -0,0 +1 @@ +.app-loader,.app-loader .loader{justify-content:center;display:flex}.app-sidebar .title,.app-sidebar .title span{letter-spacing:.1px;font-size:var(--sidebar-title-font-size);font-family:mono,monospace,"default",sans-serif}.app-loader,.app-sidebar,.notice{position:fixed;top:0}.notice,button.s-1{text-align:center;font-size:1vw}table thead tr,table tr:nth-child(2n){background:#1a1a1a}.title-s1,h2{font-weight:400}.span-link,a,button.s-1{cursor:pointer}@font-face{font-family:"default";src:url("./assets/fonts/opensans.ttf")}@font-face{font-family:mono;src:url("./assets/fonts/robotomono.ttf")}:root{color-scheme:dark;--border:#3d3d3d;--sidebar-border:#3d3d3d;--sidebar-title-border:#3d3d3d;--sidebar-title-padding:0.7rem 1.1rem;--sidebar-title-font-size:1.1vw;--sidebar-content-padding:1rem 1.1rem;--sidebar-bg:#121212}*{font-family:"default",sans-serif;box-sizing:border-box;padding:0;margin:0}.app-loader{left:0;width:100%;height:100%;background-color:#111111ac;align-items:center;z-index:9999;backdrop-filter:blur(5px);transition:.2s}.app-loader .bottom{position:fixed;left:50%;transform:translate(-50%);bottom:8rem}.app-loader .loader{position:relative;align-items:center}.app-loader .loader:before{content:"";box-sizing:border-box;position:absolute;top:50%;left:50%;width:60px;height:60px;margin-top:-30px;margin-left:-30px;border-radius:50%;border:6px solid #1c1c1c;border-top-color:#537fe7;animation:1s linear infinite rotate-360}a{color:#537fe7;text-decoration:none}.span-link:hover,a:hover{text-decoration:underline}body{background:#121212}.app-sidebar{right:0;height:100vh;width:33vw;overflow-y:auto;border-left:1.3px solid var(--sidebar-border);background:var(--sidebar-bg)}.app-preview,.app-tools{width:calc(100vw - 33vw)}.app-sidebar .title{padding:var(--sidebar-title-padding);border-bottom:1.3px solid var(--sidebar-title-border)}.app-sidebar .content,.font-mono,.input-s1 label,.notice,.window .title p,button.s-1,table.mono td{font-family:mono,monospace}.app-sidebar .content{font-size:1.05vw;padding:var(--sidebar-content-padding)}.title-gradient{-webkit-background-clip:text;-webkit-text-fill-color:transparent;color:transparent;background-clip:text}.app-preview{border-bottom:1.3px solid var(--border);height:70vh;display:flex;justify-content:center;align-items:center;background-position-x:25px;background-size:40px 40px;background-image:radial-gradient(circle,#414141 1.5px,#121212 1px);overflow:auto}.app-tools{height:calc(100vh - 70vh);padding:1rem}.app-tools .grid{display:flex;flex-wrap:wrap;gap:.8rem}.notice{padding:.8rem;min-width:12rem;left:50%;background:#3e54ac;border-radius:6px;transform:translate(-50%,-100%);transition:.3s}.box,.window .body{padding:1rem}.input-s1,select{position:relative}.w-100p{width:100%}.fcc{display:flex;justify-content:center;align-items:center}button.s-1{padding:.5rem;border-radius:5px;border:1.3px solid var(--border);min-width:5rem;background:0 0;outline:0}button.s-1:hover{background:#2d2d2d45}button.s-1.pill{border-radius:5rem;padding:.4rem .8rem}.input-s1{margin-top:1.2rem}#settings-manage-plugins button span,.input-s1 label,.window{position:absolute;background:#202020}.input-s1 div[contenteditable=true],.input-s1 input,.input-s1 textarea,textarea.s-1{width:100%;outline:0;background:#202020;min-height:2.6rem;padding:1.4rem .7rem .8rem;border-radius:6px;border:1.3px solid var(--border)}.input-s1 div[contenteditable=true],.input-s1 textarea,textarea.s-1{resize:vertical;min-height:7rem}.input-s1 div[contenteditable=true]:empty:before{content:attr(data-placeholder);opacity:.5}textarea.s-1{padding-top:.8rem;margin:1rem 0}.input input:focus,input.s-2:focus,textarea.s-1:focus{border-color:#537fe7}.input-s1 label{font-size:10.5px;border:1px solid var(--border);border-radius:3px;left:10px;padding:.3rem .5rem;top:-13px}hr{margin:1rem 0 1rem -1.1rem;border:none;height:1.3px;width:calc(100% + 2.2rem);background:#3d3d3d}.input{display:flex;flex-wrap:wrap;margin-top:1rem;gap:1rem;align-items:baseline}.input>div,.input>input,.input>select{margin-left:auto}select{outline:0;appearance:none;-webkit-appearance:none;border-radius:4px;padding:.3rem 1.7rem .3rem .4rem;background:url("data:image/svg+xml;charset=UTF-8,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' stroke='white' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3e%3cpolyline points='6 9 12 15 18 9'%3e%3c/polyline%3e%3c/svg%3e") right .5rem center/1em no-repeat #202020;border:1.3px solid var(--border);font-size:.9vw;color:#fff}select option{appearance:none;-webkit-appearance:none;margin:0;border-radius:0;border:none;outline:0;font-size:1vw}select::-ms-expand{display:none}.input input,input.s-2{border-radius:5px;background:#202020;outline:0;border:1px solid #3d3d3d;padding:.5rem;font-size:.9vw}.box,.table{border:1.3px solid var(--border)}.input>div{display:flex;flex-direction:column;flex-wrap:wrap;gap:.5rem}h3{padding-bottom:1rem}.table{overflow-x:auto}table{width:100%;border-collapse:collapse}table thead td{font-weight:700}table thead tr{border-bottom:1.3px solid var(--border)}table tr{background:#202020}table td{padding:.8rem 1rem;word-break:break-all}.input-f1{margin-bottom:1rem;display:flex;flex-wrap:wrap;gap:.8rem}.input-f1 input{width:calc(100% - 40% - .4rem)}.input-f1 button{width:calc(100% - 60% - .4rem)}.box{border-radius:5px;margin:1rem 0}.span-link{color:#537fe7}.title-s1{margin:0;padding:0}button.s-1.full{height:2.8rem;width:100%}#settings-manage-plugins button{padding-bottom:.7rem;padding-right:2.5rem;position:relative}#settings-manage-plugins button span{right:.5rem;font-size:11px!important;padding:0 .5rem .23rem;border-radius:5px;border:1.3px solid var(--border);z-index:2}#settings-manage-plugins button span:hover{border-color:transparent;background-color:#e21818}.window{width:max-content;max-width:calc(100% - 2rem);min-width:20rem;top:50%;left:50%;transform:translate(-50%,-50%);border:1.3px solid var(--border);border-radius:5px;resize:both;overflow:auto;min-height:6rem;max-height:calc(100% - 2rem)}.window .title{display:flex;border-bottom:1.3px solid var(--border);cursor:all-scroll}.window .title p{word-break:break-all;padding:.7rem .9rem;font-size:.8rem}.window .title .controls{margin-left:auto;padding:.5rem .6rem}.window .title .controls .close{display:flex;justify-content:center;align-items:center;cursor:pointer;line-height:0;padding:.66rem .5rem .8rem;font-family:mono,monospace;border-radius:5px;border:1.3px solid var(--border);font-size:.8rem}.window .title .controls .close:hover{border-radius:6px;background:#e21818}@keyframes rotate-360{to{transform:rotate(360deg)}} \ No newline at end of file diff --git a/data/plugin-store.json b/data/plugin-store.json new file mode 100644 index 0000000..3140a1e --- /dev/null +++ b/data/plugin-store.json @@ -0,0 +1 @@ +["plugin-dev", "todo-list", "local-storage", "calculator"] diff --git a/data/template-store.json b/data/template-store.json new file mode 100644 index 0000000..5343d13 --- /dev/null +++ b/data/template-store.json @@ -0,0 +1 @@ +["default-browser", "gradient"] diff --git a/index.html b/index.html new file mode 100644 index 0000000..f1db662 --- /dev/null +++ b/index.html @@ -0,0 +1,117 @@ + + + + + + + css button maker + + + + +

+
+
A
+
+

+ Loading... +

+
+
+
+ + + + + +
+
+
+ +
+
loading ...
+
loading ...
+
+ + + +
+
+ + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + diff --git a/install/install.css b/install/install.css new file mode 100644 index 0000000..42999cb --- /dev/null +++ b/install/install.css @@ -0,0 +1,80 @@ +@font-face { + font-family: "mono"; + src: url("../assets/fonts/robotomono.ttf"); +} + +* { + padding: 0; + margin: 0; + box-sizing: border-box; + font-family: "mono", monospace; +} + +main { + width: 100%; + height: 100vh; + display: flex; + justify-content: center; + align-items: center; +} + +.box { + border-radius: 5px; + border: 1.3px solid #3d3d3d; + background: #111111b3; + backdrop-filter: blur(2px); + max-width: calc(100% - 2rem); + min-width: 18rem; + padding: 1.4rem; + box-shadow: 0 0 18px #111 inset; +} + +.box .title { + color: #fff; + font-family: "mono", monospace; +} + +.box .preview { + margin-top: 1rem; + margin-top: 1rem; + cursor: pointer; + color: #fff; + width: 100%; + border-radius: 5px; + padding: 0.7rem; + border: 1px solid #535353; + background: #111111d5; +} + +.box .preview:hover { + background: #292929e4; +} + +.box .buttons { + margin-top: 2rem; + display: none; +} + +.box .install { + margin-top: 1rem; + cursor: pointer; + background: linear-gradient(to right, #537fe7, #62b6ff); + color: #fff; + width: 100%; + border-radius: 5px; + border: none; + padding: 0.7rem; +} + +.box .install:hover { + outline-offset: 2px; + outline: 0.1px solid #537fe7; +} + +.box .install.uninstall { + background: linear-gradient(to right, #ff1e00, #e64848); +} + +.box .install.uninstall:hover { + outline-color: #ff1e00; +} diff --git a/install/install.js b/install/install.js new file mode 100644 index 0000000..7f89e2e --- /dev/null +++ b/install/install.js @@ -0,0 +1,22 @@ +const bg = [ + `background-color: #e5e5f7;background: linear-gradient(135deg,#444cf755 25%,transparent 25%) -10px 0/ 20px 20px,linear-gradient(225deg, #444cf7 25%, transparent 25%) -10px 0/20px 20px,linear-gradient(315deg, #444cf755 25%, transparent 25%) 0px 0/ 20px 20px,linear-gradient(45deg, #444cf7 25%, #e5e5f7 25%) 0px 0/ 20px 20px;`, + `background: #121212;background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='28' height='49' viewBox='0 0 28 49'%3E%3Cg fill-rule='evenodd'%3E%3Cg id='hexagons' fill='%239C92AC' fill-opacity='0.25' fill-rule='nonzero'%3E%3Cpath d='M13.99 9.25l13 7.5v15l-13 7.5L1 31.75v-15l12.99-7.5zM3 17.9v12.7l10.99 6.34 11-6.35V17.9l-11-6.34L3 17.9zM0 15l12.98-7.5V0h-2v6.35L0 12.69v2.3zm0 18.5L12.98 41v8h-2v-6.85L0 35.81v-2.3zM15 0v7.5L27.99 15H28v-2.31h-.01L17 6.35V0h-2zm0 49v-8l12.99-7.5H28v2.31h-.01L17 42.15V49h-2z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"),linear-gradient(to right top,#343a40,#2b2c31,#211f22,#151314,#000000);`, + `background-color: #e5e5f7;background-image: linear-gradient(135deg, #8545f7 25%, transparent 25%), linear-gradient(225deg, #8545f7 25%, transparent 25%), linear-gradient(45deg, #8545f7 25%, transparent 25%), linear-gradient(315deg, #8545f7 25%, #e5e5f7 25%);background-position: 16px 0, 16px 0, 0 0, 0 0;background-size: 16px 16px;background-repeat: repeat;`, + `background-color: #111;background-image: repeating-linear-gradient(45deg, #2a3f3e 25%, transparent 25%, transparent 75%, #2a3f3e 75%, #2a3f3e), repeating-linear-gradient(45deg, #2a3f3e 25%, #111 25%, #111 75%, #2a3f3e 75%, #2a3f3e);background-position: 0 0, 14px 14px;background-size: 28px 28px;`, +]; + +const style = document.createElement("style"); +style.innerText = "body {" + bg[Math.floor(Math.random() * bg.length)] + "}"; +document.head.append(style); +// Math.floor(Math.random()*bg.length) +function install(type, code) { + const title = document.querySelector(".title"), + button = document.querySelector(".install"), + buttons = document.querySelector(".buttons"), + params = new URLSearchParams(window.location.search), + name = params.get("name"), + fetchSlug = String(window.location.href).includes("github.io") + ? `https://axorax.github.io/css-button-maker/` + : window.location.origin + "/"; + code(title, button, params, name, fetchSlug, type, buttons); +} diff --git a/install/plugin.html b/install/plugin.html new file mode 100644 index 0000000..46673a6 --- /dev/null +++ b/install/plugin.html @@ -0,0 +1,72 @@ + + + + + + + Plugin + + + +
+
+
loading...
+
+ +
+
+
+ + + + + diff --git a/install/template.html b/install/template.html new file mode 100644 index 0000000..fb0e650 --- /dev/null +++ b/install/template.html @@ -0,0 +1,65 @@ + + + + + + + Template + + + +
+
+
loading...
+
+ +
+
+
+ + + + diff --git a/install/theme.html b/install/theme.html new file mode 100644 index 0000000..a9d9c07 --- /dev/null +++ b/install/theme.html @@ -0,0 +1,88 @@ + + + + + + + Theme + + + +
+
+
loading...
+
+ + +
+
+
+ + + + diff --git a/modules/app.js b/modules/app.js new file mode 100644 index 0000000..01ff8fb --- /dev/null +++ b/modules/app.js @@ -0,0 +1,69 @@ +let app = { + createWindow: (title, body) => { + const html = `

${title}

x
${body}
`; + const e = document.createElement("div"); + const id = "window-" + str.random(5); + e.className = "window"; + e.id = id; + e.innerHTML = html; + document.body.append(e); + windrag.create(`#${id}`, `#${id} .title`); + return id; + }, + loadPanel: (name) => { + appvar.sidebarContent.innerHTML = appvar.panels[name].content; + appvar.sidebarTitle.innerHTML = appvar.panels[name].name; + if (appvar.panels[name].style) { + const e = document.createElement("style"); + e.id = name + "-plugin-style"; + e.innerText = appvar.panels[name].style; + document.head.append(e); + } + appvar.panels[name].code(); + }, + loadWindow: (name) => { + app.createWindow(appvar.windows[name].title, appvar.windows[name].body); + if (appvar.windows[name].code) { + appvar.windows[name].code(); + } + }, + addTool: (name, options = { plugin: true }) => { + if (options.plugin) { + appvar.toolsGrid.innerHTML += ``; + } else { + appvar.toolsGrid.innerHTML += ``; + } + }, + removeTool: (name) => { + document.querySelector(`#tool-${name}`).remove(); + }, + loadBuiltinTool: (name) => { + if (appvar.toolsLoaded[name] == false) { + app.plugins.load( + name, + () => { + app.loadPanel(name); + appvar.toolsLoaded[name] = true; + }, + false + ); + } else { + app.loadPanel(name); + } + }, + notice: (message, timeout=3000) => { + const e = document.createElement("div"); + e.className = "notice"; + e.innerHTML = message; + document.body.append(e); + setTimeout(() => { + e.style.transform = "translate(-50%, 1rem)"; + }, 300); + setTimeout(() => { + e.style.transform = "translate(-50%, -100%)"; + }, Number(timeout) - 500); + setTimeout(() => { + e.remove(); + }, timeout); + }, +}; diff --git a/modules/app.plugins.js b/modules/app.plugins.js new file mode 100644 index 0000000..5db8354 --- /dev/null +++ b/modules/app.plugins.js @@ -0,0 +1,56 @@ +app.plugins = { + remove: (name) => { + const data = JSON.parse(localStorage.getItem("plugins")) || []; + if (data.includes(name)) { + data.splice(data.indexOf(name), 1); + localStorage.setItem("plugins", JSON.stringify(data)); + delete appvar.panels[name]; + } else { + app.notice(`Either plugin '${name}' is not installed or doesn't exist!`); + } + }, + add: (name, code, avoidAddingTool = false) => { + if (Boolean(appvar.panels[name])) { + app.notice(`Plugin '${name}' is already installed!`); + return; + } + if (!avoidAddingTool) { + app.addTool(name); + } + appvar.panels[name] = code; + }, + addWindow: (name, details) => { + if (Boolean(appvar.windows[name])) { + app.notice(`Window '${name}' is already installed!`); + return; + } + appvar.windows[name] = details; + app.addTool(name, { plugin: false }); + }, + save: (name) => { + const data = JSON.parse(localStorage.getItem("plugins")) || []; + if (data.includes(name)) { + return; + } + data.push(name); + localStorage.setItem("plugins", JSON.stringify(data)); + }, + load: (name, code, save = true) => { + fetch(`${appvar.fetchSlug}plugins/${name}.js`) + .then((res) => res.text()) + .then((data) => { + eval(data); + if (save) { + app.plugins.save(name); + } + }) + .then((next) => { + if (code) { + code(); + } + }); + }, + getInstalled: () => { + return JSON.parse(localStorage.getItem("plugins")) || []; + }, +}; diff --git a/modules/app.themes.js b/modules/app.themes.js new file mode 100644 index 0000000..0bc6088 --- /dev/null +++ b/modules/app.themes.js @@ -0,0 +1,73 @@ +app.themes = { + use: (name) => { + app.themes.detect(name).then((data) => { + if (data == 'css') { + app.themes.useWithType(`${name}.c`); + } else if (data == 'toml') { + app.themes.useWithType(`${name}.t`); + } else { + app.notice(`Theme ${name} doesn't exist!`) + return undefined; + } + }) + }, + useWithType: (x) => { + if (x.endsWith(".t")) { + fetch(`${appvar.fetchSlug}themes/${x}oml`) + .then((res) => res.text()) + .then((data) => { + const e = document.createElement("style"); + e.innerHTML = toml.toCss(data); + document.head.append(e); + }); + } else { + const e = document.createElement("link"); + e.rel = "stylesheet"; + e.href = `${appvar.fetchSlug}themes/${x}ss`; + document.head.append(e); + } + }, + detect: (name) => { + return new Promise((resolve) => { + const checkResource = (url) => { + return new Promise((innerResolve) => { + const request = new XMLHttpRequest(); + request.open("GET", url); + request.onreadystatechange = function () { + if (request.readyState === 4) { + innerResolve(request.status === 200); + } + }; + request.send(); + }); + }; + + checkResource(`${appvar.fetchSlug}themes/${name}.toml`) + .then((tomlExists) => { + if (tomlExists) { + resolve("toml"); + } else { + return checkResource(`${appvar.fetchSlug}themes/${name}.css`); + } + }) + .then((cssExists) => { + if (cssExists) { + resolve("css"); + } else { + resolve(undefined); + } + }); + }); + }, + exists: (name) => { + return new Promise((resolve) => { + app.themes.detect(name) + .then((data) => { + resolve(data !== undefined); + }) + .catch(() => { + resolve(false); + }); + }); + } +} \ No newline at end of file diff --git a/modules/appvar.js b/modules/appvar.js new file mode 100644 index 0000000..97261b8 --- /dev/null +++ b/modules/appvar.js @@ -0,0 +1,38 @@ +let appvar = { + preview: document.querySelector(".app-preview"), + sidebar: document.querySelector(".app-sidebar"), + sidebarTitle: document.querySelector(".app-sidebar .title"), + sidebarContent: document.querySelector(".app-sidebar .content"), + tools: document.querySelector(".app-tools"), + toolsGrid: document.querySelector(".app-tools .grid"), + hiddenButtonStyles: getComputedStyle(document.querySelector("#hidden-button")), + styleMain: document.querySelector("#style-main"), + fetchSlug: String(window.location.href).includes("github.io") + ? `https://axorax.github.io/css-button-maker/` + : window.location.origin + "/", + codeHover: `#button:hover{}`, + codeStatic: `#button {}`, + codeFocus: `#button:focus {}`, + selector: "#button", + toolsLoaded: { + plugins: false, + templates: false, + store: false, + "import-export": false, + "code-editor": false, + settings: false, + hover: false, + focus: false, + }, + panels: { + guide: { + name: "Guide", + content: + "Hello there! :D

Welcome to css button maker (version 2.0)

On the bottom left, there is a wide area for you to find all the tools like guide, basic, etc.

On the right side, there is a tall area where things like input fields, text, etc are loaded.", + code: () => {}, + }, + }, + windows: {}, + database: {}, + urlParams: new URLSearchParams(window.location.search), +}; diff --git a/modules/button.js b/modules/button.js new file mode 100644 index 0000000..8be61c4 --- /dev/null +++ b/modules/button.js @@ -0,0 +1,161 @@ +const button = { + style: (css) => { + if (appvar.codeStatic.includes(/^(.*?):/.exec(css)[0])) { + const x = /^(.*?):/.exec(css)[0]; + const r = new RegExp(`${x}(.*?);`, "i"); + appvar.codeStatic = appvar.codeStatic.slice(0, -1).replace(r.exec(appvar.codeStatic)[0], "") + css + "}"; + } else { + appvar.codeStatic = appvar.codeStatic.slice(0, -1) + css + "}"; + } + appvar.styleMain.innerText = appvar.codeStatic + appvar.codeHover + appvar.codeFocus; + }, + styleHover: (css) => { + if (appvar.codeHover.includes(/^(.*?):/.exec(css)[0])) { + const x = /^(.*?):/.exec(css)[0]; + const r = new RegExp(`${x}(.*?);`, "i"); + appvar.codeHover = appvar.codeHover.slice(0, -1).replace(r.exec(appvar.codeHover)[0], "") + css + "}"; + } else { + appvar.codeHover = appvar.codeHover.slice(0, -1) + css + "}"; + } + appvar.styleMain.innerText = appvar.codeStatic + appvar.codeHover + appvar.codeFocus; + }, + styleFocus: (css) => { + if (appvar.codeFocus.includes(/^(.*?):/.exec(css)[0])) { + const x = /^(.*?):/.exec(css)[0]; + const r = new RegExp(`${x}(.*?);`, "i"); + appvar.codeFocus = appvar.codeFocus.slice(0, -1).replace(r.exec(appvar.codeFocus)[0], "") + css + "}"; + } else { + appvar.codeFocus = appvar.codeFocus.slice(0, -1) + css + "}"; + } + appvar.styleMain.innerText = appvar.codeStatic + appvar.codeHover + appvar.codeFocus; + }, + styleInput: (element, css) => { + const v = css + `: ${element.value};`; + if (appvar.codeStatic.includes(/^(.*?):/.exec(v)[0])) { + const x = /^(.*?):/.exec(v)[0]; + const r = new RegExp(`${x}(.*?);`, "i"); + appvar.codeStatic = appvar.codeStatic.slice(0, -1).replace(r.exec(appvar.codeStatic)[0], "") + v + "}"; + } else { + appvar.codeStatic = appvar.codeStatic.slice(0, -1) + v + "}"; + } + appvar.styleMain.innerText = appvar.codeStatic + appvar.codeHover + appvar.codeFocus; + }, + styleHoverInput: (element, css) => { + const v = css + `: ${element.value};`; + if (appvar.codeHover.includes(/^(.*?):/.exec(v)[0])) { + const x = /^(.*?):/.exec(v)[0]; + const r = new RegExp(`${x}(.*?);`, "i"); + appvar.codeHover = appvar.codeHover.slice(0, -1).replace(r.exec(appvar.codeHover)[0], "") + v + "}"; + } else { + appvar.codeHover = appvar.codeHover.slice(0, -1) + v + "}"; + } + appvar.styleMain.innerText = appvar.codeStatic + appvar.codeHover + appvar.codeFocus; + }, + styleFocusInput: (element, css) => { + const v = css + `: ${element.value};`; + if (appvar.codeFocus.includes(/^(.*?):/.exec(v)[0])) { + const x = /^(.*?):/.exec(v)[0]; + const r = new RegExp(`${x}(.*?);`, "i"); + appvar.codeFocus = appvar.codeFocus.slice(0, -1).replace(r.exec(appvar.codeFocus)[0], "") + v + "}"; + } else { + appvar.codeFocus = appvar.codeFocus.slice(0, -1) + v + "}"; + } + appvar.styleMain.innerText = appvar.codeStatic + appvar.codeHover + appvar.codeFocus; + }, + getStaticCode: () => { + return appvar.codeStatic.replace("#button", appvar.selector); + }, + text: (text) => { + document.querySelector("#button").innerText = text; + }, + getText: (text) => { + return document.querySelector("#button").innerText; + }, + getHoverCode: () => { + return appvar.codeHover.replace("#button", appvar.selector); + }, + getFocusCode: () => { + return appvar.codeFocus.replace("#button", appvar.selector); + }, + getCode: () => { + return appvar.styleMain.innerText; + // return button.getStaticCode() + button.getHoverCode() + button.getFocusCode(); + }, + getExportCode: () => { + return appvar.styleMain.innerText.replaceAll("#button", button.getSelector); + }, + getExportHtml: () => { + const s = button.getSelector(); + if (s.startsWith(".")) { + return String(document.querySelector(".preview-box").innerHTML).replace( + 'id="button"', + `class="${s.substring(1)}"` + ); + } else { + return String(document.querySelector(".preview-box").innerHTML).replace( + 'id="button"', + `id="${s.substring(1)}"` + ); + } + }, + getStyle: (name) => { + return getComputedStyle(document.querySelector("#button")).getPropertyValue(name); + }, + getComputedStyle: () => { + return getComputedStyle(document.querySelector("#button")); + }, + getHtml: () => { + return document.querySelector(".preview-box").innerHTML; + }, + getJs: () => { + return db.get("code-editor-js") || ""; + }, + getStaticCodeViaComputedStyleComparison: () => { + let comparedCode = "", + element = getComputedStyle(document.querySelector("#button")); + for (let i = 0; i < element.length; i++) { + if ( + !Boolean(appvar.hiddenButtonStyles.getPropertyValue(element[i]) == element.getPropertyValue(element[i])) + ) { + comparedCode += "" + element[i] + ":" + element.getPropertyValue(element[i]) + `;\n`; + } + } + return appvar.selector + " " + "{\n" + comparedCode + "}"; + }, + selector: (name) => { + appvar.selector = name; + }, + getSelector: (name) => { + return appvar.selector; + }, + loadTemplate: (name) => { + fetch(`${appvar.fetchSlug}/templates/${name}.json`) + .then((res) => res.json()) + .then((data) => { + button.loadJSON(data); + }); + }, + loadJSON: (json) => { + const normal = json.static ? "#button {" + json.static + "}" : "#button {}"; + const hover = json.hover ? "#button:hover {" + json.hover + "}" : "#button:hover {}"; + const focus = json.focus ? "#button:focus {" + json.focus + "}" : "#button:focus {}"; + appvar.codeStatic = normal; + appvar.codeHover = hover; + appvar.codeFocus = focus; + appvar.styleMain.innerText = normal + hover + focus; + }, + getStyleForRule: (rule, prop) => { + rule = "#button" + rule; + var sheets = document.styleSheets; + var slen = sheets.length; + for (var i = 0; i < slen; i++) { + var rules = document.styleSheets[i].cssRules; + var rlen = rules.length; + for (var j = 0; j < rlen; j++) { + if (rules[j].selectorText == rule) { + return rules[j].style[prop]; + } + } + } + }, +}; diff --git a/modules/db.js b/modules/db.js new file mode 100644 index 0000000..83896a1 --- /dev/null +++ b/modules/db.js @@ -0,0 +1,23 @@ +const db = { + add: (key, value) => { + appvar.database[key] = value; + }, + get: (key) => { + return appvar.database[key]; + }, + getElseStr: (key) => { + return appvar.database[key] ? appvar.database[key] : ""; + }, + getDictElseStr: (key, dict) => { + return appvar.database[key] ? appvar.database[key][dict] : ""; + }, + update: (key, value) => { + appvar.database[key] = value; + }, + remove: (key) => { + delete appvar.database[key]; + }, + clear: () => { + appvar.database = {}; + }, +}; diff --git a/modules/input.js b/modules/input.js new file mode 100644 index 0000000..7fd1fe4 --- /dev/null +++ b/modules/input.js @@ -0,0 +1,49 @@ +const input = { + value: (element, value) => { + if (document.querySelector(element) instanceof HTMLDivElement) { + document.querySelector(element).innerText = value; + } else { + document.querySelector(element).value = value; + } + }, + vfs: (element, style) => { + if (Array.isArray(element)) { + if (!Array.isArray(style)) { + return; + } + const c = button.getComputedStyle(); + for (let i = 0; i < element.length; i++) { + document.querySelector(element[i]).value = c.getPropertyValue(style[i]); + } + } else { + document.querySelector(element).value = button.getStyle(style); + } + }, + vfsh: (element, style) => { + if (Array.isArray(element)) { + if (!Array.isArray(style)) { + return; + } + for (let i = 0; i < element.length; i++) { + document.querySelector(element[i]).value = button.getStyleForRule(":hover", style[i]); + } + } else { + document.querySelector(element).value = button.getStyleForRule(":hover", style); + } + }, + vfsf: (element, style) => { + if (Array.isArray(element)) { + if (!Array.isArray(style)) { + return; + } + for (let i = 0; i < element.length; i++) { + document.querySelector(element[i]).value = button.getStyleForRule(":focus", style[i]); + } + } else { + document.querySelector(element).value = button.getStyleForRule(":focus", style); + } + }, + valueToStyle: (e, s) => { + input.vfs(e, s); + }, +}; diff --git a/modules/loader.js b/modules/loader.js new file mode 100644 index 0000000..e39f68f --- /dev/null +++ b/modules/loader.js @@ -0,0 +1,42 @@ +const loader = { + create: () => { + const e = document.createElement("div"); + e.className = "app-loader"; + e.innerHTML = `
+
A
+
+

+ Loading... +

+
+
`; + document.body.prepend(e); + }, + remove: () => { + const loader = document.querySelector(".app-loader"); + loader.style.cssText = "background:transparent;backdrop-filter:blur(0);"; + document.querySelector(".app-loader .bottom").remove(); + setTimeout(() => { + loader.style.scale = "0"; + }, 200); + setTimeout(() => { + loader.remove(); + }, 300); + }, + hide: () => { + const loader = document.querySelector(".app-loader"); + loader.style.cssText = "background:transparent;backdrop-filter:blur(0);"; + document.querySelector(".app-loader .bottom").remove(); + setTimeout(() => { + loader.style.scale = "0"; + }, 200); + setTimeout(() => { + loader.style.display = "none"; + }, 300); + }, + show: () => { + const loader = document.querySelector(".app-loader"); + loader.style.display = "flex"; + }, +}; diff --git a/modules/local.js b/modules/local.js new file mode 100644 index 0000000..c95eb42 --- /dev/null +++ b/modules/local.js @@ -0,0 +1,35 @@ +const local = { + get: (key) => { + return localStorage.getItem(key); + }, + remove: (key) => { + return localStorage.removeItem(key); + }, + add: (key, value) => { + return localStorage.setItem(key, value); + }, + clear: () => { + return localStorage.clear(); + }, + key: (index) => { + return localStorage.key(Number(index)); + }, + len: () => { + return localStorage.length; + }, + length: () => { + return localStorage.length; + }, + getAll: () => { + return { ...localStorage }; + }, + getAllKeys: () => { + return Object.keys({ ...localStorage }); + }, + getAllValues: () => { + return Object.values({ ...localStorage }); + }, + getPlugins: () => { + return JSON.parse(localStorage.getItem("plugins")) || []; + }, +}; diff --git a/modules/misc.js b/modules/misc.js new file mode 100644 index 0000000..b777038 --- /dev/null +++ b/modules/misc.js @@ -0,0 +1,93 @@ +// Canvas Trim -> https://www.npmjs.com/package/canvas-trim +function trimCanvas(c) { + var ctx = c.getContext("2d"), + copy = document.createElement("canvas").getContext("2d"), + pixels = ctx.getImageData(0, 0, c.width, c.height), + l = pixels.data.length, + i, + bound = { + top: null, + left: null, + right: null, + bottom: null, + }, + x, + y; + + for (i = 0; i < l; i += 4) { + if (pixels.data[i + 3] !== 0) { + x = (i / 4) % c.width; + y = ~~(i / 4 / c.width); + + if (bound.top === null) { + bound.top = y; + } + + if (bound.left === null) { + bound.left = x; + } else if (x < bound.left) { + bound.left = x; + } + + if (bound.right === null) { + bound.right = x; + } else if (bound.right < x) { + bound.right = x; + } + + if (bound.bottom === null) { + bound.bottom = y; + } else if (bound.bottom < y) { + bound.bottom = y; + } + } + } + + var trimHeight = bound.bottom - bound.top, + trimWidth = bound.right - bound.left, + trimmed = ctx.getImageData(bound.left, bound.top, trimWidth, trimHeight); + + copy.canvas.width = trimWidth; + copy.canvas.height = trimHeight; + copy.putImageData(trimmed, 0, 0); + + return copy.canvas; +} + +// TOML + +const toml = { + toCss: (toml) => { + const result = {}; + const lines = toml.split("\n"); + let currentSelector = null; + + for (let line of lines) { + line = line.trim(); + + if (line.startsWith("[") && line.endsWith("]")) { + currentSelector = line.slice(1, -1).trim(); + result[currentSelector] = {}; + } else if (currentSelector) { + const [property, value] = line.split("="); + if (property && value) { + result[currentSelector][property.trim()] = value.trim(); + } + } + } + + let css = ""; + + for (const [selector, properties] of Object.entries(result)) { + css += `${selector} {`; + + for (const [property, value] of Object.entries(properties)) { + css += `${property}: ${value};`; + } + + css += "}"; + } + + return css; + }, +}; diff --git a/modules/sidebar.js b/modules/sidebar.js new file mode 100644 index 0000000..6c1b72a --- /dev/null +++ b/modules/sidebar.js @@ -0,0 +1,178 @@ +const sidebar = { + create: (elementString, params = {}) => { + elementString = elementString.replaceAll("\n", "") + let elements; + if (elementString.includes('+')) { + elements = elementString.replace(/\>.*$/, "").split(">"); + } else { + elements = elementString.split(">"); + } + let parent = null; + + + for (let i = 0; i < elements.length; i++) { + const elementInfo = elements[i].trim().split("."); + const elementTagId = elementInfo[0].split("#"); + const elementTag = elementTagId[0].replace(/\+.*$/, "").trim(); + const elementId = elements[i].trim().includes("#") + ? elements[i].trim().match(/#(.*)$/)[1] + : undefined; + const elementClasses = elements[i].replaceAll(" ", '').replace(/\[.*?\]/g, "").replace(/\+.*$/, "").split("."); + + const element = document.createElement(elementTag.replace(/\[.*$/, "")); + + elementClasses.slice(1).map(cls => { + element.classList.add(String(cls).replace(/#.*$/, "")) + } + ); + + if (elementTag.includes("[")) { + const attrList = elements[i] + .split("#")[0] + .replace(/\+.*$/, "") + .replace(/(.*?)\[/, "") + .slice(0, -1) + .split(";;"); + attrList.forEach(attr => { + const a = attr.match(/([^=\s]+)(?=\s*=)/)[0], + t = attr.match(/="([^"]*)"/)[1]; + if (a === "text") { + element.innerText = t; + element.value = t; + } else { + if (t == "true") { + element[a] = true + } else if (t == "false") { + element[a] = false + } else if (a.includes("data-")) { + element.setAttribute(a, t); + } else { + element[a] = t; + } + } + }); + } + + if (elementId) { + element.id = elementId.replace(/\..*$/, "").replaceAll(" ",""); + } + + function siblingAppend(dict) { + if (elements[i].includes("+")) { + const siblings = elementString.split(">"); + let x = []; + const id = "sidebar-append-id-" + str.random(5); + siblings.forEach(e => { + x.push(e.split("+")) + }); + x[0].shift(); + for (let si = 0; si < x[0].length; si++) { + if (si == x[0].length - 1) { + sidebar.create(x[0][si] + "." + id, dict) + } else { + sidebar.create(x[0][si], dict) + } + } + if (x[1]) { + x[1].forEach(sibling => { + sidebar.create(sibling, { + appendAt: "."+id + }); + }) + } + } + } + + if (parent) { + parent.appendChild(element); + siblingAppend({ + appendAtElement: parent + }); + } else { + if (params["appendAt"]) { + document + .querySelector(".app-sidebar .content " + String(params["appendAt"])) + .append(element); + siblingAppend({ + appendAt: ".app-sidebar .content " + String(params["appendAt"]) + }); + } else if (params["appendAtElement"]) { + params["appendAtElement"].append(element); + siblingAppend({ + appendAtElement: params["appendAtElement"] + }); + } else { + document + .querySelector(".app-sidebar .content") + .appendChild(element); + siblingAppend({ + appendAt: "" + }); + } + } + + if (i === elements.length - 1) { + if (true) { + for (const [key, value] of Object.entries(params)) { + if (key === "style" && typeof value === "object") { + Object.assign(element.style, value); + } else { + if (key === "className") { + element.className = value; + } else { + element[key] = value; + } + } + } + } + } + + parent = element; + } + }, + createNTimes: (e, times=1, params={}) => { + for(let i=0; i < times; i++) { + const element = document.createElement(e); + Object.keys(params).forEach(key => { + element[key] = params[key]; + }); + document + .querySelector(".app-sidebar .content") + .appendChild(element); + } + }, + br: (t, p) => { + sidebar.createNTimes("br", t, p); + }, + hr: (t, p) => { + sidebar.createNTimes("hr", t, p); + }, + wait: (callback, targetElement=document.querySelector(".app-sidebar .content")) => { + targetElement = document.querySelector(".app-sidebar .content"); + + var hasElementAdded = false; + + var observer = new MutationObserver(function(mutationsList, observer) { + for (var mutation of mutationsList) { + if (mutation.type === "childList" && mutation.addedNodes.length > 0) { + var addedNodes = Array.from(mutation.addedNodes); + if (addedNodes.some(function(node) { + return node.parentElement === targetElement; + })) { + hasElementAdded = true; + break; + } + } + } + }); + + observer.observe(document.body, { childList: true, subtree: true }); + + setTimeout(function() { + observer.disconnect(); + if (!hasElementAdded) { + callback(); + } + }, 1000); + } +}; diff --git a/modules/str.js b/modules/str.js new file mode 100644 index 0000000..6b7f844 --- /dev/null +++ b/modules/str.js @@ -0,0 +1,18 @@ +const str = { + random: (a = 5) => { + let y = ""; + const z = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const x = z.length; + let c = 0; + while (c < a) { + y += z.charAt(Math.floor(Math.random() * x)); + c += 1; + } + return y; + }, + contains: { + number: (string) => { + return /\d/.test(string); + }, + }, +}; diff --git a/modules/user.js b/modules/user.js new file mode 100644 index 0000000..8ee78ab --- /dev/null +++ b/modules/user.js @@ -0,0 +1,10 @@ +const user = { + usingTouchableDevice: () => { + try { + document.createEvent("TouchEvent"); + return true; + } catch (e) { + return false; + } + }, +}; diff --git a/modules/windrag.js b/modules/windrag.js new file mode 100644 index 0000000..916597d --- /dev/null +++ b/modules/windrag.js @@ -0,0 +1,80 @@ +const windrag = { + create: (element, activator, options = { position: "absolute", css: "" }) => { + const id = str.random(3); + element = document.querySelector(element); + activator = document.querySelector(activator); + element.classList.add(`drag-element-${id}`); + activator.classList.add(`drag-activator-${id}`); + + if (options.css) { + element.style.cssText += options.css; + } + let x = 0, + y = 0, + allowMoving = false, + events = { + mouse: { + down: "mousedown", + move: "mousemove", + up: "mouseup", + }, + touch: { + down: "touchstart", + move: "touchmove", + up: "touchend", + }, + }, + deviceType = user.usingTouchableDevice() ? "touch" : "mouse", + deviceTouch = user.usingTouchableDevice() ? true : false; + activator.addEventListener(events[deviceType].down, (e) => { + e.preventDefault(); + x = !deviceTouch ? e.clientX : e.touches[0].clientX; + y = !deviceTouch ? e.clientY : e.touches[0].clientY; + allowMoving = true; + }); + element.style.position = options.position; + activator.addEventListener(events[deviceType].move, (e) => { + if (allowMoving) { + e.preventDefault(); + let newX = !deviceTouch ? e.clientX : e.touches[0].clientX; + let newY = !deviceTouch ? e.clientY : e.touches[0].clientY; + const t = element.offsetTop - (y - newY), + l = element.offsetLeft - (x - newX), + leftLimit = element.offsetWidth / 2, + rightLimit = document.body.clientWidth - leftLimit, + topLimit = element.offsetHeight / 2, + bottomLimit = document.body.clientHeight - topLimit; + + if (t > bottomLimit) { + element.style.top = bottomLimit + "px"; + } else if (t < topLimit) { + element.style.top = topLimit + "px"; + } else { + element.style.top = t + "px"; + } + + if (l > rightLimit) { + element.style.left = rightLimit + "px"; + } else if (l < leftLimit) { + element.style.left = leftLimit + "px"; + } else { + element.style.left = l + "px"; + } + + x = newX; + y = newY; + } + }); + activator.addEventListener("mouseleave", () => { + allowMoving = false; + }); + activator.addEventListener(events[deviceType].up, () => { + allowMoving = false; + }); + return { + id: id, + elementId: `drag-element-${id}`, + activatorId: `drag-activator-${id}`, + }; + }, +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..24fee36 --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "css-button-maker", + "version": "1.0.0", + "description": "Create stunning buttons in just a few clicks!", + "main": "server.js", + "repository": { + "type": "git", + "url": "git+https://github.com/Axorax/css-button-maker.git" + }, + "keywords": [ + "css", + "css-buttons", + "button", + "css-button-maker" + ], + "author": "Axorax", + "license": "MIT", + "bugs": { + "url": "https://github.com/Axorax/css-button-maker/issues" + }, + "homepage": "https://github.com/Axorax/css-button-maker#readme", + "devDependencies": { + "prettier": "^2.8.7" + } +} diff --git a/plugins/calculator.js b/plugins/calculator.js new file mode 100644 index 0000000..0b2c49b --- /dev/null +++ b/plugins/calculator.js @@ -0,0 +1,7 @@ +app.plugins.addWindow("calculator", { + title: "Calculator", + body: `

My cool calculator

`, + code: () => { + console.log("hi"); + }, +}); diff --git a/plugins/code-editor.js b/plugins/code-editor.js new file mode 100644 index 0000000..2741d68 --- /dev/null +++ b/plugins/code-editor.js @@ -0,0 +1,33 @@ +appvar.panels["code-editor"] = { + name: "Code Editor", + content: ` +
+ + +

+
+ +
+

+
+ +
+

+ + `, + code: () => { + input.value("#code-editor-css", button.getCode()); + input.value("#code-editor-js", db.get("code-editor-js") || ""); + document.querySelector("#code-editor-html").addEventListener("keyup", () => { + document.querySelector(".preview-box").innerHTML = document.querySelector("#code-editor-html").value; + }); + document.querySelector("#code-editor-css").addEventListener("keydown", () => { + styleMain.innerText = document.querySelector("#code-editor-css").textContent; + }); + document.querySelector("#code-editor-js-run").addEventListener("click", () => { + db.add("code-editor-js", document.querySelector("#code-editor-js").innerText); + eval(String(document.querySelector("#code-editor-js").innerText)); + }); + }, +}; diff --git a/plugins/focus.js b/plugins/focus.js new file mode 100644 index 0000000..2af4693 --- /dev/null +++ b/plugins/focus.js @@ -0,0 +1,203 @@ +app.plugins.add( + "focus", + { + name: "Button Focus Styling", + content: ` +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+ + `, + code: () => { + input.vfsf( + [ + "#focus-margin", + "#focus-padding", + "#focus-box-sizing", + "#focus-width", + "#focus-min-width", + "#focus-max-width", + "#focus-height", + "#focus-min-height", + "#focus-max-height", + "#focus-color", + "#focus-font-size", + "#focus-font-family", + "#focus-font-kerning", + "#focus-font-weight", + "#focus-font-style", + "#focus-line-height", + "#focus-text-align", + "#focus-text-decoration", + "#focus-border", + "#focus-border-radius", + "#focus-outline", + "#focus-outline-offset", + "#focus-background", + "#focus-box-shadow", + ], + [ + "margin", + "padding", + "box-sizing", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "color", + "font-size", + "font-family", + "font-kerning", + "font-weight", + "font-style", + "line-height", + "text-align", + "text-decoration", + "border", + "border-radius", + "outline", + "outline-offset", + "background", + "box-shadow", + ] + ); + }, + }, + true +); diff --git a/plugins/hover.js b/plugins/hover.js new file mode 100644 index 0000000..f337da5 --- /dev/null +++ b/plugins/hover.js @@ -0,0 +1,203 @@ +app.plugins.add( + "hover", + { + name: "Button Hover Styling", + content: ` +
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+ + `, + code: () => { + input.vfsh( + [ + "#hover-margin", + "#hover-padding", + "#hover-box-sizing", + "#hover-width", + "#hover-min-width", + "#hover-max-width", + "#hover-height", + "#hover-min-height", + "#hover-max-height", + "#hover-color", + "#hover-font-size", + "#hover-font-family", + "#hover-font-kerning", + "#hover-font-weight", + "#hover-font-style", + "#hover-line-height", + "#hover-text-align", + "#hover-text-decoration", + "#hover-border", + "#hover-border-radius", + "#hover-outline", + "#hover-outline-offset", + "#hover-background", + "#hover-box-shadow", + ], + [ + "margin", + "padding", + "box-sizing", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "color", + "font-size", + "font-family", + "font-kerning", + "font-weight", + "font-style", + "line-height", + "text-align", + "text-decoration", + "border", + "border-radius", + "outline", + "outline-offset", + "background", + "box-shadow", + ] + ); + }, + }, + true +); diff --git a/plugins/import-export.js b/plugins/import-export.js new file mode 100644 index 0000000..47f475c --- /dev/null +++ b/plugins/import-export.js @@ -0,0 +1,133 @@ +appvar.panels["import-export"] = { + name: `Import - Export`, + content: ``, + code: () => { + sidebar.create(`div.hello > h1[text="awd"] + p[text="awdawfawf"]`) + sidebar.create('h3[text="Export"].title-s1 + hr[style="margin-bottom: 2.3rem"] + div.input-s1 > label[text="HTML Code"] + div[contentEditable="true";;data-placeholder="Click on the \'Generate code\' button!"]#export-code-html'); + sidebar.create('br + div.input-s1 > label[text="CSS Code"] + div[contentEditable="true";;data-placeholder="Click on the \'Generate code\' button!"]#export-code-css'); + sidebar.create('br + div.input-s1 > label[text="JavaScript Code"] + div[contentEditable="true";;data-placeholder="Click on the \'Generate code\' button!"]#export-code-js'); + sidebar.create(`br + button[text="Generate code"].s-1.full#export-code-gen + div[style="overflow:auto;"].box.fcc#import-export-svg-preview + + a[download="cbm"]#import-export-download-svg > button[text="Download as svg (foreignObject)"].s-1.full`); + sidebar.br(2); + sidebar.create(`a[download="cbm"]#import-export-download-png > button[text="Download as png"].s-1.full`) + sidebar.br(2); + sidebar.create(`a[text="Visit blob URL";;target="_blank"]#import-export-blob-url`) + sidebar.hr(); + sidebar.create(`h3[style="margin:0;font-weight:400;padding:0;";;text="Import Code"] + hr[style="margin-bottom: 2.3rem;"] + + div.input-s1 > label[text="Template JSON"] + textarea[type="text";;placeholder="Paste JSON code here and click on 'Load JSON'"]#import-code-json-input`); + sidebar.br(); + sidebar.create(`button[text="Load JSON"].s-1.full`, { + onclick: () => { + button.loadJSON(JSON.parse(document.querySelector('#import-code-json-input').value)) + } + }); + + sidebar.wait(() => { + document.querySelector("#export-code-gen").addEventListener("click", () => { + document.querySelector("#export-code-css").innerHTML = button.getExportCode(); + document.querySelector("#export-code-js").innerText = db.get("code-editor-js") || ""; + document.querySelector("#export-code-html").innerText = button.getExportHtml(); + }); + + document.querySelector("#import-export-svg-preview").innerHTML = ` +
+ + + + + ${button.getHtml()} + + + +
`; + + var svg = document.getElementById("import-export-svg"); + var serializer = new XMLSerializer(); + var source = serializer.serializeToString(svg); + if (!source.match(/^]+xmlns="http\:\/\/www\.w3\.org\/2000\/svg"/)) { + source = source.replace(/^]+"http\:\/\/www\.w3\.org\/1999\/xlink"/)) { + source = source.replace(/^`; + var canvas = document.querySelector("#import-export-canvas"); + var context = canvas.getContext("2d"); + + var image = new Image(); + + image.src = url; + + image.onload = function () { + context.imageSmoothingEnabled = false; + context.drawImage( + image, + 0, + 0, + image.width * window.devicePixelRatio, + image.height * window.devicePixelRatio + ); + const t = trimCanvas(canvas); + document.querySelector("#import-export-download-png").href = t.toDataURL("image/png"); + t.toBlob( + function (blob) { + document.querySelector("#import-export-blob-url").href = URL.createObjectURL(blob); + }, + "image/jpeg", + 0.75 + ); + }; + }) + + + }, +}; diff --git a/plugins/local-storage.js b/plugins/local-storage.js new file mode 100644 index 0000000..68cd9a8 --- /dev/null +++ b/plugins/local-storage.js @@ -0,0 +1,82 @@ +app.plugins.add("local-storage", { + name: "Local Storage 📂", + content: ` +
+

Get item

+
+ + +
+
+ +
+ +
+

Delete item

+
+ + +
+
+ +
+ +
+

Add or update item

+ + + +
+ +
+ +

All data

+ + + `, + code: () => { + document.querySelector("#local-storage-all").addEventListener("click", () => { + const items = local.getAll(); + let table = ``; + Object.keys(items).forEach((key) => { + table += ``; + }); + const e = document.createElement("div"); + e.classList.add("table"); + e.innerHTML = table + "
KeyValue
${key}${items[key]}
"; + document.querySelector(".app-sidebar .content").append(e); + document.querySelector("#local-storage-all").remove(); + }); + document.querySelector("#local-storage-get-b").addEventListener("click", () => { + const key = document.querySelector("#local-storage-get-i").value, + value = local.get(key); + if (value == null) { + app.notice(`The item with key "${key}" doesn't exist!`); + return; + } + const e = document.createElement("div"); + e.className = "box"; + e.innerHTML = `Key: ${key}
+ Value: ${value}`; + document.querySelector("#local-storage-get").append(e); + }); + document.querySelector("#local-storage-del-b").addEventListener("click", () => { + const key = document.querySelector("#local-storage-del-i").value; + if (local.get(key) == null) { + app.notice(`The item with key "${key}" doesn't exist!`); + return; + } + const e = document.createElement("div"); + e.className = "box"; + e.innerHTML = `Item with key '${key}' deleted!`; + document.querySelector("#local-storage-delete").append(e); + local.remove(key); + }); + document.querySelector("#local-storage-a-b").addEventListener("click", () => { + const key = document.querySelector("#local-storage-a-k").value; + const value = document.querySelector("#local-storage-a-v").value; + local.add(key, value); + app.notice("Item has been created!"); + }); + }, +}); diff --git a/plugins/plugin-dev.js b/plugins/plugin-dev.js new file mode 100644 index 0000000..e1b0120 --- /dev/null +++ b/plugins/plugin-dev.js @@ -0,0 +1,42 @@ +app.plugins.add("plugin-dev", { + name: `<Plugin Development Kit/>`, + content: ` +
+ + +

+
+ + +

+
+ + +

+ + + `, + code: () => { + input.value("#plugin-dev-html", db.getDictElseStr("plugin-dev-app", "content")); + input.value("#plugin-dev-js", db.getDictElseStr("plugin-dev-app", "code")); + input.value("#plugin-dev-name", db.getDictElseStr("plugin-dev-app", "name")); + + document.querySelector("#plugin-dev-test-live").addEventListener("click", () => { + const name = document.querySelector("#plugin-dev-name").value, + content = document.querySelector("#plugin-dev-html").value, + code = document.querySelector("#plugin-dev-js").value; + db.add("plugin-dev-app", { + name: name, + content: content, + code: code, + }); + app.plugins.add(name, { + name: name, + content: content, + code: () => { + eval(db.get("plugin-dev-app").code); + }, + }); + }); + }, +}); diff --git a/plugins/plugins.js b/plugins/plugins.js new file mode 100644 index 0000000..29f7784 --- /dev/null +++ b/plugins/plugins.js @@ -0,0 +1,38 @@ +appvar.panels["plugins"] = { + name: "Plugin Store - Plug and play!", + content: `
`, + style: ` + .plugins-item { + display: flex; + align-items: center; + } + .plugins-item span { + width: 5px; + height: 5px; + border-radius: 50%; + display: block; + margin: 0 0.6rem 0 0.2rem; + } + `, + code: () => { + if (appvar.toolsLoaded["plugins"]) { + document.querySelector(".app-sidebar .content .wrapper").innerHTML = db.get("pluginStoreContent"); + return; + } + fetch(`${appvar.fetchSlug}data/plugin-store.json`) + .then((res) => res.json()) + .then((data) => { + data.forEach((item) => { + document.querySelector( + ".app-sidebar .content .wrapper" + ).innerHTML += ``; + }); + }) + .then((data) => { + db.add("pluginStoreContent", document.querySelector(".app-sidebar .content .wrapper").innerHTML); + }); + }, +}; diff --git a/plugins/settings.js b/plugins/settings.js new file mode 100644 index 0000000..64b01dd --- /dev/null +++ b/plugins/settings.js @@ -0,0 +1,30 @@ +appvar.panels["settings"] = { + name: "Settings", + content: ` +

Manage Plugins

+ +
+ +
+ +
+

Storage (Danger zone!)

+
+ + +

+ + `, + code: () => { + const pluginsWrapper = document.querySelector("#settings-manage-plugins"); + const data = local.getPlugins(); + if (data.length == 0) { + pluginsWrapper.style.cssText = "margin-bottom:6rem;"; + pluginsWrapper.innerHTML += `No plugins installed! Install a plugin`; + } else { + data.forEach((item) => { + pluginsWrapper.innerHTML += ``; + }); + } + }, +}; diff --git a/plugins/static.js b/plugins/static.js new file mode 100644 index 0000000..99fddc2 --- /dev/null +++ b/plugins/static.js @@ -0,0 +1,214 @@ +app.plugins.add( + "static", + { + name: "Button Static Styling", + content: ` +
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+ + `, + code: () => { + input.vfs( + [ + "#static-margin", + "#static-padding", + "#static-box-sizing", + "#static-width", + "#static-min-width", + "#static-max-width", + "#static-height", + "#static-min-height", + "#static-max-height", + "#static-color", + "#static-font-size", + "#static-font-family", + "#static-font-kerning", + "#static-font-weight", + "#static-font-style", + "#static-line-height", + "#static-text-align", + "#static-text-decoration", + "#static-border", + "#static-border-radius", + "#static-outline", + "#static-outline-offset", + "#static-background", + "#static-box-shadow", + ], + [ + "margin", + "padding", + "box-sizing", + "width", + "min-width", + "max-width", + "height", + "min-height", + "max-height", + "color", + "font-size", + "font-family", + "font-kerning", + "font-weight", + "font-style", + "line-height", + "text-align", + "text-decoration", + "border", + "border-radius", + "outline", + "outline-offset", + "background", + "box-shadow", + ] + ); + input.value("#static-text", button.getText()); + input.value("#static-selector", button.getSelector()); + }, + }, + true +); diff --git a/plugins/store.js b/plugins/store.js new file mode 100644 index 0000000..0f9ff2f --- /dev/null +++ b/plugins/store.js @@ -0,0 +1,61 @@ +appvar.panels["store"] = { + name: "Store 🏬", + content: ` +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ `, + style: ` + .container{ + display: grid; + grid-template-columns: repeat(6, 1fr); + grid-gap: 1rem; + } + + .tile img{ + width: 100%; + height: 100%; + object-fit: cover; + } + + .tile:nth-child(1){ + grid-column: span 4; + grid-row: span 2; + } + + .tile:nth-child(2), + .tile:nth-child(3){ + grid-column: span 2; + } + + .tile:nth-child(4), + .tile:nth-child(5){ + grid-column: span 3; + } + + @media screen and (max-width: 650px){ + .container{ + display: block; + } + .tile{ + margin-bottom: 1rem; + } + } + `, + code: () => { + }, +}; diff --git a/plugins/templates.js b/plugins/templates.js new file mode 100644 index 0000000..a9db429 --- /dev/null +++ b/plugins/templates.js @@ -0,0 +1,105 @@ +appvar.panels["templates"] = { + name: "Template Store", + content: `
`, + style: ` + .templates-plugin-wrapper .item { + border: 1px solid #3d3d3d; + border-radius: 6px; + min-width: 7rem; + text-align: center; + transition: 200ms ease; + overflow: hidden; + } + .templates-plugin-wrapper button { + background: transparent; + border: none; + outline: none; + cursor: pointer; + } + .templates-plugin-wrapper button p { + font-size: 11.4px !important; + padding: .5rem; + text-align: center; + min-width: 7rem; + border-top: 1px solid #3d3d3d; + } + + .templates-plugin-wrapper .item > div { + margin: 0.8rem; + width: calc(100% - 1.6rem); + border-radius: 5px; + border: 1px solid #3d3d3d; + height: 1.7rem; + position: relative; + box-shadow: 0 0 10px #0000006d; + + span:nth-child(1) { + content: ''; + position: absolute; + top: 50%; + left: 60%; + background: red; + height: 5px; + transform: translate(-50%, -50%); + width: calc(100% - 40%); + border-radius: 3rem; + } + } + + .templates-plugin-wrapper .item > div span:nth-child(1) { + content: ''; + position: absolute; + top: 50%; + left: 60%; + height: 5px; + transform: translate(-50%, -50%); + width: calc(100% - 40%); + border-radius: 3rem; + } + + .templates-plugin-wrapper .item > div span:nth-child(2) { + content: ''; + position: absolute; + top: 50%; + left: 15.5%; + border-radius: 50%; + height: 5px; + transform: translate(-50%, -50%); + width: 5px; + } + .templates-plugin-wrapper .item:hover p { + background: #537FE70f; + } + `, + code: () => { + if (appvar.toolsLoaded["templates"]) { + document.querySelector(".templates-plugin-wrapper").innerHTML = db.get("templateStoreContent"); + return; + } + function templatesHex() { + return '#' + Math.random().toString(16).slice(2, 8).padStart(6, '0'); + } + fetch(`${appvar.fetchSlug}data/template-store.json`) + .then((res) => res.json()) + .then((data) => { + data.forEach((item) => { + document.querySelector( + ".templates-plugin-wrapper" + ).innerHTML += ` + + `; + }); + }) + .then((data) => { + db.add("templateStoreContent", document.querySelector(".templates-plugin-wrapper").innerHTML); + }); + }, +}; diff --git a/plugins/todo-list.js b/plugins/todo-list.js new file mode 100644 index 0000000..98909d8 --- /dev/null +++ b/plugins/todo-list.js @@ -0,0 +1,30 @@ +app.plugins.add("todo-list", { + name: "To-do List!", + content: ``, + style: ` + #todo-list > div { + display:flex;flex-wrap:wrap;word-break:break-all; + align-items:center; + padding: .6rem; + gap:.5rem; + width:100%; + }; + `, + code: () => { + sidebar.create("div.input-f1 > input.s-2#todo-list-new", { + placeholder: "New task" + }); + sidebar.create("button.s-1", { + innerText: "Create", + appendAt: ".input-f1", + onclick: () => { + document.querySelector("#todo-list").innerHTML += ` +
+ +

${document.querySelector("#todo-list-new").value}

+
`; + } + }); + sidebar.create("div#todo-list"); + }, +}); diff --git a/server.js b/server.js new file mode 100644 index 0000000..33756ed --- /dev/null +++ b/server.js @@ -0,0 +1,50 @@ +const http = require("http"); +const fs = require("fs"); +const path = require("path"); +const PORT = 3000; + +const server = http.createServer((req, res) => { + const filePath = path.join(__dirname, req.url); + + fs.readFile(filePath, (err, content) => { + if (err) { + res.writeHead(404, { "Content-Type": "text/json" }); + res.end( + JSON.stringify( + { + error: true, + message: "File not found!", + }, + null, + 4 + ) + ); + } else { + res.writeHead(200, { "Content-Type": getContentType(filePath) }); + res.end(content); + } + }); +}); + +server.listen(PORT, () => { + console.log(`Visit local website at http://localhost:${PORT}/index.html`); +}); + +function getContentType(filePath) { + const extname = path.extname(filePath); + switch (extname) { + case ".html": + return "text/html"; + case ".css": + return "text/css"; + case ".js": + return "text/javascript"; + case ".png": + return "image/png"; + case ".jpg": + case ".jpeg": + return "image/jpeg"; + default: + return "application/octet-stream"; + } +} diff --git a/templates/default-browser.json b/templates/default-browser.json new file mode 100644 index 0000000..c1c9044 --- /dev/null +++ b/templates/default-browser.json @@ -0,0 +1,3 @@ +{ + "static": "" +} diff --git a/templates/gradient.json b/templates/gradient.json new file mode 100644 index 0000000..53c1d47 --- /dev/null +++ b/templates/gradient.json @@ -0,0 +1,3 @@ +{ + "static": "color: #fff; border: none; cursor: pointer; background: linear-gradient(225deg, #FF3CAC 0%, #784BA0 50%, #2B86C5 100%); font-size: 17px; padding: 8px 15px; border-radius: 5px; " +} diff --git a/themes/daboon.css b/themes/daboon.css new file mode 100644 index 0000000..b8dae39 --- /dev/null +++ b/themes/daboon.css @@ -0,0 +1,3 @@ +.app-sidebar .title { + background: #3744ff; +} diff --git a/themes/template.toml b/themes/template.toml new file mode 100644 index 0000000..8874cd5 --- /dev/null +++ b/themes/template.toml @@ -0,0 +1,8 @@ +[.app-sidebar] + +background = purple + +[.app-tools] + +color = red +background = yellow \ No newline at end of file diff --git a/toml-to-css.html b/toml-to-css.html new file mode 100644 index 0000000..a01d2f8 --- /dev/null +++ b/toml-to-css.html @@ -0,0 +1,31 @@ + + + + + + + Theme template to CSS + + + + +

Theme template to CSS

+ +
+
+ +
+
+ + +
+
+

+            
+
+ +