Hide sharing tables depending on server features

This commit is contained in:
Max Berger
2026-03-07 22:41:33 +01:00
parent 23fcd2927e
commit 8393099b05
3 changed files with 86 additions and 48 deletions

View File

@@ -44,7 +44,13 @@ export class ShareCollectionScene {
/** @type {HTMLElement} */ let cancel_btn = html_scene.querySelector("[data-name=cancel]"); /** @type {HTMLElement} */ let cancel_btn = html_scene.querySelector("[data-name=cancel]");
/** @type {HTMLElement} */ let share_by_token_btn = html_scene.querySelector( /** @type {HTMLElement} */ let share_by_token_btn = html_scene.querySelector(
"[data-name=sharebytoken]" "button[data-name=sharebytoken]"
);
/** @type {HTMLElement} */ let share_by_token_div = html_scene.querySelector(
"div[data-name=sharebytoken]"
);
/** @type {HTMLElement} */ let share_by_map_div = html_scene.querySelector(
"div[data-name=sharebymap]"
); );
/** @type {HTMLElement} */ let title = html_scene.querySelector("[data-name=title]"); /** @type {HTMLElement} */ let title = html_scene.querySelector("[data-name=title]");
@@ -70,12 +76,27 @@ export class ShareCollectionScene {
scene_index = scene_stack.length - 1; scene_index = scene_stack.length - 1;
html_scene.classList.remove("hidden"); html_scene.classList.remove("hidden");
cancel_btn.onclick = oncancel; cancel_btn.onclick = oncancel;
if (server_features["sharing"]["PermittedCreateCollectionByToken"]) { if (server_features.sharing && server_features.sharing.PermittedCreateCollectionByToken) {
if (share_by_token_btn) {
share_by_token_btn.classList.remove("hidden"); share_by_token_btn.classList.remove("hidden");
share_by_token_btn.onclick = onsharebytoken; share_by_token_btn.onclick = onsharebytoken;
} else {
share_by_token_btn.classList.add("hidden");
} }
} else {
if (share_by_token_btn) share_by_token_btn.classList.add("hidden");
}
if (server_features.sharing && server_features.sharing.FeatureEnabledCollectionByToken) {
if (share_by_token_div) share_by_token_div.classList.remove("hidden");
} else {
if (share_by_token_div) share_by_token_div.classList.add("hidden");
}
if (server_features.sharing && server_features.sharing.FeatureEnabledCollectionByMap) {
if (share_by_map_div) share_by_map_div.classList.remove("hidden");
} else {
if (share_by_map_div) share_by_map_div.classList.add("hidden");
}
title.textContent = collection.displayname || collection.href; title.textContent = collection.displayname || collection.href;
update_share_list(user, password, collection); update_share_list(user, password, collection);
}; };
@@ -186,11 +207,9 @@ function add_share_rows(user, password, collection, shares) {
} }
export function maybe_enable_sharing_options() { export function maybe_enable_sharing_options() {
if (!server_features["sharing"]) return; if (!server_features.sharing) return;
let map_is_enabled = let map_is_enabled = server_features.sharing.FeatureEnabledCollectionByMap || false;
server_features["sharing"]["FeatureEnabledCollectionByMap"] || false; let token_is_enabled = server_features.sharing.FeatureEnabledCollectionByToken || false;
let token_is_enabled =
server_features["sharing"]["FeatureEnabledCollectionByToken"] || false;
if (map_is_enabled || token_is_enabled) { if (map_is_enabled || token_is_enabled) {
let share_options = document.querySelectorAll("[data-name=shareoption]"); let share_options = document.querySelectorAll("[data-name=shareoption]");
for (let i = 0; i < share_options.length; i++) { for (let i = 0; i < share_options.length; i++) {

View File

@@ -21,7 +21,22 @@
import { COLOR_RE, ROOT_PATH, SERVER } from "./constants.js"; import { COLOR_RE, ROOT_PATH, SERVER } from "./constants.js";
import { Collection, CollectionType } from "./models.js"; import { Collection, CollectionType } from "./models.js";
import { escape_xml } from "./utils.js"; import { escape_xml } from "./utils.js";
/**
* @typedef {Object} SharingFeatures
* @property {number} [ApiVersion]
* @property {string} [Status]
* @property {boolean} [FeatureEnabledCollectionByMap]
* @property {boolean} [PermittedCreateCollectionByMap]
* @property {boolean} [FeatureEnabledCollectionByToken]
* @property {boolean} [PermittedCreateCollectionByToken]
*/
/**
* @typedef {Object} ServerFeatures
* @property {SharingFeatures} [sharing]
*/
/** @type {ServerFeatures} */
export let server_features = {}; export let server_features = {};
/** /**

View File

@@ -147,6 +147,7 @@
<h1>Sharing</h1> <h1>Sharing</h1>
<p>Manage sharing for collection <span class="title" data-name="title">title</span> <p>Manage sharing for collection <span class="title" data-name="title">title</span>
</p> </p>
<div data-name="sharebytoken">
<h2>By Token</h2> <h2>By Token</h2>
<table> <table>
<tbody> <tbody>
@@ -169,6 +170,8 @@
</tr> </tr>
</tbody> </tbody>
</table> </table>
</div>
<div data-name="sharebymap">
<h2>By Map</h2> <h2>By Map</h2>
<table> <table>
<tbody> <tbody>
@@ -194,6 +197,7 @@
--> -->
</tbody> </tbody>
</table> </table>
</div>
<form> <form>
<button type="button" class="green" data-name="cancel">Close</button> <button type="button" class="green" data-name="cancel">Close</button>
</form> </form>