Initial commit
This commit is contained in:
115
Frontend/pages/home/ts/PageList.ts
Normal file
115
Frontend/pages/home/ts/PageList.ts
Normal file
@@ -0,0 +1,115 @@
|
||||
var PageList: PageList = {
|
||||
elements: {
|
||||
container: document.querySelector('.pageselector')
|
||||
},
|
||||
|
||||
order: null,
|
||||
|
||||
firstRender: true,
|
||||
|
||||
render(pagelist: PageListItem[]) {
|
||||
var list = ce('div', 'list');
|
||||
|
||||
PageList.order = pagelist.map((page) => {
|
||||
return page.pageID;
|
||||
});
|
||||
|
||||
pagelist.forEach((pagelistitem, index) => {
|
||||
var pageitem = ce('div', 'pageitem', { pageID: pagelistitem.pageID });
|
||||
var name = ce('div', 'name', null, pagelistitem.name);
|
||||
pageitem.appendChild(name);
|
||||
var move = ce('div', 'move');
|
||||
|
||||
var up = ce('div', [
|
||||
'moveitem',
|
||||
'up'
|
||||
]);
|
||||
up.appendChild(ce('img', 'normal', { src: '/stc/icon/up.png' }));
|
||||
up.appendChild(ce('img', 'selected', { src: '/stc/icon/up_gray.png' }));
|
||||
var down = ce('div', [
|
||||
'moveitem',
|
||||
'down'
|
||||
]);
|
||||
down.appendChild(ce('img', 'normal', { src: '/stc/icon/down.png' }));
|
||||
down.appendChild(ce('img', 'selected', { src: '/stc/icon/down_gray.png' }));
|
||||
up.onclick = (e: MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
|
||||
var current = PageList.order.indexOf(pagelistitem.pageID);
|
||||
var newIndex = Math.max(current - 1, 0);
|
||||
|
||||
PageList.order.splice(current, 1);
|
||||
PageList.order.splice(newIndex, 0, pagelistitem.pageID);
|
||||
|
||||
socket.emit('page', 'setorder', PageList.order);
|
||||
};
|
||||
down.onclick = (e: MouseEvent) => {
|
||||
e.stopPropagation();
|
||||
|
||||
var current = PageList.order.indexOf(pagelistitem.pageID);
|
||||
var newIndex = Math.max(current + 1, 0);
|
||||
|
||||
PageList.order.splice(current, 1);
|
||||
PageList.order.splice(newIndex, 0, pagelistitem.pageID);
|
||||
|
||||
socket.emit('page', 'setorder', PageList.order);
|
||||
};
|
||||
move.appendChild(up);
|
||||
move.appendChild(down);
|
||||
pageitem.appendChild(move);
|
||||
pageitem.onclick = () => {
|
||||
PageHandler.request(pagelistitem.pageID, index);
|
||||
};
|
||||
list.appendChild(pageitem);
|
||||
|
||||
if (PageHandler.currentPageID == pagelistitem.pageID) {
|
||||
PageHandler.request(pagelistitem.pageID, index);
|
||||
}
|
||||
});
|
||||
|
||||
var existing = PageList.elements.container.querySelector('.list');
|
||||
if (existing) existing.parentElement.removeChild(existing);
|
||||
PageList.elements.container.appendChild(list);
|
||||
},
|
||||
|
||||
select(pageID: string): boolean {
|
||||
var selectedFound = false;
|
||||
PageList.elements.container.querySelectorAll('.pageitem').forEach((item: HTMLDivElement) => {
|
||||
var itemPageID = item.getAttribute('pageID');
|
||||
if (itemPageID == pageID) {
|
||||
item.classList.add('selected');
|
||||
selectedFound = true;
|
||||
} else item.classList.remove('selected');
|
||||
});
|
||||
|
||||
if (selectedFound) {
|
||||
history.pushState(null, null, `/pages/${pageID}`);
|
||||
TabController.setTitle(`Page ${pageID}`);
|
||||
}
|
||||
return selectedFound;
|
||||
},
|
||||
|
||||
updateName(pageID: string, name: string) {
|
||||
var item = PageList.elements.container.querySelector(`.pageitem[pageid="${pageID}"]`);
|
||||
if (item) {
|
||||
var nameElement: HTMLDivElement = item.querySelector('.name');
|
||||
nameElement.innerText = name;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
interface PageList {
|
||||
elements: {
|
||||
container: HTMLDivElement;
|
||||
};
|
||||
firstRender: boolean;
|
||||
order: string[];
|
||||
|
||||
render: (pagelist: PageListItem[]) => void;
|
||||
select: (pageID: string) => boolean;
|
||||
updateName: (pageID: string, name: string) => void;
|
||||
}
|
||||
interface PageListItem {
|
||||
pageID: string;
|
||||
name: string;
|
||||
}
|
||||
Reference in New Issue
Block a user