summaryrefslogtreecommitdiff
path: root/src/web/_views
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/web/_views/apps/profile/main.php2
-rw-r--r--src/web/_views/apps/settings/main.php151
-rw-r--r--src/web/_views/footer.php2
-rw-r--r--src/web/_views/header.php17
-rw-r--r--src/web/_views/modal/about.php28
-rw-r--r--src/web/_views/template/toast.php2
6 files changed, 197 insertions, 5 deletions
diff --git a/src/web/_views/apps/profile/main.php b/src/web/_views/apps/profile/main.php
index 919b190..21b3b46 100644
--- a/src/web/_views/apps/profile/main.php
+++ b/src/web/_views/apps/profile/main.php
@@ -3,7 +3,7 @@
<div id="main-content">
<div id="profile-header-container">
<div id="profile-header" class="col">
- <?=image('/api/rpc/profile_banner?user_id=' . $user['id'], 'banner')?>
+ <?=image('/api/rpc/profile_banner?user_id=' . $user['id'], 'banner', mime: $user['banner_mime'])?>
<div class="info row">
<div class="pfp-wrapper">
<?=pfp($user)?>
diff --git a/src/web/_views/apps/settings/main.php b/src/web/_views/apps/settings/main.php
new file mode 100644
index 0000000..0cdc4f2
--- /dev/null
+++ b/src/web/_views/apps/settings/main.php
@@ -0,0 +1,151 @@
+<?php /* Copyright (c) 2024 Freya Murphy */ ?>
+<?php /* vi: syntax=php */ ?>
+
+<?php
+
+$user = $this->main->user();
+
+function __create_form($user, $col) {
+ $ph = ucfirst(lang('ph_' . $col));
+ $val = $user[$col];
+ return "<form action=\"\" class=\"row mt settings-form\" onsubmit=\"handleSubmit(event)\">
+ <div class=\"rel mb\" style=\"flex: 1\">
+ <input
+ type=\"text\"
+ name=\"{$col}\"
+ id=\"{$col}\"
+ placeholder=\" \"
+ value=\"{$val}\"
+ >
+ <label for=\"{$col}\">
+ {$ph}
+ </label>
+ </div>
+ <input type=\"hidden\" name=\"col\" value=\"{$col}\">
+ <input type=\"hidden\" name=\"uid\" value=\"{$user['id']}\">
+ <button
+ class=\"btn btn-submit ml\"
+ style=\"flex: 0; height: fit-content;\"
+ ><i class=\"mi\">check</i></button>
+ </form>";
+}
+
+?>
+
+<script>
+
+function onSuccess() {
+ successToast(<?=json_encode(ucfirst(lang('settings_success')))?>);
+}
+
+function handleSubmit(e) {
+ e.preventDefault();
+ let el = e.target.elements;
+ let col = el.col.value;
+ let uid = el.uid.value;
+ let val = el[col].value;
+
+ $.ajax({
+ url: '/api/user?id=eq.' + uid,
+ method: 'PATCH',
+ data: JSON.stringify({ [col]: val }),
+ success: onSuccess
+ });
+
+}
+
+const toBase64 = file => new Promise((resolve, reject) => {
+ const reader = new FileReader();
+ reader.readAsDataURL(file);
+ reader.onload = () => resolve(reader.result);
+ reader.onerror = reject;
+});
+
+function updateMedia(media_type) {
+
+ var input = document.createElement('input');
+ input.type = 'file';
+
+ input.onchange = async (e) => {
+ var file = e.target.files[0];
+ var data = (await toBase64(file)).split(";");
+ var mime = data[0].split(":")[1];
+ var content = data[1].split(",")[1];
+
+ $.ajax({
+ url: '/api/rpc/update_user_media',
+ method: 'POST',
+ data: JSON.stringify({
+ media_type, mime, content
+ }),
+ success: onSuccess
+ });
+
+ }
+
+ input.click();
+
+}
+
+function resetMedia(media_type) {
+ $.ajax({
+ url: '/api/rpc/delete_user_media',
+ method: 'POST',
+ data: JSON.stringify({
+ media_type
+ }),
+ success: onSuccess
+ });
+}
+</script>
+
+<div id="main-content">
+ <div id="settings" class="card">
+ <h1><?=ucfirst(lang('title'))?></h1>
+ <hr class="mt">
+ <h2><?=ucfirst(lang('general_title'))?></h2>
+ <strong><?=ucfirst(lang('general_desc'))?></strong>
+ <?=__create_form($user, 'username')?>
+ <?=__create_form($user, 'email')?>
+ <?=__create_form($user, 'first_name')?>
+ <?=__create_form($user, 'last_name')?>
+ <?=__create_form($user, 'gender')?>
+ <hr class="mt">
+ <h2><?=ucfirst(lang('media_title'))?></h2>
+ <strong><?=ucfirst(lang('media_desc'))?></strong>
+ <h3><?=ucfirst(lang('ph_avatar'))?></h3>
+ <div class="row">
+ <?=image(
+ "/api/rpc/profile_avatar?user_id={$user['id']}",
+ height: '100px'
+ )?>
+ <div class="col ml">
+ <button
+ class="btn btn-alt btn-blue"
+ onclick="updateMedia('avatar')"
+ ><?=ucfirst(lang('update'))?></button>
+ <button
+ class="btn btn-alt btn-blue mt"
+ onclick="resetMedia('avatar')"
+ ><?=ucfirst(lang('reset'))?></button>
+ </div>
+ </div>
+ <h3><?=ucfirst(lang('ph_banner'))?></h3>
+ <div class="row">
+ <?=image(
+ "/api/rpc/profile_banner?user_id={$user['id']}",
+ height: '100px'
+ )?>
+ <div class="col ml">
+ <button
+ class="btn btn-alt btn-blue"
+ onclick="updateMedia('banner')"
+ ><?=ucfirst(lang('update'))?></button>
+ <button
+ class="btn btn-alt btn-blue mt"
+ onclick="resetMedia('banner')"
+ ><?=ucfirst(lang('reset'))?></button>
+ </div>
+ </div>
+ </div>
+</div>
diff --git a/src/web/_views/footer.php b/src/web/_views/footer.php
index 9040c3a..bc9b3a2 100644
--- a/src/web/_views/footer.php
+++ b/src/web/_views/footer.php
@@ -1,7 +1,7 @@
<?php /* Copyright (c) 2024 Freya Murphy */ ?>
<?php /* vi: syntax=php */ ?>
<footer>
- Freya Murphy © 2023 | <a href="https://freya.cat">freya.cat</a>
+ <?=ucfirst(lang('copyright'))?> | <a href="https://freya.cat">freya.cat</a>
</footer>
<body>
diff --git a/src/web/_views/header.php b/src/web/_views/header.php
index 97eb435..98fcf81 100644
--- a/src/web/_views/header.php
+++ b/src/web/_views/header.php
@@ -55,7 +55,7 @@
</script>
<?=pfp($self, FALSE, 'toggleUserMenu()')?>
<div class="card col hidden" id="user-menu">
- <span class="row" id="user-menu-header">
+ <span class="row mr" id="user-menu-header">
<?=pfp($self, FALSE)?>
<span class="col">
<strong><?=$this->format_model->name($self)?></strong>
@@ -65,16 +65,25 @@
<hr>
<?=ilang(
'action_profile',
+ id: 'action-profile',
class: 'btn',
href: '/profile?id=' . $self['id']
)?>
<?=ilang(
+ 'action_xssbook_about',
+ id: 'action-xssbook-about',
+ class: 'btn',
+ click: 'viewAbout'
+ )?>
+ <?=ilang(
'action_settings',
+ id: 'action-settings',
class: 'btn',
href: '/settings'
)?>
<?=ilang(
'action_logout',
+ id: 'action-logout',
class: 'btn',
href: '/auth/logout'
)?>
@@ -84,6 +93,11 @@
<?php endif; ?>
</div>
<script>
+ $('#action-xssbook-about').on('click', function() {
+ $.get( "/modal/about", function (data) {
+ $(document.body).append(data);
+ });
+ })
$('#action-hamburger').on('click', function() {
let menu = $('.nav-center');
menu.toggleClass('visible');
@@ -94,7 +108,6 @@
userMenu = $('#user-menu');
var nav = $('.nav');
document.onclick = function(event) {
- console.log(event.target, nav[0]);
let outside = !(nav[0].contains(event.target));
if (outside) {
userMenu.addClass('hidden');
diff --git a/src/web/_views/modal/about.php b/src/web/_views/modal/about.php
new file mode 100644
index 0000000..746607e
--- /dev/null
+++ b/src/web/_views/modal/about.php
@@ -0,0 +1,28 @@
+<?php /* Copyright (c) 2024 Freya Murphy */ ?>
+<?php /* vi: syntax=php */ ?>
+<div id="about-modal-body">
+ <span class="logo">xssbook</span>
+ <hr>
+ <span class="mb"><?=ucfirst(lang('version'))?></span>
+ <span><?=ucfirst(lang('copyright'))?></span>
+ <hr>
+ <a class="btn btn-blue" href="https://g.freya.cat/freya/xssbook2">Source Code</a>
+</div>
+<style>
+#about-modal-body {
+ display: flex;
+ margin-top: 50px;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ font-weight: bold;
+ font-size: 1.1rem;
+ padding: 1rem;
+}
+#about-modal-body .logo {
+ color: var(--blue);
+ font-family: facebook;
+ font-size: 2.25rem;
+ margin-bottom: 1rem;
+}
+</style>
diff --git a/src/web/_views/template/toast.php b/src/web/_views/template/toast.php
index ae2e7d8..0a6a82f 100644
--- a/src/web/_views/template/toast.php
+++ b/src/web/_views/template/toast.php
@@ -20,7 +20,7 @@
}
?>
-<div class="toast error">
+<div class="toast <?=$type?>">
<?=$lang_msg?>
<?=ilang('action_close', class: 'action-close-toast')?>
</div>