diff --git a/css/folder/main.scss b/css/folder/main.scss
deleted file mode 100644
index 398e935..0000000
--- a/css/folder/main.scss
+++ /dev/null
@@ -1,98 +0,0 @@
-@font-face {
- font-family: "basiic";
- src: url(https://cinni.net/fonts/basiic.ttf);
-}
-
-* {
- box-sizing: border-box;
- color: #251d35;
-}
-
-body {
- font-family: "basiic", "Mukta", sans-serif;
- letter-spacing: -0.03em;
- font-size: 17px;
- line-height: 1.8;
- display: flex;
- justify-content: center;
- background: #f4ecec;
-
- @media (min-width: 1000px) {
- font-size: 22px;
- line-height: 2;
- }
-}
-
-a {
- &,
- &:hover,
- &:focus,
- &:visited {
- color: #1d5999;
- }
-}
-
-main {
- width: 95%;
- max-width: 850px;
-
- @media (min-width: 1000px) {
- width: 90%;
- padding-top: 10vh;
- padding-bottom: 10vh;
- }
-}
-
-p {
- margin: 0.5em 0;
- text-align: justify;
-}
-
-ul {
- margin: 0.5em 0;
- padding-left: 1.5em;
-}
-
-h1,
-h2 {
- margin-bottom: 0;
- line-height: 1.5;
-}
-
-h2 {
- margin-top: 1.5em;
- font-size: 20px;
-
- @media (min-width: 1000px) {
- font-size: 28px;
- }
-}
-
-.cursor {
- animation: blink 1s step-start 0s infinite;
-}
-
-@keyframes blink {
- 50% {
- opacity: 0;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- body {
- background: rgb(12, 11, 14);
- }
-
- * {
- color: rgb(190, 188, 195);
- }
-
- a {
- &,
- &:hover,
- &:focus,
- &:visited {
- color: #6c89b7;
- }
- }
-}
diff --git a/css/main.scss b/css/main.scss
index 2fab18f..0e80681 100644
--- a/css/main.scss
+++ b/css/main.scss
@@ -1,3 +1,361 @@
-@import "./folder/main";
-@import "./subpages/tumblr-tag-list-tool";
-@import "./subpages/notion-widgets";
+@import "./pages/tumblr-tag-list-tool";
+@import "./pages/notion-widgets";
+@import "./pages/pinterest-board";
+@import "./pages/manual-list-sorter";
+
+// ---
+
+* {
+ font-family: "Noto Sans Mono", "Consolas", "SF Mono", monospace;
+ box-sizing: border-box;
+ color: #2f283c;
+}
+
+h1,
+h2 {
+ user-select: none;
+}
+
+body {
+ padding: 10px;
+ font-size: 16px;
+ line-height: 1.5;
+ display: flex;
+ justify-content: center;
+ background: #f8f2f2;
+
+ @media (min-width: 1000px) {
+ font-size: 19px;
+ line-height: 1.7;
+ }
+}
+
+a {
+ &,
+ &:visited {
+ &,
+ & small {
+ color: #084a90;
+ text-decoration: none;
+ display: inline-block;
+ transition: transform 0.3s ease;
+
+ @media (max-width: 900px) {
+ display: inline;
+ }
+ }
+ }
+
+ &:hover,
+ &:focus {
+ &,
+ & small {
+ background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);
+ background-clip: text;
+ color: transparent;
+ animation: rainbow_animation 1.5s ease-in-out infinite;
+ background-size: 400% 100%;
+ text-decoration-style: wavy;
+ transform: scale(1.03) rotate(-1deg);
+ }
+ }
+}
+
+@keyframes rainbow_animation {
+ 0%,
+ 100% {
+ background-position: 0 0;
+ }
+
+ 50% {
+ background-position: 100% 0;
+ }
+}
+
+::selection {
+ background: #1d5999;
+}
+
+main {
+ width: 95%;
+ max-width: 880px;
+
+ @media (min-width: 1000px) {
+ width: 90%;
+ padding-top: 10vh;
+ padding-bottom: 10vh;
+ }
+
+ @media (min-width: 1000px) and (max-height: 800px) {
+ padding-top: 5vh;
+ padding-bottom: 5vh;
+ }
+}
+
+p {
+ margin: 0.5em 0;
+ text-align: justify;
+}
+
+ul {
+ margin: 0.5em 0;
+ padding-left: 1.1em;
+}
+
+li {
+ margin: 0.3em 0;
+
+ .md {
+ vertical-align: middle;
+ }
+}
+
+h1 {
+ letter-spacing: 4px;
+}
+
+h1,
+h2 {
+ margin-bottom: 0;
+ line-height: 1.5;
+}
+
+h2 {
+ margin-top: 1.5em;
+ font-size: 20px;
+
+ @media (min-width: 1000px) {
+ font-size: 28px;
+ }
+}
+
+small {
+ font-size: 0.75em;
+}
+
+hr {
+ border: 0;
+ height: 1px;
+ background-image: linear-gradient(to right, rgba(0, 0, 0, 0), currentColor, rgba(0, 0, 0, 0));
+ margin: 1em 0;
+}
+
+.cursor {
+ animation: blink 1s step-start 0s infinite;
+}
+
+.md.hydrated {
+ font-size: 1.1em;
+ transform: translateX(-5px);
+}
+
+@keyframes blink {
+ 50% {
+ opacity: 0;
+ }
+}
+
+.back-link {
+ position: fixed;
+ top: 0;
+ left: 0;
+ z-index: 1;
+ line-height: 1;
+
+ a {
+ display: block;
+ text-decoration: none;
+ color: #251d35;
+ padding: 15px;
+ font-size: 32px;
+ text-decoration: none;
+ transition: 0.3s ease;
+
+ @media (max-width: 900px) {
+ padding: 10px;
+ font-size: 24px;
+ }
+
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ color: #251d35;
+ transform: scale(1.5) rotate(20deg);
+ }
+ }
+}
+
+/*
+ FORM
+*/
+
+button,
+input[type="text"],
+input[type="number"],
+input[type="color"],
+textarea,
+select {
+ font-size: 1em;
+ line-height: 1.75;
+ background: #eee4e4;
+ border: 1px solid rgb(137, 137, 137);
+ padding: 5px 15px;
+ border-radius: 8px;
+ transition: 0.4s ease;
+
+ &:focus {
+ outline: none;
+ border: 1px solid black;
+ }
+}
+
+label {
+ cursor: pointer;
+}
+
+input[type="text"] {
+ margin-top: 10px;
+ width: 100%;
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ filter: saturate(0) brightness(0.9);
+}
+
+textarea {
+ width: 100%;
+ margin: 10px 0;
+ min-height: 250px;
+}
+
+button {
+ margin: 20px 0;
+ cursor: pointer;
+ transition: 0.4s ease;
+ font-size: 1.1em;
+
+ span {
+ display: inline-block;
+ margin: 0 !important;
+ transition: transform 0.4s ease;
+ }
+
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 0.5;
+ }
+
+ &:not([disabled]):hover,
+ &:not([disabled]):focus {
+ filter: brightness(0.95);
+ outline: none;
+ border: 1px solid black;
+
+ span {
+ background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);
+ background-clip: text;
+ color: transparent;
+ animation: rainbow_animation 1.5s ease-in-out infinite;
+ background-size: 400% 100%;
+ text-decoration-style: wavy;
+ transform: scale(1.04) rotate(-2deg);
+ }
+ }
+
+ &:not([disabled]):hover {
+ span {
+ background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);
+ background-clip: text;
+ color: transparent;
+ animation: rainbow_animation 1.5s ease-in-out infinite;
+ background-size: 400% 100%;
+ text-decoration-style: wavy;
+ transform: scale(1.03) rotate(-1deg);
+ }
+ }
+
+ &:not([disabled]):active {
+ transform: scale(0.9);
+ }
+}
+
+/*
+ DARK SCHEME
+*/
+
+// @media (prefers-color-scheme: dark) {
+body {
+ background: rgb(12, 11, 14);
+}
+
+* {
+ color: rgb(168, 166, 172);
+}
+
+a {
+ &,
+ &:visited {
+ &,
+ & small {
+ color: #578adb;
+ }
+ }
+
+ &:hover,
+ &:focus {
+ &,
+ & small {
+ background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);
+ background-clip: text;
+ color: transparent;
+ animation: rainbow_animation 1.5s ease-in-out infinite;
+ background-size: 400% 100%;
+ text-decoration-style: wavy;
+ }
+ }
+}
+
+::selection {
+ background: #3b609c;
+}
+
+.back-link {
+ a {
+ color: rgb(190, 188, 195);
+
+ &:hover,
+ &:focus {
+ color: rgb(190, 188, 195);
+ }
+ }
+}
+
+button,
+input[type="text"],
+input[type="number"],
+input[type="color"],
+textarea,
+select {
+ color: rgb(190, 188, 195);
+ background: rgb(42, 42, 44);
+ border-color: rgb(42, 42, 44);
+
+ &:focus {
+ border-color: #f4ecec;
+ }
+}
+
+input[type="radio"],
+input[type="checkbox"] {
+ filter: invert(1) saturate(0);
+}
+
+button {
+ &:not([disabled]):hover,
+ &:not([disabled]):focus {
+ filter: brightness(0.8);
+ border-color: #f4ecec;
+ }
+}
+// }
diff --git a/css/mixins.scss b/css/mixins.scss
deleted file mode 100644
index 2525945..0000000
--- a/css/mixins.scss
+++ /dev/null
@@ -1,43 +0,0 @@
-@mixin noselect {
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- -khtml-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-@mixin container($width: $normal-container) {
- max-width: $width;
- margin-left: auto;
- margin-right: auto;
- padding-left: $container-side-padding;
- padding-right: $container-side-padding;
-}
-
-@mixin wide-container {
- @include container($wide-container);
-}
-
-@mixin wide-container {
- @include container($normal-container);
-}
-
-@mixin narrow-container {
- @include container($narrow-container);
-}
-
-@mixin bleed($elementMaxWidth: $normal-container,
- $paddingOneSide: $container-side-padding) {
- width: auto;
- margin-left: $paddingOneSide * -1;
- margin-right: $paddingOneSide * -1;
-
- $breakpoint: $elementMaxWidth +($paddingOneSide * 2);
- $minusmargin: calc((100vw - #{$elementMaxWidth}) / -2);
-
- @include media-up($breakpoint) {
- margin-left: $minusmargin;
- margin-right: $minusmargin;
- }
-}
\ No newline at end of file
diff --git a/css/pages/manual-list-sorter.scss b/css/pages/manual-list-sorter.scss
new file mode 100644
index 0000000..bbd3a97
--- /dev/null
+++ b/css/pages/manual-list-sorter.scss
@@ -0,0 +1,49 @@
+.manual-list-sorter {
+ #word {
+ font-size: 1.5em;
+ }
+
+ #selects {
+ display: flex;
+ flex-wrap: wrap;
+ user-select: none;
+
+ div {
+ padding: 5px 10px;
+ cursor: pointer;
+ border-radius: 10px;
+
+ &:hover {
+ background: rgba(255, 255, 255, 0.07);
+ }
+
+ &.selected {
+ background: rgba(255, 255, 255, 0.2);
+ }
+ }
+ }
+
+ @media (min-width: 500px) {
+ .two-lists {
+ display: flex;
+
+ textarea:first-child {
+ margin-right: 0.5em;
+ }
+
+ textarea:last-child {
+ margin-left: 0.5em;
+ }
+ }
+
+ #word {
+ font-size: 3em;
+ }
+ }
+
+ @media (max-width: 900px) {
+ #word ~ button:last-child {
+ margin-top: 0;
+ }
+ }
+}
diff --git a/css/subpages/notion-widgets.scss b/css/pages/notion-widgets.scss
similarity index 96%
rename from css/subpages/notion-widgets.scss
rename to css/pages/notion-widgets.scss
index 12ff9d8..c95dc49 100644
--- a/css/subpages/notion-widgets.scss
+++ b/css/pages/notion-widgets.scss
@@ -140,14 +140,6 @@
background-color: rgb(25, 25, 25) !important;
}
- .back-link {
- position: absolute;
- top: 0;
- left: 0;
- right: 0;
- bottom: 0;
- }
-
> * {
width: 100%;
diff --git a/css/pages/pinterest-board.scss b/css/pages/pinterest-board.scss
new file mode 100644
index 0000000..21796e8
--- /dev/null
+++ b/css/pages/pinterest-board.scss
@@ -0,0 +1,62 @@
+.pinterest-board {
+ h1:not(:first-child) {
+ margin-top: 10vh;
+ }
+
+ h2 {
+ font-size: 2em;
+ margin-top: 0;
+ margin-bottom: 0;
+ }
+
+ span {
+ display: block;
+ }
+
+ label {
+ width: 100%;
+ display: block;
+ }
+
+ #output {
+ padding: 10px;
+ border: 2px solid lightgray;
+ max-height: 85vh;
+ overflow-y: auto;
+
+ &:empty {
+ display: none;
+ }
+ }
+
+ .wrap {
+ margin-left: 30px;
+ margin-bottom: 20px;
+ }
+
+ iframe {
+ width: 100%;
+ border: 1px solid rgb(137, 137, 137);
+ border-radius: 8px;
+ margin-bottom: 1em;
+ height: 500px;
+ }
+
+ .output,
+ .outputNotion {
+ font-size: 0.85em;
+ min-height: 2em;
+
+ @media (max-width: 900px) {
+ min-height: 6em;
+ }
+ }
+}
+
+@media (prefers-color-scheme: dark) {
+ .pinterest-board {
+ iframe {
+ border: 2px solid white;
+ }
+ }
+}
diff --git a/css/pages/tumblr-tag-list-tool.scss b/css/pages/tumblr-tag-list-tool.scss
new file mode 100644
index 0000000..3f6e584
--- /dev/null
+++ b/css/pages/tumblr-tag-list-tool.scss
@@ -0,0 +1,55 @@
+.tumblr-tag-list-tool {
+ span {
+ display: block;
+ margin-top: 30px;
+ }
+
+ label {
+ width: 100%;
+ display: block;
+ margin-top: 10px;
+ }
+
+ #warning {
+ color: red;
+ line-height: 1;
+ font-size: 0.85em;
+ }
+
+ #output {
+ padding: 20px;
+ border: 2px solid lightgray;
+ border-radius: 8px;
+ max-height: 85vh;
+ overflow-y: auto;
+ margin-top: 1em;
+
+ &,
+ * {
+ user-select: auto;
+ }
+
+ &:empty {
+ display: none;
+ }
+
+ a {
+ color: currentColor !important;
+ background: none !important;
+ animation: none !important;
+ transition: none !important;
+ transform: none !important;
+ text-decoration: underline;
+
+ &:hover,
+ &:focus {
+ text-decoration: none;
+ }
+ }
+ }
+
+ .wrap {
+ margin-left: 30px;
+ margin-bottom: 20px;
+ }
+}
diff --git a/css/subpages/tumblr-tag-list-tool.scss b/css/subpages/tumblr-tag-list-tool.scss
deleted file mode 100644
index 422d0df..0000000
--- a/css/subpages/tumblr-tag-list-tool.scss
+++ /dev/null
@@ -1,100 +0,0 @@
-.tumblr-tag-list-tool {
- button,
- input[type="text"],
- textarea {
- font-family: "Mukta", sans-serif;
- font-size: 16px;
- line-height: 1.75;
- background: #eee4e4;
- border: 1px solid rgb(137, 137, 137);
- padding: 5px 15px;
-
- @media (min-width: 1000px) {
- font-size: 22px;
- }
-
- &:focus {
- outline: none;
- border: 1px solid black;
- }
- }
-
- input[type="text"] {
- margin-top: 10px;
- width: 100%;
- }
-
- textarea {
- width: 100%;
- margin: 10px 0;
- min-height: 250px;
- }
-
- button {
- margin: 20px 0;
- cursor: pointer;
-
- &:hover,
- &:focus {
- filter: brightness(0.95);
- }
- }
-
- span {
- display: block;
- margin-top: 30px;
- }
-
- label {
- width: 100%;
- display: block;
- margin-top: 10px;
- }
-
- input[type="checkbox"] {
- filter: saturate(0) brightness(0.9);
- }
-
- #output {
- padding: 10px;
- border: 2px solid lightgray;
- max-height: 85vh;
- overflow-y: auto;
-
- &:empty {
- display: none;
- }
- }
-
- .wrap {
- margin-left: 30px;
- margin-bottom: 20px;
- }
-}
-
-@media (prefers-color-scheme: dark) {
- .tumblr-tag-list-tool {
- input[type="text"],
- textarea,
- button {
- color: rgb(190, 188, 195);
- background: rgb(42, 42, 44);
- border-color: rgb(42, 42, 44);
-
- &:focus {
- border-color: #f4ecec;
- }
- }
-
- input[type="checkbox"] {
- filter: invert(1) saturate(0);
- }
-
- button {
- &:hover,
- &:focus {
- filter: brightness(0.8);
- }
- }
- }
-}
diff --git a/index.html b/index.html
index b4dd7a2..8ec0ef0 100644
--- a/index.html
+++ b/index.html
@@ -2,7 +2,7 @@
petracoding
-
+
@@ -12,19 +12,31 @@
+
+
+
petracoding_
- My name is Petra, and I am a queer 24-year-old web developer from Austria. I used to code full-time, and now I'm an English student. I make useful little
+ My name is Petra, and I am a queer 25-year-old web developer from Austria. I used to code full-time, and now I'm an English student.
+
+ When I'm not coding I write, draw, watch stuff, read, make playlists, make video edits, exercise and study. :)
My Tools:
Elsewhere:
-
+
diff --git a/js/main.js b/js/main.js
index 8f78c07..4711b65 100644
--- a/js/main.js
+++ b/js/main.js
@@ -1,9 +1,11 @@
import "../css/main.scss";
+import "./pages/tumblr-tag-list-tool";
+import "./pages/notion-widgets";
+import "./pages/pinterest-board";
+import "./pages/vocabulary-manager";
+import "./pages/manual-list-sorter";
+import "./pages/notion-to-quizlet";
-//
-import "./subpages/tumblr-tag-list-tool";
-import "./subpages/notion-widgets";
-
-document.addEventListener("DOMContentLoaded", function (event) {
- //do work
+document.addEventListener("DOMContentLoaded", function () {
+ console.log("hewwo :3");
});
diff --git a/js/pages/manual-list-sorter.js b/js/pages/manual-list-sorter.js
new file mode 100644
index 0000000..21cad9d
--- /dev/null
+++ b/js/pages/manual-list-sorter.js
@@ -0,0 +1,138 @@
+document.addEventListener("DOMContentLoaded", function () {
+ if (!document.querySelector(".manual-list-sorter")) return;
+
+ const startBtn = document.querySelector("#start");
+ const startBtn2 = document.querySelector("#select");
+ const btn1 = document.querySelector("#sortInto1");
+ const btn2 = document.querySelector("#sortInto2");
+ const inputListTextarea = document.querySelector("#input");
+ const outputTextarea1 = document.querySelector("#output1");
+ const outputTextarea2 = document.querySelector("#output2");
+ const wordSpan = document.querySelector("#word");
+
+ let inputList,
+ list1 = [],
+ list2 = [],
+ currentIndex,
+ numberSelected = 0;
+
+ outputTextarea1.value = "";
+ outputTextarea2.value = "";
+
+ startBtn.removeAttribute("disabled");
+ inputListTextarea.removeAttribute("disabled");
+ btn1.setAttribute("disabled", "true");
+ btn2.setAttribute("disabled", "true");
+
+ startBtn.addEventListener("click", () => {
+ if (!inputListTextarea.value) {
+ alert("No items inserted!");
+ } else {
+ outputTextarea1.value = "";
+ outputTextarea2.value = "";
+ document.querySelector("#outputNumber").innerHTML = "";
+ inputList = inputListTextarea.value.replace(/,\s*$/, "").replaceAll(",,", ",").split(",");
+ currentIndex = -1;
+ inputListTextarea.setAttribute("disabled", "true");
+ startBtn.setAttribute("disabled", "true");
+ startBtn2.setAttribute("disabled", "true");
+ btn1.removeAttribute("disabled");
+ btn2.removeAttribute("disabled");
+ wordSpan.innerHTML = inputList[currentIndex];
+ document.querySelector("#manualsorting").style.display = "block";
+ nextItem();
+
+ window.onbeforeunload = function () {
+ return "Are you sure you want to navigate away?";
+ };
+ }
+ });
+
+ btn1.addEventListener("click", () => {
+ list1.push(inputList[currentIndex]);
+ outputTextarea1.value = list1.join(", ");
+ nextItem();
+ });
+
+ btn2.addEventListener("click", () => {
+ list2.push(inputList[currentIndex]);
+ outputTextarea2.value = list2.join(", ");
+ nextItem();
+ });
+
+ startBtn2.addEventListener("click", () => {
+ if (!inputListTextarea.value) {
+ alert("No items inserted!");
+ } else {
+ outputTextarea1.value = "";
+ outputTextarea2.value = "";
+ inputList = inputListTextarea.value.replace(/,\s*$/, "").replaceAll(",,", ",").split(",");
+ currentIndex = -1;
+ inputListTextarea.setAttribute("disabled", "true");
+ startBtn.setAttribute("disabled", "true");
+ startBtn2.setAttribute("disabled", "true");
+ btn1.removeAttribute("disabled");
+ btn2.removeAttribute("disabled");
+ wordSpan.innerHTML = inputList[currentIndex];
+ document.querySelector("#selectdone").style.display = "block";
+ prepareSelectionMode();
+
+ window.onbeforeunload = function () {
+ return "Are you sure you want to navigate away?";
+ };
+ }
+ });
+
+ function prepareSelectionMode() {
+ let content = "";
+ inputList.forEach((listItem) => {
+ content += "" + listItem + "
";
+ });
+ document.querySelector("#selects").innerHTML = content;
+ numberSelected = 0;
+ document.querySelector("#numberselected").innerHTML = numberSelected + " selected";
+ [...document.querySelectorAll("#selects div")].forEach((btn) => {
+ btn.addEventListener("click", () => {
+ if (btn.classList.contains("selected")) {
+ btn.classList.remove("selected");
+ numberSelected--;
+ document.querySelector("#numberselected").innerHTML = numberSelected + " selected";
+ } else {
+ btn.classList.add("selected");
+ numberSelected++;
+ document.querySelector("#numberselected").innerHTML = numberSelected + " selected";
+ }
+ });
+ });
+ }
+
+ document.querySelector("#selectdone").addEventListener("click", () => {
+ list1 = [];
+ list2 = [];
+
+ [...document.querySelectorAll("#selects div")].forEach((btn) => {
+ if (btn.classList.contains("selected")) {
+ list1.push(btn.innerHTML);
+ } else {
+ list2.push(btn.innerHTML);
+ }
+ });
+
+ outputTextarea1.value = list1.join(", ");
+ outputTextarea2.value = list2.join(", ");
+ document.querySelector("#outputNumber").innerHTML = "(" + list1.length + " and " + list2.length + " items)";
+ });
+
+ function nextItem() {
+ if (currentIndex == inputList.length - 1) {
+ wordSpan.innerHTML = "DONE!";
+ startBtn.removeAttribute("disabled");
+ inputListTextarea.removeAttribute("disabled");
+ btn1.setAttribute("disabled", "true");
+ btn2.setAttribute("disabled", "true");
+ } else {
+ currentIndex++;
+ wordSpan.innerHTML = inputList[currentIndex];
+ }
+ }
+});
diff --git a/js/pages/notion-to-quizlet.js b/js/pages/notion-to-quizlet.js
new file mode 100644
index 0000000..28e4166
--- /dev/null
+++ b/js/pages/notion-to-quizlet.js
@@ -0,0 +1,66 @@
+document.addEventListener("DOMContentLoaded", function () {
+ if (!document.querySelector(".notion-to-quizlet")) return;
+
+ const inputEl = document.querySelector("#input");
+ const output1 = document.querySelector("#output1");
+ const output2 = document.querySelector("#output2");
+
+ generateOutput1(inputEl.value);
+ // generateOutput2(inputEl.value);
+
+ inputEl.addEventListener("change", () => {
+ generateOutput1(inputEl.value);
+ // generateOutput2(inputEl.value);
+ });
+ inputEl.addEventListener("input", () => {
+ generateOutput1(inputEl.value);
+ // generateOutput2(inputEl.value);
+ });
+
+ function generateOutput1(input) {
+ const bulletPoints = ["■", "✦", "✧", "●", "⬥"];
+ const output = input
+ .replaceAll(/\*\*(.+)\*\*/g, "$1") // remove bold
+ .replaceAll(/\*(.+)\*/g, "$1") // remove italic
+ .replaceAll(/\s+!\[.*\]\(.*\)\s+/g, "\n") // remove images
+ .replaceAll(" -", " " + bulletPoints[4]) // level 5
+ .replaceAll(" -", " " + bulletPoints[3]) // level 4
+ .replaceAll(" -", " " + bulletPoints[2]) // level 3
+ .replaceAll(" -", " " + bulletPoints[1]) // level 2
+ .replaceAll("- ", bulletPoints[0] + " "); // level 1
+ output1.value = output;
+ copyToClipboard(output1.value);
+ }
+
+ // function generateOutput2(input) {
+ // const output = input
+ // .replaceAll(/\*\*(.+)\*\*/g, "$1 ")
+ // .replaceAll(" -", " -")
+ // .replaceAll(" -", " -")
+ // .replaceAll(" -", " -")
+ // .replaceAll("\n", " ")
+ // .replaceAll("- ", "● ");
+ // output2.innerHTML = output;
+ // }
+});
+
+function copyToClipboard(text) {
+ if (window.clipboardData && window.clipboardData.setData) {
+ // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.
+ return window.clipboardData.setData("Text", text);
+ } else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
+ var textarea = document.createElement("textarea");
+ textarea.textContent = text;
+ textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge.
+ document.body.appendChild(textarea);
+ textarea.select();
+ try {
+ return document.execCommand("copy"); // Security exception may be thrown by some browsers.
+ } catch (ex) {
+ console.warn("Copy to clipboard failed.", ex);
+ return prompt("Copy to clipboard: Ctrl+C, Enter", text);
+ } finally {
+ document.body.removeChild(textarea);
+ }
+ }
+}
diff --git a/js/subpages/notion-widgets.js b/js/pages/notion-widgets.js
similarity index 96%
rename from js/subpages/notion-widgets.js
rename to js/pages/notion-widgets.js
index 49b8295..85839e6 100644
--- a/js/subpages/notion-widgets.js
+++ b/js/pages/notion-widgets.js
@@ -29,12 +29,14 @@ document.addEventListener("DOMContentLoaded", function () {
url += "&color=" + color;
if (container.querySelector("#text-bg").checked) {
container.querySelector(".only-show-if-bg-color").style.visibility = "visible";
+ container.querySelector(".only-show-if-bg-color").style.height = "auto";
const background = container.querySelector("#text-background").value.replace("#", "");
url += "&background=" + background;
const corners = container.querySelector("#text-corners").value;
url += "&corners=" + corners;
} else {
container.querySelector(".only-show-if-bg-color").style.visibility = "hidden";
+ container.querySelector(".only-show-if-bg-color").style.height = "1px";
}
const font = container.querySelector("#text-font").value;
url += "&font=" + font;
diff --git a/js/pages/pinterest-board.js b/js/pages/pinterest-board.js
new file mode 100644
index 0000000..e887ac0
--- /dev/null
+++ b/js/pages/pinterest-board.js
@@ -0,0 +1,44 @@
+const isLocal = window.location.hostname == "localhost";
+const urlBase = isLocal ? "http://localhost:52330/pinterest/board.html" : "https://petracoding.github.io/pinterest/board.html";
+
+document.addEventListener("DOMContentLoaded", function () {
+ if (document.querySelector(".pinterest-board")) {
+ buildURL();
+ document.querySelector("#your-link").addEventListener("input", buildURL);
+ document.querySelector("#hide-header").addEventListener("input", buildURL);
+ document.querySelector("#hide-footer").addEventListener("input", buildURL);
+ document.querySelector("#transparent-bg").addEventListener("input", buildURL);
+ }
+});
+
+function buildURL() {
+ let url = urlBase;
+ const link = document.querySelector("#your-link").value;
+ if (!link) {
+ document.querySelector(".output").value = "";
+ document.querySelector(".outputNotion").value = "";
+ document.querySelector("iframe").setAttribute("src", "");
+ } else {
+ url += "?link=" + cleanPinterestUrl(link);
+ const hideHeader = document.querySelector("#hide-header").checked;
+ url += "&hideHeader=" + (hideHeader ? "1" : "0");
+ const hideFooter = document.querySelector("#hide-footer").checked;
+ url += "&hideFooter=" + (hideFooter ? "1" : "0");
+ const transparent = document.querySelector("#transparent-bg").checked;
+ url += "&transparent=" + (transparent ? "1" : "0");
+ document.querySelector("iframe").setAttribute("src", url);
+
+ const output = ``;
+ document.querySelector(".output").value = output;
+ document.querySelector(".outputNotion").value = url;
+ }
+}
+
+function cleanPinterestUrl(link) {
+ const i = getPosition(link, "/", 3);
+ return link.substr(i).substr(1);
+}
+
+function getPosition(string, subString, index) {
+ return string.split(subString, index).join(subString).length;
+}
diff --git a/js/pages/tumblr-tag-list-tool.js b/js/pages/tumblr-tag-list-tool.js
new file mode 100644
index 0000000..258b100
--- /dev/null
+++ b/js/pages/tumblr-tag-list-tool.js
@@ -0,0 +1,102 @@
+document.addEventListener("DOMContentLoaded", function (event) {
+ if (document.querySelector(".tumblr-tag-list-tool")) {
+ const eachTagInNewLineCheckbox = document.querySelector("#eachTagInNewLine");
+ const separatorWrapEl = document.querySelector(".separator-wrap");
+ const groupTagsCheckbox = document.querySelector("#groupTags");
+ const groupTagsWrapEl = document.querySelector(".group-tags-wrap");
+
+ prepare();
+ eachTagInNewLineCheckbox.addEventListener("change", prepare);
+ groupTagsCheckbox.addEventListener("change", prepare);
+
+ function prepare() {
+ if (eachTagInNewLineCheckbox.checked) {
+ separatorWrapEl.style.display = "none";
+ } else {
+ separatorWrapEl.style.display = "block";
+ }
+ if (groupTagsCheckbox.checked) {
+ groupTagsWrapEl.style.display = "block";
+ } else {
+ groupTagsWrapEl.style.display = "none";
+ }
+ }
+
+ generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);
+
+ const allInputs = document.querySelectorAll("main input, main textarea");
+ [...allInputs].forEach((inputEl) => {
+ inputEl.addEventListener("change", () => {
+ generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);
+ });
+ inputEl.addEventListener("input", () => {
+ generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);
+ });
+ });
+
+ // document.querySelector("#go").addEventListener("click", () => {
+ // generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);
+ // });
+ }
+});
+
+function generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox) {
+ const outputEl = document.querySelector("#output");
+ const input = document.querySelector("textarea").value;
+ const addHashtags = document.querySelector("#addHashtags").checked;
+ const useSearch = document.querySelector("#useSearch").checked;
+ const eachTagInNewLine = eachTagInNewLineCheckbox.checked;
+ const groupTags = groupTagsCheckbox.checked;
+ const useHeadings = groupTags && document.querySelector("#headings").checked;
+ const url = document.querySelector("#url").value;
+ const separator = document.querySelector("#separator").value || "";
+ let o = "";
+ let isHeading = false;
+ let isFirstGroup = true;
+ let totalTagCount = 0;
+
+ const groups = groupTags ? input.split(/\n\n/) : [input];
+
+ groups.forEach((group) => {
+ const tags = group.split(/[\n,#]+/);
+ isHeading = useHeadings;
+ if (groupTags && !isFirstGroup) {
+ o += " ";
+ }
+ let i = 0;
+ tags.forEach((tag) => {
+ i++;
+ let isLastTag = i == tags.length;
+ tag = tag.trim();
+ if (tag !== "," && tag !== "") {
+ if (isHeading) {
+ o += tag + " ";
+ isHeading = false;
+ } else {
+ totalTagCount++;
+ const tagSafeForString = tag;
+ o +=
+ "" +
+ (addHashtags ? "#" : "") +
+ tag +
+ " " +
+ (eachTagInNewLine ? " " : isLastTag ? "" : separator);
+ }
+ }
+ });
+ isFirstGroup = false;
+ });
+
+ outputEl.innerHTML = o;
+
+ if (totalTagCount > 100) {
+ document.querySelector("#warning").innerHTML = "Warning: You have " + totalTagCount + " tags. It's not possible to have more than 100 tags in a single tumblr post!";
+ } else {
+ document.querySelector("#warning").innerHTML = "";
+ }
+}
diff --git a/js/pages/vocabulary-manager.js b/js/pages/vocabulary-manager.js
new file mode 100644
index 0000000..2871711
--- /dev/null
+++ b/js/pages/vocabulary-manager.js
@@ -0,0 +1,160 @@
+document.addEventListener("DOMContentLoaded", function () {
+ if (!document.querySelector(".vocabulary-manager")) return;
+
+ const removeDuplicatesCheckbox = document.querySelector("#removeDuplicates");
+ const maxWordsCheckbox = document.querySelector("#maxWords");
+ const removeWordsCheckbox = document.querySelector("#removeWords");
+
+ prepare();
+ removeDuplicatesCheckbox.addEventListener("change", prepare);
+ maxWordsCheckbox.addEventListener("change", prepare);
+ removeWordsCheckbox.addEventListener("change", prepare);
+
+ function prepare() {
+ document.querySelector(".wrap-removeDuplicates").style.display = removeDuplicatesCheckbox.checked ? "block" : "none";
+ document.querySelector(".wrap-maxWords").style.display = maxWordsCheckbox.checked ? "block" : "none";
+ document.querySelector(".wrap-removeWords").style.display = removeWordsCheckbox.checked ? "block" : "none";
+ }
+
+ document.querySelector("#go").addEventListener("click", () => {
+ let o;
+ const input = document.querySelector("textarea").value;
+ const separator = document.querySelector("#separator").value || " ";
+
+ const words = input.trim().split(/[\n,]+/);
+ const changedWords = changeArray(words);
+
+ const sort = document.querySelector("#sort").checked;
+ if (sort) changedWords.sort();
+
+ const beforeNumber = words.length;
+ const number = changedWords.length;
+ const removedNumber = beforeNumber - number;
+ document.querySelector("#outputNumber").innerHTML = number;
+ document.querySelector("#outputRemovedNumber").innerHTML = removedNumber;
+ document.querySelector("#outputLists").innerHTML = "1";
+
+ const maxWords = document.querySelector("#maxWords").checked;
+
+ if (maxWords) {
+ const chunkify = function* (itr, size) {
+ let chunk = [];
+ for (const v of itr) {
+ chunk.push(v);
+ if (chunk.length === size) {
+ yield chunk;
+ chunk = [];
+ }
+ }
+ if (chunk.length) yield chunk;
+ };
+
+ const maxWordsN = document.querySelector("#maxWordsN").value || 20;
+ const randomizeOrder = document.querySelector("#randomizeOrder").checked;
+ if (randomizeOrder) shuffleArray(changedWords);
+
+ const chunkedLists = [...chunkify(changedWords, parseInt(maxWordsN))];
+ o = "";
+ [...chunkedLists].forEach((list) => {
+ if (sort && randomizeOrder) list.sort();
+ o += list.join(separator);
+ o += "--------------------------
";
+ });
+ document.querySelector("#outputLists").innerHTML = chunkedLists.length;
+ } else {
+ o = changedWords.join(separator);
+ }
+
+ document.querySelector("#output").innerHTML = o;
+ });
+});
+
+function changeArray(words) {
+ const lowercase = document.querySelector("#lowercase").checked;
+ const removePunctuation = document.querySelector("#removePunctuation").checked;
+ const removeDuplicates = document.querySelector("#removeDuplicates").checked;
+ const removeAdverbDuplicates = document.querySelector("#removeAdverbDuplicates").checked;
+ const removePluralDuplicates = document.querySelector("#removePluralDuplicates").checked;
+ const removeGerundDuplicates = document.querySelector("#removeGerundDuplicates").checked;
+ const removeWords = document.querySelector("#removeWords").checked;
+ const changedWords = [],
+ duplicateWords = [],
+ removedWords = [];
+
+ words.forEach((word) => {
+ let changedWord = word.trim();
+ if (lowercase) changedWord = changedWord.toLowerCase();
+
+ if (removePunctuation) {
+ changedWord = changedWord
+ .replaceAll(",", "")
+ .replaceAll(";", "")
+ .replaceAll(":", "")
+ .replaceAll(".", "")
+ .replaceAll("!", "")
+ .replaceAll("?", "")
+ .replaceAll("'", "")
+ .replaceAll('"', "")
+ .replaceAll("“", "")
+ .replaceAll("”", "");
+ }
+
+ let isDuplicate = false;
+ if (removeDuplicates) {
+ if (changedWords.includes(changedWord)) isDuplicate = true;
+
+ if (removeAdverbDuplicates) {
+ if (changedWords.includes(changedWord.replace(/ly$/, ""))) isDuplicate = true;
+ if (changedWords.includes(changedWord.replace(/ily$/, "y"))) isDuplicate = true;
+ }
+
+ if (removePluralDuplicates) {
+ if (changedWords.includes(changedWord.replace(/s$/, ""))) isDuplicate = true;
+ if (changedWords.includes(changedWord.replace(/es$/, ""))) isDuplicate = true;
+ if (changedWords.includes(changedWord.replace(/es$/, "e"))) isDuplicate = true;
+ }
+
+ if (removeGerundDuplicates) {
+ if (changedWords.includes(changedWord.replace(/ing$/, ""))) isDuplicate = true;
+ if (changedWords.includes(changedWord.replace(/ing$/, "e"))) isDuplicate = true;
+ if (changedWords.includes(changedWord.replace(/ing$/, "ed"))) isDuplicate = true;
+ }
+ }
+
+ if (removeWords) {
+ const wordsToRemove = document.querySelector("#wordsToRemove").value.toLowerCase();
+ const wordsToRemoveArr = wordsToRemove
+ .trim()
+ .split(/[\n,]+/)
+ .map((x) => x.trim());
+
+ if (wordsToRemoveArr.includes(changedWord.toLowerCase()) || wordsToRemoveArr.includes(word.toLowerCase())) {
+ removedWords.push(changedWord);
+ changedWord = "";
+ }
+ }
+
+ if (changedWord !== "") {
+ if (!isDuplicate) {
+ changedWords.push(changedWord);
+ } else {
+ duplicateWords.push(changedWord);
+ }
+ }
+ });
+
+ console.log("Removed Duplicate Words:");
+ console.log(duplicateWords);
+ console.log("Removed Words:");
+ console.log(removedWords);
+ console.log("--------------");
+
+ return changedWords;
+}
+
+function shuffleArray(array) {
+ for (let i = array.length - 1; i > 0; i--) {
+ const j = Math.floor(Math.random() * (i + 1));
+ [array[i], array[j]] = [array[j], array[i]];
+ }
+}
diff --git a/js/subpages/tumblr-tag-list-tool.js b/js/subpages/tumblr-tag-list-tool.js
deleted file mode 100644
index 7781107..0000000
--- a/js/subpages/tumblr-tag-list-tool.js
+++ /dev/null
@@ -1,75 +0,0 @@
-document.addEventListener("DOMContentLoaded", function (event) {
- if (document.querySelector(".tumblr-tag-list-tool")) {
- const eachTagInNewLineCheckbox = document.querySelector("#eachTagInNewLine");
- const separatorWrapEl = document.querySelector(".separator-wrap");
- const groupTagsCheckbox = document.querySelector("#groupTags");
- const groupTagsWrapEl = document.querySelector(".group-tags-wrap");
-
- prepare();
- eachTagInNewLineCheckbox.addEventListener("change", prepare);
- groupTagsCheckbox.addEventListener("change", prepare);
-
- function prepare() {
- if (eachTagInNewLineCheckbox.checked) {
- separatorWrapEl.style.display = "none";
- } else {
- separatorWrapEl.style.display = "block";
- }
- if (groupTagsCheckbox.checked) {
- groupTagsWrapEl.style.display = "block";
- } else {
- groupTagsWrapEl.style.display = "none";
- }
- }
-
- document.querySelector("#go").addEventListener("click", () => {
- const outputEl = document.querySelector("#output");
- const input = document.querySelector("textarea").value;
- const addHashtags = document.querySelector("#addHashtags").checked;
- const useSearch = document.querySelector("#useSearch").checked;
- const eachTagInNewLine = eachTagInNewLineCheckbox.checked;
- const groupTags = groupTagsCheckbox.checked;
- const useHeadings = groupTags && document.querySelector("#headings").checked;
- const url = document.querySelector("#url").value;
- const separator = document.querySelector("#separator").value || "";
- let o = "";
- let isHeading = false;
- let isFirstGroup = true;
-
- const groups = groupTags ? input.split(/\n\n/) : [input];
-
- groups.forEach((group) => {
- const tags = group.split(/[\n,#]+/);
- isHeading = useHeadings;
- if (groupTags && !isFirstGroup) {
- o += " ";
- }
- tags.forEach((tag) => {
- tag = tag.trim();
- if (tag !== "," && tag !== "") {
- if (isHeading) {
- o += tag + " ";
- isHeading = false;
- } else {
- const tagSafeForString = tag;
- o +=
- "" +
- (addHashtags ? "#" : "") +
- tag +
- " " +
- (eachTagInNewLine ? " " : separator);
- }
- }
- });
- isFirstGroup = false;
- });
-
- outputEl.innerHTML = o;
- });
- }
-});
diff --git a/main.js b/main.js
index 998123b..cc330b3 100644
--- a/main.js
+++ b/main.js
@@ -1,133 +1,82 @@
-/******/ (function(modules) { // webpackBootstrap
-/******/ // The module cache
-/******/ var installedModules = {};
-/******/
-/******/ // The require function
-/******/ function __webpack_require__(moduleId) {
-/******/
-/******/ // Check if module is in cache
-/******/ if(installedModules[moduleId]) {
-/******/ return installedModules[moduleId].exports;
-/******/ }
-/******/ // Create a new module (and put it into the cache)
-/******/ var module = installedModules[moduleId] = {
-/******/ i: moduleId,
-/******/ l: false,
-/******/ exports: {}
-/******/ };
-/******/
-/******/ // Execute the module function
-/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/
-/******/ // Flag the module as loaded
-/******/ module.l = true;
-/******/
-/******/ // Return the exports of the module
-/******/ return module.exports;
-/******/ }
-/******/
-/******/
-/******/ // expose the modules object (__webpack_modules__)
-/******/ __webpack_require__.m = modules;
-/******/
-/******/ // expose the module cache
-/******/ __webpack_require__.c = installedModules;
-/******/
-/******/ // define getter function for harmony exports
-/******/ __webpack_require__.d = function(exports, name, getter) {
-/******/ if(!__webpack_require__.o(exports, name)) {
-/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
-/******/ }
-/******/ };
-/******/
-/******/ // define __esModule on exports
-/******/ __webpack_require__.r = function(exports) {
-/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ }
-/******/ Object.defineProperty(exports, '__esModule', { value: true });
-/******/ };
-/******/
-/******/ // create a fake namespace object
-/******/ // mode & 1: value is a module id, require it
-/******/ // mode & 2: merge all properties of value into the ns
-/******/ // mode & 4: return value when already ns object
-/******/ // mode & 8|1: behave like require
-/******/ __webpack_require__.t = function(value, mode) {
-/******/ if(mode & 1) value = __webpack_require__(value);
-/******/ if(mode & 8) return value;
-/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
-/******/ var ns = Object.create(null);
-/******/ __webpack_require__.r(ns);
-/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
-/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
-/******/ return ns;
-/******/ };
-/******/
-/******/ // getDefaultExport function for compatibility with non-harmony modules
-/******/ __webpack_require__.n = function(module) {
-/******/ var getter = module && module.__esModule ?
-/******/ function getDefault() { return module['default']; } :
-/******/ function getModuleExports() { return module; };
-/******/ __webpack_require__.d(getter, 'a', getter);
-/******/ return getter;
-/******/ };
-/******/
-/******/ // Object.prototype.hasOwnProperty.call
-/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
-/******/
-/******/ // __webpack_public_path__
-/******/ __webpack_require__.p = "";
-/******/
-/******/
-/******/ // Load entry module and return exports
-/******/ return __webpack_require__(__webpack_require__.s = "./js/main.js");
-/******/ })
-/************************************************************************/
-/******/ ({
-
-/***/ "./css/main.scss":
-/*!***********************!*\
- !*** ./css/main.scss ***!
- \***********************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
-
-eval("var api = __webpack_require__(/*! ../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n var content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./main.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./css/main.scss\");\n\n content = content.__esModule ? content.default : content;\n\n if (typeof content === 'string') {\n content = [[module.i, content, '']];\n }\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nmodule.exports = content.locals || {};\n\n//# sourceURL=webpack:///./css/main.scss?");
-
-/***/ }),
+/*
+ * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development").
+ * This devtool is neither made for production nor for readable output files.
+ * It uses "eval()" calls to create a separate source file in the browser devtools.
+ * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
+ * or disable the default devtool with "devtool: false".
+ * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
+ */
+/******/ (() => { // webpackBootstrap
+/******/ var __webpack_modules__ = ({
/***/ "./js/main.js":
/*!********************!*\
!*** ./js/main.js ***!
\********************/
-/*! no exports provided */
-/***/ (function(module, __webpack_exports__, __webpack_require__) {
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
-eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _css_main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../css/main.scss */ \"./css/main.scss\");\n/* harmony import */ var _css_main_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_main_scss__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _subpages_tumblr_tag_list_tool__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./subpages/tumblr-tag-list-tool */ \"./js/subpages/tumblr-tag-list-tool.js\");\n/* harmony import */ var _subpages_tumblr_tag_list_tool__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_subpages_tumblr_tag_list_tool__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _subpages_notion_widgets__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./subpages/notion-widgets */ \"./js/subpages/notion-widgets.js\");\n/* harmony import */ var _subpages_notion_widgets__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_subpages_notion_widgets__WEBPACK_IMPORTED_MODULE_2__);\n\r\n\r\n//\r\n\r\n\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function (event) {\r\n //do work\r\n});\r\n\n\n//# sourceURL=webpack:///./js/main.js?");
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _css_main_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../css/main.scss */ \"./css/main.scss\");\n/* harmony import */ var _pages_tumblr_tag_list_tool__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pages/tumblr-tag-list-tool */ \"./js/pages/tumblr-tag-list-tool.js\");\n/* harmony import */ var _pages_tumblr_tag_list_tool__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_pages_tumblr_tag_list_tool__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _pages_notion_widgets__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pages/notion-widgets */ \"./js/pages/notion-widgets.js\");\n/* harmony import */ var _pages_notion_widgets__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_pages_notion_widgets__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _pages_pinterest_board__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pages/pinterest-board */ \"./js/pages/pinterest-board.js\");\n/* harmony import */ var _pages_pinterest_board__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_pages_pinterest_board__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _pages_vocabulary_manager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pages/vocabulary-manager */ \"./js/pages/vocabulary-manager.js\");\n/* harmony import */ var _pages_vocabulary_manager__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_pages_vocabulary_manager__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _pages_manual_list_sorter__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./pages/manual-list-sorter */ \"./js/pages/manual-list-sorter.js\");\n/* harmony import */ var _pages_manual_list_sorter__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_pages_manual_list_sorter__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _pages_notion_to_quizlet__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./pages/notion-to-quizlet */ \"./js/pages/notion-to-quizlet.js\");\n/* harmony import */ var _pages_notion_to_quizlet__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_pages_notion_to_quizlet__WEBPACK_IMPORTED_MODULE_6__);\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n console.log(\"hewwo :3\");\r\n});\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/main.js?");
+
+/***/ }),
+
+/***/ "./js/pages/manual-list-sorter.js":
+/*!****************************************!*\
+ !*** ./js/pages/manual-list-sorter.js ***!
+ \****************************************/
+/***/ (() => {
+
+eval("document.addEventListener(\"DOMContentLoaded\", function () {\r\n if (!document.querySelector(\".manual-list-sorter\")) return;\r\n\r\n const startBtn = document.querySelector(\"#start\");\r\n const startBtn2 = document.querySelector(\"#select\");\r\n const btn1 = document.querySelector(\"#sortInto1\");\r\n const btn2 = document.querySelector(\"#sortInto2\");\r\n const inputListTextarea = document.querySelector(\"#input\");\r\n const outputTextarea1 = document.querySelector(\"#output1\");\r\n const outputTextarea2 = document.querySelector(\"#output2\");\r\n const wordSpan = document.querySelector(\"#word\");\r\n\r\n let inputList,\r\n list1 = [],\r\n list2 = [],\r\n currentIndex,\r\n numberSelected = 0;\r\n\r\n outputTextarea1.value = \"\";\r\n outputTextarea2.value = \"\";\r\n\r\n startBtn.removeAttribute(\"disabled\");\r\n inputListTextarea.removeAttribute(\"disabled\");\r\n btn1.setAttribute(\"disabled\", \"true\");\r\n btn2.setAttribute(\"disabled\", \"true\");\r\n\r\n startBtn.addEventListener(\"click\", () => {\r\n if (!inputListTextarea.value) {\r\n alert(\"No items inserted!\");\r\n } else {\r\n outputTextarea1.value = \"\";\r\n outputTextarea2.value = \"\";\r\n document.querySelector(\"#outputNumber\").innerHTML = \"\";\r\n inputList = inputListTextarea.value.replace(/,\\s*$/, \"\").replaceAll(\",,\", \",\").split(\",\");\r\n currentIndex = -1;\r\n inputListTextarea.setAttribute(\"disabled\", \"true\");\r\n startBtn.setAttribute(\"disabled\", \"true\");\r\n startBtn2.setAttribute(\"disabled\", \"true\");\r\n btn1.removeAttribute(\"disabled\");\r\n btn2.removeAttribute(\"disabled\");\r\n wordSpan.innerHTML = inputList[currentIndex];\r\n document.querySelector(\"#manualsorting\").style.display = \"block\";\r\n nextItem();\r\n\r\n window.onbeforeunload = function () {\r\n return \"Are you sure you want to navigate away?\";\r\n };\r\n }\r\n });\r\n\r\n btn1.addEventListener(\"click\", () => {\r\n list1.push(inputList[currentIndex]);\r\n outputTextarea1.value = list1.join(\", \");\r\n nextItem();\r\n });\r\n\r\n btn2.addEventListener(\"click\", () => {\r\n list2.push(inputList[currentIndex]);\r\n outputTextarea2.value = list2.join(\", \");\r\n nextItem();\r\n });\r\n\r\n startBtn2.addEventListener(\"click\", () => {\r\n if (!inputListTextarea.value) {\r\n alert(\"No items inserted!\");\r\n } else {\r\n outputTextarea1.value = \"\";\r\n outputTextarea2.value = \"\";\r\n inputList = inputListTextarea.value.replace(/,\\s*$/, \"\").replaceAll(\",,\", \",\").split(\",\");\r\n currentIndex = -1;\r\n inputListTextarea.setAttribute(\"disabled\", \"true\");\r\n startBtn.setAttribute(\"disabled\", \"true\");\r\n startBtn2.setAttribute(\"disabled\", \"true\");\r\n btn1.removeAttribute(\"disabled\");\r\n btn2.removeAttribute(\"disabled\");\r\n wordSpan.innerHTML = inputList[currentIndex];\r\n document.querySelector(\"#selectdone\").style.display = \"block\";\r\n prepareSelectionMode();\r\n\r\n window.onbeforeunload = function () {\r\n return \"Are you sure you want to navigate away?\";\r\n };\r\n }\r\n });\r\n\r\n function prepareSelectionMode() {\r\n let content = \"\";\r\n inputList.forEach((listItem) => {\r\n content += \"\" + listItem + \"
\";\r\n });\r\n document.querySelector(\"#selects\").innerHTML = content;\r\n numberSelected = 0;\r\n document.querySelector(\"#numberselected\").innerHTML = numberSelected + \" selected\";\r\n [...document.querySelectorAll(\"#selects div\")].forEach((btn) => {\r\n btn.addEventListener(\"click\", () => {\r\n if (btn.classList.contains(\"selected\")) {\r\n btn.classList.remove(\"selected\");\r\n numberSelected--;\r\n document.querySelector(\"#numberselected\").innerHTML = numberSelected + \" selected\";\r\n } else {\r\n btn.classList.add(\"selected\");\r\n numberSelected++;\r\n document.querySelector(\"#numberselected\").innerHTML = numberSelected + \" selected\";\r\n }\r\n });\r\n });\r\n }\r\n\r\n document.querySelector(\"#selectdone\").addEventListener(\"click\", () => {\r\n list1 = [];\r\n list2 = [];\r\n\r\n [...document.querySelectorAll(\"#selects div\")].forEach((btn) => {\r\n if (btn.classList.contains(\"selected\")) {\r\n list1.push(btn.innerHTML);\r\n } else {\r\n list2.push(btn.innerHTML);\r\n }\r\n });\r\n\r\n outputTextarea1.value = list1.join(\", \");\r\n outputTextarea2.value = list2.join(\", \");\r\n document.querySelector(\"#outputNumber\").innerHTML = \"(\" + list1.length + \" and \" + list2.length + \" items)\";\r\n });\r\n\r\n function nextItem() {\r\n if (currentIndex == inputList.length - 1) {\r\n wordSpan.innerHTML = \"DONE!\";\r\n startBtn.removeAttribute(\"disabled\");\r\n inputListTextarea.removeAttribute(\"disabled\");\r\n btn1.setAttribute(\"disabled\", \"true\");\r\n btn2.setAttribute(\"disabled\", \"true\");\r\n } else {\r\n currentIndex++;\r\n wordSpan.innerHTML = inputList[currentIndex];\r\n }\r\n }\r\n});\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/pages/manual-list-sorter.js?");
/***/ }),
-/***/ "./js/subpages/notion-widgets.js":
+/***/ "./js/pages/notion-to-quizlet.js":
/*!***************************************!*\
- !*** ./js/subpages/notion-widgets.js ***!
+ !*** ./js/pages/notion-to-quizlet.js ***!
\***************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+/***/ (() => {
+
+eval("document.addEventListener(\"DOMContentLoaded\", function () {\r\n if (!document.querySelector(\".notion-to-quizlet\")) return;\r\n\r\n const inputEl = document.querySelector(\"#input\");\r\n const output1 = document.querySelector(\"#output1\");\r\n const output2 = document.querySelector(\"#output2\");\r\n\r\n generateOutput1(inputEl.value);\r\n // generateOutput2(inputEl.value);\r\n\r\n inputEl.addEventListener(\"change\", () => {\r\n generateOutput1(inputEl.value);\r\n // generateOutput2(inputEl.value);\r\n });\r\n inputEl.addEventListener(\"input\", () => {\r\n generateOutput1(inputEl.value);\r\n // generateOutput2(inputEl.value);\r\n });\r\n\r\n function generateOutput1(input) {\r\n const bulletPoints = [\"■\", \"✦\", \"✧\", \"●\", \"⬥\"];\r\n const output = input\r\n .replaceAll(/\\*\\*(.+)\\*\\*/g, \"$1\") // remove bold\r\n .replaceAll(/\\*(.+)\\*/g, \"$1\") // remove italic\r\n .replaceAll(/\\s+!\\[.*\\]\\(.*\\)\\s+/g, \"\\n\") // remove images\r\n .replaceAll(\" -\", \" \" + bulletPoints[4]) // level 5\r\n .replaceAll(\" -\", \" \" + bulletPoints[3]) // level 4\r\n .replaceAll(\" -\", \" \" + bulletPoints[2]) // level 3\r\n .replaceAll(\" -\", \" \" + bulletPoints[1]) // level 2\r\n .replaceAll(\"- \", bulletPoints[0] + \" \"); // level 1\r\n output1.value = output;\r\n copyToClipboard(output1.value);\r\n }\r\n\r\n // function generateOutput2(input) {\r\n // const output = input\r\n // .replaceAll(/\\*\\*(.+)\\*\\*/g, \"$1 \")\r\n // .replaceAll(\" -\", \" -\")\r\n // .replaceAll(\" -\", \" -\")\r\n // .replaceAll(\" -\", \" -\")\r\n // .replaceAll(\"\\n\", \" \")\r\n // .replaceAll(\"- \", \"● \");\r\n // output2.innerHTML = output;\r\n // }\r\n});\r\n\r\nfunction copyToClipboard(text) {\r\n if (window.clipboardData && window.clipboardData.setData) {\r\n // Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.\r\n return window.clipboardData.setData(\"Text\", text);\r\n } else if (document.queryCommandSupported && document.queryCommandSupported(\"copy\")) {\r\n var textarea = document.createElement(\"textarea\");\r\n textarea.textContent = text;\r\n textarea.style.position = \"fixed\"; // Prevent scrolling to bottom of page in Microsoft Edge.\r\n document.body.appendChild(textarea);\r\n textarea.select();\r\n try {\r\n return document.execCommand(\"copy\"); // Security exception may be thrown by some browsers.\r\n } catch (ex) {\r\n console.warn(\"Copy to clipboard failed.\", ex);\r\n return prompt(\"Copy to clipboard: Ctrl+C, Enter\", text);\r\n } finally {\r\n document.body.removeChild(textarea);\r\n }\r\n }\r\n}\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/pages/notion-to-quizlet.js?");
+
+/***/ }),
+
+/***/ "./js/pages/notion-widgets.js":
+/*!************************************!*\
+ !*** ./js/pages/notion-widgets.js ***!
+ \************************************/
+/***/ (() => {
-eval("const isLocal = window.location.hostname == \"localhost\";\r\nconst urlBase = isLocal ? \"http://localhost:52330/notion/\" : \"https://petracoding.github.io/notion/\";\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n if (document.querySelector(\".notion-widgets\")) {\r\n doText();\r\n const textOptionElements = document.querySelector(\"#text\").querySelectorAll(\"input, select\");\r\n [...textOptionElements].forEach((e) => e.addEventListener(\"input\", doText));\r\n }\r\n\r\n function doText() {\r\n const container = document.querySelector(\"#text\");\r\n let url = urlBase + \"text.html\";\r\n const mode = container.querySelector('[name=\"text-mode\"]:checked').value;\r\n url += \"?mode=\" + mode;\r\n const centered = container.querySelector(\"#text-centered\").checked;\r\n url += \"¢ered=\" + (centered ? \"1\" : \"0\");\r\n const size = container.querySelector(\"#text-size\").value;\r\n url += \"&size=\" + size;\r\n const fullWidth = container.querySelector(\"#text-fullWidth\").checked;\r\n url += \"&fullWidth=\" + (fullWidth ? \"1\" : \"0\");\r\n const bold = container.querySelector(\"#text-bold\").checked;\r\n url += \"&bold=\" + (bold ? \"1\" : \"0\");\r\n const italic = container.querySelector(\"#text-italic\").checked;\r\n url += \"&italic=\" + (italic ? \"1\" : \"0\");\r\n const underline = container.querySelector(\"#text-underline\").checked;\r\n url += \"&underline=\" + (underline ? \"1\" : \"0\");\r\n const color = container.querySelector(\"#text-color\").value.replace(\"#\", \"\");\r\n url += \"&color=\" + color;\r\n if (container.querySelector(\"#text-bg\").checked) {\r\n container.querySelector(\".only-show-if-bg-color\").style.visibility = \"visible\";\r\n const background = container.querySelector(\"#text-background\").value.replace(\"#\", \"\");\r\n url += \"&background=\" + background;\r\n const corners = container.querySelector(\"#text-corners\").value;\r\n url += \"&corners=\" + corners;\r\n } else {\r\n container.querySelector(\".only-show-if-bg-color\").style.visibility = \"hidden\";\r\n }\r\n const font = container.querySelector(\"#text-font\").value;\r\n url += \"&font=\" + font;\r\n const text = container.querySelector(\"#text-text\").value;\r\n url += \"&text=\" + encodeURIComponent(text).replaceAll(\"%20\", \"§\");\r\n container.querySelector(\".output\").value = url;\r\n container.querySelector(\"iframe\").setAttribute(\"src\", url);\r\n }\r\n\r\n // WIDGETS THEMSELVES:\r\n\r\n // TEXT\r\n if (document.querySelector(\"#notion-widget-text\")) {\r\n const background = findGetParameter(\"background\");\r\n const centered = findGetParameter(\"centered\");\r\n const color = findGetParameter(\"color\");\r\n const corners = findGetParameter(\"corners\");\r\n const font = findGetParameter(\"font\");\r\n const fullWidth = findGetParameter(\"fullWidth\");\r\n const mode = findGetParameter(\"mode\");\r\n const size = findGetParameter(\"size\");\r\n const text = findGetParameter(\"text\");\r\n const bold = findGetParameter(\"bold\");\r\n const italic = findGetParameter(\"italic\");\r\n const underline = findGetParameter(\"underline\");\r\n\r\n if (mode == \"dark\") document.body.classList.add(\"dark-mode\");\r\n\r\n const textEl = this.querySelector(\"#text\");\r\n\r\n if (centered == \"1\") {\r\n textEl.closest(\"div:not(#text)\").classList.add(\"centered\");\r\n }\r\n if (size) textEl.style.fontSize = size + \"px\";\r\n if (font) textEl.style.fontFamily = font;\r\n if (color) textEl.style.color = \"#\" + color;\r\n if (corners) textEl.style.borderRadius = corners + \"px\";\r\n if (fullWidth == \"1\") textEl.style.width = \"100%\";\r\n if (bold == \"1\") textEl.style.fontWeight = \"bold\";\r\n if (italic == \"1\") textEl.style.fontStyle = \"italic\";\r\n if (underline == \"1\") textEl.style.textDecoration = \"underline\";\r\n if (background) {\r\n textEl.style.backgroundColor = \"#\" + background;\r\n textEl.style.padding = \"0 0.5em\";\r\n }\r\n\r\n textEl.innerHTML = decodeURIComponent(text.replaceAll(\"§\", \"%20\"));\r\n }\r\n});\r\n\r\nfunction findGetParameter(parameterName) {\r\n var result = null,\r\n tmp = [];\r\n location.search\r\n .substr(1)\r\n .split(\"&\")\r\n .forEach(function (item) {\r\n tmp = item.split(\"=\");\r\n if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);\r\n });\r\n return result;\r\n}\r\n\n\n//# sourceURL=webpack:///./js/subpages/notion-widgets.js?");
+eval("const isLocal = window.location.hostname == \"localhost\";\r\nconst urlBase = isLocal ? \"http://localhost:52330/notion/\" : \"https://petracoding.github.io/notion/\";\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n if (document.querySelector(\".notion-widgets\")) {\r\n doText();\r\n const textOptionElements = document.querySelector(\"#text\").querySelectorAll(\"input, select\");\r\n [...textOptionElements].forEach((e) => e.addEventListener(\"input\", doText));\r\n }\r\n\r\n function doText() {\r\n const container = document.querySelector(\"#text\");\r\n let url = urlBase + \"text.html\";\r\n const mode = container.querySelector('[name=\"text-mode\"]:checked').value;\r\n url += \"?mode=\" + mode;\r\n const centered = container.querySelector(\"#text-centered\").checked;\r\n url += \"¢ered=\" + (centered ? \"1\" : \"0\");\r\n const size = container.querySelector(\"#text-size\").value;\r\n url += \"&size=\" + size;\r\n const fullWidth = container.querySelector(\"#text-fullWidth\").checked;\r\n url += \"&fullWidth=\" + (fullWidth ? \"1\" : \"0\");\r\n const bold = container.querySelector(\"#text-bold\").checked;\r\n url += \"&bold=\" + (bold ? \"1\" : \"0\");\r\n const italic = container.querySelector(\"#text-italic\").checked;\r\n url += \"&italic=\" + (italic ? \"1\" : \"0\");\r\n const underline = container.querySelector(\"#text-underline\").checked;\r\n url += \"&underline=\" + (underline ? \"1\" : \"0\");\r\n const color = container.querySelector(\"#text-color\").value.replace(\"#\", \"\");\r\n url += \"&color=\" + color;\r\n if (container.querySelector(\"#text-bg\").checked) {\r\n container.querySelector(\".only-show-if-bg-color\").style.visibility = \"visible\";\r\n container.querySelector(\".only-show-if-bg-color\").style.height = \"auto\";\r\n const background = container.querySelector(\"#text-background\").value.replace(\"#\", \"\");\r\n url += \"&background=\" + background;\r\n const corners = container.querySelector(\"#text-corners\").value;\r\n url += \"&corners=\" + corners;\r\n } else {\r\n container.querySelector(\".only-show-if-bg-color\").style.visibility = \"hidden\";\r\n container.querySelector(\".only-show-if-bg-color\").style.height = \"1px\";\r\n }\r\n const font = container.querySelector(\"#text-font\").value;\r\n url += \"&font=\" + font;\r\n const text = container.querySelector(\"#text-text\").value;\r\n url += \"&text=\" + encodeURIComponent(text).replaceAll(\"%20\", \"§\");\r\n container.querySelector(\".output\").value = url;\r\n container.querySelector(\"iframe\").setAttribute(\"src\", url);\r\n }\r\n\r\n // WIDGETS THEMSELVES:\r\n\r\n // TEXT\r\n if (document.querySelector(\"#notion-widget-text\")) {\r\n const background = findGetParameter(\"background\");\r\n const centered = findGetParameter(\"centered\");\r\n const color = findGetParameter(\"color\");\r\n const corners = findGetParameter(\"corners\");\r\n const font = findGetParameter(\"font\");\r\n const fullWidth = findGetParameter(\"fullWidth\");\r\n const mode = findGetParameter(\"mode\");\r\n const size = findGetParameter(\"size\");\r\n const text = findGetParameter(\"text\");\r\n const bold = findGetParameter(\"bold\");\r\n const italic = findGetParameter(\"italic\");\r\n const underline = findGetParameter(\"underline\");\r\n\r\n if (mode == \"dark\") document.body.classList.add(\"dark-mode\");\r\n\r\n const textEl = this.querySelector(\"#text\");\r\n\r\n if (centered == \"1\") {\r\n textEl.closest(\"div:not(#text)\").classList.add(\"centered\");\r\n }\r\n if (size) textEl.style.fontSize = size + \"px\";\r\n if (font) textEl.style.fontFamily = font;\r\n if (color) textEl.style.color = \"#\" + color;\r\n if (corners) textEl.style.borderRadius = corners + \"px\";\r\n if (fullWidth == \"1\") textEl.style.width = \"100%\";\r\n if (bold == \"1\") textEl.style.fontWeight = \"bold\";\r\n if (italic == \"1\") textEl.style.fontStyle = \"italic\";\r\n if (underline == \"1\") textEl.style.textDecoration = \"underline\";\r\n if (background) {\r\n textEl.style.backgroundColor = \"#\" + background;\r\n textEl.style.padding = \"0 0.5em\";\r\n }\r\n\r\n textEl.innerHTML = decodeURIComponent(text.replaceAll(\"§\", \"%20\"));\r\n }\r\n});\r\n\r\nfunction findGetParameter(parameterName) {\r\n var result = null,\r\n tmp = [];\r\n location.search\r\n .substr(1)\r\n .split(\"&\")\r\n .forEach(function (item) {\r\n tmp = item.split(\"=\");\r\n if (tmp[0] === parameterName) result = decodeURIComponent(tmp[1]);\r\n });\r\n return result;\r\n}\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/pages/notion-widgets.js?");
/***/ }),
-/***/ "./js/subpages/tumblr-tag-list-tool.js":
-/*!*********************************************!*\
- !*** ./js/subpages/tumblr-tag-list-tool.js ***!
- \*********************************************/
-/*! no static exports found */
-/***/ (function(module, exports) {
+/***/ "./js/pages/pinterest-board.js":
+/*!*************************************!*\
+ !*** ./js/pages/pinterest-board.js ***!
+ \*************************************/
+/***/ (() => {
-eval("document.addEventListener(\"DOMContentLoaded\", function (event) {\r\n if (document.querySelector(\".tumblr-tag-list-tool\")) {\r\n const eachTagInNewLineCheckbox = document.querySelector(\"#eachTagInNewLine\");\r\n const separatorWrapEl = document.querySelector(\".separator-wrap\");\r\n const groupTagsCheckbox = document.querySelector(\"#groupTags\");\r\n const groupTagsWrapEl = document.querySelector(\".group-tags-wrap\");\r\n\r\n prepare();\r\n eachTagInNewLineCheckbox.addEventListener(\"change\", prepare);\r\n groupTagsCheckbox.addEventListener(\"change\", prepare);\r\n\r\n function prepare() {\r\n if (eachTagInNewLineCheckbox.checked) {\r\n separatorWrapEl.style.display = \"none\";\r\n } else {\r\n separatorWrapEl.style.display = \"block\";\r\n }\r\n if (groupTagsCheckbox.checked) {\r\n groupTagsWrapEl.style.display = \"block\";\r\n } else {\r\n groupTagsWrapEl.style.display = \"none\";\r\n }\r\n }\r\n\r\n document.querySelector(\"#go\").addEventListener(\"click\", () => {\r\n const outputEl = document.querySelector(\"#output\");\r\n const input = document.querySelector(\"textarea\").value;\r\n const addHashtags = document.querySelector(\"#addHashtags\").checked;\r\n const useSearch = document.querySelector(\"#useSearch\").checked;\r\n const eachTagInNewLine = eachTagInNewLineCheckbox.checked;\r\n const groupTags = groupTagsCheckbox.checked;\r\n const useHeadings = groupTags && document.querySelector(\"#headings\").checked;\r\n const url = document.querySelector(\"#url\").value;\r\n const separator = document.querySelector(\"#separator\").value || \"\";\r\n let o = \"\";\r\n let isHeading = false;\r\n let isFirstGroup = true;\r\n\r\n const groups = groupTags ? input.split(/\\n\\n/) : [input];\r\n\r\n groups.forEach((group) => {\r\n const tags = group.split(/[\\n,#]+/);\r\n isHeading = useHeadings;\r\n if (groupTags && !isFirstGroup) {\r\n o += \" \";\r\n }\r\n tags.forEach((tag) => {\r\n tag = tag.trim();\r\n if (tag !== \",\" && tag !== \"\") {\r\n if (isHeading) {\r\n o += tag + \" \";\r\n isHeading = false;\r\n } else {\r\n const tagSafeForString = tag;\r\n o +=\r\n \"\" +\r\n (addHashtags ? \"#\" : \"\") +\r\n tag +\r\n \" \" +\r\n (eachTagInNewLine ? \" \" : separator);\r\n }\r\n }\r\n });\r\n isFirstGroup = false;\r\n });\r\n\r\n outputEl.innerHTML = o;\r\n });\r\n }\r\n});\r\n\n\n//# sourceURL=webpack:///./js/subpages/tumblr-tag-list-tool.js?");
+eval("const isLocal = window.location.hostname == \"localhost\";\r\nconst urlBase = isLocal ? \"http://localhost:52330/pinterest/board.html\" : \"https://petracoding.github.io/pinterest/board.html\";\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n if (document.querySelector(\".pinterest-board\")) {\r\n buildURL();\r\n document.querySelector(\"#your-link\").addEventListener(\"input\", buildURL);\r\n document.querySelector(\"#hide-header\").addEventListener(\"input\", buildURL);\r\n document.querySelector(\"#hide-footer\").addEventListener(\"input\", buildURL);\r\n document.querySelector(\"#transparent-bg\").addEventListener(\"input\", buildURL);\r\n }\r\n});\r\n\r\nfunction buildURL() {\r\n let url = urlBase;\r\n const link = document.querySelector(\"#your-link\").value;\r\n if (!link) {\r\n document.querySelector(\".output\").value = \"\";\r\n document.querySelector(\".outputNotion\").value = \"\";\r\n document.querySelector(\"iframe\").setAttribute(\"src\", \"\");\r\n } else {\r\n url += \"?link=\" + cleanPinterestUrl(link);\r\n const hideHeader = document.querySelector(\"#hide-header\").checked;\r\n url += \"&hideHeader=\" + (hideHeader ? \"1\" : \"0\");\r\n const hideFooter = document.querySelector(\"#hide-footer\").checked;\r\n url += \"&hideFooter=\" + (hideFooter ? \"1\" : \"0\");\r\n const transparent = document.querySelector(\"#transparent-bg\").checked;\r\n url += \"&transparent=\" + (transparent ? \"1\" : \"0\");\r\n document.querySelector(\"iframe\").setAttribute(\"src\", url);\r\n\r\n const output = ``;\r\n document.querySelector(\".output\").value = output;\r\n document.querySelector(\".outputNotion\").value = url;\r\n }\r\n}\r\n\r\nfunction cleanPinterestUrl(link) {\r\n const i = getPosition(link, \"/\", 3);\r\n return link.substr(i).substr(1);\r\n}\r\n\r\nfunction getPosition(string, subString, index) {\r\n return string.split(subString, index).join(subString).length;\r\n}\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/pages/pinterest-board.js?");
+
+/***/ }),
+
+/***/ "./js/pages/tumblr-tag-list-tool.js":
+/*!******************************************!*\
+ !*** ./js/pages/tumblr-tag-list-tool.js ***!
+ \******************************************/
+/***/ (() => {
+
+eval("document.addEventListener(\"DOMContentLoaded\", function (event) {\r\n if (document.querySelector(\".tumblr-tag-list-tool\")) {\r\n const eachTagInNewLineCheckbox = document.querySelector(\"#eachTagInNewLine\");\r\n const separatorWrapEl = document.querySelector(\".separator-wrap\");\r\n const groupTagsCheckbox = document.querySelector(\"#groupTags\");\r\n const groupTagsWrapEl = document.querySelector(\".group-tags-wrap\");\r\n\r\n prepare();\r\n eachTagInNewLineCheckbox.addEventListener(\"change\", prepare);\r\n groupTagsCheckbox.addEventListener(\"change\", prepare);\r\n\r\n function prepare() {\r\n if (eachTagInNewLineCheckbox.checked) {\r\n separatorWrapEl.style.display = \"none\";\r\n } else {\r\n separatorWrapEl.style.display = \"block\";\r\n }\r\n if (groupTagsCheckbox.checked) {\r\n groupTagsWrapEl.style.display = \"block\";\r\n } else {\r\n groupTagsWrapEl.style.display = \"none\";\r\n }\r\n }\r\n\r\n generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);\r\n\r\n const allInputs = document.querySelectorAll(\"main input, main textarea\");\r\n [...allInputs].forEach((inputEl) => {\r\n inputEl.addEventListener(\"change\", () => {\r\n generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);\r\n });\r\n inputEl.addEventListener(\"input\", () => {\r\n generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);\r\n });\r\n });\r\n\r\n // document.querySelector(\"#go\").addEventListener(\"click\", () => {\r\n // generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox);\r\n // });\r\n }\r\n});\r\n\r\nfunction generateOutput(eachTagInNewLineCheckbox, groupTagsCheckbox) {\r\n const outputEl = document.querySelector(\"#output\");\r\n const input = document.querySelector(\"textarea\").value;\r\n const addHashtags = document.querySelector(\"#addHashtags\").checked;\r\n const useSearch = document.querySelector(\"#useSearch\").checked;\r\n const eachTagInNewLine = eachTagInNewLineCheckbox.checked;\r\n const groupTags = groupTagsCheckbox.checked;\r\n const useHeadings = groupTags && document.querySelector(\"#headings\").checked;\r\n const url = document.querySelector(\"#url\").value;\r\n const separator = document.querySelector(\"#separator\").value || \"\";\r\n let o = \"\";\r\n let isHeading = false;\r\n let isFirstGroup = true;\r\n let totalTagCount = 0;\r\n\r\n const groups = groupTags ? input.split(/\\n\\n/) : [input];\r\n\r\n groups.forEach((group) => {\r\n const tags = group.split(/[\\n,#]+/);\r\n isHeading = useHeadings;\r\n if (groupTags && !isFirstGroup) {\r\n o += \" \";\r\n }\r\n let i = 0;\r\n tags.forEach((tag) => {\r\n i++;\r\n let isLastTag = i == tags.length;\r\n tag = tag.trim();\r\n if (tag !== \",\" && tag !== \"\") {\r\n if (isHeading) {\r\n o += tag + \" \";\r\n isHeading = false;\r\n } else {\r\n totalTagCount++;\r\n const tagSafeForString = tag;\r\n o +=\r\n \"\" +\r\n (addHashtags ? \"#\" : \"\") +\r\n tag +\r\n \" \" +\r\n (eachTagInNewLine ? \" \" : isLastTag ? \"\" : separator);\r\n }\r\n }\r\n });\r\n isFirstGroup = false;\r\n });\r\n\r\n outputEl.innerHTML = o;\r\n\r\n if (totalTagCount > 100) {\r\n document.querySelector(\"#warning\").innerHTML = \"Warning: You have \" + totalTagCount + \" tags. It's not possible to have more than 100 tags in a single tumblr post!\";\r\n } else {\r\n document.querySelector(\"#warning\").innerHTML = \"\";\r\n }\r\n}\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/pages/tumblr-tag-list-tool.js?");
+
+/***/ }),
+
+/***/ "./js/pages/vocabulary-manager.js":
+/*!****************************************!*\
+ !*** ./js/pages/vocabulary-manager.js ***!
+ \****************************************/
+/***/ (() => {
+
+eval("document.addEventListener(\"DOMContentLoaded\", function () {\r\n if (!document.querySelector(\".vocabulary-manager\")) return;\r\n\r\n const removeDuplicatesCheckbox = document.querySelector(\"#removeDuplicates\");\r\n const maxWordsCheckbox = document.querySelector(\"#maxWords\");\r\n const removeWordsCheckbox = document.querySelector(\"#removeWords\");\r\n\r\n prepare();\r\n removeDuplicatesCheckbox.addEventListener(\"change\", prepare);\r\n maxWordsCheckbox.addEventListener(\"change\", prepare);\r\n removeWordsCheckbox.addEventListener(\"change\", prepare);\r\n\r\n function prepare() {\r\n document.querySelector(\".wrap-removeDuplicates\").style.display = removeDuplicatesCheckbox.checked ? \"block\" : \"none\";\r\n document.querySelector(\".wrap-maxWords\").style.display = maxWordsCheckbox.checked ? \"block\" : \"none\";\r\n document.querySelector(\".wrap-removeWords\").style.display = removeWordsCheckbox.checked ? \"block\" : \"none\";\r\n }\r\n\r\n document.querySelector(\"#go\").addEventListener(\"click\", () => {\r\n let o;\r\n const input = document.querySelector(\"textarea\").value;\r\n const separator = document.querySelector(\"#separator\").value || \" \";\r\n\r\n const words = input.trim().split(/[\\n,]+/);\r\n const changedWords = changeArray(words);\r\n\r\n const sort = document.querySelector(\"#sort\").checked;\r\n if (sort) changedWords.sort();\r\n\r\n const beforeNumber = words.length;\r\n const number = changedWords.length;\r\n const removedNumber = beforeNumber - number;\r\n document.querySelector(\"#outputNumber\").innerHTML = number;\r\n document.querySelector(\"#outputRemovedNumber\").innerHTML = removedNumber;\r\n document.querySelector(\"#outputLists\").innerHTML = \"1\";\r\n\r\n const maxWords = document.querySelector(\"#maxWords\").checked;\r\n\r\n if (maxWords) {\r\n const chunkify = function* (itr, size) {\r\n let chunk = [];\r\n for (const v of itr) {\r\n chunk.push(v);\r\n if (chunk.length === size) {\r\n yield chunk;\r\n chunk = [];\r\n }\r\n }\r\n if (chunk.length) yield chunk;\r\n };\r\n\r\n const maxWordsN = document.querySelector(\"#maxWordsN\").value || 20;\r\n const randomizeOrder = document.querySelector(\"#randomizeOrder\").checked;\r\n if (randomizeOrder) shuffleArray(changedWords);\r\n\r\n const chunkedLists = [...chunkify(changedWords, parseInt(maxWordsN))];\r\n o = \"\";\r\n [...chunkedLists].forEach((list) => {\r\n if (sort && randomizeOrder) list.sort();\r\n o += list.join(separator);\r\n o += \"--------------------------
\";\r\n });\r\n document.querySelector(\"#outputLists\").innerHTML = chunkedLists.length;\r\n } else {\r\n o = changedWords.join(separator);\r\n }\r\n\r\n document.querySelector(\"#output\").innerHTML = o;\r\n });\r\n});\r\n\r\nfunction changeArray(words) {\r\n const lowercase = document.querySelector(\"#lowercase\").checked;\r\n const removePunctuation = document.querySelector(\"#removePunctuation\").checked;\r\n const removeDuplicates = document.querySelector(\"#removeDuplicates\").checked;\r\n const removeAdverbDuplicates = document.querySelector(\"#removeAdverbDuplicates\").checked;\r\n const removePluralDuplicates = document.querySelector(\"#removePluralDuplicates\").checked;\r\n const removeGerundDuplicates = document.querySelector(\"#removeGerundDuplicates\").checked;\r\n const removeWords = document.querySelector(\"#removeWords\").checked;\r\n const changedWords = [],\r\n duplicateWords = [],\r\n removedWords = [];\r\n\r\n words.forEach((word) => {\r\n let changedWord = word.trim();\r\n if (lowercase) changedWord = changedWord.toLowerCase();\r\n\r\n if (removePunctuation) {\r\n changedWord = changedWord\r\n .replaceAll(\",\", \"\")\r\n .replaceAll(\";\", \"\")\r\n .replaceAll(\":\", \"\")\r\n .replaceAll(\".\", \"\")\r\n .replaceAll(\"!\", \"\")\r\n .replaceAll(\"?\", \"\")\r\n .replaceAll(\"'\", \"\")\r\n .replaceAll('\"', \"\")\r\n .replaceAll(\"“\", \"\")\r\n .replaceAll(\"”\", \"\");\r\n }\r\n\r\n let isDuplicate = false;\r\n if (removeDuplicates) {\r\n if (changedWords.includes(changedWord)) isDuplicate = true;\r\n\r\n if (removeAdverbDuplicates) {\r\n if (changedWords.includes(changedWord.replace(/ly$/, \"\"))) isDuplicate = true;\r\n if (changedWords.includes(changedWord.replace(/ily$/, \"y\"))) isDuplicate = true;\r\n }\r\n\r\n if (removePluralDuplicates) {\r\n if (changedWords.includes(changedWord.replace(/s$/, \"\"))) isDuplicate = true;\r\n if (changedWords.includes(changedWord.replace(/es$/, \"\"))) isDuplicate = true;\r\n if (changedWords.includes(changedWord.replace(/es$/, \"e\"))) isDuplicate = true;\r\n }\r\n\r\n if (removeGerundDuplicates) {\r\n if (changedWords.includes(changedWord.replace(/ing$/, \"\"))) isDuplicate = true;\r\n if (changedWords.includes(changedWord.replace(/ing$/, \"e\"))) isDuplicate = true;\r\n if (changedWords.includes(changedWord.replace(/ing$/, \"ed\"))) isDuplicate = true;\r\n }\r\n }\r\n\r\n if (removeWords) {\r\n const wordsToRemove = document.querySelector(\"#wordsToRemove\").value.toLowerCase();\r\n const wordsToRemoveArr = wordsToRemove\r\n .trim()\r\n .split(/[\\n,]+/)\r\n .map((x) => x.trim());\r\n\r\n if (wordsToRemoveArr.includes(changedWord.toLowerCase()) || wordsToRemoveArr.includes(word.toLowerCase())) {\r\n removedWords.push(changedWord);\r\n changedWord = \"\";\r\n }\r\n }\r\n\r\n if (changedWord !== \"\") {\r\n if (!isDuplicate) {\r\n changedWords.push(changedWord);\r\n } else {\r\n duplicateWords.push(changedWord);\r\n }\r\n }\r\n });\r\n\r\n console.log(\"Removed Duplicate Words:\");\r\n console.log(duplicateWords);\r\n console.log(\"Removed Words:\");\r\n console.log(removedWords);\r\n console.log(\"--------------\");\r\n\r\n return changedWords;\r\n}\r\n\r\nfunction shuffleArray(array) {\r\n for (let i = array.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [array[i], array[j]] = [array[j], array[i]];\r\n }\r\n}\r\n\n\n//# sourceURL=webpack://petracoding-github-io/./js/pages/vocabulary-manager.js?");
/***/ }),
@@ -135,10 +84,10 @@ eval("document.addEventListener(\"DOMContentLoaded\", function (event) {\r\n if
/*!****************************************************************************************************!*\
!*** ./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./css/main.scss ***!
\****************************************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((module, __webpack_exports__, __webpack_require__) => {
-eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.i, \"@font-face {\\n font-family: \\\"basiic\\\";\\n src: url(https://cinni.net/fonts/basiic.ttf); }\\n\\n* {\\n box-sizing: border-box;\\n color: #251d35; }\\n\\nbody {\\n font-family: \\\"basiic\\\", \\\"Mukta\\\", sans-serif;\\n letter-spacing: -0.03em;\\n font-size: 17px;\\n line-height: 1.8;\\n display: flex;\\n justify-content: center;\\n background: #f4ecec; }\\n @media (min-width: 1000px) {\\n body {\\n font-size: 22px;\\n line-height: 2; } }\\n\\na, a:hover, a:focus, a:visited {\\n color: #1d5999; }\\n\\nmain {\\n width: 95%;\\n max-width: 850px; }\\n @media (min-width: 1000px) {\\n main {\\n width: 90%;\\n padding-top: 10vh;\\n padding-bottom: 10vh; } }\\n\\np {\\n margin: 0.5em 0;\\n text-align: justify; }\\n\\nul {\\n margin: 0.5em 0;\\n padding-left: 1.5em; }\\n\\nh1,\\nh2 {\\n margin-bottom: 0;\\n line-height: 1.5; }\\n\\nh2 {\\n margin-top: 1.5em;\\n font-size: 20px; }\\n @media (min-width: 1000px) {\\n h2 {\\n font-size: 28px; } }\\n\\n.cursor {\\n animation: blink 1s step-start 0s infinite; }\\n\\n@keyframes blink {\\n 50% {\\n opacity: 0; } }\\n\\n@media (prefers-color-scheme: dark) {\\n body {\\n background: #0c0b0e; }\\n * {\\n color: #bebcc3; }\\n a, a:hover, a:focus, a:visited {\\n color: #6c89b7; } }\\n\\n.tumblr-tag-list-tool button,\\n.tumblr-tag-list-tool input[type=\\\"text\\\"],\\n.tumblr-tag-list-tool textarea {\\n font-family: \\\"Mukta\\\", sans-serif;\\n font-size: 16px;\\n line-height: 1.75;\\n background: #eee4e4;\\n border: 1px solid #898989;\\n padding: 5px 15px; }\\n @media (min-width: 1000px) {\\n .tumblr-tag-list-tool button,\\n .tumblr-tag-list-tool input[type=\\\"text\\\"],\\n .tumblr-tag-list-tool textarea {\\n font-size: 22px; } }\\n .tumblr-tag-list-tool button:focus,\\n .tumblr-tag-list-tool input[type=\\\"text\\\"]:focus,\\n .tumblr-tag-list-tool textarea:focus {\\n outline: none;\\n border: 1px solid black; }\\n\\n.tumblr-tag-list-tool input[type=\\\"text\\\"] {\\n margin-top: 10px;\\n width: 100%; }\\n\\n.tumblr-tag-list-tool textarea {\\n width: 100%;\\n margin: 10px 0;\\n min-height: 250px; }\\n\\n.tumblr-tag-list-tool button {\\n margin: 20px 0;\\n cursor: pointer; }\\n .tumblr-tag-list-tool button:hover, .tumblr-tag-list-tool button:focus {\\n filter: brightness(0.95); }\\n\\n.tumblr-tag-list-tool span {\\n display: block;\\n margin-top: 30px; }\\n\\n.tumblr-tag-list-tool label {\\n width: 100%;\\n display: block;\\n margin-top: 10px; }\\n\\n.tumblr-tag-list-tool input[type=\\\"checkbox\\\"] {\\n filter: saturate(0) brightness(0.9); }\\n\\n.tumblr-tag-list-tool #output {\\n padding: 10px;\\n border: 2px solid lightgray;\\n max-height: 85vh;\\n overflow-y: auto; }\\n .tumblr-tag-list-tool #output:empty {\\n display: none; }\\n\\n.tumblr-tag-list-tool .wrap {\\n margin-left: 30px;\\n margin-bottom: 20px; }\\n\\n@media (prefers-color-scheme: dark) {\\n .tumblr-tag-list-tool input[type=\\\"text\\\"],\\n .tumblr-tag-list-tool textarea,\\n .tumblr-tag-list-tool button {\\n color: #bebcc3;\\n background: #2a2a2c;\\n border-color: #2a2a2c; }\\n .tumblr-tag-list-tool input[type=\\\"text\\\"]:focus,\\n .tumblr-tag-list-tool textarea:focus,\\n .tumblr-tag-list-tool button:focus {\\n border-color: #f4ecec; }\\n .tumblr-tag-list-tool input[type=\\\"checkbox\\\"] {\\n filter: invert(1) saturate(0); }\\n .tumblr-tag-list-tool button:hover, .tumblr-tag-list-tool button:focus {\\n filter: brightness(0.8); } }\\n\\n.notion-widgets button,\\n.notion-widgets input[type=\\\"text\\\"],\\n.notion-widgets input[type=\\\"number\\\"],\\n.notion-widgets input[type=\\\"color\\\"],\\n.notion-widgets textarea,\\n.notion-widgets select {\\n font-family: \\\"Mukta\\\", sans-serif;\\n font-size: 16px;\\n line-height: 1.75;\\n background: #eee4e4;\\n border: 1px solid #898989;\\n padding: 5px 15px;\\n margin-bottom: 0.5em; }\\n @media (min-width: 1000px) {\\n .notion-widgets button,\\n .notion-widgets input[type=\\\"text\\\"],\\n .notion-widgets input[type=\\\"number\\\"],\\n .notion-widgets input[type=\\\"color\\\"],\\n .notion-widgets textarea,\\n .notion-widgets select {\\n font-size: 22px; } }\\n .notion-widgets button:focus,\\n .notion-widgets input[type=\\\"text\\\"]:focus,\\n .notion-widgets input[type=\\\"number\\\"]:focus,\\n .notion-widgets input[type=\\\"color\\\"]:focus,\\n .notion-widgets textarea:focus,\\n .notion-widgets select:focus {\\n outline: none;\\n border: 1px solid black; }\\n\\n.notion-widgets input[type=\\\"text\\\"] {\\n margin-top: 10px;\\n width: 100%; }\\n\\n.notion-widgets textarea {\\n width: 100%;\\n min-height: 150px; }\\n\\n.notion-widgets h1:not(:first-child) {\\n margin-top: 10vh; }\\n\\n.notion-widgets h2 {\\n margin-top: 0;\\n margin-bottom: 0.5em; }\\n\\n.notion-widgets span {\\n display: block; }\\n\\n.notion-widgets label {\\n width: 100%;\\n display: block; }\\n\\n.notion-widgets input[type=\\\"radio\\\"],\\n.notion-widgets input[type=\\\"checkbox\\\"] {\\n filter: saturate(0) brightness(0.9); }\\n\\n.notion-widgets #output {\\n padding: 10px;\\n border: 2px solid lightgray;\\n max-height: 85vh;\\n overflow-y: auto; }\\n .notion-widgets #output:empty {\\n display: none; }\\n\\n.notion-widgets .wrap {\\n margin-left: 30px;\\n margin-bottom: 20px; }\\n\\n.notion-widgets iframe {\\n width: 100%;\\n border: 1px solid #898989;\\n margin-bottom: 1em; }\\n\\n.notion-widgets section {\\n display: flex;\\n gap: 30px; }\\n .notion-widgets section > * {\\n flex: 0 0 50%; }\\n\\n.notion-widgets .output {\\n font-size: 0.85em; }\\n\\n@media (prefers-color-scheme: dark) {\\n .notion-widgets input[type=\\\"text\\\"],\\n .notion-widgets input[type=\\\"number\\\"],\\n .notion-widgets input[type=\\\"color\\\"],\\n .notion-widgets textarea,\\n .notion-widgets button,\\n .notion-widgets select {\\n color: #bebcc3;\\n background: #2a2a2c;\\n border-color: #2a2a2c; }\\n .notion-widgets input[type=\\\"text\\\"]:focus,\\n .notion-widgets input[type=\\\"number\\\"]:focus,\\n .notion-widgets input[type=\\\"color\\\"]:focus,\\n .notion-widgets textarea:focus,\\n .notion-widgets button:focus,\\n .notion-widgets select:focus {\\n border-color: #f4ecec; }\\n .notion-widgets input[type=\\\"checkbox\\\"] {\\n filter: invert(1) saturate(0); }\\n .notion-widgets button:hover, .notion-widgets button:focus {\\n filter: brightness(0.8); }\\n .notion-widgets iframe {\\n border: 2px solid white; } }\\n\\n.notion-widget {\\n position: relative;\\n display: flex;\\n justify-content: center;\\n align-items: center;\\n height: 100%;\\n overflow: hidden;\\n background-color: white !important; }\\n .notion-widget.dark-mode {\\n background-color: #191919 !important; }\\n .notion-widget .back-link {\\n position: absolute;\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0; }\\n .notion-widget > * {\\n width: 100%; }\\n .notion-widget > *.centered {\\n display: flex;\\n justify-content: center; }\\n .notion-widget > *.centered #text {\\n text-align: center; }\\n .notion-widget #text {\\n display: inline-block;\\n letter-spacing: 0; }\\n\\n@media (prefers-color-scheme: dark) {\\n .notion-widget {\\n background-color: white !important; }\\n .notion-widget.dark-mode {\\n background-color: #191919 !important; } }\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n\n\n//# sourceURL=webpack:///./css/main.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js");
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/noSourceMaps.js */ \"./node_modules/css-loader/dist/runtime/noSourceMaps.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ \"./node_modules/css-loader/dist/runtime/api.js\");\n/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__);\n// Imports\n\n\nvar ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_noSourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default()));\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, `.tumblr-tag-list-tool span {\n display: block;\n margin-top: 30px;\n}\n.tumblr-tag-list-tool label {\n width: 100%;\n display: block;\n margin-top: 10px;\n}\n.tumblr-tag-list-tool #warning {\n color: red;\n line-height: 1;\n font-size: 0.85em;\n}\n.tumblr-tag-list-tool #output {\n padding: 20px;\n border: 2px solid lightgray;\n border-radius: 8px;\n max-height: 85vh;\n overflow-y: auto;\n margin-top: 1em;\n}\n.tumblr-tag-list-tool #output,\n.tumblr-tag-list-tool #output * {\n user-select: auto;\n}\n.tumblr-tag-list-tool #output:empty {\n display: none;\n}\n.tumblr-tag-list-tool #output a {\n color: currentColor !important;\n background: none !important;\n animation: none !important;\n transition: none !important;\n transform: none !important;\n text-decoration: underline;\n}\n.tumblr-tag-list-tool #output a:hover, .tumblr-tag-list-tool #output a:focus {\n text-decoration: none;\n}\n.tumblr-tag-list-tool .wrap {\n margin-left: 30px;\n margin-bottom: 20px;\n}\n\n.notion-widgets button,\n.notion-widgets input[type=text],\n.notion-widgets input[type=number],\n.notion-widgets input[type=color],\n.notion-widgets textarea,\n.notion-widgets select {\n font-family: \"Mukta\", sans-serif;\n font-size: 16px;\n line-height: 1.75;\n background: #eee4e4;\n border: 1px solid rgb(137, 137, 137);\n padding: 5px 15px;\n margin-bottom: 0.5em;\n}\n@media (min-width: 1000px) {\n .notion-widgets button,\n .notion-widgets input[type=text],\n .notion-widgets input[type=number],\n .notion-widgets input[type=color],\n .notion-widgets textarea,\n .notion-widgets select {\n font-size: 22px;\n }\n}\n.notion-widgets button:focus,\n.notion-widgets input[type=text]:focus,\n.notion-widgets input[type=number]:focus,\n.notion-widgets input[type=color]:focus,\n.notion-widgets textarea:focus,\n.notion-widgets select:focus {\n outline: none;\n border: 1px solid black;\n}\n.notion-widgets input[type=text] {\n margin-top: 10px;\n width: 100%;\n}\n.notion-widgets textarea {\n width: 100%;\n min-height: 150px;\n}\n.notion-widgets h1:not(:first-child) {\n margin-top: 10vh;\n}\n.notion-widgets h2 {\n margin-top: 0;\n margin-bottom: 0.5em;\n}\n.notion-widgets span {\n display: block;\n}\n.notion-widgets label {\n width: 100%;\n display: block;\n}\n.notion-widgets input[type=radio],\n.notion-widgets input[type=checkbox] {\n filter: saturate(0) brightness(0.9);\n}\n.notion-widgets #output {\n padding: 10px;\n border: 2px solid lightgray;\n max-height: 85vh;\n overflow-y: auto;\n}\n.notion-widgets #output:empty {\n display: none;\n}\n.notion-widgets .wrap {\n margin-left: 30px;\n margin-bottom: 20px;\n}\n.notion-widgets iframe {\n width: 100%;\n border: 1px solid rgb(137, 137, 137);\n margin-bottom: 1em;\n}\n.notion-widgets section {\n display: flex;\n gap: 30px;\n}\n.notion-widgets section > * {\n flex: 0 0 50%;\n}\n.notion-widgets .output {\n font-size: 0.85em;\n}\n\n@media (prefers-color-scheme: dark) {\n .notion-widgets input[type=text],\n .notion-widgets input[type=number],\n .notion-widgets input[type=color],\n .notion-widgets textarea,\n .notion-widgets button,\n .notion-widgets select {\n color: rgb(190, 188, 195);\n background: rgb(42, 42, 44);\n border-color: rgb(42, 42, 44);\n }\n .notion-widgets input[type=text]:focus,\n .notion-widgets input[type=number]:focus,\n .notion-widgets input[type=color]:focus,\n .notion-widgets textarea:focus,\n .notion-widgets button:focus,\n .notion-widgets select:focus {\n border-color: #f4ecec;\n }\n .notion-widgets input[type=checkbox] {\n filter: invert(1) saturate(0);\n }\n .notion-widgets button:hover, .notion-widgets button:focus {\n filter: brightness(0.8);\n }\n .notion-widgets iframe {\n border: 2px solid white;\n }\n}\n.notion-widget {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n overflow: hidden;\n background-color: white !important;\n}\n.notion-widget.dark-mode {\n background-color: rgb(25, 25, 25) !important;\n}\n.notion-widget > * {\n width: 100%;\n}\n.notion-widget > *.centered {\n display: flex;\n justify-content: center;\n}\n.notion-widget > *.centered #text {\n text-align: center;\n}\n.notion-widget #text {\n display: inline-block;\n letter-spacing: 0;\n}\n\n@media (prefers-color-scheme: dark) {\n .notion-widget {\n background-color: white !important;\n }\n .notion-widget.dark-mode {\n background-color: rgb(25, 25, 25) !important;\n }\n}\n.pinterest-board h1:not(:first-child) {\n margin-top: 10vh;\n}\n.pinterest-board h2 {\n font-size: 2em;\n margin-top: 0;\n margin-bottom: 0;\n}\n.pinterest-board span {\n display: block;\n}\n.pinterest-board label {\n width: 100%;\n display: block;\n}\n.pinterest-board #output {\n padding: 10px;\n border: 2px solid lightgray;\n max-height: 85vh;\n overflow-y: auto;\n}\n.pinterest-board #output:empty {\n display: none;\n}\n.pinterest-board .wrap {\n margin-left: 30px;\n margin-bottom: 20px;\n}\n.pinterest-board iframe {\n width: 100%;\n border: 1px solid rgb(137, 137, 137);\n border-radius: 8px;\n margin-bottom: 1em;\n height: 500px;\n}\n.pinterest-board .output,\n.pinterest-board .outputNotion {\n font-size: 0.85em;\n min-height: 2em;\n}\n@media (max-width: 900px) {\n .pinterest-board .output,\n .pinterest-board .outputNotion {\n min-height: 6em;\n }\n}\n\n@media (prefers-color-scheme: dark) {\n .pinterest-board iframe {\n border: 2px solid white;\n }\n}\n.manual-list-sorter #word {\n font-size: 1.5em;\n}\n.manual-list-sorter #selects {\n display: flex;\n flex-wrap: wrap;\n user-select: none;\n}\n.manual-list-sorter #selects div {\n padding: 5px 10px;\n cursor: pointer;\n border-radius: 10px;\n}\n.manual-list-sorter #selects div:hover {\n background: rgba(255, 255, 255, 0.07);\n}\n.manual-list-sorter #selects div.selected {\n background: rgba(255, 255, 255, 0.2);\n}\n@media (min-width: 500px) {\n .manual-list-sorter .two-lists {\n display: flex;\n }\n .manual-list-sorter .two-lists textarea:first-child {\n margin-right: 0.5em;\n }\n .manual-list-sorter .two-lists textarea:last-child {\n margin-left: 0.5em;\n }\n .manual-list-sorter #word {\n font-size: 3em;\n }\n}\n@media (max-width: 900px) {\n .manual-list-sorter #word ~ button:last-child {\n margin-top: 0;\n }\n}\n\n* {\n font-family: \"Noto Sans Mono\", \"Consolas\", \"SF Mono\", monospace;\n box-sizing: border-box;\n color: #2f283c;\n}\n\nh1,\nh2 {\n user-select: none;\n}\n\nbody {\n padding: 10px;\n font-size: 16px;\n line-height: 1.5;\n display: flex;\n justify-content: center;\n background: #f8f2f2;\n}\n@media (min-width: 1000px) {\n body {\n font-size: 19px;\n line-height: 1.7;\n }\n}\n\na, a small, a:visited, a:visited small {\n color: #084a90;\n text-decoration: none;\n display: inline-block;\n transition: transform 0.3s ease;\n}\n@media (max-width: 900px) {\n a, a small, a:visited, a:visited small {\n display: inline;\n }\n}\na:hover, a:hover small, a:focus, a:focus small {\n background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);\n background-clip: text;\n color: transparent;\n animation: rainbow_animation 1.5s ease-in-out infinite;\n background-size: 400% 100%;\n text-decoration-style: wavy;\n transform: scale(1.03) rotate(-1deg);\n}\n\n@keyframes rainbow_animation {\n 0%, 100% {\n background-position: 0 0;\n }\n 50% {\n background-position: 100% 0;\n }\n}\n::selection {\n background: #1d5999;\n}\n\nmain {\n width: 95%;\n max-width: 880px;\n}\n@media (min-width: 1000px) {\n main {\n width: 90%;\n padding-top: 10vh;\n padding-bottom: 10vh;\n }\n}\n@media (min-width: 1000px) and (max-height: 800px) {\n main {\n padding-top: 5vh;\n padding-bottom: 5vh;\n }\n}\n\np {\n margin: 0.5em 0;\n text-align: justify;\n}\n\nul {\n margin: 0.5em 0;\n padding-left: 1.1em;\n}\n\nli {\n margin: 0.3em 0;\n}\nli .md {\n vertical-align: middle;\n}\n\nh1 {\n letter-spacing: 4px;\n}\n\nh1,\nh2 {\n margin-bottom: 0;\n line-height: 1.5;\n}\n\nh2 {\n margin-top: 1.5em;\n font-size: 20px;\n}\n@media (min-width: 1000px) {\n h2 {\n font-size: 28px;\n }\n}\n\nsmall {\n font-size: 0.75em;\n}\n\nhr {\n border: 0;\n height: 1px;\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0), currentColor, rgba(0, 0, 0, 0));\n margin: 1em 0;\n}\n\n.cursor {\n animation: blink 1s step-start 0s infinite;\n}\n\n.md.hydrated {\n font-size: 1.1em;\n transform: translateX(-5px);\n}\n\n@keyframes blink {\n 50% {\n opacity: 0;\n }\n}\n.back-link {\n position: fixed;\n top: 0;\n left: 0;\n z-index: 1;\n line-height: 1;\n}\n.back-link a {\n display: block;\n text-decoration: none;\n color: #251d35;\n padding: 15px;\n font-size: 32px;\n text-decoration: none;\n transition: 0.3s ease;\n}\n@media (max-width: 900px) {\n .back-link a {\n padding: 10px;\n font-size: 24px;\n }\n}\n.back-link a:hover, .back-link a:focus {\n text-decoration: none;\n color: #251d35;\n transform: scale(1.5) rotate(20deg);\n}\n\n/*\n\tFORM\n*/\nbutton,\ninput[type=text],\ninput[type=number],\ninput[type=color],\ntextarea,\nselect {\n font-size: 1em;\n line-height: 1.75;\n background: #eee4e4;\n border: 1px solid rgb(137, 137, 137);\n padding: 5px 15px;\n border-radius: 8px;\n transition: 0.4s ease;\n}\nbutton:focus,\ninput[type=text]:focus,\ninput[type=number]:focus,\ninput[type=color]:focus,\ntextarea:focus,\nselect:focus {\n outline: none;\n border: 1px solid black;\n}\n\nlabel {\n cursor: pointer;\n}\n\ninput[type=text] {\n margin-top: 10px;\n width: 100%;\n}\n\ninput[type=radio],\ninput[type=checkbox] {\n filter: saturate(0) brightness(0.9);\n}\n\ntextarea {\n width: 100%;\n margin: 10px 0;\n min-height: 250px;\n}\n\nbutton {\n margin: 20px 0;\n cursor: pointer;\n transition: 0.4s ease;\n font-size: 1.1em;\n}\nbutton span {\n display: inline-block;\n margin: 0 !important;\n transition: transform 0.4s ease;\n}\nbutton:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\nbutton:not([disabled]):hover, button:not([disabled]):focus {\n filter: brightness(0.95);\n outline: none;\n border: 1px solid black;\n}\nbutton:not([disabled]):hover span, button:not([disabled]):focus span {\n background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);\n background-clip: text;\n color: transparent;\n animation: rainbow_animation 1.5s ease-in-out infinite;\n background-size: 400% 100%;\n text-decoration-style: wavy;\n transform: scale(1.04) rotate(-2deg);\n}\nbutton:not([disabled]):hover span {\n background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);\n background-clip: text;\n color: transparent;\n animation: rainbow_animation 1.5s ease-in-out infinite;\n background-size: 400% 100%;\n text-decoration-style: wavy;\n transform: scale(1.03) rotate(-1deg);\n}\nbutton:not([disabled]):active {\n transform: scale(0.9);\n}\n\n/*\n\tDARK SCHEME\n*/\nbody {\n background: rgb(12, 11, 14);\n}\n\n* {\n color: rgb(168, 166, 172);\n}\n\na, a small, a:visited, a:visited small {\n color: #578adb;\n}\na:hover, a:hover small, a:focus, a:focus small {\n background: linear-gradient(to right, #0099ff, #00ff00, #ff3399, #6666ff);\n background-clip: text;\n color: transparent;\n animation: rainbow_animation 1.5s ease-in-out infinite;\n background-size: 400% 100%;\n text-decoration-style: wavy;\n}\n\n::selection {\n background: #3b609c;\n}\n\n.back-link a {\n color: rgb(190, 188, 195);\n}\n.back-link a:hover, .back-link a:focus {\n color: rgb(190, 188, 195);\n}\n\nbutton,\ninput[type=text],\ninput[type=number],\ninput[type=color],\ntextarea,\nselect {\n color: rgb(190, 188, 195);\n background: rgb(42, 42, 44);\n border-color: rgb(42, 42, 44);\n}\nbutton:focus,\ninput[type=text]:focus,\ninput[type=number]:focus,\ninput[type=color]:focus,\ntextarea:focus,\nselect:focus {\n border-color: #f4ecec;\n}\n\ninput[type=radio],\ninput[type=checkbox] {\n filter: invert(1) saturate(0);\n}\n\nbutton:not([disabled]):hover, button:not([disabled]):focus {\n filter: brightness(0.8);\n border-color: #f4ecec;\n}`, \"\"]);\n// Exports\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___);\n\n\n//# sourceURL=webpack://petracoding-github-io/./css/main.scss?./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js");
/***/ }),
@@ -146,11 +95,32 @@ eval("// Imports\nvar ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../n
/*!*****************************************************!*\
!*** ./node_modules/css-loader/dist/runtime/api.js ***!
\*****************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((module) => {
+
+"use strict";
+eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = [];\n\n // return the list of modules as css string\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n content += cssWithMappingToString(item);\n if (needLayer) {\n content += \"}\";\n }\n if (item[2]) {\n content += \"}\";\n }\n if (item[4]) {\n content += \"}\";\n }\n return content;\n }).join(\"\");\n };\n\n // import a list of modules into the list\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n var alreadyImportedModules = {};\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n list.push(item);\n }\n };\n return list;\n};\n\n//# sourceURL=webpack://petracoding-github-io/./node_modules/css-loader/dist/runtime/api.js?");
+
+/***/ }),
+
+/***/ "./node_modules/css-loader/dist/runtime/noSourceMaps.js":
+/*!**************************************************************!*\
+ !*** ./node_modules/css-loader/dist/runtime/noSourceMaps.js ***!
+ \**************************************************************/
+/***/ ((module) => {
"use strict";
-eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\n// css base code, injected by the css-loader\n// eslint-disable-next-line func-names\nmodule.exports = function (useSourceMap) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = cssWithMappingToString(item, useSourceMap);\n\n if (item[2]) {\n return \"@media \".concat(item[2], \" {\").concat(content, \"}\");\n }\n\n return content;\n }).join('');\n }; // import a list of modules into the list\n // eslint-disable-next-line func-names\n\n\n list.i = function (modules, mediaQuery, dedupe) {\n if (typeof modules === 'string') {\n // eslint-disable-next-line no-param-reassign\n modules = [[null, modules, '']];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var i = 0; i < this.length; i++) {\n // eslint-disable-next-line prefer-destructuring\n var id = this[i][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _i = 0; _i < modules.length; _i++) {\n var item = [].concat(modules[_i]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (mediaQuery) {\n if (!item[2]) {\n item[2] = mediaQuery;\n } else {\n item[2] = \"\".concat(mediaQuery, \" and \").concat(item[2]);\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};\n\nfunction cssWithMappingToString(item, useSourceMap) {\n var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring\n\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (useSourceMap && typeof btoa === 'function') {\n var sourceMapping = toComment(cssMapping);\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || '').concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join('\\n');\n }\n\n return [content].join('\\n');\n} // Adapted from convert-source-map (MIT)\n\n\nfunction toComment(sourceMap) {\n // eslint-disable-next-line no-undef\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n return \"/*# \".concat(data, \" */\");\n}\n\n//# sourceURL=webpack:///./node_modules/css-loader/dist/runtime/api.js?");
+eval("\n\nmodule.exports = function (i) {\n return i[1];\n};\n\n//# sourceURL=webpack://petracoding-github-io/./node_modules/css-loader/dist/runtime/noSourceMaps.js?");
+
+/***/ }),
+
+/***/ "./css/main.scss":
+/*!***********************!*\
+ !*** ./css/main.scss ***!
+ \***********************/
+/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
+
+"use strict";
+eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js */ \"./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleDomAPI.js */ \"./node_modules/style-loader/dist/runtime/styleDomAPI.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertBySelector.js */ \"./node_modules/style-loader/dist/runtime/insertBySelector.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js */ \"./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/insertStyleElement.js */ \"./node_modules/style-loader/dist/runtime/insertStyleElement.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4__);\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! !../node_modules/style-loader/dist/runtime/styleTagTransform.js */ \"./node_modules/style-loader/dist/runtime/styleTagTransform.js\");\n/* harmony import */ var _node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5__);\n/* harmony import */ var _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_main_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! !!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./main.scss */ \"./node_modules/css-loader/dist/cjs.js!./node_modules/sass-loader/dist/cjs.js!./css/main.scss\");\n\n \n \n \n \n \n \n \n \n \n\nvar options = {};\n\noptions.styleTagTransform = (_node_modules_style_loader_dist_runtime_styleTagTransform_js__WEBPACK_IMPORTED_MODULE_5___default());\noptions.setAttributes = (_node_modules_style_loader_dist_runtime_setAttributesWithoutAttributes_js__WEBPACK_IMPORTED_MODULE_3___default());\noptions.insert = _node_modules_style_loader_dist_runtime_insertBySelector_js__WEBPACK_IMPORTED_MODULE_2___default().bind(null, \"head\");\noptions.domAPI = (_node_modules_style_loader_dist_runtime_styleDomAPI_js__WEBPACK_IMPORTED_MODULE_1___default());\noptions.insertStyleElement = (_node_modules_style_loader_dist_runtime_insertStyleElement_js__WEBPACK_IMPORTED_MODULE_4___default());\n\nvar update = _node_modules_style_loader_dist_runtime_injectStylesIntoStyleTag_js__WEBPACK_IMPORTED_MODULE_0___default()(_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_main_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"], options);\n\n\n\n\n /* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_main_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"] && _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_main_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals ? _node_modules_css_loader_dist_cjs_js_node_modules_sass_loader_dist_cjs_js_main_scss__WEBPACK_IMPORTED_MODULE_6__[\"default\"].locals : undefined);\n\n\n//# sourceURL=webpack://petracoding-github-io/./css/main.scss?");
/***/ }),
@@ -158,12 +128,146 @@ eval("\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n
/*!****************************************************************************!*\
!*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***!
\****************************************************************************/
-/*! no static exports found */
-/***/ (function(module, exports, __webpack_require__) {
+/***/ ((module) => {
+
+"use strict";
+eval("\n\nvar stylesInDOM = [];\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n return result;\n}\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n identifiers.push(identifier);\n }\n return identifiers;\n}\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n return updater;\n}\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n var newLastIdentifiers = modulesToDom(newList, options);\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n var _index = getIndexByIdentifier(_identifier);\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n stylesInDOM.splice(_index, 1);\n }\n }\n lastIdentifiers = newLastIdentifiers;\n };\n};\n\n//# sourceURL=webpack://petracoding-github-io/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/insertBySelector.js":
+/*!********************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/insertBySelector.js ***!
+ \********************************************************************/
+/***/ ((module) => {
+
+"use strict";
+eval("\n\nvar memo = {};\n\n/* istanbul ignore next */\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target);\n\n // Special case to return head of iframe instead of iframe itself\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n memo[target] = styleTarget;\n }\n return memo[target];\n}\n\n/* istanbul ignore next */\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n target.appendChild(style);\n}\nmodule.exports = insertBySelector;\n\n//# sourceURL=webpack://petracoding-github-io/./node_modules/style-loader/dist/runtime/insertBySelector.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/insertStyleElement.js":
+/*!**********************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/insertStyleElement.js ***!
+ \**********************************************************************/
+/***/ ((module) => {
+
+"use strict";
+eval("\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\nmodule.exports = insertStyleElement;\n\n//# sourceURL=webpack://petracoding-github-io/./node_modules/style-loader/dist/runtime/insertStyleElement.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js":
+/*!**********************************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js ***!
+ \**********************************************************************************/
+/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
+
+"use strict";
+eval("\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = true ? __webpack_require__.nc : 0;\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\nmodule.exports = setAttributesWithoutAttributes;\n\n//# sourceURL=webpack://petracoding-github-io/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js?");
+
+/***/ }),
+
+/***/ "./node_modules/style-loader/dist/runtime/styleDomAPI.js":
+/*!***************************************************************!*\
+ !*** ./node_modules/style-loader/dist/runtime/styleDomAPI.js ***!
+ \***************************************************************/
+/***/ ((module) => {
"use strict";
-eval("\n\nvar isOldIE = function isOldIE() {\n var memo;\n return function memorize() {\n if (typeof memo === 'undefined') {\n // Test for IE <= 9 as proposed by Browserhacks\n // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805\n // Tests for existence of standard globals is to allow style-loader\n // to operate correctly into non-standard environments\n // @see https://github.com/webpack-contrib/style-loader/issues/177\n memo = Boolean(window && document && document.all && !window.atob);\n }\n\n return memo;\n };\n}();\n\nvar getTarget = function getTarget() {\n var memo = {};\n return function memorize(target) {\n if (typeof memo[target] === 'undefined') {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n };\n}();\n\nvar stylesInDom = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDom.length; i++) {\n if (stylesInDom[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var index = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3]\n };\n\n if (index !== -1) {\n stylesInDom[index].references++;\n stylesInDom[index].updater(obj);\n } else {\n stylesInDom.push({\n identifier: identifier,\n updater: addStyle(obj, options),\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction insertStyleElement(options) {\n var style = document.createElement('style');\n var attributes = options.attributes || {};\n\n if (typeof attributes.nonce === 'undefined') {\n var nonce = true ? __webpack_require__.nc : undefined;\n\n if (nonce) {\n attributes.nonce = nonce;\n }\n }\n\n Object.keys(attributes).forEach(function (key) {\n style.setAttribute(key, attributes[key]);\n });\n\n if (typeof options.insert === 'function') {\n options.insert(style);\n } else {\n var target = getTarget(options.insert || 'head');\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n }\n\n return style;\n}\n\nfunction removeStyleElement(style) {\n // istanbul ignore if\n if (style.parentNode === null) {\n return false;\n }\n\n style.parentNode.removeChild(style);\n}\n/* istanbul ignore next */\n\n\nvar replaceText = function replaceText() {\n var textStore = [];\n return function replace(index, replacement) {\n textStore[index] = replacement;\n return textStore.filter(Boolean).join('\\n');\n };\n}();\n\nfunction applyToSingletonTag(style, index, remove, obj) {\n var css = remove ? '' : obj.media ? \"@media \".concat(obj.media, \" {\").concat(obj.css, \"}\") : obj.css; // For old IE\n\n /* istanbul ignore if */\n\n if (style.styleSheet) {\n style.styleSheet.cssText = replaceText(index, css);\n } else {\n var cssNode = document.createTextNode(css);\n var childNodes = style.childNodes;\n\n if (childNodes[index]) {\n style.removeChild(childNodes[index]);\n }\n\n if (childNodes.length) {\n style.insertBefore(cssNode, childNodes[index]);\n } else {\n style.appendChild(cssNode);\n }\n }\n}\n\nfunction applyToTag(style, options, obj) {\n var css = obj.css;\n var media = obj.media;\n var sourceMap = obj.sourceMap;\n\n if (media) {\n style.setAttribute('media', media);\n } else {\n style.removeAttribute('media');\n }\n\n if (sourceMap && typeof btoa !== 'undefined') {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n while (style.firstChild) {\n style.removeChild(style.firstChild);\n }\n\n style.appendChild(document.createTextNode(css));\n }\n}\n\nvar singleton = null;\nvar singletonCounter = 0;\n\nfunction addStyle(obj, options) {\n var style;\n var update;\n var remove;\n\n if (options.singleton) {\n var styleIndex = singletonCounter++;\n style = singleton || (singleton = insertStyleElement(options));\n update = applyToSingletonTag.bind(null, style, styleIndex, false);\n remove = applyToSingletonTag.bind(null, style, styleIndex, true);\n } else {\n style = insertStyleElement(options);\n update = applyToTag.bind(null, style, options);\n\n remove = function remove() {\n removeStyleElement(style);\n };\n }\n\n update(obj);\n return function updateStyle(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) {\n return;\n }\n\n update(obj = newObj);\n } else {\n remove();\n }\n };\n}\n\nmodule.exports = function (list, options) {\n options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of
-
-
-
-
-
-
-
-