6 <meta name=
"viewport" content=
"width=device-width, initial-scale=1">
7 <meta name=
"robots" content=
"noindex">
8 <link rel=
"icon" type=
"image/png" href=
"assets/favicon.png">
10 <link defer
rel=
"stylesheet" href=
"vendors/font-awesone.min.css">
11 <link defer
rel=
"stylesheet" href=
"vendors/bulma.min.css">
12 <link rel=
"stylesheet" href=
"app.css">
16 <div id=
"app" v-if=
"config" :
class=
"[isDark ? 'is-dark' : 'is-light', !config.footer ? 'no-footer': '']">
18 <section class=
"first-line">
19 <div v-cloak
class=
"container">
21 <img v-if=
"config.logo" :
src=
"config.logo" />
22 <i v-if=
"config.icon" :
class=
"config.icon"></i>
24 <div class=
"dashboard-title">
25 <span class=
"headline">{{ config.subtitle }}
</span>
26 <h1>{{ config.title }}
</h1>
30 <div v-cloak
v-if=
"config.links" class=
"container-fluid">
31 <nav class=
"navbar" role=
"navigation" aria-label=
"main navigation">
32 <div class=
"container">
33 <div class=
"navbar-brand">
35 class=
"navbar-burger" :
class=
"{ 'is-active': showMenu }"
36 aria-label=
"menu" aria-expanded=
"false"
37 v-on:
click=
"toggleMenu()">
38 <span aria-hidden=
"true"></span>
39 <span aria-hidden=
"true"></span>
40 <span aria-hidden=
"true"></span>
43 <div class=
"navbar-menu" :
class=
"{ 'is-active': showMenu }">
44 <div class=
"navbar-start">
45 <a v-for=
"link in config.links" class=
"navbar-item" :
href=
"link.url" :
target=
"link.target">
46 <i v-if=
"link.icon" style=
"margin-right: 6px;" :
class=
"link.icon"></i>
50 <div class=
"navbar-end">
51 <div class=
"navbar-item">
53 v-on:
click=
"toggleTheme()"
54 aria-label=
"Toggle dark mode"
56 ><i class=
"fas fa-adjust"></i>
58 <a v-on:
click=
"toggleLayout()" class=
"icon-button"><i
59 :
class=
"['fas', vlayout ? 'fa-list' : 'fa-columns']"></i></a>
60 <div class=
"search-bar">
61 <label for=
"search" class=
"search-label"></label>
62 <input type=
"text" id=
"search" v-model=
"filter" />
72 <section id=
"main-section" class=
"section">
73 <div v-cloak
class=
"container">
74 <div v-if=
"offline" class=
"offline-message">
75 <i class=
"far fa-dizzy"></i>
76 <h1>You're offline bro.
<i class=
"fas fa-redo-alt" v-on:
click=
"checkOffline()"></i></h1>
79 <!-- Optional messages -->
80 <article v-if=
"config && config.message" class=
"message" :
class=
"config.message.style">
81 <div v-if=
"config.message.title" class=
"message-header">
82 <p>{{ config.message.title }}
</p>
84 <div v-if=
"config.message.content" class=
"message-body">
85 {{ config.message.content }}
89 <h2 v-if=
"filter"><i class=
"fas fa-search"></i> Search
</h2>
91 <!-- Horizontal layout -->
92 <div v-if=
"!vlayout || filter" class=
"columns is-multiline">
93 <template v-for=
"(group, index) in config.services">
94 <h2 v-if=
"!filter && group.name" class=
"column is-full"><i v-if=
"group.icon" :
class=
"group.icon"></i><span
97 <service v-for=
"item in group.items" v-bind:
item=
"item" class=
"column is-one-third-widescreen"
98 v-if=
"!filter || (item && (item.name.toLowerCase().includes(filter.toLowerCase()) || (item.tag && item.tag.toLowerCase().includes(filter.toLowerCase()))))">
103 <!-- Vertical layout -->
104 <div v-if=
"!filter && vlayout" class=
"columns is-multiline layout-vertical">
105 <div class=
"column is-one-third-widescreen" v-for=
"(group, index) in config.services">
106 <h2 v-if=
"!filter && group.name"><i v-if=
"group.icon" :
class=
"group.icon"></i><span v-else
>#
</span>
107 {{ group.name }}
</h2>
108 <service v-for=
"item in group.items" v-bind:
item=
"item"
109 v-if=
"!filter || (item && (item.name.toLowerCase().includes(filter.toLowerCase()) || (item.tag && item.tag.toLowerCase().includes(filter.toLowerCase()))))">
118 <footer class=
"footer">
119 <div class=
"container">
120 <div class=
"content has-text-centered" v-if=
"config.footer" v-html=
"config.footer">
127 <script src=
"vendors/vue.min.js"></script>
128 <script src=
"vendors/js-yaml.min.js"></script>
129 <script src=
"app.js"></script>