aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHenry Jameson <me@hjkos.com>2018-08-31 04:06:00 +0300
committerHenry Jameson <me@hjkos.com>2018-08-31 04:06:00 +0300
commite99534ef717881d71a6fa975bb5e81fad6399b15 (patch)
tree1517ecbcde639a624d749791f704e4bd55e098e9 /src
parent63fdad8703bc640b8a3698490a536fb68b6d089c (diff)
added option for logo in navbar to follow color scheme of the rest of the site
also fixed potential mess-up between api/static configs
Diffstat (limited to 'src')
-rw-r--r--src/App.js31
-rw-r--r--src/App.scss33
-rw-r--r--src/App.vue6
-rw-r--r--src/main.js32
4 files changed, 83 insertions, 19 deletions
diff --git a/src/App.js b/src/App.js
index a9a46fad..c455c18c 100644
--- a/src/App.js
+++ b/src/App.js
@@ -18,7 +18,14 @@ export default {
ChatPanel
},
data: () => ({
- mobileActivePanel: 'timeline'
+ mobileActivePanel: 'timeline',
+ supportsMask: window.CSS && window.CSS.supports && (
+ window.CSS.supports('mask-size', 'contain') ||
+ window.CSS.supports('-webkit-mask-size', 'contain') ||
+ window.CSS.supports('-moz-mask-size', 'contain') ||
+ window.CSS.supports('-ms-mask-size', 'contain') ||
+ window.CSS.supports('-o-mask-size', 'contain')
+ )
}),
created () {
// Load the locale from the storage
@@ -29,7 +36,27 @@ export default {
background () {
return this.currentUser.background_image || this.$store.state.config.background
},
- logoStyle () { return { 'background-image': `url(${this.$store.state.config.logo})` } },
+ enableMask () { return this.supportsMask && this.$store.state.config.logoMask },
+ logoStyle () {
+ return {
+ 'visibility': this.enableMask ? 'hidden' : 'visible'
+ }
+ },
+ logoMaskStyle () {
+ return this.enableMask ? {
+ 'mask-image': `url(${this.$store.state.config.logo})`
+ } : {
+ 'background-color': this.enableMask ? '' : 'transparent'
+ }
+ },
+ logoBgStyle () {
+ return Object.assign({
+ 'margin': `${this.$store.state.config.logoMargin} 0`
+ }, this.enableMask ? {} : {
+ 'background-color': this.enableMask ? '' : 'transparent'
+ })
+ },
+ logo () { return this.$store.state.config.logo },
style () { return { 'background-image': `url(${this.background})` } },
sitename () { return this.$store.state.config.name },
chat () { return this.$store.state.chat.channel.state === 'joined' },
diff --git a/src/App.scss b/src/App.scss
index 21279f15..09014c15 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -236,6 +236,36 @@ nav {
position: fixed;
height: 50px;
+ .logo {
+ display: flex;
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+
+ align-items: stretch;
+ justify-content: center;
+ flex: 0 0 auto;
+ z-index: -1;
+ .mask {
+ mask-repeat: no-repeat;
+ mask-position: center;
+ mask-size: contain;
+ background-color: $fallback--fg;
+ background-color: var(--fg, $fallback--fg);
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ }
+ img {
+ display: block;
+ flex: 0;
+ }
+ }
+
.inner-nav {
padding-left: 20px;
padding-right: 20px;
@@ -244,9 +274,6 @@ nav {
flex-basis: 970px;
margin: auto;
height: 50px;
- background-repeat: no-repeat;
- background-position: center;
- background-size: auto 80%;
a i {
color: $fallback--link;
diff --git a/src/App.vue b/src/App.vue
index 71e90289..fc446c57 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,7 +1,11 @@
<template>
<div id="app" v-bind:style="style">
<nav class='container' @click="scrollToTop()" id="nav">
- <div class='inner-nav' :style="logoStyle">
+ <div class='logo' :style='logoBgStyle'>
+ <div class='mask' :style='logoMaskStyle'></div>
+ <img :src='logo' :style='logoStyle'>
+ </div>
+ <div class='inner-nav'>
<div class='item'>
<router-link :to="{ name: 'root'}">{{sitename}}</router-link>
</div>
diff --git a/src/main.js b/src/main.js
index 6c9bf36e..72806d10 100644
--- a/src/main.js
+++ b/src/main.js
@@ -103,23 +103,29 @@ window.fetch('/api/statusnet/config.json')
.then((res) => res.json())
.then((data) => {
var staticConfig = data
-
- var theme = (apiConfig.theme || staticConfig.theme)
- var background = (apiConfig.background || staticConfig.background)
- var logo = (apiConfig.logo || staticConfig.logo)
- var redirectRootNoLogin = (apiConfig.redirectRootNoLogin || staticConfig.redirectRootNoLogin)
- var redirectRootLogin = (apiConfig.redirectRootLogin || staticConfig.redirectRootLogin)
- var chatDisabled = (apiConfig.chatDisabled || staticConfig.chatDisabled)
- var showWhoToFollowPanel = (apiConfig.showWhoToFollowPanel || staticConfig.showWhoToFollowPanel)
- var whoToFollowProvider = (apiConfig.whoToFollowProvider || staticConfig.whoToFollowProvider)
- var whoToFollowLink = (apiConfig.whoToFollowLink || staticConfig.whoToFollowLink)
- var showInstanceSpecificPanel = (apiConfig.showInstanceSpecificPanel || staticConfig.showInstanceSpecificPanel)
- var scopeOptionsEnabled = (apiConfig.scopeOptionsEnabled || staticConfig.scopeOptionsEnabled)
- var collapseMessageWithSubject = (apiConfig.collapseMessageWithSubject || staticConfig.collapseMessageWithSubject)
+ // This takes static config and overrides properties that are present in apiConfig
+ var config = Object.assign({}, staticConfig, apiConfig)
+
+ var theme = (config.theme)
+ var background = (config.background)
+ var logo = (config.logo)
+ var logoMask = (typeof config.logoMask === 'undefined' ? true : config.logoMask)
+ var logoMargin = (typeof config.logoMargin === 'undefined' ? 0 : config.logoMargin)
+ var redirectRootNoLogin = (config.redirectRootNoLogin)
+ var redirectRootLogin = (config.redirectRootLogin)
+ var chatDisabled = (config.chatDisabled)
+ var showWhoToFollowPanel = (config.showWhoToFollowPanel)
+ var whoToFollowProvider = (config.whoToFollowProvider)
+ var whoToFollowLink = (config.whoToFollowLink)
+ var showInstanceSpecificPanel = (config.showInstanceSpecificPanel)
+ var scopeOptionsEnabled = (config.scopeOptionsEnabled)
+ var collapseMessageWithSubject = (config.collapseMessageWithSubject)
store.dispatch('setOption', { name: 'theme', value: theme })
store.dispatch('setOption', { name: 'background', value: background })
store.dispatch('setOption', { name: 'logo', value: logo })
+ store.dispatch('setOption', { name: 'logoMask', value: logoMask })
+ store.dispatch('setOption', { name: 'logoMargin', value: logoMargin })
store.dispatch('setOption', { name: 'showWhoToFollowPanel', value: showWhoToFollowPanel })
store.dispatch('setOption', { name: 'whoToFollowProvider', value: whoToFollowProvider })
store.dispatch('setOption', { name: 'whoToFollowLink', value: whoToFollowLink })