Merge pull request 'adde bootstrap' (#10) from bootstrap into main
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Make (push) Waiting to run
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-CMake (push) Waiting to run
Prepare Build and Testing executable binary / Prepare-Build-Testing-With-Meson (push) Waiting to run

Reviewed-on: https://gitea.home.com:3000/TolaMironcenko/auth_service/pulls/10
This commit was merged in pull request #10.
This commit is contained in:
wt committed 2025-04-23 12:20:20 +07:00
commit a19e44188a
15 files changed
+128 -202

No files matched your search

+6
View File
@@ -0,0 +1,6 @@
@charset "UTF-8";/*!
* Bootstrap v5.3.5 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--bs-primary:#0d6efd;--bs-secondary:#6c757d;--bs-success:#198754;--bs-info:#0dcaf0;--bs-warning:#ffc107;--bs-danger:#dc3545;--bs-light:#f8f9fa;--bs-dark:#212529;--bs-primary-rgb:13,110,253;--bs-secondary-rgb:108,117,125;--bs-success-rgb:25,135,84;--bs-info-rgb:13,202,240;--bs-warning-rgb:255,193,7;--bs-danger-rgb:220,53,69;--bs-light-rgb:248,249,250;--bs-dark-rgb:33,37,41;--bs-primary-text-emphasis:#052c65;--bs-secondary-text-emphasis:#2b2f32;--bs-success-text-emphasis:#0a3622;--bs-info-text-emphasis:#055160;--bs-warning-text-emphasis:#664d03;--bs-danger-text-emphasis:#58151c;--bs-light-text-emphasis:#495057;--bs-dark-text-emphasis:#495057;--bs-primary-bg-subtle:#cfe2ff;--bs-secondary-bg-subtle:#e2e3e5;--bs-success-bg-subtle:#d1e7dd;--bs-info-bg-subtle:#cff4fc;--bs-warning-bg-subtle:#fff3cd;--bs-danger-bg-subtle:#f8d7da;--bs-light-bg-subtle:#fcfcfd;--bs-dark-bg-subtle:#ced4da;--bs-primary-border-subtle:#9ec5fe;--bs-secondary-border-subtle:#c4c8cb;--bs-success-border-subtle:#a3cfbb;--bs-info-border-subtle:#9eeaf9;--bs-warning-border-subtle:#ffe69c;--bs-danger-border-subtle:#f1aeb5;--bs-light-border-subtle:#e9ecef;--bs-dark-border-subtle:#adb5bd;--bs-white-rgb:255,255,255;--bs-black-rgb:0,0,0;--bs-font-sans-serif:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue","Noto Sans","Liberation Sans",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--bs-font-monospace:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--bs-gradient:linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-body-font-family:var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight:400;--bs-body-line-height:1.5;--bs-body-color:#212529;--bs-body-color-rgb:33,37,41;--bs-body-bg:#fff;--bs-body-bg-rgb:255,255,255;--bs-emphasis-color:#000;--bs-emphasis-color-rgb:0,0,0;--bs-secondary-color:rgba(33, 37, 41, 0.75);--bs-secondary-color-rgb:33,37,41;--bs-secondary-bg:#e9ecef;--bs-secondary-bg-rgb:233,236,239;--bs-tertiary-color:rgba(33, 37, 41, 0.5);--bs-tertiary-color-rgb:33,37,41;--bs-tertiary-bg:#f8f9fa;--bs-tertiary-bg-rgb:248,249,250;--bs-heading-color:inherit;--bs-link-color:#0d6efd;--bs-link-color-rgb:13,110,253;--bs-link-decoration:underline;--bs-link-hover-color:#0a58ca;--bs-link-hover-color-rgb:10,88,202;--bs-code-color:#d63384;--bs-highlight-color:#212529;--bs-highlight-bg:#fff3cd;--bs-border-width:1px;--bs-border-style:solid;--bs-border-color:#dee2e6;--bs-border-color-translucent:rgba(0, 0, 0, 0.175);--bs-border-radius:0.375rem;--bs-border-radius-sm:0.25rem;--bs-border-radius-lg:0.5rem;--bs-border-radius-xl:1rem;--bs-border-radius-xxl:2rem;--bs-border-radius-2xl:var(--bs-border-radius-xxl);--bs-border-radius-pill:50rem;--bs-box-shadow:0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm:0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg:0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset:inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width:0.25rem;--bs-focus-ring-opacity:0.25;--bs-focus-ring-color:rgba(13, 110, 253, 0.25);--bs-form-valid-color:#198754;--bs-form-valid-border-color:#198754;--bs-form-invalid-color:#dc3545;--bs-form-invalid-border-color:#dc3545}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color:#dee2e6;--bs-body-color-rgb:222,226,230;--bs-body-bg:#212529;--bs-body-bg-rgb:33,37,41;--bs-emphasis-color:#fff;--bs-emphasis-color-rgb:255,255,255;--bs-secondary-color:rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb:222,226,230;--bs-secondary-bg:#343a40;--bs-secondary-bg-rgb:52,58,64;--bs-tertiary-color:rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb:222,226,230;--bs-tertiary-bg:#2b3035;--bs-tertiary-bg-rgb:43,48,53;--bs-primary-text-emphasis:#6ea8fe;--bs-secondary-text-emphasis:#a7acb1;--bs-success-text-emphasis:#75b798;--bs-info-text-emphasis:#6edff6;--bs-warning-text-emphasis:#ffda6a;--bs-danger-text-emphasis:#ea868f;--bs-light-text-emphasis:#f8f9fa;--bs-dark-text-emphasis:#dee2e6;--bs-primary-bg-subtle:#031633;--bs-secondary-bg-subtle:#161719;--bs-success-bg-subtle:#051b11;--bs-info-bg-subtle:#032830;--bs-warning-bg-subtle:#332701;--bs-danger-bg-subtle:#2c0b0e;--bs-light-bg-subtle:#343a40;--bs-dark-bg-subtle:#1a1d20;--bs-primary-border-subtle:#084298;--bs-secondary-border-subtle:#41464b;--bs-success-border-subtle:#0f5132;--bs-info-border-subtle:#087990;--bs-warning-border-subtle:#997404;--bs-danger-border-subtle:#842029;--bs-light-border-subtle:#495057;--bs-dark-border-subtle:#343a40;--bs-heading-color:inherLine truncated
/*# sourceMappingURL=bootstrap.min.css.map */
-19
View File
@@ -1,19 +0,0 @@
.header {
width: 100%;
padding: 10px;
background-color: transparent;
}
.headerbutton {
padding: 10px;
border-radius: 10px;
border: none;
cursor: pointer;
background-color: gray;
transition: 0.3s;
color: white;
}
.headerbutton:hover {
background-color: rgb(83, 83, 83);
}
-13
View File
@@ -1,13 +0,0 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
width: 100vw;
height: 100vh;
background-color: black;
color: white;
position: relative;
}
+2 -6
View File
@@ -25,10 +25,10 @@
.formbody {
padding: 10px;
background-color: rgba(255, 255, 255, 0.5);
background-color: gray;
backdrop-filter: blur(5px);
border-radius: 10px;
box-shadow: -5px -5px 30px 30px gray;
/* box-shadow: -5px -5px 30px 30px gray; */
}
.loginformheader {
@@ -47,10 +47,6 @@
transition: 0.3s;
}
.loginforminputbody {
}
.loginforminputbodyflex {
display: flex;
}
-76
View File
@@ -1,76 +0,0 @@
.table {
width: 98vw;
height: 60vh;
overflow-y: auto;
margin: 1vw 2vh;
}
.headers {
width: 98vw;
margin: 1vw 2vh;
}
table {
width: 100%;
}
thead {
background-color: azure;
color: black;
}
tbody {
background-color: rgb(48, 44, 44);
}
th {
position: relative;
border-radius: 10px;
padding: 10px;
width: 14%;
text-overflow: elipsis;
overflow: hidden;
white-space: nowrap;
}
th>p {
width: 14vw;
height: 100%;
overflow: auto;
}
.thbutton {
position: absolute;
width: 100%;
height: 100%;
cursor: pointer;
left: 0;
top: 0;
background-color: rgb(48, 44, 44);
color: white;
border: none;
transition: 0.3s;
}
.thbutton:hover {
background-color: rgb(145, 77, 77);
}
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background-color: #504f4f;
border-radius: 10px;
}
::-webkit-scrollbar-thumb {
background: gray;
border-radius: 10px;
transition: 0.3s;
}
::-webkit-scrollbar-thumb:hover {
background: #ffffff;
}
+74 -71
View File
@@ -3,33 +3,35 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="css/index.css">
<link rel="stylesheet" href="css/loginform.css">
<link rel="stylesheet" href="css/message.css">
<link rel="stylesheet" href="css/header.css">
<link rel="stylesheet" href="css/userstable.css">
<link rel="stylesheet" href="css/bootstrap.min.css">
<title>admin</title>
</head>
<body>
<div class="header">
<button class="exitbutton headerbutton">Exit</button>
<button class="adduserbutton headerbutton">Adduser</button>
<div class="navbar navbar-expand-lg bg-body-tertiary gap-3 p-2">
<button class="btn btn-danger" id="exitbutton">Exit</button>
<button class="btn btn-warning" id="adduserbutton">Adduser</button>
<h1 class="usernameheader"></h1>
<div class="form-check">
<input type="checkbox" id="themecheckbox" class="form-check-input">
<label for="themecheckbox" class="form-check-label">Dark theme</label>
</div>
</div>
<div class="form loginform">
<form class="formbody loginformbody">
<div class="form loginform" id="loginform">
<form class="formbody loginformbody" id="loginformbody">
<h1 class="loginformheader">Login</h1>
<div class="loginforminputbody">
<div class="loginformlabel">Username</div>
<input type="text" required id="loginforminputusername" class="loginforminput">
<div class="form-floating mb-3">
<input type="text" required id="loginforminputusername" class="form-control" placeholder="John">
<label for="loginforminputusername">Username</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Passsword</div>
<input type="password" required id="loginforminputpassword" class="loginforminput">
<div class="form-floating mb-3">
<input type="password" required id="loginforminputpassword" class="form-control" placeholder="***">
<label for="loginforminputpassword">Password</label>
</div>
<div class="loginforminputbody">
<button class="loginformbutton">login</button>
<div class="d-grid gap-2">
<button class="btn btn-primary">login</button>
</div>
</form>
</div>
@@ -37,25 +39,25 @@
<div class="form adduserform">
<form class="formbody adduserformbody">
<h1 class="loginformheader">Add User</h1>
<div class="loginforminputbody">
<div class="loginformlabel">Username</div>
<input type="text" required id="adduserformusername" class="loginforminput">
<div class="form-floating mb-3">
<input type="text" required id="adduserformusername" class="form-control">
<label for="adduserformusername">Username</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Password</div>
<input type="password" required id="adduserformpassword" class="loginforminput">
<div class="form-floating mb-3">
<input type="password" required id="adduserformpassword" class="form-control">
<label for="adduserformpassword">Password</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Group</div>
<input type="text" required id="adduserformgroup" class="loginforminput">
<div class="form-floating mb-3">
<input type="text" required id="adduserformgroup" class="form-control">
<label for="adduserformgroup">Group</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Is Superuser</div>
<input type="checkbox" id="adduserformissuperuser" class="loginforminput">
<div class="form-check">
<input type="checkbox" id="adduserformissuperuser" class="form-check-input">
<label for="adduserformissuperuser" class="form-check-label">Is Superuser</label>
</div>
<div class="loginforminputbody">
<button class="loginformbutton">Add</button>
<button class="canceladduser loginformbutton">Cancel</button>
<div class="d-grid gap-2">
<button class="btn btn-primary">Add</button>
<button id="canceladduser" class="btn btn-primary">Cancel</button>
</div>
</form>
</div>
@@ -63,25 +65,25 @@
<div class="form changeuserform">
<form class="formbody changeuserformbody">
<h1 class="loginformheader">Change User Data</h1>
<div class="loginforminputbody">
<div class="loginformlabel">Username</div>
<input type="text" required id="changeuserformusername" class="loginforminput">
<div class="form-floating mb-3">
<input type="text" required id="changeuserformusername" class="form-control" placeholder="Username">
<label for="changeuserformusername">Username</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Password</div>
<input type="password" id="changeuserformpassword" class="loginforminput">
<div class="form-floating mb-3">
<input type="password" id="changeuserformpassword" class="form-control" placeholder="***">
<label for="changeuserformpassword">Password</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Group</div>
<input type="text" required id="changeuserformgroup" class="loginforminput">
<div class="form-floating mb-3">
<input type="text" required id="changeuserformgroup" class="form-control">
<label for="changeuserformgroup">Group</label>
</div>
<div class="loginforminputbody">
<div class="loginformlabel">Is Superuser</div>
<input type="checkbox" id="changeuserformissuperuser" class="loginforminput">
<div class="form-check">
<input type="checkbox" id="changeuserformissuperuser" class="form-check-input">
<label for="changeuserformissuperuser" class="form-check-label">Is Superuser</label>
</div>
<div class="loginforminputbody">
<button class="loginformbutton">Change</button>
<button class="cancelchangeuser loginformbutton">Cancel</button>
<div class="d-grid gap-2">
<button class="btn btn-primary">Change</button>
<button id="cancelchangeuser" class="btn btn-primary">Cancel</button>
</div>
</form>
</div>
@@ -89,9 +91,9 @@
<div class="form confirmform">
<div class="formbody confirmformbody">
<h1>Are you sure?</h1>
<div class="loginforminputbodyflex">
<button class="no loginformbutton">Cancel</button>
<button class="yes loginformbutton">Confirm</button>
<div class="d-grid gap-2">
<button id="yes" class="btn btn-primary">Confirm</button>
<button id="no" class="btn btn-primary">Cancel</button>
</div>
</div>
</div>
@@ -99,13 +101,13 @@
<div class="form changepasswordform">
<form class="formbody changepasswordformbody">
<h1 class="loginformheader">Change Password</h1>
<div class="loginforminputbody">
<div class="loginformlabel">New password</div>
<input type="text" required id="changepasswordnewpassword" class="loginforminput">
<div class="form-floating mb-3">
<input type="text" required id="changepasswordnewpassword" class="form-control" placeholder="***">
<label for="changepasswordnewpassword">New password</label>
</div>
<div class="loginforminputbody">
<button class="loginformbutton">Change</button>
<button class="cancelchangepassword loginformbutton">Cancel</button>
<div class="d-grid gap-2">
<button class="btn btn-primary">Change</button>
<button class="btn btn-primary" id="cancelchangepassword">Cancel</button>
</div>
</form>
</div>
@@ -115,33 +117,34 @@
<h3 class="messagetext"></h3>
</div>
</div>
<table class="headers">
<thead class="alluserstablehead">
<tr>
<th>id</th>
<th>username</th>
<th>group</th>
<th>is_superuser</th>
<th>delete</th>
<th>change password</th>
<th>change user data</th>
</tr>
</thead>
</table>
<div class="table">
<table class="alluserstable">
<tbody class="alluserstablebody"></tbody>
<table class="table">
<thead class="alluserstablehead">
<tr>
<th>id</th>
<th>username</th>
<th>group</th>
<th>is_superuser</th>
<th>delete</th>
<th>change password</th>
<th>change user data</th>
</tr>
</thead>
<tbody id="alluserstablebody"></tbody>
</table>
</div>
<script src="js/security.js"></script>
<script src="js/message.js"></script>
<script src="js/routes.js"></script>
<script src="js/window.js"></script>
<script src="js/theme.js"></script>
<script src="js/login.js"></script>
<script src="js/get_all_users.js"></script>
<script src="js/add_user.js"></script>
<script src="js/del_user.js"></script>
<script src="js/change_password.js"></script>
<script src="js/change_user.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
</html>
+2 -2
View File
@@ -1,6 +1,6 @@
const adduserbutton = document.querySelector('.adduserbutton')
const adduserbutton = document.querySelector('#adduserbutton')
const adduserform = document.querySelector('.adduserform')
const canceladduserbutton = document.querySelector('.canceladduser')
const canceladduserbutton = document.querySelector('#canceladduser')
const adduserformbody = document.querySelector('.adduserformbody')
const usernameinput = document.querySelector('#adduserformusername')
const passwordinput = document.querySelector('#adduserformpassword')
+7
View File
@@ -0,0 +1,7 @@
/*!
* Bootstrap v5.3.5 (https://getbootstrap.com/)
* Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e(t.Popper)}(this,(function(t){"use strict";function e(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const i in t)if("default"!==i){const s=Object.getOwnPropertyDescriptor(t,i);Object.defineProperty(e,i,s.get?s:{enumerable:!0,get:()=>t[i]})}return e.default=t,Object.freeze(e)}const i=e(t),s=new Map,n={set(t,e,i){s.has(t)||s.set(t,new Map);const n=s.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>s.has(t)&&s.get(t).get(e)||null,remove(t,e){if(!s.has(t))return;const i=s.get(t);i.delete(e),0===i.size&&s.delete(t)}},o="transitionend",r=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),a=t=>{t.dispatchEvent(new Event(o))},l=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),c=t=>l(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(r(t)):null,h=t=>{if(!l(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},d=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),u=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?u(t.parentNode):null},_=()=>{},g=t=>{t.offsetHeight},f=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,m=[],p=()=>"rtl"===document.documentElement.dir,b=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,s=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=s,t.jQueryInterface)}},"loading"===document.readyState?(m.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of m)t()})),m.push(e)):e()},v=(t,e=[],i=t)=>"function"==typeof t?t.call(...e):i,y=(t,e,i=!0)=>{if(!i)return void v(t);const s=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const s=Number.parseFloat(e),n=Number.parseFloat(i);return s||n?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let n=!1;const r=({target:i})=>{i===e&&(n=!0,e.removeEventListener(o,r),v(t))};e.addEventListener(o,r),setTimeout((()=>{n||a(e)}),s)},w=(t,e,i,s)=>{const n=t.length;let o=t.indexOf(e);return-1===o?!i&&s?t[n-1]:t[0]:(o+=i?1:-1,s&&(o=(o+n)%n),t[Math.max(0,Math.min(o,n-1))])},A=/[^.]*(?=\..*)\.|.*/,E=/\..*/,C=/::\d+$/,T={};let k=1;const $={mouseenter:"mouseover",mouseleave:"mouseout"},S=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function L(t,e){return e&&`${e}::${k++}`||t.uidEvent||k++}function O(t){const e=L(t);return t.uidEvent=e,T[e]=T[e]||{},T[e]}function I(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function D(t,e,i){const s="string"==typeof e,n=s?i:e||i;let o=M(t);return S.has(o)||(o=t),[s,n,o]}function N(t,e,i,s,n){if("string"!=typeof e||!t)return;let[o,r,a]=D(e,i,s);if(e in $){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=O(t),c=l[a]||(l[a]={}),h=I(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&n);const d=L(r,e.replace(A,"")),u=o?function(t,e,i){return function s(n){const o=t.querySelectorAll(e);for(let{target:r}=n;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return F(n,{delegateTarget:r}),s.oneOff&&j.off(t,n.type,e,i),i.apply(r,[n])}}(t,i,r):function(t,e){return function i(s){return F(s,{delegateTarget:t}),i.oneOff&&j.off(t,s.type,e),e.apply(t,[s])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=n,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function P(t,e,i,s,n){const o=I(e[i],s,n);o&&(t.removeEventListener(i,o,Boolean(n)),delete e[i][o.uidEvent])}function x(t,e,i,s){const n=e[i]||{};for(const[o,r]of Object.entries(n))o.includes(Line truncated
//# sourceMappingURL=bootstrap.min.js.map
+1 -1
View File
@@ -1,5 +1,5 @@
const changepasswordform = document.querySelector('.changepasswordform')
const cancelchangepassword = document.querySelector('.cancelchangepassword')
const cancelchangepassword = document.querySelector('#cancelchangepassword')
const changepasswordformbody = document.querySelector('.changepasswordformbody')
const changepasswordnewpassword = document.querySelector('#changepasswordnewpassword')
+1 -1
View File
@@ -4,7 +4,7 @@ const changeuserformusername = document.querySelector('#changeuserformusername')
const changeuserformpassword = document.querySelector('#changeuserformpassword')
const changeuserformgroup = document.querySelector('#changeuserformgroup')
const changeuserformissuperuser = document.querySelector('#changeuserformissuperuser')
const cancelchangeuser = document.querySelector(".cancelchangeuser")
const cancelchangeuser = document.querySelector("#cancelchangeuser")
let changedatauserid = "";
let userdata = "";
+3 -3
View File
@@ -1,7 +1,7 @@
const userstablebody = document.querySelector('.alluserstablebody')
const userstablebody = document.querySelector('#alluserstablebody')
const confirmform = document.querySelector('.confirmform')
const confirmformcancel = document.querySelector('.no')
const confirmformok = document.querySelector('.yes')
const confirmformcancel = document.querySelector('#no')
const confirmformok = document.querySelector('#yes')
let useridtodelete = "";
+5 -5
View File
@@ -5,7 +5,7 @@ const get_all_users = async () => {
}).then(data => data.json()).then(jsondata => jsondata).catch((error) => {
notification(`Ошибка на сервере: ${error}`, "error")
})
const alluserstablebody = document.querySelector('.alluserstablebody')
const alluserstablebody = document.querySelector('#alluserstablebody')
alluserstablebody.innerHTML = ""
for (const user of response) {
alluserstablebody.innerHTML += `
@@ -14,10 +14,10 @@ const get_all_users = async () => {
<th>${user.username}</th>
<th>${user.group}</th>
<th>${user.is_superuser}</th>
<th><button class="deleteuser thbutton" id="${user.id}">Delete</button></th>
<th><button class="changepassword thbutton" id="${user.id}">Change password</button></th>
<th><button class="changeuser thbutton" id="${user.id}">Change user data</button></th>
</tr>
<th><button class="deleteuser btn btn-danger" id="${user.id}">Delete</button></th>
<th><button class="changepassword btn btn-warning" id="${user.id}">Change password</button></th>
<th><button class="changeuser btn btn-warning" id="${user.id}">Change user data</button></th>
</tr>
`
}
}
+8 -4
View File
@@ -1,8 +1,8 @@
const loginform = document.querySelector('.loginform')
const loginformbody = document.querySelector('.loginformbody')
const loginform = document.querySelector('#loginform')
const loginformbody = document.querySelector('#loginformbody')
const loginforminputusername = document.querySelector('#loginforminputusername')
const loginforminputpassword = document.querySelector('#loginforminputpassword')
const exitbutton = document.querySelector('.exitbutton')
const exitbutton = document.querySelector('#exitbutton')
const usernameheader = document.querySelector('.usernameheader')
if (localStorage.getItem("token") === null) {
@@ -34,6 +34,8 @@ const login = async (username, password) => {
}
})
if (response.status === "403") {
loginforminputusername.classList.add('is-invalid')
loginforminputpassword.classList.add('is-invalid')
notification("Неправильный логин или пароль", "error")
}
if (response.token) {
@@ -43,6 +45,8 @@ const login = async (username, password) => {
await get_user_data()
loginforminputusername.value = ""
loginforminputpassword.value = ""
loginforminputusername.classList.remove('is-invalid')
loginforminputpassword.classList.remove('is-invalid')
}
}
@@ -57,7 +61,7 @@ const get_user_data = async () => {
await get_all_users()
usernameheader.innerHTML = response.username
} else {
document.querySelector('.alluserstablebody').innerHTML = ""
document.querySelector('#alluserstablebody').innerHTML = ""
loginform.classList.add("active")
notification("Вы не можете войти потому что не являетесь администратором", "error")
localStorage.clear()
+11
View File
@@ -0,0 +1,11 @@
const themecheckbox = document.querySelector('#themecheckbox')
themecheckbox.addEventListener('click', (e) => {
if (themecheckbox.checked) {
document.documentElement.setAttribute('data-bs-theme', 'dark')
localStorage.setItem('bs-theme', 'dark')
} else {
document.documentElement.setAttribute('data-bs-theme', 'light')
localStorage.setItem('bs-theme', 'light')
}
})
+8 -1
View File
@@ -1,4 +1,11 @@
document.addEventListener("DOMContentLoaded", () => {
var theme = localStorage.getItem('bs-theme')
if (theme) {
document.documentElement.setAttribute('data-bs-theme', theme)
if (theme === 'dark') {
themecheckbox.checked = true
}
}
if (localStorage.getItem('token')) {
fetch(routes.access(), {
method: 'POST',
@@ -17,4 +24,4 @@ document.addEventListener("DOMContentLoaded", () => {
} else {
document.querySelector('.loginform').classList.add('active')
}
})
})