diff --git a/auth.js b/auth.js
index 3b022be..706829c 100644
--- a/auth.js
+++ b/auth.js
@@ -3,4 +3,6 @@ const couchdb_password = "admin";
const couchdb_name = "sassy";
+const debug_username = "dumble-door"; //set a default user when not logged in
+
//http://127.0.0.1:5984/_utils/#_config/couchdb@127.0.0.1
diff --git a/help/Example.html b/help/Example.html
index e63eba3..f926d9c 100644
--- a/help/Example.html
+++ b/help/Example.html
@@ -39,10 +39,9 @@ test
test
test
test
test
test
test
test
test
test
showOverlay("overlay1");
-//setTimeout(() => hideOverlay("overlay1"), 3000);
+const couchDB = new CouchDB();
async function main() {
- const couchDB = new CouchDB();
await couchDB.set("xample", {
"my_data": 1,
"more_data": "bla"
@@ -54,7 +53,9 @@ async function main() {
}
main();
-createTemp();
+createTemp().then((v) => {
+ setUserData(couchDB);
+});
diff --git a/help/data_xample.js b/help/data_xample.js
index 9affdee..a93be73 100644
--- a/help/data_xample.js
+++ b/help/data_xample.js
@@ -55,19 +55,23 @@ async function createTemp() {
"type": "emoji"
}
],
+ "result": [
+ ["YES", "YES", 5, 2],
+ ["YES", "YES", 1, 3]
+ ],
"result_history": [
{
"date": "2025-12-27",
"questions": [
+ { "title": "1", "type": "text" },
+ { "title": "2", "type": "scala" }
+ ],
+ "result": [
["Gut, aber ...", 5],
["Schlecht", 1]
]
}
],
- "result": [
- ["YES", "YES", 5, 2],
- ["YES", "YES", 1, 3]
- ],
"start_date": "2025-12-23",
"expire_date": "2025-12-27"
});
@@ -85,19 +89,23 @@ async function createTemp() {
"type": "scala"
}
],
+ "result": [
+ ["Gut, aber ...", 5],
+ ["Schlecht", 1]
+ ],
"result_history": [
{
"date": "2025-12-27",
"questions": [
+ { "title": "1", "type": "text" },
+ { "title": "2", "type": "scala" }
+ ],
+ "result": [
["Gut, aber ...", 5],
["Schlecht", 1]
]
}
],
- "result": [
- ["Gut, aber ...", 5],
- ["Schlecht", 1]
- ],
"start_date": "2025-12-23",
"expire_date": "2025-12-27"
});
diff --git a/lib/basic.css b/lib/basic.css
index 21653b3..ad237af 100644
--- a/lib/basic.css
+++ b/lib/basic.css
@@ -1,11 +1,14 @@
:root {
- --accent_color_fg: #007bff;
+ --accent_color_fg: rgba(0, 123, 255, 1);
+ --accent_color_fg_o: rgba(0, 123, 255, 0.5);
--accent_color_bg: rgba(137, 197, 221, 1);
--accent_color_bg_o: rgba(137, 197, 221, 0.5);
+ --accent_color_bg_o2: rgba(137, 197, 221, 0.25);
--main_color_fg: white;
--main_color_bg: black;
--border-radius: 10px;
--def-shadow: 10px 20px 20px rgb(128, 128, 128, 0.5);
+ --reversed_def_shadow: inset 1px 2.5px 2.5px rgb(128, 128, 128, 0.5);
}
* {
box-sizing: border-box;
@@ -24,10 +27,10 @@ body, html {
font-size: 20px;
}
::selection {
- background-color: var(--accent_color_fg);
+ background-color: var(--accent_color_fg_o);
color: black;
}
-selectable {
+.selectable {
-webkit-user-select: text;
-moz-user-select: text;
-ms-user-select: text;
@@ -42,6 +45,14 @@ selectable {
border-radius: 50%;
background: var(--accent_color_bg);
border: none;
+ background-size: 58px 58px;
+}
+input {
+ font-size: 18px;
+ background: none;
+ border: 1px solid black;
+ border-radius: var(--border-radius);
+ padding: 4px;
}
/* ----------- overlay ----------- */
@@ -188,4 +199,64 @@ content {
.add_button:hover {
border: 2px solid grey;
background-color: lightgray;
+}
+
+
+
+dropdown {
+ position: fixed;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ background: none;
+ z-index: 300;
+}
+dropdown > div:first-child {
+ width: 100%;
+ height: 100%;
+ background: none;
+}
+dropdown > div:last-child {
+ position: absolute;
+ background: var(--accent_color_bg_o);
+ backdrop-filter: blur(10px);
+ border-radius: var(--border-radius);
+ transform: translate(calc(-100% + 50px), 5px);
+ width: 200px;
+ display: flex;
+ flex-direction:column;
+ box-shadow: var(--def-shadow);
+}
+dropdown > div:last-child label {
+ background: none;
+ font-size: 20px;
+ border: none;
+ border-bottom: 1px solid black;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ font-weight: normal;
+ text-align: center;
+}
+dropdown > div:last-child button {
+ background: none;
+ font-size: 20px;
+ border: none;
+ border-bottom: 1px solid black;
+ padding-top: 8px;
+ padding-bottom: 8px;
+ font-weight: normal;
+ text-align: center;
+}
+dropdown > div:last-child button:hover {
+ background: var(--accent_color_fg_o);
+}
+dropdown > div:last-child button:first-child {
+ border-top-left-radius: var(--border-radius);
+ border-top-right-radius: var(--border-radius);
+}
+dropdown > div:last-child button:last-child {
+ border-bottom: none;
+ border-bottom-left-radius: var(--border-radius);
+ border-bottom-right-radius: var(--border-radius);
}
\ No newline at end of file
diff --git a/lib/basic.js b/lib/basic.js
index 363623e..020a4e4 100644
--- a/lib/basic.js
+++ b/lib/basic.js
@@ -331,9 +331,22 @@ function getURLArgsMap() {
return res;
}
+
+function form1(string) {
+ if (!string) return string;
+ return string.charAt(0).toUpperCase() + string.slice(1);
+}
+
+
async function getUserData(couchDB) {
- const username = getURLArgsMap()["user"];
- if (!username) return null;
+ let username = getURLArgsMap()["user"];
+ if (!username) {
+ if (typeof (debug_username) == "string") {
+ username = debug_username;
+ } else {
+ return null;
+ }
+ }
const res = await couchDB.get("users");
if (!res) return null;
const data = res[username];
@@ -351,5 +364,92 @@ async function setUserData(couchDB) {
return false;
}
userData = res;
+ updateAllProfiles(res);
return true;
+}
+
+function updateAllProfiles(user) {
+ const profiles = document.getElementsByClassName("profile");
+ for (var i of profiles) {
+ i.style.backgroundImage = `url("${user.avatar}")`;
+ i.onclick = _onProfileClick;
+ }
+}
+function _onProfileClick(event) {
+ var buttonRect = this.getBoundingClientRect();
+
+ var dropdown = document.createElement("dropdown");
+ dropdown.addEventListener("click", dropdown.remove);
+
+ var bg = document.createElement("div");
+ dropdown.appendChild(bg);
+
+ var div = document.createElement("div");
+
+ const _1 = window.innerHeight - buttonRect.y - 200;
+ if (_1 < 0) {
+ div.style.transform = "translate(calc(-100% + 58px), calc(-100% - 30px))";
+ }
+
+ div.style.top = (buttonRect.bottom) + 'px';
+ div.style.left = (buttonRect.left) + 'px';
+ div.innerHTML = `
+
+
+
+ `;
+ dropdown.appendChild(div);
+
+ document.body.appendChild(dropdown);
+}
+function _onProfilClickOnProfil() {
+ if (typeof(showProfile) == "function") {
+ showProfile(userData);
+ } else {
+ _showProfile(userData);
+ }
+}
+function _showProfile(user) {
+ let elm = getId("profile_overlay");
+ if (!elm) {
+ elm = document.createElement("overlay");
+ elm.setAttribute("id", "profile_overlay");
+ document.body.appendChild(elm);
+ }
+ elm.innerHTML = `
+