diff --git a/.gitignore b/.gitignore index ceaea36..3715fa6 100644 --- a/.gitignore +++ b/.gitignore @@ -130,3 +130,4 @@ dist .yarn/install-state.gz .pnp.* +/.idea/git_toolbox_blame.xml diff --git a/.idea/Webshop.iml b/.idea/Webshop.iml index d6ebd48..533a2cb 100644 --- a/.idea/Webshop.iml +++ b/.idea/Webshop.iml @@ -5,5 +5,6 @@ + \ No newline at end of file diff --git a/.idea/dataSources.xml b/.idea/dataSources.xml new file mode 100644 index 0000000..63a12b6 --- /dev/null +++ b/.idea/dataSources.xml @@ -0,0 +1,18 @@ + + + + + postgresql + true + org.postgresql.Driver + jdbc:postgresql://localhost:5432/postgres + + + + + + + $ProjectFileDir$ + + + \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 0000000..02b915b --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 0000000..9da3653 --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..a8b32a1 --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/src/01_counter/styles.css b/.idea/src/01_counter/styles.css deleted file mode 100644 index 84e807e..0000000 --- a/.idea/src/01_counter/styles.css +++ /dev/null @@ -1,190 +0,0 @@ -/* -=============== -Fonts -=============== -*/ -@import url("https://fonts.googleapis.com/css?family=Open+Sans|Roboto:400,700&display=swap"); - -/* -=============== -Variables -=============== -*/ - -:root { - /* dark shades of primary color*/ - --clr-primary-1: hsl(205, 86%, 17%); - --clr-primary-2: hsl(205, 77%, 27%); - --clr-primary-3: hsl(205, 72%, 37%); - --clr-primary-4: hsl(205, 63%, 48%); - /* primary/main color */ - --clr-primary-5: hsl(205, 78%, 60%); - /* lighter shades of primary color */ - --clr-primary-6: hsl(205, 89%, 70%); - --clr-primary-7: hsl(205, 90%, 76%); - --clr-primary-8: hsl(205, 86%, 81%); - --clr-primary-9: hsl(205, 90%, 88%); - --clr-primary-10: hsl(205, 100%, 96%); - /* darkest grey - used for headings */ - --clr-grey-1: hsl(209, 61%, 16%); - --clr-grey-2: hsl(211, 39%, 23%); - --clr-grey-3: hsl(209, 34%, 30%); - --clr-grey-4: hsl(209, 28%, 39%); - /* grey used for paragraphs */ - --clr-grey-5: hsl(210, 22%, 49%); - --clr-grey-6: hsl(209, 23%, 60%); - --clr-grey-7: hsl(211, 27%, 70%); - --clr-grey-8: hsl(210, 31%, 80%); - --clr-grey-9: hsl(212, 33%, 89%); - --clr-grey-10: hsl(210, 36%, 96%); - --clr-white: #fff; - --clr-red-dark: hsl(360, 67%, 44%); - --clr-red-light: hsl(360, 71%, 66%); - --clr-green-dark: hsl(125, 67%, 44%); - --clr-green-light: hsl(125, 71%, 66%); - --clr-black: #222; - --ff-primary: "Roboto", sans-serif; - --ff-secondary: "Open Sans", sans-serif; - --transition: all 0.3s linear; - --spacing: 0.1rem; - --radius: 0.25rem; - --light-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); - --dark-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); - --max-width: 1170px; - --fixed-width: 620px; -} -/* -=============== -Global Styles -=============== -*/ - -*, -::after, -::before { - margin: 0; - padding: 0; - box-sizing: border-box; -} -body { - font-family: var(--ff-secondary); - background: var(--clr-grey-10); - color: var(--clr-grey-1); - line-height: 1.5; - font-size: 0.875rem; -} -ul { - list-style-type: none; -} -a { - text-decoration: none; -} -h1, -h2, -h3, -h4 { - letter-spacing: var(--spacing); - text-transform: capitalize; - line-height: 1.25; - margin-bottom: 0.75rem; - font-family: var(--ff-primary); -} -h1 { - font-size: 3rem; -} -h2 { - font-size: 2rem; -} -h3 { - font-size: 1.25rem; -} -h4 { - font-size: 0.875rem; -} -p { - margin-bottom: 1.25rem; - color: var(--clr-grey-5); -} -@media screen and (min-width: 800px) { - h1 { - font-size: 4rem; - } - h2 { - font-size: 2.5rem; - } - h3 { - font-size: 1.75rem; - } - h4 { - font-size: 1rem; - } - body { - font-size: 1rem; - } - h1, - h2, - h3, - h4 { - line-height: 1; - } -} -/* global classes */ - -/* section */ -.section { - padding: 5rem 0; -} - -.section-center { - width: 90vw; - margin: 0 auto; - max-width: 1170px; -} -@media screen and (min-width: 992px) { - .section-center { - width: 95vw; - } -} -main { - min-height: 100vh; - display: grid; - place-items: center; -} - -/* -=============== -Counter -=============== -*/ - -main { - min-height: 100vh; - display: grid; - place-items: center; -} -.container { - text-align: center; -} -#value { - font-size: 6rem; - font-weight: bold; -} -.btn { - text-transform: uppercase; - background: transparent; - color: var(--clr-black); - padding: 0.375rem 0.75rem; - letter-spacing: var(--spacing); - display: inline-block; - transition: var(--transition); - font-size: 0.875rem; - border: 2px solid var(--clr-black); - cursor: pointer; - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); - border-radius: var(--radius); - margin: 0.5rem; -} -.btn:hover { - color: var(--clr-white); - background: var(--clr-black); -} \ No newline at end of file diff --git a/sql_scripts/createDB.sql b/sql_scripts/createDB.sql new file mode 100644 index 0000000..c5b57e8 --- /dev/null +++ b/sql_scripts/createDB.sql @@ -0,0 +1,26 @@ +CREATE + DATABASE autohaendler; +\c +autohaendler + +CREATE TYPE color; +CREATE TYPE make; +CREATE TYPE model; +CREATE TYPE engine; +CREATE TYPE price; +CREATE TYPE doors; + +CREATE + EXTENSION IF NOT EXISTS "uuid-ossp"; + +CREATE TABLE autohaendler_stock +( + color TEXT NOT NULL, + make TEXT NOT NULL, + model TEXT NOT NULL, + engine TEXT NOT NULL, + price TEXT NOT NULL, + doors TEXT NOT NULL, +); + +INSERT INTO autohaendler_stock (color, make, model, engine, price, doors); diff --git a/sql_scripts/rollbackDB.sql b/sql_scripts/rollbackDB.sql new file mode 100644 index 0000000..07aa47c --- /dev/null +++ b/sql_scripts/rollbackDB.sql @@ -0,0 +1,17 @@ +\c +autohaendler + +DROP TABLE autohaendler; + +DROP TYPE IF EXISTS color; +DROP TYPE IF EXISTS make; +DROP TYPE IF EXISTS model; +DROP TYPE IF EXISTS engine; +DROP TYPE IF EXISTS price; +DROP TYPE IF EXISTS doors; + +\c +postgres + +DROP +DATABASE autohaendler; diff --git a/src/backend/example/database_calls/getDatabaseTable.php b/src/backend/example/database_calls/getDatabaseTable.php new file mode 100644 index 0000000..e8323de --- /dev/null +++ b/src/backend/example/database_calls/getDatabaseTable.php @@ -0,0 +1,38 @@ +set_charset("utf8mb4"); +// close connection on error +if ($conn->connect_error) { + die("Connection failed: " . $conn->connect_error); +} + +// prepare SQL statement and execute on database +$sql = "SELECT * FROM table"; +// get data from database +$result = $conn->query($sql); +$conn->close(); + +// check if result is empty & has more than "0" rows +if (!empty($result) && (int)$result->num_rows > 0) { + while ($row = $result->fetch_assoc()) { + $sqlArray[] = $row; + } + echo json_encode($sqlArray); +} else { + echo "0 results"; +} +exit(); diff --git a/src/backend/example/database_calls/startAjax.js b/src/backend/example/database_calls/startAjax.js new file mode 100644 index 0000000..6d68ea2 --- /dev/null +++ b/src/backend/example/database_calls/startAjax.js @@ -0,0 +1,17 @@ +$(document).ready(function () { + + // ajax function to call PHP script on webserver + $.ajax({ + type: "POST", // use what "type" is necessary, POST is most common + url: "getDatabaseTable.php", // path to .php file that will be executed + dataType: "json", // return type of the PHP script + success: function (data) { + console.log("successfully called PHP file!") + console.log(data) + // implement logic to write json into HTML here + }, + error: function () { + console.log("failed to call PHP file!") + } + }); +}) \ No newline at end of file diff --git a/.idea/src/01_counter/app.js b/src/frontend/example/01_counter/app.js similarity index 89% rename from .idea/src/01_counter/app.js rename to src/frontend/example/01_counter/app.js index b609b85..44f3afb 100644 --- a/.idea/src/01_counter/app.js +++ b/src/frontend/example/01_counter/app.js @@ -3,9 +3,9 @@ let count = 0; // select value and buttons const value = document.querySelector("#value"); -const btns = document.querySelectorAll(".btn"); +const buttons = document.querySelectorAll(".btn"); -btns.forEach(function (btn) { +buttons.forEach(function (btn) { btn.addEventListener("click", function (e) { const styles = e.currentTarget.classList; if (styles.contains("decrease")) { diff --git a/.idea/src/01_counter/index.html b/src/frontend/example/01_counter/index.html similarity index 91% rename from .idea/src/01_counter/index.html rename to src/frontend/example/01_counter/index.html index c43c7f4..b1e6e92 100644 --- a/.idea/src/01_counter/index.html +++ b/src/frontend/example/01_counter/index.html @@ -7,7 +7,7 @@ Counter - +
diff --git a/src/frontend/example/01_counter/styles.css b/src/frontend/example/01_counter/styles.css new file mode 100644 index 0000000..cf1668c --- /dev/null +++ b/src/frontend/example/01_counter/styles.css @@ -0,0 +1,207 @@ +/* +=============== +Fonts +=============== +*/ +@import url("https://fonts.googleapis.com/css?family=Open+Sans|Roboto:400,700&display=swap"); + +/* +=============== +Variables +=============== +*/ + +:root { + /* dark shades of primary color*/ + --clr-primary-1: hsl(205, 86%, 17%); + --clr-primary-2: hsl(205, 77%, 27%); + --clr-primary-3: hsl(205, 72%, 37%); + --clr-primary-4: hsl(205, 63%, 48%); + /* primary/main color */ + --clr-primary-5: hsl(205, 78%, 60%); + /* lighter shades of primary color */ + --clr-primary-6: hsl(205, 89%, 70%); + --clr-primary-7: hsl(205, 90%, 76%); + --clr-primary-8: hsl(205, 86%, 81%); + --clr-primary-9: hsl(205, 90%, 88%); + --clr-primary-10: hsl(205, 100%, 96%); + /* darkest grey - used for headings */ + --clr-grey-1: hsl(209, 61%, 16%); + --clr-grey-2: hsl(211, 39%, 23%); + --clr-grey-3: hsl(209, 34%, 30%); + --clr-grey-4: hsl(209, 28%, 39%); + /* grey used for paragraphs */ + --clr-grey-5: hsl(210, 22%, 49%); + --clr-grey-6: hsl(209, 23%, 60%); + --clr-grey-7: hsl(211, 27%, 70%); + --clr-grey-8: hsl(210, 31%, 80%); + --clr-grey-9: hsl(212, 33%, 89%); + --clr-grey-10: hsl(210, 36%, 96%); + --clr-white: #fff; + --clr-red-dark: hsl(360, 67%, 44%); + --clr-red-light: hsl(360, 71%, 66%); + --clr-green-dark: hsl(125, 67%, 44%); + --clr-green-light: hsl(125, 71%, 66%); + --clr-black: #222; + --ff-primary: "Roboto", sans-serif; + --ff-secondary: "Open Sans", sans-serif; + --transition: all 0.3s linear; + --spacing: 0.1rem; + --radius: 0.25rem; + --light-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); + --dark-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); + --max-width: 1170px; + --fixed-width: 620px; +} + +/* +=============== +Global Styles +=============== +*/ + +*, +::after, +::before { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: var(--ff-secondary); + background: var(--clr-grey-10); + color: var(--clr-grey-1); + line-height: 1.5; + font-size: 0.875rem; +} + +ul { + list-style-type: none; +} + +a { + text-decoration: none; +} + +h1, +h2, +h3, +h4 { + letter-spacing: var(--spacing); + text-transform: capitalize; + line-height: 1.25; + margin-bottom: 0.75rem; + font-family: var(--ff-primary); +} + +h1 { + font-size: 3rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.25rem; +} + +h4 { + font-size: 0.875rem; +} + +p { + margin-bottom: 1.25rem; + color: var(--clr-grey-5); +} + +@media screen and (min-width: 800px) { + h1 { + font-size: 4rem; + } + + h2 { + font-size: 2.5rem; + } + + h3 { + font-size: 1.75rem; + } + + h4 { + font-size: 1rem; + } + + body { + font-size: 1rem; + } + + h1, + h2, + h3, + h4 { + line-height: 1; + } +} + +/* global classes */ + +/* section */ +.section { + padding: 5rem 0; +} + +.section-center { + width: 90vw; + margin: 0 auto; + max-width: 1170px; +} + +@media screen and (min-width: 992px) { + .section-center { + width: 95vw; + } +} + +main { + min-height: 100vh; + display: grid; + place-items: center; +} + +/* +=============== +Counter +=============== +*/ + +.container { + text-align: center; +} + +#value { + font-size: 6rem; + font-weight: bold; +} + +.btn { + text-transform: uppercase; + background: transparent; + color: var(--clr-black); + padding: 0.375rem 0.75rem; + letter-spacing: var(--spacing); + display: inline-block; + transition: var(--transition); + font-size: 0.875rem; + border: 2px solid var(--clr-black); + cursor: pointer; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2); + border-radius: var(--radius); + margin: 0.5rem; +} + +.btn:hover { + color: var(--clr-white); + background: var(--clr-black); +} \ No newline at end of file diff --git a/src/frontend/example/05_sidebar/app.js b/src/frontend/example/05_sidebar/app.js new file mode 100644 index 0000000..0bf53f3 --- /dev/null +++ b/src/frontend/example/05_sidebar/app.js @@ -0,0 +1,16 @@ +const toggleBtn = document.querySelector(".sidebar-toggle"); +const closeBtn = document.querySelector(".close-btn"); +const sidebar = document.querySelector(".sidebar"); + +toggleBtn.addEventListener("click", function () { + // if (sidebar.classList.contains("show-sidebar")) { + // sidebar.classList.remove("show-sidebar"); + // } else { + // sidebar.classList.add("show-sidebar"); + // } + sidebar.classList.toggle("show-sidebar"); +}); + +closeBtn.addEventListener("click", function () { + sidebar.classList.remove("show-sidebar"); +}); diff --git a/src/frontend/example/05_sidebar/index.html b/src/frontend/example/05_sidebar/index.html new file mode 100644 index 0000000..f4fb120 --- /dev/null +++ b/src/frontend/example/05_sidebar/index.html @@ -0,0 +1,69 @@ + + + + + + Sidebar + + + + + + + + + + \ No newline at end of file diff --git a/src/frontend/example/05_sidebar/logo.svg b/src/frontend/example/05_sidebar/logo.svg new file mode 100644 index 0000000..cccc49b --- /dev/null +++ b/src/frontend/example/05_sidebar/logo.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/src/frontend/example/05_sidebar/styles.css b/src/frontend/example/05_sidebar/styles.css new file mode 100644 index 0000000..2bfcaf8 --- /dev/null +++ b/src/frontend/example/05_sidebar/styles.css @@ -0,0 +1,289 @@ +/* +=============== +Fonts +=============== +*/ +@import url('https://fonts.googleapis.com/css?family=Open+Sans|Roboto:400,700&display=swap'); + +/* +=============== +Variables +=============== +*/ + +:root { + /* dark shades of primary color*/ + --clr-primary-1: hsl(205, 86%, 17%); + --clr-primary-2: hsl(205, 77%, 27%); + --clr-primary-3: hsl(205, 72%, 37%); + --clr-primary-4: hsl(205, 63%, 48%); + /* primary/main color */ + --clr-primary-5: hsl(205, 78%, 60%); + /* lighter shades of primary color */ + --clr-primary-6: hsl(205, 89%, 70%); + --clr-primary-7: hsl(205, 90%, 76%); + --clr-primary-8: hsl(205, 86%, 81%); + --clr-primary-9: hsl(205, 90%, 88%); + --clr-primary-10: hsl(205, 100%, 96%); + /* darkest grey - used for headings */ + --clr-grey-1: hsl(209, 61%, 16%); + --clr-grey-2: hsl(211, 39%, 23%); + --clr-grey-3: hsl(209, 34%, 30%); + --clr-grey-4: hsl(209, 28%, 39%); + /* grey used for paragraphs */ + --clr-grey-5: hsl(210, 22%, 49%); + --clr-grey-6: hsl(209, 23%, 60%); + --clr-grey-7: hsl(211, 27%, 70%); + --clr-grey-8: hsl(210, 31%, 80%); + --clr-grey-9: hsl(212, 33%, 89%); + --clr-grey-10: hsl(210, 36%, 96%); + --clr-white: #fff; + --clr-red-dark: hsl(360, 67%, 44%); + --clr-red-light: hsl(360, 71%, 66%); + --clr-green-dark: hsl(125, 67%, 44%); + --clr-green-light: hsl(125, 71%, 66%); + --clr-black: #222; + --ff-primary: 'Roboto', sans-serif; + --ff-secondary: 'Open Sans', sans-serif; + --transition: all 0.3s linear; + --spacing: 0.1rem; + --radius: 0.25rem; + --light-shadow: 0 5px 15px rgba(0, 0, 0, 0.1); + --dark-shadow: 0 5px 15px rgba(0, 0, 0, 0.2); + --max-width: 1170px; + --fixed-width: 620px; +} + +/* +=============== +Global Styles +=============== +*/ + +*, +::after, +::before { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: var(--ff-secondary); + background: var(--clr-grey-10); + color: var(--clr-grey-1); + line-height: 1.5; + font-size: 0.875rem; +} + +ul { + list-style-type: none; +} + +a { + text-decoration: none; +} + +h1, +h2, +h3, +h4 { + letter-spacing: var(--spacing); + text-transform: capitalize; + line-height: 1.25; + margin-bottom: 0.75rem; + font-family: var(--ff-primary); +} + +h1 { + font-size: 3rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.25rem; +} + +h4 { + font-size: 0.875rem; +} + +p { + margin-bottom: 1.25rem; + color: var(--clr-grey-5); +} + +@media screen and (min-width: 800px) { + h1 { + font-size: 4rem; + } + + h2 { + font-size: 2.5rem; + } + + h3 { + font-size: 1.75rem; + } + + h4 { + font-size: 1rem; + } + + body { + font-size: 1rem; + } + + h1, + h2, + h3, + h4 { + line-height: 1; + } +} + +/* global classes */ + +/* section */ +.section { + padding: 5rem 0; +} + +.section-center { + width: 90vw; + margin: 0 auto; + max-width: 1170px; +} + +@media screen and (min-width: 992px) { + .section-center { + width: 95vw; + } +} + +main { + min-height: 100vh; + display: grid; + place-items: center; +} + +/* +=============== +Sidebar +=============== +*/ +.sidebar-toggle { + position: fixed; + top: 2rem; + right: 3rem; + font-size: 2rem; + background: transparent; + border-color: transparent; + color: var(--clr-primary-5); + transition: var(--transition); + cursor: pointer; + animation: bounce 2s ease-in-out infinite; +} + +.sidebar-toggle:hover { + color: var(--clr-primary-7); +} + +@keyframes bounce { + 0% { + transform: scale(1); + } + 50% { + transform: scale(1.5); + } + 100% { + transform: scale(1); + } +} + +.sidebar-header { + display: flex; + justify-content: space-between; + align-items: center; + padding: 1rem 1.5rem; +} + +.close-btn { + font-size: 1.75rem; + background: transparent; + border-color: transparent; + color: var(--clr-primary-5); + transition: var(--transition); + cursor: pointer; + color: var(--clr-red-dark); +} + +.close-btn:hover { + color: var(--clr-red-light); + transform: rotate(360deg); +} + +.logo { + justify-self: center; + height: 40px; +} + +.links a { + display: block; + font-size: 1.5rem; + text-transform: capitalize; + padding: 1rem 1.5rem; + color: var(--clr-grey-5); + transition: var(--transition); +} + +.links a:hover { + background: var(--clr-primary-8); + color: var(--clr-primary-5); + padding-left: 1.75rem; +} + +.social-icons { + justify-self: center; + display: flex; + padding-bottom: 2rem; +} + +.social-icons a { + font-size: 1.5rem; + margin: 0 0.5rem; + color: var(--clr-primary-5); + transition: var(--transition); +} + +.social-icons a:hover { + color: var(--clr-primary-1); +} + +.sidebar { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: var(--clr-white); + display: grid; + grid-template-rows: auto 1fr auto; + row-gap: 1rem; + box-shadow: var(--clr-red-dark); + transition: var(--transition); + /* transform: translate(-100%); */ +} + +.show-sidebar { + transform: translate(0); +} + +@media screen and (min-width: 676px) { + .sidebar { + width: 400px; + } +} diff --git a/src/frontend/example/grid_layout/grid_layout.css b/src/frontend/example/grid_layout/grid_layout.css new file mode 100644 index 0000000..9be4f0e --- /dev/null +++ b/src/frontend/example/grid_layout/grid_layout.css @@ -0,0 +1,37 @@ +.item1 { + grid-area: header; +} + +.item2 { + grid-area: menu; +} + +.item3 { + grid-area: main; +} + +.item4 { + grid-area: right; +} + +.item5 { + grid-area: footer; +} + +.grid-container { + display: grid; + grid-template-areas: + 'header header header header header header' + 'menu main main main main right' + 'menu footer footer footer footer footer'; + gap: 10px; + background-color: whitesmoke; + padding: 10px; +} + +.grid-container > div { + background-color: rgba(255, 255, 255, 0.8); + text-align: center; + padding: 20px 0; + font-size: 30px; +} \ No newline at end of file diff --git a/src/frontend/example/grid_layout/index.html b/src/frontend/example/grid_layout/index.html new file mode 100644 index 0000000..39c892c --- /dev/null +++ b/src/frontend/example/grid_layout/index.html @@ -0,0 +1,18 @@ + + + + + Example 1 + + + + +
+
header
+
menu
+
main
+
right
+
footer
+
+ + \ No newline at end of file diff --git a/src/frontend/example/toggle_dark_light/app.js b/src/frontend/example/toggle_dark_light/app.js new file mode 100644 index 0000000..9b25a26 --- /dev/null +++ b/src/frontend/example/toggle_dark_light/app.js @@ -0,0 +1,4 @@ +function switchLightDark() { + let element = document.body + element.classList.toggle("dark-mode") +} \ No newline at end of file diff --git a/src/frontend/example/toggle_dark_light/index.html b/src/frontend/example/toggle_dark_light/index.html new file mode 100644 index 0000000..2b0ee21 --- /dev/null +++ b/src/frontend/example/toggle_dark_light/index.html @@ -0,0 +1,17 @@ + + + + + + Darkmode + + + +

Toggle Dark/Light Mode

+

Click the button to toggle between dark and light mode for this page.

+ + + + + + \ No newline at end of file diff --git a/src/frontend/example/toggle_dark_light/styles.css b/src/frontend/example/toggle_dark_light/styles.css new file mode 100644 index 0000000..aebb339 --- /dev/null +++ b/src/frontend/example/toggle_dark_light/styles.css @@ -0,0 +1,11 @@ +body { + padding: 25px; + background-color: white; + color: black; + font-size: 25px; +} + +.dark-mode { + background-color: black; + color: white; +} \ No newline at end of file