v1.0.5: user dropdown from Notion API, settingsCache pruning

This commit is contained in:
pdmarf
2026-04-10 20:42:11 +01:00
parent 2029b5187e
commit d6282d7396
6 changed files with 82 additions and 34 deletions

View File

@@ -73,8 +73,8 @@
#statusText.running { color: #4caf50; }
#statusText.error { color: #e57373; }
#versionText {
font-size: 10px;
color: #444;
font-size: 12px;
color: #fff;
text-align: center;
padding-top: 8px;
}
@@ -102,10 +102,12 @@
<input type="password" id="notionToken" placeholder="ntn_…">
</div>
<div class="row">
<label>User ID</label>
<input type="text" id="userId" placeholder="Your Notion user UUID">
<label>Your Name</label>
<select id="userId">
<option value="">— Select your name —</option>
</select>
</div>
<p class="hint">Shared across all buttons. Enter once per device.</p>
<p class="hint">Shared across all buttons. Select once per device.</p>
<p id="credStatus"></p>
<hr class="divider">
</div>
@@ -166,12 +168,25 @@
function saveCredentials() {
var creds = {
notionToken: document.getElementById("notionToken").value.trim(),
userId: document.getElementById("userId").value.trim(),
userId: document.getElementById("userId").value,
};
$PI.setGlobalSettings(creds);
setCredStatus("Credentials saved.", "ok");
}
function populateUsers(users, savedUserId) {
var sel = document.getElementById("userId");
var current = savedUserId || sel.value;
sel.innerHTML = '<option value="">— Select your name —</option>';
users.forEach(function(u) {
var opt = document.createElement("option");
opt.value = u.id;
opt.textContent = u.name;
if (u.id === current) opt.selected = true;
sel.appendChild(opt);
});
}
function scheduleCredSave() {
clearTimeout(credSaveTimer);
credSaveTimer = setTimeout(saveCredentials, 600);
@@ -212,15 +227,19 @@
$PI.getGlobalSettings();
document.getElementById("projectSelect").addEventListener("change", save);
["notionToken", "userId"].forEach(function(id) {
document.getElementById(id).addEventListener("input", scheduleCredSave);
});
document.getElementById("notionToken").addEventListener("input", scheduleCredSave);
document.getElementById("userId").addEventListener("change", saveCredentials);
});
$PI.onDidReceiveGlobalSettings(function(jsn) {
var s = jsn.payload.settings || {};
document.getElementById("notionToken").value = s.notionToken || "";
document.getElementById("userId").value = s.userId || "";
if (s.userId) {
var sel = document.getElementById("userId");
if (sel.querySelector('option[value="' + s.userId + '"]')) {
sel.value = s.userId;
}
}
credConfigured = !!(s.notionToken && s.userId);
@@ -253,6 +272,10 @@
if (payload.version) {
document.getElementById("versionText").textContent = "v" + payload.version;
}
if (payload.users) {
var savedUserId = document.getElementById("userId").value;
populateUsers(payload.users, savedUserId);
}
if (payload.error) {
setStatus(payload.error, "error");
} else {