Badges: print centering via display:contents — collapse wrappers, body as flex center

This commit is contained in:
Scott Idem
2026-03-12 17:21:56 -04:00
parent 11a6d5d35c
commit f26416de22
9 changed files with 891 additions and 1851 deletions

View File

@@ -28,7 +28,7 @@
Bell, Bell,
BellOff, BellOff,
Trash2, Trash2,
MinusCircle, CircleMinus,
Settings Settings
} from '@lucide/svelte'; } from '@lucide/svelte';
@@ -186,7 +186,7 @@
class="btn-icon btn-icon-sm preset-filled-warning-500 hover:preset-filled-warning-600 transition" class="btn-icon btn-icon-sm preset-filled-warning-500 hover:preset-filled-warning-600 transition"
title="Disable / soft-remove this {obj_label}" title="Disable / soft-remove this {obj_label}"
> >
<MinusCircle size="1.2em" /> <CircleMinus size="1.2em" />
</button> </button>
{/if} {/if}
</div> </div>

View File

@@ -147,69 +147,82 @@
it in the compiled layout CSS files. it in the compiled layout CSS files.
--> -->
<!-- Print chrome reset + centering: applied regardless of layout. <!-- Print layout strategy — applied regardless of badge layout:
Hides app nav, resets the events layout container, and centers the badge
both horizontally and vertically on the printed page.
Future manual margins: read from badge template cfg_json as Instead of trying to coerce #ae_main_content into a centering container
{ "print_margin": { "top": "0.25in", ... } } (which requires fighting its min-height, overflow, max-width, flex-col etc.),
and inject into @page margin via a dynamic <style> block. --> we use `display: contents` to dissolve the intermediate wrappers from the
layout. This makes .event_badge_wrapper a direct flex child of <body>, and
body becomes the single centering container for the whole printed page.
For PVC / fanfold: the @page size below matches the badge exactly, so
margin: 0 fills the page cleanly. If per-template margins are needed,
set cfg_json: { "print_margin": { "top": "0.25in", ... } } on the template
and a dynamic @page rule can be injected here via print_margin_cfg. -->
<style> <style>
@media print { @media print {
/* Fill the physical page height so flex vertical-centering works */ /* Full-page reset */
html, body { html, body {
height: 100%; height: 100%;
margin: 0 !important; margin: 0 !important;
padding: 0 !important; padding: 0 !important;
} }
/* Events layout nav bar */ /* Body is the sole centering flex container.
.submenu { display: none !important; } .event_badge_wrapper is its only non-hidden flex child
once the intermediate wrappers are collapsed via display:contents. */
/* Events #ae_main_content — convert to a full-page flex centering container */ body {
#ae_main_content {
display: flex !important; display: flex !important;
flex-direction: column !important;
align-items: center !important; align-items: center !important;
justify-content: center !important; justify-content: center !important;
overflow: visible !important; }
max-width: none !important;
width: 100% !important; /* Hide app chrome */
min-height: 100vh !important; .submenu { display: none !important; }
height: 100% !important;
padding: 0 !important; /* Dissolve layout wrappers — removes their boxes from the layout while
keeping children renderable. The badge section floats up to body
as a direct flex child, so body's centering applies to it directly.
This avoids all height-chain and overflow-clip issues. */
#ae_main_content,
#badge_render_area {
display: contents !important;
}
/* Badge wrapper: reset screen-only mx-auto; the @page size = badge size
so margin: 0 fills the page exactly.
gap/padding are stripped to eliminate any whitespace bleed. */
.event_badge_wrapper {
margin: 0 !important; margin: 0 !important;
background: transparent !important; padding: 0 !important;
gap: 0 !important; gap: 0 !important;
} }
/* Badge render wrapper — strip screen-only right padding; flex-center the badge */ /* Never split the front or back across pages */
#badge_render_area { .badge_front,
display: flex !important; .badge_back {
align-items: center !important; break-inside: avoid;
justify-content: center !important; page-break-inside: avoid;
padding: 0 !important;
margin: 0 !important;
width: 100% !important;
} }
} }
</style> </style>
<!-- @page paper size: matched to the badge stock per template layout.
margin: 0 so the badge occupies the full printable area.
If per-template offsets are needed, inject a dynamic style element
here driven by print_margin_cfg (parsed from template cfg_json). -->
{#if $lq__event_badge_template_obj?.layout === 'badge_3.5x5.5_pvc'} {#if $lq__event_badge_template_obj?.layout === 'badge_3.5x5.5_pvc'}
<style> <style>
@page { size: 3.5in 5.5in; margin: 0; } @page { size: 3.5in 5.5in; margin: 0; }
@media print { body { margin: 0; padding: 0; } .event_badge_wrapper { gap: 0 !important; padding: 0 !important; } }
</style> </style>
{:else if $lq__event_badge_template_obj?.layout === 'badge_4x5_fanfold'} {:else if $lq__event_badge_template_obj?.layout === 'badge_4x5_fanfold'}
<style> <style>
@page { size: 4in 10in; margin: 0; } @page { size: 4in 10in; margin: 0; }
@media print { body { margin: 0; padding: 0; } .event_badge_wrapper { gap: 0 !important; padding: 0 !important; } }
</style> </style>
{:else} {:else}
<!-- Default: badge_4x6_fanfold or layout not yet set --> <!-- Default: badge_4x6_fanfold or layout not yet set -->
<style> <style>
@page { size: 4in 12in; margin: 0; } @page { size: 4in 12in; margin: 0; }
@media print { body { margin: 0; padding: 0; } .event_badge_wrapper { gap: 0 !important; padding: 0 !important; } }
</style> </style>
{/if} {/if}

View File

@@ -27,7 +27,8 @@
(async () => { (async () => {
// Check Dexie cache first — sessions are typically cached from prior page visits // Check Dexie cache first — sessions are typically cached from prior page visits
let session = await db_events.session.get(session_id); // Typed as any: Dexie returns Session|undefined, API returns ae_EventSession|null — both duck-type fine
let session: any = await db_events.session.get(session_id);
if (!session) { if (!session) {
// Not cached — fetch from API and save to Dexie // Not cached — fetch from API and save to Dexie
session = await events_func.load_ae_obj_id__event_session({ session = await events_func.load_ae_obj_id__event_session({

View File

@@ -1,29 +1,22 @@
<script lang="ts"> <script lang="ts">
interface Props { interface Props {
// export let data: any;
log_lvl?: number; log_lvl?: number;
lq__event_obj: any; // let ae_tmp: key_val = {}; lq__event_obj: any;
} }
let { log_lvl = 0, lq__event_obj }: Props = $props(); let { log_lvl = 0, lq__event_obj }: Props = $props();
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { Modal } from 'flowbite-svelte';
import { Settings, X, Info } from '@lucide/svelte';
import { import {
ae_snip,
ae_loc, ae_loc,
ae_sess, ae_api
ae_api,
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores'; } from '$lib/stores/ae_stores';
import { import {
events_loc, events_loc,
events_sess, events_slct
events_slct,
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores'; } from '$lib/stores/ae_events_stores';
import { events_func } from '$lib/ae_events_functions'; import { events_func } from '$lib/ae_events_functions';
@@ -31,14 +24,40 @@
import Element_data_store from '$lib/elements/element_data_store_v3.svelte'; import Element_data_store from '$lib/elements/element_data_store_v3.svelte';
import Comp__events_menu_nav from '../../ae_comp__events_menu_nav.svelte'; import Comp__events_menu_nav from '../../ae_comp__events_menu_nav.svelte';
import Comp__pres_mgmt_menu_opts from '../../ae_comp__events_menu_opts.svelte'; import Comp__pres_mgmt_menu_opts from '../../ae_comp__events_menu_opts.svelte';
import AE_Record_Controls from '$lib/ae_elements/AE_Record_Controls.svelte';
let show_modal = $state(false);
let show_help = $state(false);
async function on_toggle(field: string, new_val: boolean) {
await api.update_ae_obj_v3({
api_cfg: $ae_api,
obj_type: 'event',
obj_id: $lq__event_obj?.event_id,
fields: { [field]: new_val }
});
events_func.load_ae_obj_id__event({
api_cfg: $ae_api,
event_id: $lq__event_obj?.event_id,
log_lvl
});
}
async function on_delete(method: 'delete' | 'disable') {
await events_func.delete_ae_obj_id__event({
api_cfg: $ae_api,
event_id: $lq__event_obj.event_id,
method
});
$events_slct.event_id = null;
$events_slct.event_obj = {};
goto('/events');
}
</script> </script>
<!-- New standard page specific menu 2025-06-20 -->
<div class="pres_mgmt__session_search_menu ae_container_module_menu"> <div class="pres_mgmt__session_search_menu ae_container_module_menu">
<!-- BEGIN: The menu button options --> <div class="flex flex-row flex-wrap gap-1 items-center justify-around w-full">
<div
class="flex flex-row flex-wrap gap-1 items-center justify-around w-full"
>
<Comp__events_menu_nav <Comp__events_menu_nav
hide={!$ae_loc.authenticated_access} hide={!$ae_loc.authenticated_access}
event_id={$lq__event_obj?.event_id} event_id={$lq__event_obj?.event_id}
@@ -49,35 +68,25 @@
events__session_search={false} events__session_search={false}
/> />
<span <span class="ae_menu__object_options flex flex-row flex-wrap gap-0.5 items-center justify-around">
class="ae_menu__object_options flex flex-row flex-wrap gap-0.5 items-center justify-around" <!-- Event Files toggle — the one real working button from the old menu, kept in place -->
>
<!-- Button to toggle between the regular event session search view and managing event files -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
if (
$events_loc.pres_mgmt.show_content__event_view ==
'manage_files'
) {
$events_loc.pres_mgmt.show_content__event_view = null;
} else {
$events_loc.pres_mgmt.show_content__event_view = $events_loc.pres_mgmt.show_content__event_view =
'manage_files'; $events_loc.pres_mgmt.show_content__event_view === 'manage_files'
} ? null
: 'manage_files';
}} }}
class={ae_snip.classes__events_pres_mgmt_menu__button_special} class="btn btn-sm relative"
class:preset-filled-primary-500={$events_loc.pres_mgmt class:preset-filled-primary-500={$events_loc.pres_mgmt.show_content__event_view === 'manage_files'}
.show_content__event_view == 'manage_files'} class:preset-tonal-primary={$events_loc.pres_mgmt.show_content__event_view !== 'manage_files'}
class:preset-tonal-primary={$events_loc.pres_mgmt
.show_content__event_view != 'manage_files'}
class:hidden={!$ae_loc.administrator_access} class:hidden={!$ae_loc.administrator_access}
disabled={!$ae_loc.manager_access} disabled={!$ae_loc.manager_access}
title="Session search or manage files for the event" title="Session search or manage files for the event"
> >
{#if $events_loc.pres_mgmt.show_content__event_view == 'manage_files'} {#if $events_loc.pres_mgmt.show_content__event_view === 'manage_files'}
<span class="fas fa-users m-1"></span> <span class="fas fa-users m-1"></span>
<!-- View Session Search -->
Session Search? Session Search?
{:else} {:else}
<span class="fas fa-file-archive m-1"></span> <span class="fas fa-file-archive m-1"></span>
@@ -91,442 +100,184 @@
{/if} {/if}
</button> </button>
<!-- Button to toggle between showing and not showing the extended options menu --> <!-- Options modal trigger -->
{#if $ae_loc.trusted_access}
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_modal = true)}
if ( class="btn btn-sm ae_btn_info"
$events_loc.pres_mgmt.show_menu__session_search == title="Event options"
'options'
) {
$events_loc.pres_mgmt.show_menu__session_search = null;
} else {
$events_loc.pres_mgmt.show_menu__session_search =
'options';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__session_search == 'options'}
class:ae_btn_info={$events_loc.pres_mgmt
.show_menu__session_search != 'options'}
class:hidden={!$ae_loc.trusted_access}
title="Options for the event session search"
> >
<span class="fas fa-cog m-1"></span> <Settings size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__session_search == 'options'} Options
Hide
{:else}
<span class="hidden"> Show </span>
{/if}
Options?
</button> </button>
<button
type="button"
onclick={() => {
if (
$events_loc.pres_mgmt.show_menu__session_search ==
'help'
) {
$events_loc.pres_mgmt.show_menu__session_search = null;
} else {
$events_loc.pres_mgmt.show_menu__session_search =
'help';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__session_search == 'help'}
class:ae_btn_info={$events_loc.pres_mgmt
.show_menu__session_search != 'help'}
title="Help and information about the session search"
>
<span class="fas fa-question-circle m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__session_search == 'help'}
Hide Help?
{:else}
Help?
{/if} {/if}
</button>
</span>
<span class="ae_menu__action_options" class:hidden={true}> <!-- Help toggle -->
No action options here yet.
</span>
</div>
<!-- END: The menu button options -->
<!-- BEGIN: The expanded menu area for information and options -->
<div
class:ae_container_module_options={$events_loc.pres_mgmt
.show_menu__session_search == 'options'}
class:hidden={$events_loc.pres_mgmt.show_menu__session_search !=
'options'}
>
<div class="ae_comp__event_menu_opts w-full">
<h2 class="text-sm font-semibold text-center pb-1">
Æ Event Menu Options
</h2>
<div
class="flex flex-row flex-wrap gap-1 items-center justify-between"
>
<div
class="flex flex-row gap-1 items-center justify-evenly relative"
>
<!-- Toggle alert status -->
<button <button
type="button" type="button"
disabled={!$ae_loc.administrator_access} onclick={() => (show_help = !show_help)}
onclick={async () => {
if (
!confirm(
`Are you sure you want to toggle the alert status for this session?`
)
) {
return false;
}
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event', obj_id: $lq__event_obj?.event_id, fields: { alert: !$lq__event_obj?.alert } });
events_func.load_ae_obj_id__event({ api_cfg: $ae_api, event_id: $lq__event_obj?.event_id, log_lvl });
}}
class:opacity-100={$lq__event_obj?.alert}
class:opacity-50={!$lq__event_obj?.alert}
class="
btn btn-sm
preset-tonal-warning hover:preset-tonal-error
preset-outlined-warning-100-900 hover:preset-outlined-warning-600-400
hover:opacity-100
transition-all
"
title={$lq__event_obj?.alert
? 'Remove alert status'
: 'Mark as alert'}
>
{#if $lq__event_obj?.alert}
<!-- class="fas fa-exclamation-triangle" -->
<span
class="fas fa-bell-slash m-0.75 text-warning-600"
title="This session is marked as an alert."
></span>
{:else}
<span
class="fas fa-bell m-0.75 text-gray-400"
title="This session is not marked as an alert."
></span>
{/if}
<span class="hidden">Toggle Alert</span>
</button>
</div>
<div
class="flex flex-row flex-wrap gap-1 items-center justify-evenly"
>
<button
type="button"
disabled={!$ae_loc.administrator_access}
onclick={async () => {
if (
!confirm(
`Are you sure you want to mark this event as ${$lq__event_obj?.priority ? 'not priority' : 'high priority'}?`
)
) {
return false;
}
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event', obj_id: $lq__event_obj?.event_id, fields: { priority: !$lq__event_obj?.priority } });
events_func.load_ae_obj_id__event({ api_cfg: $ae_api, event_id: $lq__event_obj?.event_id, log_lvl });
}}
class="btn btn-sm *:hover:inline"
class:ae_btn_surface_outlined={!$lq__event_obj?.priority}
class:ae_btn_success={$lq__event_obj?.priority}
>
{#if $lq__event_obj?.priority}
<span class="fas fa-star m-1"></span>
<span class="hidden"> Not Priority? </span>
{:else}
<span class="far fa-star m-1"></span>
<span class="hidden"> Priority </span>
?
{/if}
</button>
<button
type="button"
disabled={!$ae_loc.manager_access}
onclick={async () => {
if (
!confirm(
`Are you sure you want to ${$lq__event_obj?.hide ? 'unhide' : 'hide'} this session?`
)
) {
return false;
}
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event', obj_id: $lq__event_obj?.event_id, fields: { hide: !$lq__event_obj?.hide } });
events_func.load_ae_obj_id__event({ api_cfg: $ae_api, event_id: $lq__event_obj?.event_id, log_lvl });
}}
class="btn btn-sm *:hover:inline"
class:ae_btn_success_outlined={!$lq__event_obj?.hide}
class:ae_btn_warning={$lq__event_obj?.hide}
>
{#if $lq__event_obj?.hide}
<span class="fas fa-toggle-on m-1"></span>
Unhide?
{:else}
<span class="fas fa-eye m-1"></span>
<span class="hidden"> Not Hidden </span>
{/if}
</button>
<!-- Enable/Disable -->
<button
type="button"
disabled={!$ae_loc.manager_access}
onclick={async () => {
if (
!confirm(
`Are you sure you want to ${$lq__event_obj?.enable ? 'disable' : 'enable'} this session?`
)
) {
return false;
}
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event', obj_id: $lq__event_obj?.event_id, fields: { enable: !$lq__event_obj?.enable } });
events_func.load_ae_obj_id__event({ api_cfg: $ae_api, event_id: $lq__event_obj?.event_id, log_lvl });
}}
class="btn btn-sm" class="btn btn-sm"
class:ae_btn_success_outlined={$lq__event_obj?.enable} class:ae_btn_info_filled={show_help}
class:ae_btn_error={!$lq__event_obj?.enable} class:ae_btn_info={!show_help}
title="Help and information about the event session search"
> >
{#if $lq__event_obj?.enable} <Info size="1em" class="mr-1" />
<span class="fas fa-toggle-on m-1"></span> {show_help ? 'Hide Help' : 'Help'}
Enabled
{:else}
<span class="fas fa-toggle-off m-1"></span>
Enable?
{/if}
</button> </button>
</span>
<!-- Sort -->
<!-- Group -->
{#if $ae_loc.manager_access}
<button
type="button"
disabled={!$ae_loc.super_access}
onclick={() => {
if (
!confirm(
'Are you sure you want to delete this session?'
)
) {
return false;
}
events_func
.delete_ae_obj_id__event({
api_cfg: $ae_api,
event_id: $lq__event_obj.event_id,
method: 'delete'
})
.then(function (delete_results) {
$events_slct.event_id = null;
$events_slct.event_obj = {};
goto(`/events`);
});
}}
class="btn btn-sm mx-1 ae_btn_error"
title="Delete record permanently"
>
<span class="fas fa-minus-circle mx-1"></span>
Delete
</button>
{:else if $ae_loc.manager_access}
<button
type="button"
onclick={() => {
if (
!confirm(
'Are you sure you want to remove (disable) this session? This is not common.'
)
) {
return false;
}
events_func
.delete_ae_obj_id__event({
api_cfg: $ae_api,
event_id: $lq__event_obj.event_id,
method: 'disable'
})
.then(function (delete_results) {
$events_slct.event_id = null;
$events_slct.event_obj = {};
goto(`/events`);
});
}}
class="btn btn-sm mx-1 ae_btn_warning"
title="Disable record"
>
<span class="fas fa-minus mx-1"></span>
Delete
</button>
{/if}
</div>
</div>
</div> </div>
<div <!-- Options Modal -->
class="flex flex-row flex-wrap gap-1 items-center justify-center w-full p-1" <Modal
bind:open={show_modal}
autoclose={false}
dismissable={true}
placement="top-center"
size="lg"
class="relative flex flex-col mx-auto w-full bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg shadow-xl"
headerClass="flex flex-row gap-2 items-center justify-between w-full bg-surface-100 dark:bg-surface-800 p-4 rounded-t-lg border-b border-surface-200 dark:border-surface-700"
> >
<!-- Save search text option toggle button? --> {#snippet header()}
<h3 class="flex-1 flex items-center gap-2 text-base font-bold">
<Settings size="1.1em" class="text-primary-500" />
Event Options
</h3>
<button type="button" class="btn-icon btn-icon-sm preset-tonal-surface ml-2" onclick={() => (show_modal = false)}>
<X size="1.1em" />
</button>
{/snippet}
<div class="flex flex-col gap-4 p-4">
<!-- Display options for the session list -->
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Display</h4>
<div class="flex flex-col gap-1">
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.save_search_text = $events_loc.pres_mgmt.save_search_text =
!$events_loc.pres_mgmt.save_search_text; !$events_loc.pres_mgmt.save_search_text;
}} }}
class="btn btn-sm justify-between w-full max-w-50 text-center" class="btn btn-sm justify-between w-full"
class:ae_btn_surface={$events_loc.pres_mgmt.save_search_text} class:ae_btn_surface={$events_loc.pres_mgmt.save_search_text}
class:ae_btn_surface_outlined={!$events_loc.pres_mgmt class:ae_btn_surface_outlined={!$events_loc.pres_mgmt.save_search_text}
.save_search_text}
title="Save the search text for this session search?"
> >
{#if $events_loc.pres_mgmt.save_search_text} <span class="fas {$events_loc.pres_mgmt.save_search_text ? 'fa-toggle-on' : 'fa-toggle-off'} mr-1"></span>
<span class="fas fa-toggle-on m-1"></span>
<span class="grow"> <span class="grow">
<span class="fas fa-save m-1"></span> <span class="fas fa-save mr-1"></span>
Do Not Save Search? {$events_loc.pres_mgmt.save_search_text ? 'Do Not Save Search' : 'Save Search Text?'}
</span> </span>
{:else}
<span class="fas fa-toggle-off m-1"></span>
<span class="grow">
<span class="fas fa-save m-1"></span>
Save Search Text?
</span>
{/if}
</button> </button>
<!-- Show/Hide launcher links (new version) -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__launcher_link = $events_loc.pres_mgmt.hide__launcher_link =
!$events_loc.pres_mgmt.hide__launcher_link; !$events_loc.pres_mgmt.hide__launcher_link;
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full max-w-50 text-center" class="btn btn-sm justify-between w-full ae_btn_surface"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__launcher_link ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
class="fas {$events_loc.pres_mgmt.hide__launcher_link
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<span class="fas fa-plane m-1"></span> <span class="fas fa-plane mr-1"></span>
{$events_loc.pres_mgmt.hide__launcher_link {$events_loc.pres_mgmt.hide__launcher_link ? 'Show Launcher Links' : 'Hide Launcher Links?'}
? 'Show Launcher Links'
: 'Hide Launcher Links?'}
</span> </span>
</button> </button>
<!-- Show/Hide launcher links (legacy version) -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__launcher_link_legacy = $events_loc.pres_mgmt.hide__launcher_link_legacy =
!$events_loc.pres_mgmt.hide__launcher_link_legacy; !$events_loc.pres_mgmt.hide__launcher_link_legacy;
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full max-w-50 text-center" class="btn btn-sm justify-between w-full ae_btn_surface"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__launcher_link_legacy ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
class="fas {$events_loc.pres_mgmt.hide__launcher_link_legacy
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<span class="fas fa-paper-plane m-1"></span> <span class="fas fa-paper-plane mr-1"></span>
{$events_loc.pres_mgmt.hide__launcher_link_legacy {$events_loc.pres_mgmt.hide__launcher_link_legacy ? 'Show Legacy Launcher Links' : 'Hide Legacy Launcher Links?'}
? 'Legacy Launcher Links'
: 'Hide Legacy Launcher?'}
</span> </span>
</button> </button>
<!-- Show/Hide links to the location (room) -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__location_link = $events_loc.pres_mgmt.hide__location_link =
!$events_loc.pres_mgmt.hide__location_link; !$events_loc.pres_mgmt.hide__location_link;
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full max-w-50 text-center" class="btn btn-sm justify-between w-full ae_btn_surface"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__location_link ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
class="fas {$events_loc.pres_mgmt.hide__location_link
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<span class="fas fa-map-marker-alt m-1"></span> <span class="fas fa-map-marker-alt mr-1"></span>
{$events_loc.pres_mgmt.hide__location_link {$events_loc.pres_mgmt.hide__location_link ? 'Show Location Links' : 'Hide Location Links?'}
? 'Show Location Links'
: 'Hide Location Links?'}
</span> </span>
</button> </button>
<!-- Show/Hide the Location (room) column in tables and lists -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__session_li_location_field = $events_loc.pres_mgmt.hide__session_li_location_field =
!$events_loc.pres_mgmt.hide__session_li_location_field; !$events_loc.pres_mgmt.hide__session_li_location_field;
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full max-w-50 text-center" class="btn btn-sm justify-between w-full ae_btn_surface"
title="Toggle showing the Location column in session lists and tables" title="Toggle the Location column in session lists"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__session_li_location_field ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
class="fas {$events_loc.pres_mgmt
.hide__session_li_location_field
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<!-- <span class="fas fa-door-open m-1"></span> --> {$events_loc.pres_mgmt.hide__session_li_location_field ? 'Show Location Column' : 'Hide Location Column?'}
{$events_loc.pres_mgmt.hide__session_li_location_field
? 'Show Location Column'
: 'Hide Location Column?'}
</span> </span>
</button> </button>
<!-- Show/Hide the POC column in tables and lists -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__session_li_poc_field = $events_loc.pres_mgmt.hide__session_li_poc_field =
!$events_loc.pres_mgmt.hide__session_li_poc_field; !$events_loc.pres_mgmt.hide__session_li_poc_field;
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full max-w-50 text-center" class="btn btn-sm justify-between w-full ae_btn_surface"
title="Toggle showing the POC column in session lists and tables" title="Toggle the POC column in session lists"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__session_li_poc_field ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
class="fas {$events_loc.pres_mgmt.hide__session_li_poc_field
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<!-- <span class="fas fa-user-tie m-1"></span> --> {$events_loc.pres_mgmt.hide__session_li_poc_field ? 'Show POC Column' : 'Hide POC Column?'}
{$events_loc.pres_mgmt.hide__session_li_poc_field
? 'Show POC Column'
: 'Hide POC Column?'}
</span> </span>
</button> </button>
</div> </div>
</section>
<Comp__pres_mgmt_menu_opts hide={!$ae_loc.authenticated_access} /> <!-- Record Controls for the Event itself -->
{#if $ae_loc.administrator_access}
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Event Record</h4>
<AE_Record_Controls
obj={$lq__event_obj}
obj_label="event"
show_alert={true}
show_priority={true}
show_enable={true}
show_hide={true}
allow_delete={$ae_loc.super_access}
allow_disable={$ae_loc.manager_access && !$ae_loc.super_access}
{on_toggle}
{on_delete}
container_class="flex flex-row flex-wrap gap-2 items-center justify-start"
/>
</section>
{/if}
<!-- Pres Mgmt query options (limits, filters) — this component belongs here on the session search page -->
{#if $ae_loc.authenticated_access}
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Query Options</h4>
<Comp__pres_mgmt_menu_opts hide={false} />
</section>
{/if}
</div> </div>
<!-- END: The expanded menu area for information and options --> </Modal>
<!-- Help panel -->
<Element_data_store <Element_data_store
ds_code="events__pres_mgmt__session_search_help" ds_code="events__pres_mgmt__session_search_help"
ds_name="Default: Events - Pres Mgmt Session Search Help" ds_name="Default: Events - Pres Mgmt Session Search Help"
@@ -536,29 +287,6 @@
class_li="ae_container_module_help" class_li="ae_container_module_help"
show_edit={false} show_edit={false}
show_edit_btn={true} show_edit_btn={true}
hide={$events_loc.pres_mgmt.show_menu__session_search != 'help'} hide={!show_help}
/> />
<div>
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_menu__session_search =
!$events_loc.pres_mgmt.show_menu__session_search;
}}
class="btn btn-sm mx-1 ae_btn_info_filled"
class:hidden={!$events_loc.pres_mgmt.show_menu__session_search}
title="Collapse the expanded menu"
>
<span class="fas fa-chevron-up m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__session_search}
Hide
<!-- Collapse -->
{:else}
Show
{/if}
<!-- Menu? -->
</button>
</div> </div>
</div>
<!-- End of the new standard page specific menu -->

View File

@@ -2,7 +2,6 @@
export interface Props { export interface Props {
data?: any; data?: any;
log_lvl?: number; log_lvl?: number;
// export let event_location_id: string;
lq__event_obj: any; lq__event_obj: any;
lq__event_location_obj: any; lq__event_location_obj: any;
} }
@@ -14,36 +13,56 @@
lq__event_location_obj lq__event_location_obj
}: Props = $props(); }: Props = $props();
import { goto } from '$app/navigation';
import { Modal } from 'flowbite-svelte';
import { Settings, X, Info } from '@lucide/svelte';
import { import {
ae_snip,
ae_loc, ae_loc,
ae_sess, ae_api
ae_api,
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores'; } from '$lib/stores/ae_stores';
import { import {
events_loc, events_loc,
events_sess, events_slct
events_slct,
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores'; } from '$lib/stores/ae_events_stores';
import { events_func } from '$lib/ae_events_functions'; import { events_func } from '$lib/ae_events_functions';
import { api } from '$lib/api/api'; import { api } from '$lib/api/api';
import Element_data_store from '$lib/elements/element_data_store_v3.svelte'; import Element_data_store from '$lib/elements/element_data_store_v3.svelte';
import Comp__events_menu_nav from '../../../../ae_comp__events_menu_nav.svelte'; import Comp__events_menu_nav from '../../../../ae_comp__events_menu_nav.svelte';
import AE_Record_Controls from '$lib/ae_elements/AE_Record_Controls.svelte';
let show_modal = $state(false);
let show_help = $state(false);
async function on_toggle(field: string, new_val: boolean) {
await api.update_ae_obj_v3({
api_cfg: $ae_api,
obj_type: 'event_location',
obj_id: $lq__event_location_obj?.event_location_id,
fields: { [field]: new_val }
});
events_func.load_ae_obj_id__event_location({
api_cfg: $ae_api,
event_location_id: $lq__event_location_obj?.event_location_id,
log_lvl
});
}
async function on_delete(method: 'delete' | 'disable') {
await (events_func as any).delete_ae_obj_id__event_location({
api_cfg: $ae_api,
event_location_id: $lq__event_location_obj.event_location_id,
method
});
$events_slct.event_location_id = null;
goto(`/events/${$lq__event_location_obj.event_id}/locations`);
}
</script> </script>
<!-- New standard page specific menu 2025-06-20 -->
<div class="pres_mgmt__location_menu ae_container_module_menu"> <div class="pres_mgmt__location_menu ae_container_module_menu">
<!-- BEGIN: The menu button options --> <div class="flex flex-row flex-wrap gap-1 items-center justify-around w-full">
<div
class="flex flex-row flex-wrap gap-1 items-center justify-around w-full"
>
<Comp__events_menu_nav <Comp__events_menu_nav
hide={!$ae_loc.authenticated_access} hide={!$ae_loc.authenticated_access}
event_id={$lq__event_obj?.event_id} event_id={$lq__event_obj?.event_id}
@@ -52,208 +71,61 @@
events__session_search={$events_slct.event_id} events__session_search={$events_slct.event_id}
/> />
<span <span class="ae_menu__object_options flex flex-row flex-wrap items-center justify-around">
class="ae_menu__object_options flex flex-row flex-wrap items-center justify-around" <!-- Options modal trigger -->
> {#if $ae_loc.trusted_access}
<!-- Button to toggle between the regular location view and managing location files -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_modal = true)}
if ( class="btn btn-sm ae_btn_info"
$events_loc.pres_mgmt.show_content__location_view == title="Location options"
'manage_files'
) {
$events_loc.pres_mgmt.show_content__location_view =
null;
} else {
$events_loc.pres_mgmt.show_content__location_view =
'manage_files';
}
}}
class={ae_snip.classes__events_pres_mgmt_menu__button_special}
class:preset-filled-primary-500={$events_loc.pres_mgmt
.show_content__location_view == 'manage_files'}
class:preset-tonal-primary={$events_loc.pres_mgmt
.show_content__location_view != 'manage_files'}
class:hidden={!$ae_loc.trusted_access || 1 == 1}
title="Manage files for the location"
> >
{#if $events_loc.pres_mgmt.show_content__location_view == 'manage_files'} <Settings size="1em" class="mr-1" />
<span class="fas fa-users m-1"></span> Options
<!-- View Details -->
Location Sessions?
{:else}
<span class="fas fa-file-archive m-1"></span>
Location Files?
<span
class="badge badge-icon preset-tonal-success absolute -top-1.5 -right-1.5 z-10"
class:hidden={!$lq__event_location_obj?.file_count}
>
{$lq__event_location_obj?.file_count}×
</span>
{/if}
</button> </button>
<button
type="button"
onclick={() => {
if (
$events_loc.pres_mgmt.show_menu__location == 'options'
) {
$events_loc.pres_mgmt.show_menu__location = null;
} else {
$events_loc.pres_mgmt.show_menu__location = 'options';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__location == 'options'}
class:ae_btn_info={$events_loc.pres_mgmt.show_menu__location !=
'options'}
class:hidden={!$ae_loc.trusted_access}
title="Options for the location"
>
<span class="fas fa-cog m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__location == 'options'}
Hide
{:else}
Show
{/if} {/if}
Options?
</button>
<!-- Help toggle -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_help = !show_help)}
if ($events_loc.pres_mgmt.show_menu__location == 'help') { class="btn btn-sm"
$events_loc.pres_mgmt.show_menu__location = null; class:ae_btn_info_filled={show_help}
} else { class:ae_btn_info={!show_help}
$events_loc.pres_mgmt.show_menu__location = 'help';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__location == 'help'}
class:ae_btn_info={$events_loc.pres_mgmt.show_menu__location !=
'help'}
title="Help and information about the location" title="Help and information about the location"
> >
<span class="fas fa-question-circle m-1"></span> <Info size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__location == 'help'} {show_help ? 'Hide Help' : 'Help'}
Hide Help?
{:else}
Help?
{/if}
</button> </button>
</span> </span>
<!-- <span
class="ae_menu__action_options"
class:hidden={!$ae_loc.administrator_access}
>
No Actions
</span> -->
</div> </div>
<!-- END: The menu button options -->
<!-- BEGIN: The expanded menu area for information and options --> <!-- Options Modal -->
<div <Modal
class:ae_container_module_options={$events_loc.pres_mgmt bind:open={show_modal}
.show_menu__location == 'options'} autoclose={false}
class:hidden={$events_loc.pres_mgmt.show_menu__location != 'options'} dismissable={true}
placement="top-center"
size="md"
class="relative flex flex-col mx-auto w-full bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg shadow-xl"
headerClass="flex flex-row gap-2 items-center justify-between w-full bg-surface-100 dark:bg-surface-800 p-4 rounded-t-lg border-b border-surface-200 dark:border-surface-700"
> >
<button {#snippet header()}
type="button" <h3 class="flex-1 flex items-center gap-2 text-base font-bold">
onclick={async () => { <Settings size="1.1em" class="text-primary-500" />
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event_location', obj_id: $lq__event_location_obj?.event_location_id, fields: { priority: !$lq__event_location_obj?.priority } }); Location Options
events_func.load_ae_obj_id__event_location({ api_cfg: $ae_api, event_location_id: $lq__event_location_obj?.event_location_id, log_lvl }); </h3>
}} <button type="button" class="btn-icon btn-icon-sm preset-tonal-surface ml-2" onclick={() => (show_modal = false)}>
class="btn btn-sm m-1 *:hover:inline" <X size="1.1em" />
class:ae_btn_surface_outlined={!$lq__event_location_obj?.priority}
class:ae_btn_success={$lq__event_location_obj?.priority}
>
{#if $lq__event_location_obj?.priority}
<span class="fas fa-star m-1"></span>
<span class="hidden"> Not Priority? </span>
{:else}
<span class="far fa-star m-1"></span>
<span class="hidden"> Priority </span>
?
{/if}
</button> </button>
{/snippet}
<button <div class="flex flex-col gap-4 p-4">
type="button" <!-- Launcher & Location Link Toggles -->
onclick={async () => {
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event_location', obj_id: $lq__event_location_obj?.event_location_id, fields: { hide: !$lq__event_location_obj?.hide } });
events_func.load_ae_obj_id__event_location({ api_cfg: $ae_api, event_location_id: $lq__event_location_obj?.event_location_id, log_lvl });
}}
class="btn btn-sm m-1 *:hover:inline"
class:ae_btn_success_outlined={!$lq__event_location_obj?.hide}
class:ae_btn_warning={$lq__event_location_obj?.hide}
disabled={!$ae_loc.trusted_access}
>
{#if $lq__event_location_obj?.hide}
<span class="fas fa-toggle-on m-1"></span>
Unhide?
{:else}
<span class="fas fa-eye m-1"></span>
<span class="hidden"> Not Hidden </span>
{/if}
</button>
<!-- Enable/Disable -->
<button
type="button"
onclick={async () => {
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event_location', obj_id: $lq__event_location_obj?.event_location_id, fields: { enable: !$lq__event_location_obj?.enable } });
events_func.load_ae_obj_id__event_location({ api_cfg: $ae_api, event_location_id: $lq__event_location_obj?.event_location_id, log_lvl });
}}
class="btn btn-sm"
class:ae_btn_success_outlined={$lq__event_location_obj?.enable}
class:ae_btn_error={!$lq__event_location_obj?.enable}
disabled={!$ae_loc.manager_access}
>
{#if $lq__event_location_obj?.enable}
<span class="fas fa-toggle-on m-1"></span>
Enabled
{:else}
<span class="fas fa-toggle-off m-1"></span>
Enable?
{/if}
</button>
<!-- Sort -->
<!-- Group -->
{#if $ae_loc.administrator_access} {#if $ae_loc.administrator_access}
<div class="flex flex-col gap-1 items-center"> <section>
<!-- {#if $events_loc.pres_mgmt.show_content__location_qr} <h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Display Links</h4>
<button type="button" <div class="flex flex-col gap-1">
disabled={!$ae_loc.manager_access}
on:click={() => {
$events_loc.pres_mgmt.show_content__location_qr = false;
}}
class="btn btn-sm variant-ghost-success"
>
<span class="fas fa-toggle-on m-1"></span>
Showing QR Code
</button>
{:else}
<button type="button"
disabled={!$ae_loc.manager_access}
on:click={() => {
$events_loc.pres_mgmt.show_content__location_qr = true;
}}
class="btn btn-sm variant-ringed-warning"
>
<span class="fas fa-toggle-off m-1"></span>
Show QR Code?
</button>
{/if} -->
<!-- Show/Hide launcher links (new version) -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
@@ -262,20 +134,13 @@
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full text-center" class="btn btn-sm ae_btn_surface justify-between w-full text-center"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__launcher_link ? 'fa-toggle-off' : 'fa-toggle-on'} m-1"></span>
class="fas {$events_loc.pres_mgmt.hide__launcher_link
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<span class="fas fa-plane m-1"></span> <span class="fas fa-plane m-1"></span>
{$events_loc.pres_mgmt.hide__launcher_link {$events_loc.pres_mgmt.hide__launcher_link ? 'Show Launcher Links' : 'Hide Launcher Links?'}
? 'Show Launcher Links'
: 'Hide Launcher Links?'}
</span> </span>
</button> </button>
<!-- Show/Hide launcher links (legacy version) -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
@@ -284,21 +149,13 @@
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full text-center" class="btn btn-sm ae_btn_surface justify-between w-full text-center"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__launcher_link_legacy ? 'fa-toggle-off' : 'fa-toggle-on'} m-1"></span>
class="fas {$events_loc.pres_mgmt
.hide__launcher_link_legacy
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<span class="fas fa-paper-plane m-1"></span> <span class="fas fa-paper-plane m-1"></span>
{$events_loc.pres_mgmt.hide__launcher_link_legacy {$events_loc.pres_mgmt.hide__launcher_link_legacy ? 'Show Legacy Launcher Links' : 'Hide Legacy Launcher Links?'}
? 'Show Launcher Links'
: 'Hide Legacy Launcher Links?'}
</span> </span>
</button> </button>
<!-- Show/Hide links to the location (room) -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
@@ -307,157 +164,106 @@
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full text-center" class="btn btn-sm ae_btn_surface justify-between w-full text-center"
> >
<span <span class="fas {$events_loc.pres_mgmt.hide__location_link ? 'fa-toggle-off' : 'fa-toggle-on'} m-1"></span>
class="fas {$events_loc.pres_mgmt.hide__location_link
? 'fa-toggle-off'
: 'fa-toggle-on'} m-1"
></span>
<span class="grow"> <span class="grow">
<span class="fas fa-map-marker-alt m-1"></span> <span class="fas fa-map-marker-alt m-1"></span>
{$events_loc.pres_mgmt.hide__location_link {$events_loc.pres_mgmt.hide__location_link ? 'Show Location Links' : 'Hide Location Links?'}
? 'Show Location Links'
: 'Hide Location Links?'}
</span> </span>
</button> </button>
{#if $events_loc.pres_mgmt.show_content__session_files} <!-- Linked Files / Presentations (testing) -->
<button <button
type="button" type="button"
disabled={!$ae_loc.manager_access} disabled={!$ae_loc.manager_access}
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.show_content__session_files = false; $events_loc.pres_mgmt.show_content__session_files =
!$events_loc.pres_mgmt.show_content__session_files;
}} }}
class="btn btn-sm ae_btn_surface justify-between w-full text-center" class="btn btn-sm justify-between w-full text-center"
class:ae_btn_surface={$events_loc.pres_mgmt.show_content__session_files}
class:ae_btn_surface_outlined={!$events_loc.pres_mgmt.show_content__session_files}
> >
<span class="fas fa-toggle-on m-1"></span> <span class="fas {$events_loc.pres_mgmt.show_content__session_files ? 'fa-toggle-on' : 'fa-toggle-off'} m-1"></span>
<span class="grow"> <span class="grow">
<span class="fas fa-list m-1"></span> <span class="fas fa-list m-1"></span>
Hide Linked Files (testing) {$events_loc.pres_mgmt.show_content__session_files ? 'Hide Linked Files (testing)' : 'Show Linked Files? (testing)'}
</span> </span>
</button> </button>
{:else}
<button <button
type="button" type="button"
disabled={!$ae_loc.manager_access} disabled={!$ae_loc.manager_access}
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.show_content__session_files = true; $events_loc.pres_mgmt.show_content__session_presentations =
!$events_loc.pres_mgmt.show_content__session_presentations;
}} }}
class="btn btn-sm ae_btn_surface_outlined justify-between w-full text-center" class="btn btn-sm justify-between w-full text-center"
class:ae_btn_surface={$events_loc.pres_mgmt.show_content__session_presentations}
class:ae_btn_surface_outlined={!$events_loc.pres_mgmt.show_content__session_presentations}
> >
<span class="fas fa-toggle-off m-1"></span> <span class="fas {$events_loc.pres_mgmt.show_content__session_presentations ? 'fa-toggle-on' : 'fa-toggle-off'} m-1"></span>
<span class="grow"> <span class="grow">
<span class="fas fa-list m-1"></span> <span class="fas fa-list m-1"></span>
Show Linked Files? (testing) {$events_loc.pres_mgmt.show_content__session_presentations ? 'Hide Linked Presentations (testing)' : 'Show Linked Presentations? (testing)'}
</span> </span>
</button> </button>
</div>
</section>
{/if} {/if}
{#if $events_loc.pres_mgmt.show_content__session_presentations} <!-- Mode toggles -->
{#if $ae_loc.trusted_access}
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Mode</h4>
<div class="flex flex-row flex-wrap gap-2">
<button <button
type="button" type="button"
disabled={!$ae_loc.manager_access} onclick={() => ($ae_loc.edit_mode = !$ae_loc.edit_mode)}
onclick={() => { class="btn btn-sm"
$events_loc.pres_mgmt.show_content__session_presentations = false; class:ae_btn_warning={$ae_loc.edit_mode}
}} class:ae_btn_warning_outlined={!$ae_loc.edit_mode}
class="btn btn-sm ae_btn_surface justify-between w-full text-center"
> >
<span class="fas fa-toggle-on m-1"></span> <span class="fas fa-edit mr-1"></span>
<span class="grow"> {$ae_loc.edit_mode ? 'Edit Mode On' : 'Edit Mode?'}
<span class="fas fa-list m-1"></span>
Hide Linked Presentations (testing)
</span>
</button> </button>
{:else}
<button <button
type="button" type="button"
disabled={!$ae_loc.manager_access} onclick={() => ($ae_loc.adv_mode = !$ae_loc.adv_mode)}
onclick={() => { class="btn btn-sm"
$events_loc.pres_mgmt.show_content__session_presentations = true; class:ae_btn_warning={$ae_loc.adv_mode}
}} class:ae_btn_warning_outlined={!$ae_loc.adv_mode}
class="btn btn-sm ae_btn_surface_outlined justify-between w-full text-center"
> >
<span class="fas fa-toggle-off m-1"></span> <span class="fas fa-hat-wizard mr-1"></span>
<span class="grow"> {$ae_loc.adv_mode ? 'Advanced Mode On' : 'Advanced Mode?'}
<span class="fas fa-list m-1"></span>
Show Linked Presentations? (testing)
</span>
</button> </button>
</div>
</section>
{/if}
<!-- Record Controls -->
{#if $ae_loc.trusted_access}
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Record</h4>
<AE_Record_Controls
obj={$lq__event_location_obj}
obj_label="location"
show_alert={false}
show_priority={true}
show_enable={true}
show_hide={true}
allow_delete={$ae_loc.manager_access}
allow_disable={$ae_loc.administrator_access && !$ae_loc.manager_access}
{on_toggle}
{on_delete}
container_class="flex flex-row flex-wrap gap-2 items-center justify-start"
/>
</section>
{/if} {/if}
</div> </div>
{/if} </Modal>
{#if $ae_loc?.trusted_access}
<div
class="flex flex-row flex-wrap gap-1 items-center justify-evenly max-w-56"
>
{#if $ae_loc?.edit_mode}
<button
type="button"
onclick={() => {
$ae_loc.edit_mode = false;
}}
class="btn btn-sm ae_btn_warning justify-between w-full text-center"
title="Turn off edit mode"
>
<span class="fas fa-toggle-on m-1"></span>
<span class="grow">
<span class="fas fa-edit m-1"></span>
Edit Mode Off
</span>
</button>
{:else}
<button
type="button"
onclick={() => {
$ae_loc.edit_mode = true;
}}
class="btn btn-sm ae_btn_warning_outlined justify-between w-full text-center"
title="Turn on edit mode"
>
<span class="fas fa-toggle-off m-1"></span>
<span class="grow">
<span class="fas fa-user-ninja m-1"></span>
Edit Mode?
</span>
</button>
{/if}
{#if $ae_loc?.adv_mode}
<button
type="button"
onclick={() => {
$ae_loc.adv_mode = false;
}}
class="btn btn-sm ae_btn_warning justify-between w-full text-center"
title="Turn off advanced mode"
>
<span class="fas fa-toggle-on m-1"></span>
<span class="grow">
<span class="fas fa-magic m-1"></span>
Advanced Mode Off
</span>
</button>
{:else}
<button
type="button"
onclick={() => {
$ae_loc.adv_mode = true;
}}
class="btn btn-sm ae_btn_warning_outlined justify-between w-full text-center"
title="Turn on advanced mode"
>
<span class="fas fa-toggle-off m-1"></span>
<span class="grow">
<span class="fas fa-hat-wizard m-1"></span>
Advanced Mode?
</span>
</button>
{/if}
</div>
{/if}
</div>
<!-- END: The expanded menu area for information and options -->
<!-- Help panel -->
<Element_data_store <Element_data_store
ds_code="events__pres_mgmt__location_help" ds_code="events__pres_mgmt__location_help"
ds_name="Default: Events - Pres Mgmt Location Help" ds_name="Default: Events - Pres Mgmt Location Help"
@@ -467,29 +273,6 @@
class_li="ae_container_module_help" class_li="ae_container_module_help"
show_edit={false} show_edit={false}
show_edit_btn={true} show_edit_btn={true}
hide={$events_loc.pres_mgmt.show_menu__location != 'help'} hide={!show_help}
/> />
<div>
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_menu__location =
!$events_loc.pres_mgmt.show_menu__location;
}}
class="btn btn-sm mx-1 ae_btn_info_filled"
class:hidden={!$events_loc.pres_mgmt.show_menu__location}
title="Collapse the expanded menu"
>
<span class="fas fa-chevron-up m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__location}
Hide
<!-- Collapse -->
{:else}
Show
{/if}
<!-- Menu? -->
</button>
</div> </div>
</div>
<!-- End of the new standard page specific menu -->

View File

@@ -1,45 +1,30 @@
<script lang="ts"> <script lang="ts">
interface Props { interface Props {
// export let data: any;
log_lvl?: number; log_lvl?: number;
// export let event_location_id: string; lq__event_obj: any;
lq__event_obj: any; // export let lq__auth__event_presenter_obj: any;
} }
let { log_lvl = 0, lq__event_obj }: Props = $props(); let { log_lvl = 0, lq__event_obj }: Props = $props();
// import type { key_val } from '$lib/ae_stores'; import { Modal } from 'flowbite-svelte';
import { import { Settings, X, Info } from '@lucide/svelte';
ae_snip,
ae_loc, import { ae_loc } from '$lib/stores/ae_stores';
ae_sess,
ae_api,
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores';
import { import {
events_loc, events_loc,
events_sess, events_slct
events_slct,
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores'; } from '$lib/stores/ae_events_stores';
// import { events_func } from '$lib/ae_events_functions';
import Element_data_store from '$lib/elements/element_data_store_v3.svelte'; import Element_data_store from '$lib/elements/element_data_store_v3.svelte';
import Comp__events_menu_nav from '../../../ae_comp__events_menu_nav.svelte'; import Comp__events_menu_nav from '../../../ae_comp__events_menu_nav.svelte';
// let ae_tmp: key_val = {}; let show_modal = $state(false);
// let ae_triggers: key_val = {}; let show_help = $state(false);
</script> </script>
<!-- New standard page specific menu 2025-06-20 --> <div class="pres_mgmt__locations_menu ae_container_module_menu">
<div class="pres_mgmt__location_menu ae_container_module_menu"> <div class="flex flex-row flex-wrap gap-1 items-center justify-around w-full">
<!-- BEGIN: The menu button options -->
<div
class="flex flex-row flex-wrap gap-1 items-center justify-around w-full"
>
<Comp__events_menu_nav <Comp__events_menu_nav
hide={!$ae_loc.authenticated_access} hide={!$ae_loc.authenticated_access}
event_id={$lq__event_obj?.event_id} event_id={$lq__event_obj?.event_id}
@@ -48,205 +33,140 @@
events__session_search={$events_slct.event_id} events__session_search={$events_slct.event_id}
/> />
<span <span class="ae_menu__object_options flex flex-row flex-wrap gap-0.5 items-center justify-around">
class="ae_menu__object_options flex flex-row flex-wrap gap-0.5 items-center justify-around" <!-- Options modal trigger -->
> {#if $ae_loc.trusted_access}
<!-- Button to toggle between showing and not showing the extended options menu -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_modal = true)}
if ( class="btn btn-sm ae_btn_info"
$events_loc.pres_mgmt.show_menu__location == 'options' title="Location list options"
) {
$events_loc.pres_mgmt.show_menu__location = null;
} else {
$events_loc.pres_mgmt.show_menu__location = 'options';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__location == 'options'}
class:ae_btn_info={$events_loc.pres_mgmt.show_menu__location !=
'options'}
class:hidden={!$ae_loc.trusted_access}
title="Options for the event locations"
> >
<span class="fas fa-cog m-1"></span> <Settings size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__location == 'options'} Options
Hide
{:else}
Show
{/if}
Options?
</button> </button>
{/if}
<!-- Help toggle -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_help = !show_help)}
if ($events_loc.pres_mgmt.show_menu__location == 'help') { class="btn btn-sm"
$events_loc.pres_mgmt.show_menu__location = null; class:ae_btn_info_filled={show_help}
} else { class:ae_btn_info={!show_help}
$events_loc.pres_mgmt.show_menu__location = 'help'; title="Help and information about locations"
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__location == 'help'}
class:ae_btn_info={$events_loc.pres_mgmt.show_menu__location !=
'help'}
title="Help and information about the location"
> >
<span class="fas fa-question-circle m-1"></span> <Info size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__location == 'help'} {show_help ? 'Hide Help' : 'Help'}
Hide Help?
{:else}
Help?
{/if}
</button> </button>
</span> </span>
</div> </div>
<!-- END: The menu button options -->
<!-- BEGIN: The expanded menu area for information and options --> <!-- Options Modal -->
<div <Modal
class="flex flex-row flex-wrap gap-0.5 items-center justify-around w-full bg-blue-100 hover:bg-blue-200 border border-blue-200 hover:border-blue-400 p-2 rounded-md" bind:open={show_modal}
class:hidden={$events_loc.pres_mgmt.show_menu__location != 'options'} autoclose={false}
dismissable={true}
placement="top-center"
size="sm"
class="relative flex flex-col mx-auto w-full bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg shadow-xl"
headerClass="flex flex-row gap-2 items-center justify-between w-full bg-surface-100 dark:bg-surface-800 p-4 rounded-t-lg border-b border-surface-200 dark:border-surface-700"
> >
<!-- <div {#snippet header()}
class="flex flex-row flex-wrap gap-1 items-center justify-center w-full" <h3 class="flex-1 flex items-center gap-2 text-base font-bold">
> --> <Settings size="1.1em" class="text-primary-500" />
<!-- Show the session list or device list --> Locations Display Options
</h3>
<button type="button" class="btn-icon btn-icon-sm preset-tonal-surface ml-2" onclick={() => (show_modal = false)}>
<X size="1.1em" />
</button>
{/snippet}
<div class="flex flex-col gap-4 p-4">
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Content</h4>
<div class="flex flex-col gap-1">
<!-- Session list vs Device list per location -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
if (
$events_loc.pres_mgmt
.show_content__location_devices_sessions == 'sessions'
) {
$events_loc.pres_mgmt.show_content__location_devices_sessions = $events_loc.pres_mgmt.show_content__location_devices_sessions =
'devices'; $events_loc.pres_mgmt.show_content__location_devices_sessions === 'sessions'
} else { ? 'devices'
$events_loc.pres_mgmt.show_content__location_devices_sessions = : 'sessions';
'sessions';
}
}} }}
class="btn btn-sm" class="btn btn-sm justify-between w-full"
class:ae_btn_surface={$events_loc.pres_mgmt class:ae_btn_surface={$events_loc.pres_mgmt.show_content__location_devices_sessions === 'sessions'}
?.show_content__location_devices_sessions == 'sessions'} class:ae_btn_surface_outlined={$events_loc.pres_mgmt.show_content__location_devices_sessions !== 'sessions'}
class:ae_btn_surface_outlined={$events_loc.pres_mgmt title="Toggle between showing sessions or devices for each location"
?.show_content__location_devices_sessions == 'devices'}
title="Show the session list or device list for each location."
> >
{#if $events_loc.pres_mgmt.show_content__location_devices_sessions == 'sessions'} <span class="fas {$events_loc.pres_mgmt.show_content__location_devices_sessions === 'sessions' ? 'fa-toggle-on' : 'fa-toggle-off'} mr-1"></span>
<span class="fas fa-toggle-on m-1"></span> {$events_loc.pres_mgmt.show_content__location_devices_sessions === 'sessions'
Location's Session List ? "Location's Session List"
{:else} : "Location's Device List"}
<span class="fas fa-toggle-off m-1"></span>
Location's Device List
{/if}
</button> </button>
</div>
</section>
<!-- Show or hide the device code --> <section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Show Codes</h4>
<div class="flex flex-col gap-1">
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__device_code = $events_loc.pres_mgmt.hide__device_code =
!$events_loc.pres_mgmt.hide__device_code; !$events_loc.pres_mgmt.hide__device_code;
}} }}
class="btn btn-sm" class="btn btn-sm justify-between w-full"
class:ae_btn_surface={!$events_loc.pres_mgmt?.hide__device_code} class:ae_btn_surface={!$events_loc.pres_mgmt.hide__device_code}
class:ae_btn_surface_outlined={$events_loc.pres_mgmt class:ae_btn_surface_outlined={$events_loc.pres_mgmt.hide__device_code}
?.hide__device_code}
title="Show or hide the device code."
> >
{#if !$events_loc.pres_mgmt.hide__device_code} <span class="fas {$events_loc.pres_mgmt.hide__device_code ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
<span class="fas fa-toggle-on m-1"></span> {$events_loc.pres_mgmt.hide__device_code ? 'Show Device Code?' : 'Device Code Visible'}
Device Code
{:else}
<span class="fas fa-toggle-off m-1"></span>
Device Code
{/if}
</button> </button>
<!-- Show or hide the location code -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__location_code = $events_loc.pres_mgmt.hide__location_code =
!$events_loc.pres_mgmt.hide__location_code; !$events_loc.pres_mgmt.hide__location_code;
}} }}
class="btn btn-sm" class="btn btn-sm justify-between w-full"
class:ae_btn_surface={!$events_loc.pres_mgmt?.hide__location_code} class:ae_btn_surface={!$events_loc.pres_mgmt.hide__location_code}
class:ae_btn_surface_outlined={$events_loc.pres_mgmt class:ae_btn_surface_outlined={$events_loc.pres_mgmt.hide__location_code}
?.hide__location_code}
title="Show or hide the location code."
> >
{#if !$events_loc.pres_mgmt.hide__location_code} <span class="fas {$events_loc.pres_mgmt.hide__location_code ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
<span class="fas fa-toggle-on m-1"></span> {$events_loc.pres_mgmt.hide__location_code ? 'Show Location Code?' : 'Location Code Visible'}
Showing Location Code
{:else}
<span class="fas fa-toggle-off m-1"></span>
Show Location Code?
{/if}
</button> </button>
<!-- Show or hide the session code -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.hide__session_code = $events_loc.pres_mgmt.hide__session_code =
!$events_loc.pres_mgmt.hide__session_code; !$events_loc.pres_mgmt.hide__session_code;
}} }}
class="btn btn-sm" class="btn btn-sm justify-between w-full"
class:ae_btn_surface={!$events_loc.pres_mgmt?.hide__session_code} class:ae_btn_surface={!$events_loc.pres_mgmt.hide__session_code}
class:ae_btn_surface_outlined={$events_loc.pres_mgmt class:ae_btn_surface_outlined={$events_loc.pres_mgmt.hide__session_code}
?.hide__session_code}
title="Show or hide the session code."
> >
{#if !$events_loc.pres_mgmt.hide__session_code} <span class="fas {$events_loc.pres_mgmt.hide__session_code ? 'fa-toggle-off' : 'fa-toggle-on'} mr-1"></span>
<span class="fas fa-toggle-on m-1"></span> {$events_loc.pres_mgmt.hide__session_code ? 'Show Session Code?' : 'Session Code Visible'}
Showing Session Code
{:else}
<span class="fas fa-toggle-off m-1"></span>
Show Session Code?
{/if}
</button> </button>
<!-- </div> -->
</div> </div>
<!-- END: The expanded menu area for information and options --> </section>
</div>
</Modal>
<!-- Help panel -->
<Element_data_store <Element_data_store
ds_code="events__pres_mgmt__location_help" ds_code="events__pres_mgmt__location_help"
ds_name="Default: Events - Pres Mgmt Session Help" ds_name="Default: Events - Pres Mgmt Session Help"
ds_type="html" ds_type="html"
for_type="event" for_type="event"
for_id={$lq__event_obj?.event_id} for_id={$lq__event_obj?.event_id}
class_li="bg-yellow-100 border border-yellow-400 p-2 rounded-md max-w-xl" class_li="ae_container_module_help"
show_edit={false} show_edit={false}
show_edit_btn={true} show_edit_btn={true}
hide={$events_loc.pres_mgmt.show_menu__location != 'help'} hide={!show_help}
/> />
<div>
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_menu__location =
!$events_loc.pres_mgmt.show_menu__location;
}}
class="btn btn-sm mx-1 preset-tonal-error border border-error-500 hover:preset-filled-error-500"
class:hidden={!$events_loc.pres_mgmt.show_menu__location}
title="Collapse the expanded menu"
>
<span class="fas fa-chevron-up m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__location}
Hide
<!-- Collapse -->
{:else}
Show
{/if}
<!-- Menu? -->
</button>
</div> </div>
</div>
<!-- End of the new standard page specific menu -->

View File

@@ -2,7 +2,6 @@
interface Props { interface Props {
data?: any; data?: any;
log_lvl?: number; log_lvl?: number;
// import Sign_in_out from './sign_in_out.svelte'; // Should this be used here later???
lq__event_obj: any; lq__event_obj: any;
lq__event_presenter_obj: any; lq__event_presenter_obj: any;
} }
@@ -15,410 +14,215 @@
}: Props = $props(); }: Props = $props();
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { Modal } from 'flowbite-svelte';
import { Settings, X, Info } from '@lucide/svelte';
import { import {
ae_snip,
ae_loc, ae_loc,
ae_sess, ae_api
ae_api,
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores'; } from '$lib/stores/ae_stores';
import { import {
events_loc, events_loc,
events_sess, events_slct
events_slct,
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores'; } from '$lib/stores/ae_events_stores';
import { events_func } from '$lib/ae_events_functions'; import { events_func } from '$lib/ae_events_functions';
import { api } from '$lib/api/api'; import { api } from '$lib/api/api';
import Element_data_store from '$lib/elements/element_data_store_v3.svelte'; import Element_data_store from '$lib/elements/element_data_store_v3.svelte';
import Comp__events_menu_nav from '../../../../ae_comp__events_menu_nav.svelte'; import Comp__events_menu_nav from '../../../../ae_comp__events_menu_nav.svelte';
import AE_Record_Controls from '$lib/ae_elements/AE_Record_Controls.svelte';
let show_modal = $state(false);
let show_help = $state(false);
async function on_toggle(field: string, new_val: boolean) {
await api.update_ae_obj_v3({
api_cfg: $ae_api,
obj_type: 'event_presenter',
obj_id: $lq__event_presenter_obj?.event_presenter_id,
fields: { [field]: new_val }
});
events_func.load_ae_obj_id__event_presenter({
api_cfg: $ae_api,
event_presenter_id: $lq__event_presenter_obj?.event_presenter_id,
log_lvl
});
}
async function on_delete(method: 'delete' | 'disable') {
await (events_func as any).delete_ae_obj_id__event_presenter({
api_cfg: $ae_api,
event_presentation_id: $lq__event_presenter_obj.event_presentation_id,
event_presenter_id: $lq__event_presenter_obj.event_presenter_id,
method
});
$events_slct.event_presenter_id = null;
$events_slct.event_presenter_obj = {};
goto(`/events/${$lq__event_presenter_obj.event_id}/session/${$lq__event_presenter_obj.event_session_id}`);
}
</script> </script>
<!-- New standard page specific menu 2025-06-20 -->
<div class="pres_mgmt__presenter_view_menu ae_container_module_menu"> <div class="pres_mgmt__presenter_view_menu ae_container_module_menu">
<!-- BEGIN: The menu button options --> <div class="flex flex-row flex-wrap gap-1 items-center justify-around w-full">
<div
class="flex flex-row flex-wrap gap-1 items-center justify-around w-full"
>
<Comp__events_menu_nav <Comp__events_menu_nav
hide={false} hide={false}
event_id={$lq__event_presenter_obj?.event_id} event_id={$lq__event_presenter_obj?.event_id}
events__reports={$lq__event_presenter_obj?.event_id && events__reports={$lq__event_presenter_obj?.event_id && $ae_loc.trusted_access}
$ae_loc.trusted_access}
events__session_id={$lq__event_presenter_obj?.event_session_id} events__session_id={$lq__event_presenter_obj?.event_session_id}
events__launcher_session_id={$lq__event_presenter_obj?.event_session_id} events__launcher_session_id={$lq__event_presenter_obj?.event_session_id}
events__session_search={$events_slct.event_id} events__session_search={$events_slct.event_id}
/> />
<span <span class="ae_menu__object_options flex flex-row flex-wrap gap-0.5 items-center justify-around">
class="ae_menu__object_options flex flex-row flex-wrap gap-0.5 items-center justify-around" <!-- Options modal trigger -->
> {#if $ae_loc.trusted_access}
<!-- Button to toggle between the regular presenter view and managing presenter files -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_modal = true)}
if ( class="btn btn-sm ae_btn_info"
$events_loc.pres_mgmt.show_content__presenter_view == title="Presenter options"
'manage_files'
) {
$events_loc.pres_mgmt.show_content__presenter_view =
null;
} else {
$events_loc.pres_mgmt.show_content__presenter_view =
'manage_files';
}
}}
class={ae_snip.classes__events_pres_mgmt_menu__button_special}
class:preset-filled-primary-500={$events_loc.pres_mgmt
.show_content__presenter_view == 'manage_files'}
class:preset-tonal-primary={$events_loc.pres_mgmt
.show_content__presenter_view != 'manage_files'}
class:hidden={!$ae_loc.authenticated_access || 1 == 1}
title="View presenter information or manage files for the presenter"
> >
{#if $events_loc.pres_mgmt.show_content__presenter_view == 'manage_files'} <Settings size="1em" class="mr-1" />
<span class="fas fa-info m-1"></span> Options
<!-- View Details -->
Presenter Info?
{:else}
<span class="fas fa-file-archive m-1"></span>
Presenter Files?
<span
class="badge badge-icon preset-tonal-success absolute -top-1.5 -right-1.5 z-10"
class:hidden={!$lq__event_presenter_obj?.file_count}
>
{$lq__event_presenter_obj?.file_count}×
</span>
{/if}
</button> </button>
<!-- Button to toggle between showing and not showing the extended options menu -->
<button
type="button"
onclick={() => {
if (
$events_loc.pres_mgmt.show_menu__presenter == 'options'
) {
$events_loc.pres_mgmt.show_menu__presenter = null;
} else {
$events_loc.pres_mgmt.show_menu__presenter = 'options';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__presenter == 'options'}
class:ae_btn_info={$events_loc.pres_mgmt.show_menu__presenter !=
'options'}
class:hidden={!$ae_loc.trusted_access}
title="Options for the presenter"
>
<span class="fas fa-cog m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__presenter == 'options'}
Hide
{:else}
<span class="hidden"> Show </span>
{/if} {/if}
Options?
</button>
<!-- Help toggle -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_help = !show_help)}
if ($events_loc.pres_mgmt.show_menu__presenter == 'help') { class="btn btn-sm"
$events_loc.pres_mgmt.show_menu__presenter = null; class:ae_btn_info_filled={show_help}
} else { class:ae_btn_info={!show_help}
$events_loc.pres_mgmt.show_menu__presenter = 'help';
}
}}
class="btn btn-sm mx-1"
class:ae_btn_info_filled={$events_loc.pres_mgmt
.show_menu__presenter == 'help'}
class:ae_btn_info={$events_loc.pres_mgmt.show_menu__presenter !=
'help'}
title="Help and information about the presenter" title="Help and information about the presenter"
> >
<span class="fas fa-question-circle m-1"></span> <Info size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__presenter == 'help'} {show_help ? 'Hide Help' : 'Help'}
Hide Help?
{:else}
Help?
{/if}
</button> </button>
</span> </span>
<!-- Presenter agreement action (shown when require__presenter_agree is on) -->
{#if $events_loc.pres_mgmt?.require__presenter_agree} {#if $events_loc.pres_mgmt?.require__presenter_agree}
<span <span class="ae_menu__action_options flex flex-row items-center justify-around">
class="ae_menu__action_options flex flex-row items-center justify-around"
>
{#if $lq__event_presenter_obj?.agree} {#if $lq__event_presenter_obj?.agree}
<!-- {#if $ae_loc.trusted_access || $events_loc.auth__kv.presenter[$lq__event_presenter_obj.event_presenter_id]} -->
<button <button
type="button" type="button"
disabled={!$ae_loc.trusted_access && disabled={!$ae_loc.trusted_access && !$events_loc.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id]}
!$events_loc.auth__kv.presenter[
$lq__event_presenter_obj
?.event_presenter_id
]}
onclick={() => { onclick={() => {
$events_slct.event_presentation_id = $events_slct.event_presentation_id = $lq__event_presenter_obj?.event_presentation_id_random;
$lq__event_presenter_obj?.event_presentation_id_random; $events_slct.event_presenter_id = $lq__event_presenter_obj?.event_presenter_id;
// $events_slct.event_presentation_obj = $events_slct.event_presentation_obj; $events_loc.pres_mgmt.show_modal__presenter_agree = $lq__event_presenter_obj?.event_presenter_id;
$events_slct.event_presenter_id =
$lq__event_presenter_obj?.event_presenter_id;
// $lq__event_presenter_obj = $lq__event_presenter_obj;
$events_sess.pres_mgmt.show_modal__presenter_agree =
$lq__event_presenter_obj?.event_presenter_id;
}} }}
class="btn btn-sm mx-1 font-bold ae_btn_success_filled" class="btn btn-sm mx-1 font-bold ae_btn_success_filled"
title="Agreed to terms and conditions" title="Agreed to terms and conditions"
> >
<span <span class="fas fa-check text-green-500 px-1"></span>
class="fas fa-check text-green-500 px-1" Agreed
title="Agreed to terms and conditions"
></span>
<span> Agreed </span>
</button> </button>
{:else} {:else}
<button <button
type="button" type="button"
disabled={!$ae_loc.trusted_access && disabled={!$ae_loc.trusted_access && !$events_loc.auth__kv.presenter[$lq__event_presenter_obj?.event_presenter_id]}
!$events_loc.auth__kv.presenter[
$lq__event_presenter_obj
?.event_presenter_id
]}
onclick={() => { onclick={() => {
$events_slct.event_presentation_id = $events_slct.event_presentation_id = $lq__event_presenter_obj?.event_presentation_id_random;
$lq__event_presenter_obj?.event_presentation_id_random; $events_slct.event_presenter_id = $lq__event_presenter_obj?.event_presenter_id;
// $events_slct.event_presentation_obj = $events_slct.event_presentation_obj; $events_loc.pres_mgmt.show_modal__presenter_agree = $lq__event_presenter_obj?.event_presenter_id;
$events_slct.event_presenter_id =
$lq__event_presenter_obj?.event_presenter_id;
// $lq__event_presenter_obj = $lq__event_presenter_obj;
$events_sess.pres_mgmt.show_modal__presenter_agree =
$lq__event_presenter_obj?.event_presenter_id;
}} }}
class="btn btn-sm mx-1 font-bold ae_btn_warning_filled" class="btn btn-sm mx-1 font-bold ae_btn_warning_filled"
title="View terms and conditions" title="View terms and conditions"
> >
<span <span class="fas fa-times bg-red-500 text-white px-1 mx-1"></span>
class="fas fa-times bg-red-500 text-white px-1 mx-1" Not yet agreed
title="Not agreed to terms and conditions"
></span>
<span> Not yet agreed </span>
</button> </button>
{/if} {/if}
</span> </span>
{/if} {/if}
</div> </div>
<!-- END: The menu button options -->
<!-- BEGIN: The expanded menu area for information and options --> <!-- Options Modal -->
<div <Modal
class="flex flex-row flex-wrap items-center justify-around w-full bg-blue-100 hover:bg-blue-200 border border-blue-200 hover:border-blue-400 p-2 rounded-md" bind:open={show_modal}
class:hidden={$events_loc.pres_mgmt.show_menu__presenter != 'options'} autoclose={false}
dismissable={true}
placement="top-center"
size="md"
class="relative flex flex-col mx-auto w-full bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg shadow-xl"
headerClass="flex flex-row gap-2 items-center justify-between w-full bg-surface-100 dark:bg-surface-800 p-4 rounded-t-lg border-b border-surface-200 dark:border-surface-700"
> >
<button {#snippet header()}
type="button" <h3 class="flex-1 flex items-center gap-2 text-base font-bold">
onclick={async () => { <Settings size="1.1em" class="text-primary-500" />
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event_presenter', obj_id: $lq__event_presenter_obj?.event_presenter_id, fields: { priority: !$lq__event_presenter_obj?.priority } }); Presenter Options
events_func.load_ae_obj_id__event_presenter({ api_cfg: $ae_api, event_presenter_id: $lq__event_presenter_obj?.event_presenter_id, log_lvl }); </h3>
}} <button type="button" class="btn-icon btn-icon-sm preset-tonal-surface ml-2" onclick={() => (show_modal = false)}>
class="btn btn-sm m-1 *:hover:inline" <X size="1.1em" />
class:ae_btn_surface_outlined={!$lq__event_presenter_obj?.priority}
class:ae_btn_success={$lq__event_presenter_obj?.priority}
>
{#if $lq__event_presenter_obj?.priority}
<span class="fas fa-star m-1"></span>
<span class="hidden"> Not Priority? </span>
{:else}
<span class="far fa-star m-1"></span>
<span class="hidden"> Priority </span>
?
{/if}
</button> </button>
{/snippet}
<div class="flex flex-col gap-4 p-4">
<!-- Presenter-specific display options -->
{#if $ae_loc.administrator_access}
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Display</h4>
<div class="flex flex-row flex-wrap gap-2">
<button <button
type="button" type="button"
onclick={async () => { onclick={() => {
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event_presenter', obj_id: $lq__event_presenter_obj?.event_presenter_id, fields: { hide: !$lq__event_presenter_obj?.hide } }); $events_loc.pres_mgmt.show_content__presenter_qr =
events_func.load_ae_obj_id__event_presenter({ api_cfg: $ae_api, event_presenter_id: $lq__event_presenter_obj?.event_presenter_id, log_lvl }); !$events_loc.pres_mgmt.show_content__presenter_qr;
}}
class="btn btn-sm m-1 *:hover:inline"
class:ae_btn_success_outlined={!$lq__event_presenter_obj?.hide}
class:ae_btn_warning={$lq__event_presenter_obj?.hide}
disabled={!$ae_loc.trusted_access}
>
{#if $lq__event_presenter_obj?.hide}
<span class="fas fa-toggle-on m-1"></span>
Unhide?
{:else}
<span class="fas fa-eye m-1"></span>
<span class="hidden"> Not Hidden </span>
{/if}
</button>
<!-- Enable/Disable -->
<button
type="button"
onclick={async () => {
await api.update_ae_obj_v3({ api_cfg: $ae_api, obj_type: 'event_presenter', obj_id: $lq__event_presenter_obj?.event_presenter_id, fields: { enable: !$lq__event_presenter_obj?.enable } });
events_func.load_ae_obj_id__event_presenter({ api_cfg: $ae_api, event_presenter_id: $lq__event_presenter_obj?.event_presenter_id, log_lvl });
}} }}
class="btn btn-sm" class="btn btn-sm"
class:ae_btn_success_outlined={$lq__event_presenter_obj?.enable} class:ae_btn_surface={$events_loc.pres_mgmt.show_content__presenter_qr}
class:ae_btn_error={!$lq__event_presenter_obj?.enable} class:ae_btn_surface_outlined={!$events_loc.pres_mgmt.show_content__presenter_qr}
disabled={!$ae_loc.manager_access}
> >
{#if $lq__event_presenter_obj?.enable} <span class="fas fa-qrcode mr-1"></span>
<span class="fas fa-toggle-on m-1"></span> {$events_loc.pres_mgmt.show_content__presenter_qr ? 'Hide QR Code' : 'Show QR Code'}
Enabled
{:else}
<span class="fas fa-toggle-off m-1"></span>
Enable?
{/if}
</button>
<!-- Sort -->
<!-- Group -->
{#if $ae_loc.manager_access}
<button
type="button"
onclick={() => {
if (
!confirm(
'Are you sure you want to delete this presenter?'
)
) {
return false;
}
(events_func as any)
.delete_ae_obj_id__event_presenter({
api_cfg: $ae_api,
event_presentation_id:
$lq__event_presenter_obj.event_presentation_id,
event_presenter_id:
$lq__event_presenter_obj.event_presenter_id,
method: 'delete'
})
.then(function (delete_results: any) {
$events_slct.event_presenter_id = null;
$events_slct.event_presenter_obj = {};
goto(
`/events/${$lq__event_presenter_obj.event_id}/session/${$lq__event_presenter_obj.event_session_id}`
);
});
}}
class="btn btn-sm mx-1 ae_btn_error"
title="Delete record permanently"
>
<span class="fas fa-minus-circle mx-1"></span>
Delete
</button>
{:else if $ae_loc.trusted_access}
<button
type="button"
onclick={() => {
if (
!confirm(
'Are you sure you want to remove (disable) this presenter?'
)
) {
return false;
}
events_func
.delete_ae_obj_id__event_presenter({
api_cfg: $ae_api,
event_presenter_id:
$lq__event_presenter_obj.event_presenter_id,
method: 'disable'
})
.then(function (delete_results: any) {
$events_slct.event_presenter_id = null;
$events_slct.event_presenter_obj = {};
goto(
`/events/${$lq__event_presenter_obj.event_id}/session/${$lq__event_presenter_obj.event_session_id}`
);
});
}}
class="btn btn-sm mx-1 ae_btn_warning"
title="Disable record"
>
<span class="fas fa-minus mx-1"></span>
Delete
</button> </button>
</div>
</section>
{/if} {/if}
{#if $ae_loc.administrator_access} <!-- Edit Mode -->
{#if $events_loc.pres_mgmt.show_content__presenter_qr}
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_content__presenter_qr = false;
}}
class="btn btn-sm ae_btn_surface"
>
<span class="fas fa-toggle-on m-1"></span>
Showing QR Code
</button>
{:else}
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_content__presenter_qr = true;
}}
class="btn btn-sm ae_btn_surface_outlined"
>
<span class="fas fa-toggle-off m-1"></span>
Show QR Code?
</button>
{/if}
{/if}
{#if $ae_loc.trusted_access} {#if $ae_loc.trusted_access}
{#if $ae_loc.edit_mode} <section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Mode</h4>
<button <button
type="button" type="button"
onclick={() => { onclick={() => ($ae_loc.edit_mode = !$ae_loc.edit_mode)}
$ae_loc.edit_mode = false; class="btn btn-sm"
}} class:ae_btn_warning={$ae_loc.edit_mode}
class="btn btn-sm ae_btn_warning" class:ae_btn_warning_outlined={!$ae_loc.edit_mode}
> >
<!-- <span class="fas fa-toggle-on m-1"></span> --> <span class="fas fa-edit mr-1"></span>
<span class="fas fa-edit m-1"></span> {$ae_loc.edit_mode ? 'Edit Mode On' : 'Edit Mode?'}
Edit Mode On
</button>
{:else}
<button
type="button"
onclick={() => {
$ae_loc.edit_mode = true;
}}
class="btn btn-sm ae_btn_warning_outlined"
>
<span class="fas fa-toggle-off m-1"></span>
<!-- <span class="fas fa-edit m-1"></span> -->
Edit Mode?
</button> </button>
</section>
{/if} {/if}
<!-- Record Controls -->
{#if $ae_loc.trusted_access}
<section>
<h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Record</h4>
<AE_Record_Controls
obj={$lq__event_presenter_obj}
obj_label="presenter"
show_alert={false}
show_priority={true}
show_enable={true}
show_hide={true}
allow_delete={$ae_loc.manager_access}
allow_disable={$ae_loc.trusted_access && !$ae_loc.manager_access}
{on_toggle}
{on_delete}
container_class="flex flex-row flex-wrap gap-2 items-center justify-start"
/>
</section>
{/if} {/if}
</div> </div>
<!-- END: The expanded menu area for information and options --> </Modal>
<!-- Help panel -->
<Element_data_store <Element_data_store
ds_code="events__pres_mgmt__presenter_page_help" ds_code="events__pres_mgmt__presenter_page_help"
ds_name="Default: Events - Pres Mgmt Presenter Page Help" ds_name="Default: Events - Pres Mgmt Presenter Page Help"
@@ -428,29 +232,6 @@
class_li="ae_container_module_help" class_li="ae_container_module_help"
show_edit={false} show_edit={false}
show_edit_btn={true} show_edit_btn={true}
hide={$events_loc.pres_mgmt.show_menu__presenter != 'help'} hide={!show_help}
/> />
<div>
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_menu__presenter =
!$events_loc.pres_mgmt.show_menu__presenter;
}}
class="btn btn-sm mx-1 ae_btn_info_filled"
class:hidden={!$events_loc.pres_mgmt.show_menu__presenter}
title="Collapse the expanded menu"
>
<span class="fas fa-chevron-up m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__presenter}
Hide
<!-- Collapse -->
{:else}
Show
{/if}
<!-- Menu? -->
</button>
</div> </div>
</div>
<!-- End of the new standard page specific menu -->

View File

@@ -6,41 +6,25 @@
let { data, lq__event_obj }: Props = $props(); let { data, lq__event_obj }: Props = $props();
import type { key_val } from '$lib/stores/ae_stores'; import { Modal } from 'flowbite-svelte';
import { import { Settings, X, Info } from '@lucide/svelte';
ae_snip,
ae_loc, import { ae_loc } from '$lib/stores/ae_stores';
ae_sess,
ae_api,
ae_trig,
slct,
slct_trigger
} from '$lib/stores/ae_stores';
import { import {
events_loc, events_loc,
events_sess, events_slct
events_slct,
events_trigger,
events_trig_kv
} from '$lib/stores/ae_events_stores'; } from '$lib/stores/ae_events_stores';
// import { events_func } from '$lib/ae_events_functions';
import Element_data_store from '$lib/elements/element_data_store_v3.svelte'; import Element_data_store from '$lib/elements/element_data_store_v3.svelte';
import Comp__events_menu_nav from '../../../ae_comp__events_menu_nav.svelte'; import Comp__events_menu_nav from '../../../ae_comp__events_menu_nav.svelte';
let ae_tmp: key_val = {}; let show_modal = $state(false);
let ae_triggers: key_val = {}; let show_help = $state(false);
</script> </script>
<!-- New standard page specific menu 2024-08-02 --> <div class="pres_mgmt__event_reports ae_container_module_menu">
<div <div class="flex flex-row flex-wrap gap-1 items-center justify-around w-full">
class="pres_mgmt__event_reports {ae_snip.classes__events_pres_mgmt_menu}"
class:border-gray-100={!$events_loc.pres_mgmt.show_menu__event_reports}
>
<!-- BEGIN: The menu button options -->
<div
class="flex flex-row flex-wrap gap-1 items-center justify-around w-full"
>
<Comp__events_menu_nav <Comp__events_menu_nav
hide={!$ae_loc.authenticated_access} hide={!$ae_loc.authenticated_access}
event_id={$lq__event_obj?.event_id} event_id={$lq__event_obj?.event_id}
@@ -49,111 +33,66 @@
events__session_search={$events_slct.event_id} events__session_search={$events_slct.event_id}
/> />
<span <span class="ae_menu__object_options flex flex-row items-center justify-around">
class="ae_menu__object_options flex flex-row items-center justify-around" <!-- Options modal trigger -->
> {#if $ae_loc.trusted_access}
<!-- Button to toggle between showing and not showing the extended options menu -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_modal = true)}
if ( class="btn btn-sm ae_btn_info"
$events_loc.pres_mgmt.show_menu__event_reports == title="Report options"
'options'
) {
$events_loc.pres_mgmt.show_menu__event_reports = null;
} else {
$events_loc.pres_mgmt.show_menu__event_reports =
'options';
}
}}
class={ae_snip.classes__events_pres_mgmt_menu__button}
class:preset-filled-secondary-500={$events_loc.pres_mgmt
.show_menu__event_reports == 'options'}
class:preset-tonal-secondary={$events_loc.pres_mgmt
.show_menu__event_reports != 'options'}
class:hidden={!$ae_loc.trusted_access}
title="Options for the presenter"
> >
<span class="fas fa-cog m-1"></span> <Settings size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__event_reports == 'options'} Options
Hide
{:else}
<span class="hidden"> Show </span>
{/if}
Options?
</button> </button>
{/if}
<!-- Help toggle -->
<button <button
type="button" type="button"
onclick={() => { onclick={() => (show_help = !show_help)}
if ( class="btn btn-sm"
$events_loc.pres_mgmt.show_menu__event_reports == 'help' class:ae_btn_info_filled={show_help}
) { class:ae_btn_info={!show_help}
$events_loc.pres_mgmt.show_menu__event_reports = null;
} else {
$events_loc.pres_mgmt.show_menu__event_reports = 'help';
}
}}
class={ae_snip.classes__events_pres_mgmt_menu__button}
class:preset-filled-secondary-500={$events_loc.pres_mgmt
.show_menu__event_reports == 'help'}
class:preset-tonal-secondary={$events_loc.pres_mgmt
.show_menu__event_reports != 'help'}
title="Help and information about the reports" title="Help and information about the reports"
> >
<span class="fas fa-question-circle mx-1"></span> <Info size="1em" class="mr-1" />
{#if $events_loc.pres_mgmt.show_menu__event_reports == 'help'} {show_help ? 'Hide Help' : 'Help'}
Hide Help?
{:else}
Help?
{/if}
</button> </button>
</span> </span>
</div> </div>
<!-- END: The menu button options -->
<!-- BEGIN: The expanded menu area for information and options --> <!-- Options Modal -->
<div <Modal
class=" bind:open={show_modal}
flex flex-row items-center justify-around autoclose={false}
w-full dismissable={true}
p-2 rounded-md placement="top-center"
bg-blue-100 hover:bg-blue-200 size="md"
dark:bg-blue-900 hover:dark:bg-blue-800 class="relative flex flex-col mx-auto w-full bg-white dark:bg-gray-800 text-gray-800 dark:text-gray-200 rounded-lg shadow-xl"
border border-blue-200 hover:border-blue-400 headerClass="flex flex-row gap-2 items-center justify-between w-full bg-surface-100 dark:bg-surface-800 p-4 rounded-t-lg border-b border-surface-200 dark:border-surface-700"
"
class:hidden={$events_loc.pres_mgmt.show_menu__event_reports !=
'options'}
> >
{#snippet header()}
<h3 class="flex-1 flex items-center gap-2 text-base font-bold">
<Settings size="1.1em" class="text-primary-500" />
Report Options
</h3>
<button type="button" class="btn-icon btn-icon-sm preset-tonal-surface ml-2" onclick={() => (show_modal = false)}>
<X size="1.1em" />
</button>
{/snippet}
<div class="flex flex-col gap-4 p-4">
<!-- Query limits -->
{#if $ae_loc.authenticated_access} {#if $ae_loc.authenticated_access}
<div class="flex flex-col gap-1 items-end w-56"> <section>
<!-- Max presenters select options --> <h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Query Limits</h4>
<span class="flex flex-row gap-1 items-center justify-around"> <div class="flex flex-col gap-2">
<label <span class="flex flex-row gap-2 items-center">
class="text-sm w-32 text-right" <label class="text-sm w-32 text-right" for="qry_limit__presenters">Max presenters:</label>
for="qry_limit__presenters"
>
Max presenters:
</label>
<select <select
id="qry_limit__presenters" id="qry_limit__presenters"
bind:value={$events_loc.pres_mgmt.qry_limit__presenters} bind:value={$events_loc.pres_mgmt.qry_limit__presenters}
onchange={() => {
// search__event_presenter({
// api_cfg: $ae_api,
// event_id: $events_slct.event_id,
// agree: true,
// biography: null,
// ft_search_str: '',
// lk_search_str: '',
// params: {
// 'qry__enabled': 'enabled',
// 'qry__hidden': 'not_hidden',
// 'qry__limit': $events_loc.pres_mgmt.qry_limit__presenters,},
// try_cache: false,
// log_lvl: log_lvl,
// });
}}
class="select w-20 text-sm" class="select w-20 text-sm"
> >
<option value={25}>25</option> <option value={25}>25</option>
@@ -170,33 +109,11 @@
</select> </select>
</span> </span>
<!-- Max sessions select options --> <span class="flex flex-row gap-2 items-center">
<span class="flex flex-row gap-1 items-center justify-around"> <label class="text-sm w-32 text-right" for="qry_limit__sessions">Max sessions:</label>
<label
class="text-sm w-32 text-right"
for="qry_limit__sessions"
>
Max sessions:
</label>
<select <select
id="qry_limit__sessions" id="qry_limit__sessions"
bind:value={$events_loc.pres_mgmt.qry_limit__sessions} bind:value={$events_loc.pres_mgmt.qry_limit__sessions}
onchange={() => {
// search__event_presenter({
// api_cfg: $ae_api,
// event_id: $events_slct.event_id,
// agree: true,
// biography: null,
// ft_search_str: '',
// lk_search_str: '',
// params: {
// 'qry__enabled': 'enabled',
// 'qry__hidden': 'not_hidden',
// 'qry__limit': $events_loc.pres_mgmt.qry_limit__sessions,},
// try_cache: false,
// log_lvl: log_lvl,
// });
}}
class="select w-20 text-sm" class="select w-20 text-sm"
> >
<option value={25}>25</option> <option value={25}>25</option>
@@ -208,33 +125,11 @@
</select> </select>
</span> </span>
<!-- Max files select options --> <span class="flex flex-row gap-2 items-center">
<span class="flex flex-row gap-1 items-center justify-around"> <label class="text-sm w-32 text-right" for="qry_limit__files">Max files:</label>
<label
class="text-sm w-32 text-right"
for="qry_limit__files"
>
Max files:
</label>
<select <select
id="qry_limit__files" id="qry_limit__files"
bind:value={$events_loc.pres_mgmt.qry_limit__files} bind:value={$events_loc.pres_mgmt.qry_limit__files}
onchange={() => {
// search__event_presenter({
// api_cfg: $ae_api,
// event_id: $events_slct.event_id,
// agree: true,
// biography: null,
// ft_search_str: '',
// lk_search_str: '',
// params: {
// 'qry__enabled': 'enabled',
// 'qry__hidden': 'not_hidden',
// 'qry__limit': $events_loc.pres_mgmt.qry_limit__sessions,},
// try_cache: false,
// log_lvl: log_lvl,
// });
}}
class="select w-20 text-sm" class="select w-20 text-sm"
> >
<option value={25}>25</option> <option value={25}>25</option>
@@ -246,152 +141,71 @@
</select> </select>
</span> </span>
</div> </div>
{/if} </section>
{#if $ae_loc.authenticated_access} <!-- Visibility filters -->
<div class="flex flex-col gap-1 items-center"> <section>
<!-- Button to toggle between the showing additional hidden download buttons --> <h4 class="text-xs font-semibold uppercase tracking-wider text-surface-500 mb-2">Filters</h4>
{#if $events_loc.pres_mgmt.show__direct_download} <div class="flex flex-col gap-1">
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
$events_loc.pres_mgmt.show__direct_download = $events_loc.pres_mgmt.show__direct_download =
!$events_loc.pres_mgmt.show__direct_download; !$events_loc.pres_mgmt.show__direct_download;
}} }}
class="btn btn-sm preset-tonal-success border border-success-500" class="btn btn-sm justify-between w-full"
title="Hide additional direct download and copy link buttons?" class:preset-tonal-success={$events_loc.pres_mgmt.show__direct_download}
class:preset-tonal-warning={!$events_loc.pres_mgmt.show__direct_download}
> >
<span class="fas fa-eye-slash m-1"></span> <span class="fas {$events_loc.pres_mgmt.show__direct_download ? 'fa-eye-slash' : 'fa-eye'} mr-1"></span>
Hide Download Buttons? {$events_loc.pres_mgmt.show__direct_download ? 'Hide Download Buttons?' : 'Show Download Buttons?'}
</button> </button>
{:else}
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show__direct_download =
!$events_loc.pres_mgmt.show__direct_download;
}}
class="btn btn-sm preset-tonal-warning border border-warning-500"
title="Show additional direct download and copy link buttons?"
>
<span class="fas fa-eye m-1"></span>
Show Download Buttons?
</button>
{/if}
<!-- Button to toggle between the showing hidden sessions -->
{#if $events_loc.pres_mgmt.qry_hidden == 'all'}
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
if ($events_loc.pres_mgmt.qry_hidden == 'all') { $events_loc.pres_mgmt.qry_hidden =
$events_loc.pres_mgmt.qry_hidden = 'not_hidden'; $events_loc.pres_mgmt.qry_hidden === 'all' ? 'not_hidden' : 'all';
} else {
$events_loc.pres_mgmt.qry_hidden = 'all';
}
}} }}
class="btn btn-sm preset-tonal-success border border-success-500" class="btn btn-sm justify-between w-full"
title="Hide sessions marked as hidden?" class:preset-tonal-success={$events_loc.pres_mgmt.qry_hidden === 'all'}
class:preset-tonal-warning={$events_loc.pres_mgmt.qry_hidden !== 'all'}
> >
<span class="fas fa-eye-slash m-1"></span> <span class="fas {$events_loc.pres_mgmt.qry_hidden === 'all' ? 'fa-eye-slash' : 'fa-eye'} mr-1"></span>
Hide Sessions? {$events_loc.pres_mgmt.qry_hidden === 'all' ? 'Hide Hidden Sessions?' : 'Show Hidden Sessions?'}
</button> </button>
{:else}
<button
type="button"
onclick={() => {
if ($events_loc.pres_mgmt.qry_hidden == 'all') {
$events_loc.pres_mgmt.qry_hidden = 'not_hidden';
} else {
$events_loc.pres_mgmt.qry_hidden = 'all';
}
}}
class="btn btn-sm preset-tonal-warning border border-warning-500"
title="Show all (hidden) sessions?"
>
<span class="fas fa-eye m-1"></span>
Show All (Hidden) Sessions?
</button>
{/if}
{#if $ae_loc.manager_access} {#if $ae_loc.manager_access}
{#if $events_loc.pres_mgmt.qry_enabled == 'all'}
<button <button
type="button" type="button"
onclick={() => { onclick={() => {
if (
$events_loc.pres_mgmt.qry_enabled == 'all'
) {
$events_loc.pres_mgmt.qry_enabled = $events_loc.pres_mgmt.qry_enabled =
'enabled'; $events_loc.pres_mgmt.qry_enabled === 'all' ? 'enabled' : 'all';
} else {
$events_loc.pres_mgmt.qry_enabled = 'all';
}
}} }}
class="btn btn-sm preset-tonal-success border border-success-500" class="btn btn-sm justify-between w-full"
title="Hide disabled sessions?" class:preset-tonal-success={$events_loc.pres_mgmt.qry_enabled === 'all'}
class:preset-tonal-warning={$events_loc.pres_mgmt.qry_enabled !== 'all'}
> >
<span class="fas fa-eye-slash m-1"></span> <span class="fas {$events_loc.pres_mgmt.qry_enabled === 'all' ? 'fa-eye-slash' : 'fa-eye'} mr-1"></span>
Hide Disabled Sessions? {$events_loc.pres_mgmt.qry_enabled === 'all' ? 'Hide Disabled Sessions?' : 'Show Disabled Sessions?'}
</button>
{:else}
<button
type="button"
onclick={() => {
if (
$events_loc.pres_mgmt.qry_enabled == 'all'
) {
$events_loc.pres_mgmt.qry_enabled =
'enabled';
} else {
$events_loc.pres_mgmt.qry_enabled = 'all';
}
}}
class="btn btn-sm preset-tonal-warning border border-warning-500"
title="Show disabled sessions?"
>
<span class="fas fa-eye m-1"></span>
Show All (Disabled) Sessions?
</button> </button>
{/if} {/if}
</div>
</section>
{/if} {/if}
</div> </div>
{/if} </Modal>
</div>
<!-- END: The expanded menu area for information and options -->
<!-- Help panel -->
<Element_data_store <Element_data_store
ds_code="events__pres_mgmt__reports_help" ds_code="events__pres_mgmt__reports_help"
ds_name="Default: Events - Pres Mgmt Event Reports Help" ds_name="Default: Events - Pres Mgmt Event Reports Help"
ds_type="html" ds_type="html"
for_type="event" for_type="event"
for_id={$events_slct.event_id} for_id={$events_slct.event_id}
class_li="bg-yellow-100 border border-yellow-400 p-2 rounded-md max-w-xl" class_li="ae_container_module_help"
show_edit={false} show_edit={false}
show_edit_btn={true} show_edit_btn={true}
hide={$events_loc.pres_mgmt.show_menu__event_reports != 'help'} hide={!show_help}
/> />
<div>
<button
type="button"
onclick={() => {
$events_loc.pres_mgmt.show_menu__event_reports =
!$events_loc.pres_mgmt.show_menu__event_reports;
}}
class="btn btn-sm mx-1 preset-tonal-error border border-error-500 hover:preset-filled-error-500"
class:hidden={!$events_loc.pres_mgmt.show_menu__event_reports}
title="Collapse the expanded menu"
>
<span class="fas fa-chevron-up m-1"></span>
{#if $events_loc.pres_mgmt.show_menu__event_reports}
Hide
<!-- Collapse -->
{:else}
Show
{/if}
<!-- Menu? -->
</button>
</div> </div>
</div>
<!-- End of the new standard page specific menu -->

View File

@@ -15,7 +15,7 @@
import { goto } from '$app/navigation'; import { goto } from '$app/navigation';
import { Modal } from 'flowbite-svelte'; import { Modal } from 'flowbite-svelte';
import { Settings, X, HelpCircle } from '@lucide/svelte'; import { Settings, X, Info } from '@lucide/svelte';
import { import {
ae_loc, ae_loc,
@@ -120,7 +120,7 @@
class:ae_btn_info={!show_help} class:ae_btn_info={!show_help}
title="Help and information about the session" title="Help and information about the session"
> >
<HelpCircle size="1em" class="mr-1" /> <Info size="1em" class="mr-1" />
{show_help ? 'Hide Help' : 'Help'} {show_help ? 'Hide Help' : 'Help'}
</button> </button>
</span> </span>