First commit

This commit is contained in:
2025-12-25 11:16:59 +01:00
commit 0c5ca09a63
720 changed files with 329234 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
import groups from '/user/group/user.group.permission.js';
import gridViewColumn from '/elements/gridView/gridView.header.row.column.js';
export default class userListHeaderActions extends gridViewColumn {
text = "Actions";
enableDELETE() {
this.show();
}
disableDELETE() {
this.hide();
}
permission() {
this.allow( groups.admin, "DELETE" );
}
}

View File

@@ -0,0 +1,18 @@
import user from '/user/user.js';
import username from './user.userList.header.username.js';
import actions from './user.userList.header.actions.js';
import gridViewRow from '/elements/gridView/gridView.header.row.js';
export default class userListHeader extends user, gridViewRow {
username = new username();
actions = new actions();
}

View File

@@ -0,0 +1,10 @@
import gridViewColumn from '/elements/gridView/gridView.header.row.column.js';
export default class userListHeaderUsername extends gridViewColumn{
text = "Username";
}

View File

@@ -0,0 +1,32 @@
import button from "/elements/button.js";
import groups from '/user/group/user.group.permission.js';
export default class deleteButton extends button {
text = "Delete";
propegateEvent = false;
async click() {
var sure = confirm("Are you sure you want to delete this item");
if( sure ) {
await this.parent.parent.delete();
this.parent.parent.remove();
}
}
permission() {
this.allow( groups.admin, "DELETE" );
}
}

View File

@@ -0,0 +1,23 @@
import gridViewColumn from '/elements/gridView/gridView.body.row.column.js';
import deleteButton from "./user.userList.item.actions.deleteButton.js"
export default class userListItemActions extends gridViewColumn, gridViewColumn{
useCustomElement = false;
padding = 20;
display = "table-cell";
layers = 1;
paddingLeft = 30;
borderRadius;
deleteButton = new deleteButton();
}

View File

@@ -0,0 +1,96 @@
import user from '/user/user.js';
import username from './user.userList.item.username.js';
import actions from './user.userList.item.actions.js';
import groups from '/user/group/user.group.permission.js';
import gridViewRow from '/elements/gridView/gridView.body.row.js';
export default class userListItem extends user, gridViewRow {
username = new username();
actions = new actions();
cursor = "pointer";
background;
#ifdef MACOS
fontSize = 14;
#endif
#ifdef DARK
mouseHoverColor = "#363333";
#endif
#ifdef LIGHT
mouseHoverColor = "rgb(255 255 255 / 95%)";
#endif
async click() {
this.stateMachine.composeState( "User", this.id );
await this.loadPage( this.id );
}
state async loadPage( id ) {
var rightSide = this.parents("rightSide");
rightSide.hideChildren();
var editUser = rightSide.editUser;
editUser.id = this.id;
editUser.show();
await editUser.sync();
}
mouseover() {
this.background = this.mouseHoverColor;
}
mouseleave() {
this.background = "none";
}
enableDELETE() {
this.actions.show();
}
disableDELETE() {
this.actions.hide();
}
permission() {
this.allow( groups.admin, "DELETE" );
}
}

View File

@@ -0,0 +1,12 @@
import userName from '/user/user.username.js';
import gridViewColumn from '/elements/gridView/gridView.body.row.column.js';
export default class userListItemTitle extends userName, gridViewColumn{
}

View File

@@ -0,0 +1,31 @@
import input from "/elements/input.js";
export default class searchBar extends input {
placeholder = "Search."
placeholderColor = "#8e8e8e"
webkitTextFillColor = "none";
async keyup( event ) {
this.value = this.customElement.value;
var value = this.value;
console.log("search input", value);
var newsItems = this.parent.userTable.body;
newsItems.value = value;
newsItems.sync();
}
}

View File

@@ -0,0 +1,24 @@
import header from '/elements/header.js';
import userTable from './user.userList.table.js';
import search from './search.js';
import page from '/elements/page.js';
export default class editPage extends page {
header = new header("Users");
search = new search();
userTable = new userTable();
flexDirection = "column"
}

View File

@@ -0,0 +1,50 @@
import renderCollection from '/unify/renderCollection.js';
import groups from '/user/group/user.group.permission.js';
import gridViewBody from '/elements/gridView/gridView.body.js';
import OR from '/unify/sql/OR.js';
import AND from '/unify/sql/AND.js';
import LIKE from '/unify/sql/LIKE.js';
export default class userListTableBody extends renderCollection, gridViewBody {
debug = true;
async create() {
await this.sync();
}
preprocess( object ) {
var filter = object.getFilter();
filter.search = LIKE( filter.username, this.value );
//filter.search = OR( LIKE( filter.title, this.value ), LIKE( filter.body, this.value ) );
filter.direction = "desc";
}
permission() {
this.allow( groups.visitor, "READ" );
this.allow( groups.member, "READ" );
this.allow( groups.admin, "READ" );
}
}

View File

@@ -0,0 +1,13 @@
import userListHeaderRow from "./header/user.userList.header.js";
import document from '/unify/document.js';
import gridViewHeader from '/elements/gridView/gridView.header.js';
export default class userListTableHeader extends gridViewHeader {
userListHeaderRow = new userListHeaderRow();
}

View File

@@ -0,0 +1,23 @@
import userListTableHeader from "./user.userList.table.header.js";
import userListTableBody from "./user.userList.table.body.js";
import collection from '/unify/collection.js';
import userListItem from '../userList/item/user.userList.item.js';
import user from '/user/user.js';
import gridView from '/elements/gridView/gridView.js';
export default class userListTable extends gridView{
header = new userListTableHeader();
body = new userListTableBody( userListItem, new collection( user ) );
}