1
0
Fork 0
upl/web/src/log.js

95 lines
2.6 KiB
JavaScript
Raw Normal View History

2021-05-22 22:24:28 +08:00
import filesize from 'filesize';
class Log {
constructor(target, key, messages) {
2021-05-23 00:46:15 +08:00
this.key = key;
2021-05-23 18:10:08 +08:00
this.target = target;
2021-05-22 22:24:28 +08:00
this.items = [];
2021-05-23 19:46:32 +08:00
const empty = document.createElement('div');
empty.innerText = messages.empty || 'Empty';
empty.classList.add('mt-2', 'p-2', 'bg-gray-50', 'text-gray-500', 'rounded-md', 'border', 'border-gray-400', 'flex', 'justify-center');
2021-05-23 19:46:32 +08:00
this.empty = empty;
2021-05-22 22:24:28 +08:00
this.localStorageLoad();
this.render();
}
localStorageLoad() {
2021-05-23 17:00:48 +08:00
const loaded = JSON.parse(window.localStorage.getItem('log' + this.key) || '[]');
2021-05-22 22:24:28 +08:00
this.items.push(...loaded);
}
localStorageSave() {
2021-05-23 17:00:48 +08:00
window.localStorage.setItem('log' + this.key, JSON.stringify(this.items));
2021-05-22 22:24:28 +08:00
}
static renderItem(item) {
const base = document.createElement('div');
base.classList.add('mt-2');
2021-05-23 18:10:08 +08:00
base.classList.add('flex');
base.title = item.title;
2021-05-22 22:24:28 +08:00
const url = document.createElement('input');
2021-05-23 18:10:08 +08:00
url.type = 'url';
2021-05-22 22:24:28 +08:00
url.value = item.location;
2021-05-23 17:00:48 +08:00
url.setAttribute('readonly', '');
url.classList.add('w-full', 'rounded-l-md', 'border-r-0', 'border-gray-400');
2021-05-23 17:00:48 +08:00
url.addEventListener('click', (e) => {
2021-05-23 19:46:32 +08:00
//e.target.setSelectionRange(0, e.target.value.length);
e.target.select();
2021-05-22 22:24:28 +08:00
});
base.appendChild(url);
const urlOpen = document.createElement('a');
urlOpen.target = '_blank';
urlOpen.href = item.location;
urlOpen.classList.add('rounded-r-md', 'px-2', 'text-blue-700', 'border', 'border-l-0', 'border-gray-400', 'inline-flex', 'items-center');
urlOpen.innerText = 'Open';
base.appendChild(urlOpen);
if (item.size) {
urlOpen.classList.remove('rounded-r-md');
const size = document.createElement('span');
size.innerText = filesize(item.size);
size.classList.add('text-sm', 'whitespace-nowrap', 'px-2', 'bg-gray-50', 'text-gray-500', 'rounded-r-md', 'border', 'border-gray-400', 'border-l-0', 'inline-flex', 'items-center', 'justify-center', 'w-24');
base.appendChild(size);
}
2021-05-22 22:24:28 +08:00
return base;
}
render() {
const elements = this.items.map(this.constructor.renderItem);
2021-05-23 17:00:48 +08:00
this.target.innerHTML = '';
2021-05-22 22:24:28 +08:00
elements.forEach(element => {
this.target.appendChild(element);
});
2021-05-23 19:46:32 +08:00
this.renderEmpty();
}
renderEmpty() {
if (this.items.length == 0 && !this.target.contains(this.empty)) {
this.target.appendChild(this.empty);
} else if (this.target.contains(this.empty)) {
this.target.removeChild(this.empty);
}
2021-05-22 22:24:28 +08:00
}
add(item) {
this.items.push(item);
this.localStorageSave();
this.target.appendChild(this.constructor.renderItem(item));
2021-05-23 19:46:32 +08:00
this.renderEmpty();
2021-05-22 22:24:28 +08:00
}
clear() {
this.items = [];
this.localStorageSave();
this.render();
}
}
export default Log;