function logTracker({ title = "Log", storageName = "persist-input" } = {}) {
let log = [];
const lsv = localStorageView(storageName, { json: true });
const inName = html`<input name="name">`;
const btnSave = html`<button type="submit">Save`;
const listLogs = html`<ul>`;
const target = html`
<h3>${title}</h3>
${listLogs}
<form><label>Name: ${inName}<label>${btnSave}</form>
`;
log = [];
function set(val) {
target.value = val;
target.dispatchEvent(new Event("input", { bubbles: true }));
}
function renderLogs() {
listLogs.innerHTML = "";
const logsElems = log.map((l) => {
const btnRemove = html`<button>❌`;
btnRemove.onclick = () => {
log.splice(log.indexOf(l), 1);
set(log);
};
return html`<li><a href=${l.url} target="_blank">${l.name}</a> ${btnRemove}</a></li>`;
});
listLogs.appendChild(html`${logsElems}`);
}
btnSave.onclick = (evt) => {
evt.preventDefault();
target.value.push({
name: inName.value,
url: currentURL,
created_at: new Date()
});
inName.value = "";
set(target.value);
};
Object.defineProperty(target, "value", {
get() {
return log;
},
set(v) {
log = v || [];
renderLogs();
}
});
return Inputs.bind(target, lsv);
}