249 lines
No EOL
6.7 KiB
JavaScript
249 lines
No EOL
6.7 KiB
JavaScript
class AddButton {
|
||
|
||
id = "";
|
||
html = undefined;
|
||
|
||
constructor() {
|
||
this.html = document.createElement('button');
|
||
this.html.classList.add("plus");
|
||
this.html.classList.add("round");
|
||
this.html.appendChild(document.createTextNode("+"));
|
||
this.id = makeid(8);
|
||
this.html.id = this.id;
|
||
}
|
||
|
||
addHadler(func) {
|
||
this.html.addEventListener("click", func);
|
||
return this;
|
||
}
|
||
|
||
}
|
||
|
||
class HorisontalItem {
|
||
|
||
id = undefined;
|
||
html = undefined;
|
||
text = undefined;
|
||
|
||
constructor(text) {
|
||
this.text = text;
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("horisontal-item");
|
||
this.html.classList.add("rounded");
|
||
this.html.appendChild(document.createTextNode(text));
|
||
this.id = makeid(8);
|
||
this.html.id = this.id;
|
||
this.html.addEventListener("click", this.remove);
|
||
}
|
||
|
||
remove() {
|
||
document.getElementById(this.id).remove();
|
||
}
|
||
}
|
||
|
||
class HorisontalBar {
|
||
|
||
html = undefined;
|
||
plus_id = undefined;
|
||
elements = [];
|
||
|
||
constructor(text, id) {
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("horisontal-bar");
|
||
this.html.classList.add("input");
|
||
this.html.classList.add("rounded");
|
||
let label = document.createElement('p');
|
||
label.appendChild(document.createTextNode(text))
|
||
this.html.appendChild(label);
|
||
const plus = new AddButton().addHadler(
|
||
() => this.append(new HorisontalItem('test'))
|
||
);
|
||
this.html.appendChild(plus.html);
|
||
this.plus_id = plus.id;
|
||
}
|
||
|
||
append(elem) {
|
||
this.elements.push(elem);
|
||
this.html.insertBefore(elem.html, document.getElementById(this.plus_id));
|
||
return this;
|
||
}
|
||
|
||
json() {
|
||
return JSON.stringify(this.elements, json_filter);
|
||
}
|
||
}
|
||
|
||
class HorisontalImage {
|
||
|
||
id = undefined;
|
||
html = undefined;
|
||
|
||
constructor() {
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("horisontal");
|
||
this.html.classList.add("image");
|
||
this.html.classList.add("input");
|
||
this.html.classList.add("rounded");
|
||
this.id = makeid(8);
|
||
this.html.id = this.id;
|
||
|
||
let plus = new AddButton();
|
||
plus.addHadler(() => {
|
||
addImage(plus.id, this.id);
|
||
document.getElementById("screenshots").appendChild(new HorisontalImage().html);
|
||
});
|
||
this.html.appendChild(plus.html);
|
||
}
|
||
|
||
remove() {
|
||
document.getElementById(this.id).remove();
|
||
}
|
||
}
|
||
|
||
class HorisontalImageBar {
|
||
|
||
html = undefined;
|
||
first_id = undefined;
|
||
elements = [];
|
||
|
||
constructor(id) {
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("horisontal-bar");
|
||
const first = new HorisontalImage();
|
||
this.html.appendChild(first.html);
|
||
this.first_id = first.id;
|
||
}
|
||
|
||
append(elem) {
|
||
this.elements.push(elem);
|
||
this.html.insertBefore(elem.html, document.getElementById(this.first_id));
|
||
return this;
|
||
}
|
||
|
||
json() {
|
||
return JSON.stringify(this.elements, json_filter);
|
||
}
|
||
}
|
||
|
||
class ImgButton {
|
||
|
||
html = undefined;
|
||
id = undefined;
|
||
|
||
constructor(name, img) {
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("imgbutton");
|
||
this.id = makeid(8);
|
||
this.html.id = this.id;
|
||
|
||
let btn_img = document.createElement('img');
|
||
btn_img.src = img;
|
||
btn_img.innerHTML = name;
|
||
this.html.appendChild(btn_img);
|
||
}
|
||
|
||
addHadler(func) {
|
||
this.html.addEventListener("click", func);
|
||
return this;
|
||
}
|
||
|
||
setCssClass(name) {
|
||
this.html.classList.add(name);
|
||
}
|
||
|
||
}
|
||
|
||
class QueueItem {
|
||
|
||
html = undefined;
|
||
id = undefined;
|
||
|
||
constructor(date, name) {
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("queue-item");
|
||
this.html.classList.add("horisontal-bar");
|
||
this.html.classList.add("rounded");
|
||
this.id = makeid(8);
|
||
this.html.id = this.id;
|
||
|
||
var date_p = document.createElement('p');
|
||
date_p.innerHTML = date;
|
||
this.html.appendChild(date_p);
|
||
|
||
var text = document.createElement('p');
|
||
text.classList.add("ellipsis");
|
||
text.innerHTML = name;
|
||
this.html.appendChild(text);
|
||
|
||
let edit_btn = new ImgButton("Изменить", "./img/edit.svg");
|
||
edit_btn.setCssClass("edit");
|
||
this.html.appendChild(edit_btn.html);
|
||
let rem_btn = new ImgButton("Удалить", "./img/delete.svg");
|
||
rem_btn.setCssClass("remove");
|
||
this.html.appendChild(rem_btn.html);
|
||
}
|
||
|
||
}
|
||
|
||
class Calendar {
|
||
|
||
html = undefined;
|
||
id = undefined;
|
||
|
||
constructor() {
|
||
this.html = document.createElement('div');
|
||
this.html.classList.add("calendar");
|
||
this.html.classList.add("rounded");
|
||
this.id = makeid(8);
|
||
this.html.id = this.id;
|
||
|
||
// Calendar Header
|
||
let month = document.createElement('div');
|
||
month.classList.add("month");
|
||
let m_header = document.createElement('ul');
|
||
let prev_btn = document.createElement('li');
|
||
prev_btn.classList.add("prev");
|
||
prev_btn.id = this.id + "-prev";
|
||
prev_btn.innerHTML = "❮";
|
||
m_header.appendChild(prev_btn);
|
||
let next_btn = document.createElement('li');
|
||
next_btn.classList.add("next");
|
||
next_btn.id = this.id + "-next";
|
||
next_btn.innerHTML = "❯";
|
||
m_header.appendChild(next_btn);
|
||
let month_text = document.createElement('li');
|
||
month_text.innerHTML = "Август 2025";
|
||
m_header.appendChild(month_text);
|
||
month.appendChild(m_header);
|
||
this.html.appendChild(month);
|
||
|
||
// Week header
|
||
let weekdays = document.createElement('ul');
|
||
weekdays.classList.add("weekdays");
|
||
const days = ["Пн", "Вт", "Ср", "Чт", "Пт", "Сб", "Вс"];
|
||
for (const day of days) {
|
||
let day_li = document.createElement('li');
|
||
day_li.innerHTML = day;
|
||
weekdays.appendChild(day_li);
|
||
}
|
||
this.html.appendChild(weekdays);
|
||
|
||
let day_table = document.createElement('ul');
|
||
day_table.classList.add("days");
|
||
const current = 10;
|
||
for (const day of [...Array(31).keys()]) {
|
||
let day_li = document.createElement('li');
|
||
if (day+1 == current) {
|
||
let day_sp = document.createElement('span');
|
||
day_sp.classList.add("active");
|
||
day_sp.innerHTML = day+1;
|
||
day_li.appendChild(day_sp);
|
||
} else {
|
||
day_li.innerHTML = day+1;
|
||
}
|
||
day_table.appendChild(day_li);
|
||
}
|
||
this.html.appendChild(day_table);
|
||
}
|
||
|
||
} |