127 lines
5.5 KiB
Plaintext
127 lines
5.5 KiB
Plaintext
#load "../../lib/app.uce"
|
|
|
|
ONCE(Request& context)
|
|
{
|
|
?><link rel="stylesheet" href="<?= app_asset_url("themes/common/css/workspace.css", context) ?>" />
|
|
<script src="<?= app_asset_url("js/u-workspace-shell.js", context) ?>"></script><?
|
|
}
|
|
|
|
COMPONENT:APP_FRAME(Request& context)
|
|
{
|
|
String id = context.props["id"].to_string();
|
|
String overlay_id = context.props["overlay_id"].to_string();
|
|
String class_name = context.props["class"].to_string();
|
|
<>
|
|
<div<?: id != "" ? " id=\"" + html_escape(id) + "\"" : "" ?> class="ws-app<?= class_name != "" ? " " + html_escape(class_name) : "" ?>">
|
|
<?: context.props["sidebar_html"].to_string() ?>
|
|
<div<?: overlay_id != "" ? " id=\"" + html_escape(overlay_id) + "\"" : "" ?> class="ws-sidebar-overlay"></div>
|
|
<main class="ws-main"><?: context.props["main_html"].to_string() ?></main>
|
|
</div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:EMPTY_STATE(Request& context)
|
|
{
|
|
<>
|
|
<div class="ws-empty-state<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<div class="ws-empty-icon"><i class="<?= first(context.props["icon_class"].to_string(), "fas fa-layer-group") ?>"></i></div>
|
|
<h2><?= context.props["title"].to_string() ?></h2>
|
|
<p><?= context.props["text"].to_string() ?></p>
|
|
<?: context.props["action_html"].to_string() ?>
|
|
</div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:LIST_STATE(Request& context)
|
|
{
|
|
<>
|
|
<div class="ws-list-state<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>"><? if(context.props["icon_class"].to_string() != "") { ?><i class="<?= context.props["icon_class"].to_string() ?>"></i><? } ?><span><?= context.props["text"].to_string() ?></span></div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:MOBILE_BAR(Request& context)
|
|
{
|
|
<>
|
|
<div class="ws-mobile-bar<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<button<?: context.props["button_id"].to_string() != "" ? " id=\"" + html_escape(context.props["button_id"].to_string()) + "\"" : "" ?> class="ws-mobile-toggle" title="Toggle sidebar" type="button">
|
|
<i class="<?= first(context.props["icon_class"].to_string(), "fas fa-bars") ?>"></i>
|
|
</button>
|
|
<span class="ws-mobile-title"><?= context.props["title"].to_string() ?></span>
|
|
</div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:PANEL_HEADER(Request& context)
|
|
{
|
|
<>
|
|
<div class="ws-panel-header<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<div class="ws-panel-title-group">
|
|
<h2><?= context.props["title"].to_string() ?></h2>
|
|
<? if(context.props["subtitle"].to_string() != "") { ?><p class="ws-subtitle"><?= context.props["subtitle"].to_string() ?></p><? } ?>
|
|
</div>
|
|
<? if(context.props["actions_html"].to_string() != "") { ?><div class="ws-header-actions"><?: context.props["actions_html"].to_string() ?></div><? } ?>
|
|
</div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:PANEL(Request& context)
|
|
{
|
|
<>
|
|
<section<?: context.props["id"].to_string() != "" ? " id=\"" + html_escape(context.props["id"].to_string()) + "\"" : "" ?> class="ws-panel<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<?: context.props["header_html"].to_string() ?>
|
|
<?: context.props["body_html"].to_string() ?>
|
|
</section>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:SECTION_HEAD(Request& context)
|
|
{
|
|
<>
|
|
<div class="ws-section-head<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<h3><?= context.props["title"].to_string() ?></h3>
|
|
<? if(context.props["actions_html"].to_string() != "") { ?><div class="ws-header-actions"><?: context.props["actions_html"].to_string() ?></div><? } ?>
|
|
</div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:SECTION(Request& context)
|
|
{
|
|
<>
|
|
<section<?: context.props["id"].to_string() != "" ? " id=\"" + html_escape(context.props["id"].to_string()) + "\"" : "" ?> class="ws-section<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<?: context.props["header_html"].to_string() ?>
|
|
<?: context.props["body_html"].to_string() ?>
|
|
</section>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:SIDEBAR_SHELL(Request& context)
|
|
{
|
|
<>
|
|
<aside<?: context.props["id"].to_string() != "" ? " id=\"" + html_escape(context.props["id"].to_string()) + "\"" : "" ?> class="ws-sidebar<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<?: context.props["top_html"].to_string() ?>
|
|
<?: context.props["body_html"].to_string() ?>
|
|
</aside>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:SIDEBAR_TOOLBAR(Request& context)
|
|
{
|
|
<>
|
|
<div class="ws-sidebar-top<?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>">
|
|
<?: context.props["action_html"].to_string() ?>
|
|
<div class="ws-search-wrap">
|
|
<i class="fas fa-search ws-search-icon"></i>
|
|
<input type="search"<?: context.props["search_input_id"].to_string() != "" ? " id=\"" + html_escape(context.props["search_input_id"].to_string()) + "\"" : "" ?> name="<?= first(context.props["search_input_name"].to_string(), "search") ?>" class="ws-search-input" placeholder="<?= first(context.props["search_placeholder"].to_string(), "Search...") ?>" autocomplete="off">
|
|
</div>
|
|
</div>
|
|
</>
|
|
}
|
|
|
|
COMPONENT:STATUS_PILL(Request& context)
|
|
{
|
|
String variant = to_lower(first(context.props["variant"].to_string(), "neutral"));
|
|
<>
|
|
<span class="ws-status-pill ws-status-pill-<?= variant ?><?= context.props["class"].to_string() != "" ? " " + html_escape(context.props["class"].to_string()) : "" ?>"><?= first(context.props["label"].to_string(), context.props["text"].to_string()) ?></span>
|
|
</>
|
|
}
|