mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2026-03-04 07:07:30 +01:00
190 lines
5.3 KiB
Svelte
190 lines
5.3 KiB
Svelte
<!--
|
|
@component Navbar component; renders in app resource links and user dropdown
|
|
|
|
Properties:
|
|
- `username String!`: Empty string if auth. is disabled, otherwise the username as string
|
|
- `authlevel Number`: The current users authentication level
|
|
- `roles [Number]`: Enum containing available roles
|
|
- `screenSize Number`: The current window size, will trigger different render variants
|
|
-->
|
|
|
|
<script>
|
|
import {
|
|
Icon,
|
|
Nav,
|
|
NavItem,
|
|
InputGroup,
|
|
Input,
|
|
Button,
|
|
InputGroupText,
|
|
Container,
|
|
Dropdown,
|
|
DropdownToggle,
|
|
DropdownMenu,
|
|
Row,
|
|
Col,
|
|
} from "@sveltestrap/sveltestrap";
|
|
|
|
/* Svelte 5 Props */
|
|
let {
|
|
username,
|
|
authlevel,
|
|
roles,
|
|
screenSize
|
|
} = $props();
|
|
</script>
|
|
|
|
<Nav navbar>
|
|
{#if screenSize >= 768}
|
|
{#if screenSize <= 992}
|
|
<NavItem>
|
|
<form method="GET" action="/search">
|
|
<Dropdown >
|
|
<DropdownToggle outline color="secondary"><Icon name="search" /> Search</DropdownToggle>
|
|
<DropdownMenu style="width:200px;">
|
|
<InputGroup>
|
|
<Input
|
|
type="search"
|
|
placeholder="type:<query> ..."
|
|
name="searchId"
|
|
class="mx-2"
|
|
/>
|
|
</InputGroup>
|
|
</DropdownMenu>
|
|
</Dropdown>
|
|
</form>
|
|
</NavItem>
|
|
{:else}
|
|
<NavItem>
|
|
<form method="GET" action="/search">
|
|
<InputGroup>
|
|
<Input
|
|
type="search"
|
|
placeholder="Search 'type:<query>' ..."
|
|
name="searchId"
|
|
style="margin-left: 10px;"
|
|
/>
|
|
<!-- bootstrap classes w/o effect -->
|
|
<Button outline type="submit" title="Search"
|
|
><Icon name="search" /></Button
|
|
>
|
|
<InputGroupText
|
|
style="cursor:help;"
|
|
title={authlevel >= roles.support
|
|
? "Example: 'projectId:a100cd', Types are: jobId | jobName | projectId | arrayJobId | username | name"
|
|
: "Example: 'jobName:myjob', Types are jobId | jobName | projectId | arrayJobId "}
|
|
><Icon name="info-circle" /></InputGroupText
|
|
>
|
|
</InputGroup>
|
|
</form>
|
|
</NavItem>
|
|
{/if}
|
|
<NavItem>
|
|
<a
|
|
href="https://www.clustercockpit.org/docs/webinterface/"
|
|
title="Documentation"
|
|
rel="nofollow"
|
|
target="_blank"
|
|
>
|
|
<Button outline style="margin-left: 10px;">
|
|
<Icon name="book" />
|
|
</Button>
|
|
</a>
|
|
</NavItem>
|
|
<NavItem>
|
|
<Button
|
|
outline
|
|
onclick={() => (window.location.href = "/config")}
|
|
style="margin-left: 10px;"
|
|
title="Settings"
|
|
>
|
|
<Icon name="gear" />
|
|
</Button>
|
|
</NavItem>
|
|
{#if username}
|
|
<NavItem>
|
|
<form method="POST" action="/logout">
|
|
<Button
|
|
outline
|
|
color="success"
|
|
type="submit"
|
|
style="margin-left: 10px;"
|
|
title="Logout {username}"
|
|
>
|
|
{#if screenSize > 1630}
|
|
<Icon name="box-arrow-right" /> Logout {username}
|
|
{:else}
|
|
<Icon name="box-arrow-right" />
|
|
{/if}
|
|
</Button>
|
|
</form>
|
|
</NavItem>
|
|
{/if}
|
|
{:else}
|
|
<NavItem>
|
|
<Container>
|
|
<Row cols={3}>
|
|
<Col xs="4">
|
|
<a
|
|
href="https://www.clustercockpit.org/docs/webinterface/"
|
|
title="Documentation"
|
|
rel="nofollow"
|
|
target="_blank"
|
|
>
|
|
<Button outline size="sm" class="my-2 w-100">
|
|
<Icon name="box-arrow-up-right" /> Documentation
|
|
</Button>
|
|
</a>
|
|
</Col>
|
|
<Col xs="4">
|
|
<Button
|
|
outline
|
|
onclick={() => (window.location.href = "/config")}
|
|
size="sm"
|
|
class="my-2 w-100"
|
|
>
|
|
{#if authlevel >= roles.admin}
|
|
<Icon name="gear" /> Admin Settings
|
|
{:else}
|
|
<Icon name="gear" /> Plotting Options
|
|
{/if}
|
|
</Button>
|
|
</Col>
|
|
<Col xs="4">
|
|
<form method="POST" action="/logout">
|
|
<Button
|
|
outline
|
|
color="success"
|
|
type="submit"
|
|
size="sm"
|
|
class="my-2 w-100"
|
|
>
|
|
<Icon name="box-arrow-right" /> Logout {username}
|
|
</Button>
|
|
</form>
|
|
</Col>
|
|
</Row>
|
|
</Container>
|
|
</NavItem>
|
|
<NavItem style="margin-left: 10px; margin-right:10px;">
|
|
<form method="GET" action="/search">
|
|
<InputGroup>
|
|
<Input
|
|
type="text"
|
|
placeholder="Search 'type:<query>' ..."
|
|
name="searchId"
|
|
/>
|
|
<Button outline type="submit"><Icon name="search" /></Button>
|
|
<InputGroupText
|
|
style="cursor:help;"
|
|
title={authlevel >= roles.support
|
|
? "Example: 'projectId:a100cd', Types are: jobId | jobName | projectId | arrayJobId | username | name"
|
|
: "Example: 'jobName:myjob', Types are jobId | jobName | projectId | arrayJobId "}
|
|
><Icon name="info-circle" /></InputGroupText
|
|
>
|
|
</InputGroup>
|
|
</form>
|
|
</NavItem>
|
|
{/if}
|
|
</Nav>
|