<meta name="robots" content="noindex">
<link rel="icon" type="image/png" href="assets/favicon.png">
<title>Homer</title>
- <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css"
- integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
- <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.css">
- <link href="https://fonts.googleapis.com/css?family=Lato|Raleway" rel="stylesheet">
+ <link defer rel="stylesheet" href="vendors/font-awesone.min.css">
+ <link defer rel="stylesheet" href="vendors/bulma.min.css">
<link rel="stylesheet" href="app.css">
</head>
<body>
- <div id="app" v-if="config">
+ <div id="app" v-if="config" :class="[isDark ? 'is-dark' : 'is-light', !config.footer ? 'no-footer': '']">
<div id="bighead">
<section class="first-line">
<div v-cloak class="container">
<div v-cloak v-if="config.links" class="container-fluid">
<nav class="navbar" role="navigation" aria-label="main navigation">
<div class="container">
- <div class="navbar-menu">
+ <div class="navbar-brand">
+ <a role="button"
+ class="navbar-burger" :class="{ 'is-active': showMenu }"
+ aria-label="menu" aria-expanded="false"
+ v-on:click="toggleMenu()">
+ <span aria-hidden="true"></span>
+ <span aria-hidden="true"></span>
+ <span aria-hidden="true"></span>
+ </a>
+ </div>
+ <div class="navbar-menu" :class="{ 'is-active': showMenu }">
<div class="navbar-start">
- <a v-for="link in config.links" class="navbar-item" :href="link.url">
+ <a v-for="link in config.links" class="navbar-item" :href="link.url" :target="link.target">
<i v-if="link.icon" style="margin-right: 6px;" :class="link.icon"></i>
{{ link.name }}
</a>
</div>
- <div class="end">
- <div class="search-bar">
- <label for="search" class="search-label"></label>
- <input type="text" id="search" v-model="filter" />
+ <div class="navbar-end">
+ <div class="navbar-item">
+ <a
+ v-on:click="toggleTheme()"
+ aria-label="Toggle dark mode"
+ class="icon-button"
+ ><i class="fas fa-adjust"></i>
+ </a>
+ <a v-on:click="toggleLayout()" class="icon-button"><i
+ :class="['fas', vlayout ? 'fa-list' : 'fa-columns']"></i></a>
+ <div class="search-bar">
+ <label for="search" class="search-label"></label>
+ <input type="text" id="search" ref="search" v-model="filter"
+ v-on:keyup.enter.exact="navigateToFirstService()"
+ v-on:keyup.alt.enter="navigateToFirstService('_blank')" />
+ </div>
</div>
</div>
</div>
<h2 v-if="filter"><i class="fas fa-search"></i> Search</h2>
- <div v-for="(group, index) in config.services">
- <h2 v-if="!filter && group.name"><i v-if="group.icon" :class="group.icon"></i><span v-else>#</span>
- {{ group.name }}</h2>
- <div class="columns is-multiline">
- <div v-for="item in group.items"
- v-if="!filter || (item && (item.name.toLowerCase().includes(filter.toLowerCase()) || (item.tag && item.tag.toLowerCase().includes(filter.toLowerCase()))))"
- class="column is-one-third-widescreen">
- <div v-if='item' class="card">
- <a :href="item.url">
- <div class="card-content">
- <div class="media">
- <div v-if="item.logo" class="media-left">
- <figure class="image is-48x48">
- <img :src="item.logo" />
- </figure>
- </div>
- <div v-if="item.icon" class="media-left">
- <figure class="image is-48x48">
- <i style="font-size: 35px" :class="item.icon"></i>
- </figure>
- </div>
- <div class="media-content">
- <p class="title is-4">{{ item.name }}</p>
- <p class="subtitle is-6">{{ item.subtitle }}</p>
- </div>
- </div>
- <strong class="tag" v-if="item.tag">#{{ item.tag }}</strong>
- </div>
- </a>
- </div>
- </div>
+ <!-- Horizontal layout -->
+ <div v-if="!vlayout || filter" class="columns is-multiline">
+ <template v-for="(group, index) in config.services">
+ <h2 v-if="!filter && group.name" class="column is-full"><i v-if="group.icon" :class="group.icon"></i><span
+ v-else>#</span>
+ {{ group.name }}</h2>
+ <service v-for="item in group.items" v-bind:item="item" class="column is-one-third-widescreen"
+ v-if="!filter || (item && matchesFilter(item))">
+ </service>
+ </template>
+ </div>
+
+ <!-- Vertical layout -->
+ <div v-if="!filter && vlayout" class="columns is-multiline layout-vertical">
+ <div class="column is-one-third-widescreen" v-for="(group, index) in config.services">
+ <h2 v-if="!filter && group.name"><i v-if="group.icon" :class="group.icon"></i><span v-else>#</span>
+ {{ group.name }}</h2>
+ <service v-for="item in group.items" v-bind:item="item"
+ v-if="!filter || (item && matchesFilter(item))">
+ </service>
</div>
</div>
+
+
</div>
</div>
</section>
+ <footer class="footer">
+ <div class="container">
+ <div class="content has-text-centered" v-if="config.footer" v-html="config.footer">
+
+ </div>
+ </div>
+ </footer>
</div>
- <footer class="footer">
- <div class="container">
- <div class="content has-text-centered">
- <p>Created with <span class="has-text-danger">❤️</span> with <a href="https://bulma.io/">bulma</a>, <a
- href="https://vuejs.org/">vuejs</a>
- & <a href="#">font awesome</a> // Fork me on <a href="https://github.com/bastienwirtz/homer"><i
- class="fab fa-github-alt"></i></a></p>
- </div>
- </div>
- </footer>
-
- <script src="https://cdn.jsdelivr.net/npm/vue@2.6.2/dist/vue.min.js"></script>
+ <script src="vendors/vue.min.js"></script>
<script src="vendors/js-yaml.min.js"></script>
<script src="app.js"></script>
</body>