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

79 lines
1.8 KiB
JavaScript
Raw Normal View History

2021-05-22 22:24:28 +08:00
import filesize from 'filesize';
class Log {
2021-05-23 18:10:08 +08:00
constructor(target, key) {
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 = [];
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');
2021-05-23 18:10:08 +08:00
base.classList.add('mt-1');
base.classList.add('flex');
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', '');
2021-05-23 18:10:08 +08:00
url.classList.add('w-full');
url.classList.add('rounded-l-md');
url.classList.add('border-gray-400');
2021-05-23 17:00:48 +08:00
url.addEventListener('click', (e) => {
2021-05-22 22:24:28 +08:00
e.target.setSelectionRange(0, e.target.value.length);
});
base.appendChild(url);
const size = document.createElement('span');
size.innerText = filesize(item.size);
2021-05-23 18:10:08 +08:00
size.classList.add('text-sm');
size.classList.add('whitespace-nowrap');
size.classList.add('px-2');
size.classList.add('bg-gray-50');
size.classList.add('text-gray-500');
size.classList.add('rounded-r-md');
size.classList.add('border');
size.classList.add('border-gray-400');
size.classList.add('border-l-0');
size.classList.add('inline-flex');
size.classList.add('items-center');
2021-05-22 22:24:28 +08:00
base.appendChild(size);
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);
});
}
add(item) {
this.items.push(item);
this.localStorageSave();
this.target.appendChild(this.constructor.renderItem(item));
}
clear() {
this.items = [];
this.localStorageSave();
this.render();
}
}
export default Log;