aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShpuld Shpludson <shp@cock.li>2018-04-09 20:29:06 +0000
committerShpuld Shpludson <shp@cock.li>2018-04-09 20:29:06 +0000
commit716e37d95cd463ede4a5fbe91e7170515719a0fe (patch)
treeeb64b6f74aef25045b72d820bb11a949212c6b04 /src
parente409ca56e586217786f46cd1fdda8c4090f38aa3 (diff)
parentbf2d4516d59884c657feed4ebe16bf3f1357bda1 (diff)
Merge branch 'cssOverhaul' into 'develop'
Transition to CSS-variables for themes and stuff. See merge request pleroma/pleroma-fe!217
Diffstat (limited to 'src')
-rw-r--r--src/App.scss369
-rw-r--r--src/App.vue8
-rw-r--r--src/_variables.scss26
-rw-r--r--src/components/attachment/attachment.vue226
-rw-r--r--src/components/chat_panel/chat_panel.vue62
-rw-r--r--src/components/conversation/conversation.vue2
-rw-r--r--src/components/delete_button/delete_button.vue17
-rw-r--r--src/components/favorite_button/favorite_button.vue29
-rw-r--r--src/components/instance_specific_panel/instance_specific_panel.vue2
-rw-r--r--src/components/login_form/login_form.vue22
-rw-r--r--src/components/media_upload/media_upload.vue4
-rw-r--r--src/components/nav_panel/nav_panel.vue97
-rw-r--r--src/components/notifications/notifications.js5
-rw-r--r--src/components/notifications/notifications.scss48
-rw-r--r--src/components/notifications/notifications.vue12
-rw-r--r--src/components/post_status_form/post_status_form.vue320
-rw-r--r--src/components/registration/registration.vue27
-rw-r--r--src/components/retweet_button/retweet_button.vue28
-rw-r--r--src/components/settings/settings.vue62
-rw-r--r--src/components/status/status.js5
-rw-r--r--src/components/status/status.vue663
-rw-r--r--src/components/still-image/still-image.vue83
-rw-r--r--src/components/style_switcher/style_switcher.js67
-rw-r--r--src/components/style_switcher/style_switcher.vue228
-rw-r--r--src/components/timeline/timeline.vue111
-rw-r--r--src/components/user_card/user_card.vue90
-rw-r--r--src/components/user_card_content/user_card_content.js7
-rw-r--r--src/components/user_card_content/user_card_content.vue124
-rw-r--r--src/components/user_finder/user_finder.vue33
-rw-r--r--src/components/user_panel/user_panel.vue10
-rw-r--r--src/components/user_profile/user_profile.vue7
-rw-r--r--src/components/user_settings/user_settings.vue44
-rw-r--r--src/i18n/messages.js23
-rw-r--r--src/services/style_setter/style_setter.js74
34 files changed, 1694 insertions, 1241 deletions
diff --git a/src/App.scss b/src/App.scss
index 95a653ce..e4b02017 100644
--- a/src/App.scss
+++ b/src/App.scss
@@ -1,10 +1,11 @@
@import './_variables.scss';
+
#app {
- background-size: cover;
- background-attachment: fixed;
- background-repeat: no-repeat;
- background-position: 0 50px;
- min-height: 100vh;
+ background-size: cover;
+ background-attachment: fixed;
+ background-repeat: no-repeat;
+ background-position: 0 50px;
+ min-height: 100vh;
}
i {
@@ -12,7 +13,7 @@ i {
}
h4 {
- margin: 0;
+ margin: 0;
}
#content {
@@ -26,154 +27,280 @@ h4 {
}
.text-center {
- text-align: center;
+ text-align: center;
}
body {
- font-family: sans-serif;
- font-size: 14px;
- margin: 0;
+ font-family: sans-serif;
+ font-size: 14px;
+ margin: 0;
+ color: $fallback--fg;
+ color: var(--fg, $fallback--fg);
}
a {
- text-decoration: none;
+ text-decoration: none;
+ color: $fallback--link;
+ color: var(--link, $fallback--link);
}
button{
- user-select: none;
+ user-select: none;
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ background-color: $fallback--btn;
+ background-color: var(--btn, $fallback--btn);
+ border: none;
+ border-radius: $fallback--btnRadius;
+ border-radius: var(--btnRadius, $fallback--btnRadius);
+ cursor: pointer;
+ border-top: 1px solid rgba(255, 255, 255, 0.2);
+ border-bottom: 1px solid rgba(0, 0, 0, 0.2);
+ box-shadow: 0px 0px 2px black;
+ font-size: 14px;
+ font-family: sans-serif;
+
+ &:hover {
+ box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3);
+ }
+
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 0.5;
+ }
+
+ &.pressed {
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ background-color: $fallback--bg;
+ background-color: var(--bg, $fallback--bg)
+ }
+}
+
+label.select {
+ padding: 0;
+
+}
+
+input, textarea, .select {
+ border: none;
+ border-radius: $fallback--btnRadius;
+ border-radius: var(--btnRadius, $fallback--btnRadius);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ border-top: 1px solid rgba(0, 0, 0, 0.2);
+ box-shadow: 0px 0px 2px black inset;
+ background-color: $fallback--lightBg;
+ background-color: var(--lightBg, $fallback--lightBg);
+ color: $fallback--lightFg;
+ color: var(--lightFg, $fallback--lightFg);
+ font-family: sans-serif;
+ font-size: 14px;
+ padding: 8px 7px;
+ box-sizing: border-box;
+ display: inline-block;
+ position: relative;
+ height: 29px;
+ line-height: 16px;
+
+ .icon-down-open {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ right: 5px;
+ height: 100%;
+ color: $fallback--fg;
+ color: var(--fg, $fallback--fg);
+ line-height: 29px;
+ z-index: 0;
+ pointer-events: none;
+ }
+
+ select {
+ -webkit-appearance: none;
+ -moz-appearance: none;
+ appearance: none;
+ background: transparent;
border: none;
- border-radius: 5px;
- cursor: pointer;
- border-top: 1px solid rgba(255, 255, 255, 0.2);
- border-bottom: 1px solid rgba(0, 0, 0, 0.2);
- box-shadow: 0px 0px 2px black;
- font-size: 14px;
- font-family: sans-serif;
-
- &:hover {
- box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3);
- }
+ margin: 0;
+ color: $fallback--fg;
+ color: var(--fg, $fallback--fg);
+ padding: 4px 2em 3px 3px;
+ width: 100%;
+ z-index: 1;
+ height: 29px;
+ line-height: 16px;
+ }
- &:disabled {
- cursor: not-allowed;
- opacity: 0.5;
+ &[type=radio],
+ &[type=checkbox] {
+ display: none;
+ &:checked + label::before {
+ color: $fallback--fg;
+ color: var(--fg, $fallback--fg);
+ }
+ + label::before {
+ display: inline-block;
+ content: '✔';
+ transition: color 200ms;
+ width: 1.1em;
+ height: 1.1em;
+ border-radius: $fallback--checkBoxRadius;
+ border-radius: var(--checkBoxRadius, $fallback--checkBoxRadius);
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ border-top: 1px solid rgba(0, 0, 0, 0.2);
+ box-shadow: 0px 0px 2px black inset;
+ margin-right: .5em;
+ background-color: $fallback--btn;
+ background-color: var(--btn, $fallback--btn);
+ vertical-align: top;
+ text-align: center;
+ line-height: 1.1em;
+ font-size: 1.1em;
+ box-sizing: border-box;
+ color: transparent;
+ overflow: hidden;
+ box-sizing: border-box;
}
+ }
}
+i[class*=icon-] {
+ color: $fallback--icon;
+ color: var(--icon, $fallback--icon)
+}
+
+
.container {
- display: flex;
- flex-wrap: wrap;
- margin: 0;
- padding: 0 10px 0 10px;
+ display: flex;
+ flex-wrap: wrap;
+ margin: 0;
+ padding: 0 10px 0 10px;
}
.gaps {
- margin: -1em 0 0 -1em;
+ margin: -1em 0 0 -1em;
}
.item {
- flex: 1;
- line-height: 21px;
- height: 21px;
- overflow: hidden;
+ flex: 1;
+ line-height: 50px;
+ height: 50px;
+ overflow: hidden;
- .nav-icon {
- font-size: 1.1em;
- margin-left: 0.4em;
- }
+ .nav-icon {
+ font-size: 1.1em;
+ margin-left: 0.4em;
+ }
}
.gaps > .item {
- padding: 1em 0 0 1em;
+ padding: 1em 0 0 1em;
}
.auto-size {
- flex: 1
+ flex: 1
}
nav {
- width: 100%;
+ width: 100%;
+ align-items: center;
+ position: fixed;
+ height: 50px;
+
+ .inner-nav {
+ padding-left: 20px;
+ padding-right: 20px;
+ display: flex;
align-items: center;
- position: fixed;
+ flex-basis: 970px;
+ margin: auto;
height: 50px;
+ background-repeat: no-repeat;
+ background-position: center;
+ background-size: auto 80%;
- .inner-nav {
- padding-left: 20px;
- padding-right: 20px;
- display: flex;
- align-items: center;
- flex-basis: 970px;
- margin: auto;
- height: 50px;
- background-repeat: no-repeat;
- background-position: center;
- background-size: contain;
+ a i {
+ color: $fallback--link;
+ color: var(--link, $fallback--link);
}
+ }
}
main-router {
- flex: 1;
+ flex: 1;
}
.status.compact {
- color: rgba(0, 0, 0, 0.42);
- font-weight: 300;
+ color: rgba(0, 0, 0, 0.42);
+ font-weight: 300;
- p {
- margin: 0;
- font-size: 0.8em
- }
+ p {
+ margin: 0;
+ font-size: 0.8em
+ }
}
/* Panel */
.panel {
- display: flex;
- flex-direction: column;
- margin: 0.5em;
+ display: flex;
+ flex-direction: column;
+ margin: 0.5em;
- border-radius: 10px;
- box-shadow: 1px 1px 4px rgba(0,0,0,.6);
- overflow: hidden;
+ background-color: $fallback--bg;
+ background-color: var(--bg, $fallback--bg);
+
+ border-radius: $fallback--panelRadius;
+ border-radius: var(--panelRadius, $fallback--panelRadius);
+ box-shadow: 1px 1px 4px rgba(0,0,0,.6);
+ overflow: hidden;
}
.panel-body:empty::before {
- content: "¯\\_(ツ)_/¯"; // Could use words but it'd require translations
- display: block;
- margin: 1em;
- text-align: center;
+ content: "¯\\_(ツ)_/¯"; // Could use words but it'd require translations
+ display: block;
+ margin: 1em;
+ text-align: center;
}
.panel-heading {
- border-radius: 10px 10px 0 0;
- background-size: cover;
- padding: 0.6em 1.0em;
- text-align: left;
- font-size: 1.3em;
- line-height: 24px;
+ border-radius: $fallback--panelRadius $fallback--panelRadius 0 0;
+ border-radius: var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius) 0 0;
+ background-size: cover;
+ padding: 0.6em 1.0em;
+ text-align: left;
+ font-size: 1.3em;
+ line-height: 24px;
+ background-color: $fallback--btn;
+ background-color: var(--btn, $fallback--btn);
}
.panel-footer {
- border-radius: 0 0 10px 10px;
+ border-radius: 0 0 $fallback--panelRadius $fallback--panelRadius;
+ border-radius: 0 0 var(--panelRadius, $fallback--panelRadius) var(--panelRadius, $fallback--panelRadius);
}
.panel-body > p {
- line-height: 18px;
- padding: 1em;
- margin: 0;
+ line-height: 18px;
+ padding: 1em;
+ margin: 0;
}
.container > * {
- min-width: 0px;
+ min-width: 0px;
}
.fa {
- color: grey;
+ color: grey;
}
nav {
- z-index: 1000;
- box-shadow: 0px 0px 4px rgba(0,0,0,.6);
+ z-index: 1000;
+ background-color: $fallback--btn;
+ background-color: var(--btn, $fallback--btn);
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ box-shadow: 0px 0px 4px rgba(0,0,0,.6);
}
.fade-enter-active, .fade-leave-active {
@@ -184,9 +311,9 @@ nav {
}
.main {
- flex-basis: 60%;
- flex-grow: 1;
- flex-shrink: 1;
+ flex-basis: 60%;
+ flex-grow: 1;
+ flex-shrink: 1;
}
.sidebar-bounds {
@@ -201,20 +328,20 @@ nav {
}
.mobile-shown {
- display: none;
+ display: none;
}
.panel-switcher {
- display: none;
- width: 100%;
- height: 46px;
- button {
- display: block;
- flex: 1;
- max-height: 32px;
- margin: 0.5em;
- padding: 0.5em;
- }
+ display: none;
+ width: 100%;
+ height: 46px;
+ button {
+ display: block;
+ flex: 1;
+ max-height: 32px;
+ margin: 0.5em;
+ padding: 0.5em;
+ }
}
@media all and (min-width: 960px) {
@@ -248,25 +375,41 @@ nav {
}
}
+.alert {
+ margin: 0.35em;
+ padding: 0.25em;
+ border-radius: $fallback--tooltipRadius;
+ border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ min-height: 28px;
+ line-height: 28px;
+
+ &.error {
+ background-color: $fallback--cAlertRed;
+ background-color: var(--cAlertRed, $fallback--cAlertRed);
+ }
+}
+
@media all and (max-width: 959px) {
- .mobile-hidden {
- display: none;
- }
+ .mobile-hidden {
+ display: none;
+ }
- .panel-switcher {
- display: flex;
- }
+ .panel-switcher {
+ display: flex;
+ }
- .container {
- padding: 0 0 0 0;
- }
+ .container {
+ padding: 0 0 0 0;
+ }
- .panel {
- margin: 0.5em 0 0.5em 0;
- }
+ .panel {
+ margin: 0.5em 0 0.5em 0;
+ }
}
.item.right {
- text-align: right;
- padding-right: 20px;
+ text-align: right;
+ padding-right: 20px;
}
diff --git a/src/App.vue b/src/App.vue
index 2a910bc0..051c601d 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -1,6 +1,6 @@
<template>
- <div id="app" v-bind:style="style" class="base02-background">
- <nav class='container base02-background base05' @click="scrollToTop()" id="nav">
+ <div id="app" v-bind:style="style">
+ <nav class='container' @click="scrollToTop()" id="nav">
<div class='inner-nav' :style="logoStyle">
<div class='item'>
<router-link :to="{ name: 'root'}">{{sitename}}</router-link>
@@ -14,8 +14,8 @@
</nav>
<div class="container" id="content">
<div class="panel-switcher">
- <button @click="activatePanel('sidebar')" class="base02-background base05">Sidebar</button>
- <button @click="activatePanel('timeline')" class="base02-background base05">Timeline</button>
+ <button @click="activatePanel('sidebar')">Sidebar</button>
+ <button @click="activatePanel('timeline')">Timeline</button>
</div>
<div class="sidebar-flexer" :class="{ 'mobile-hidden': mobileActivePanel != 'sidebar'}">
<div class="sidebar-bounds">
diff --git a/src/_variables.scss b/src/_variables.scss
index d2b7065d..d90a1d48 100644
--- a/src/_variables.scss
+++ b/src/_variables.scss
@@ -1,7 +1,27 @@
$main-color: #f58d2c;
$main-background: white;
$darkened-background: whitesmoke;
-$green: #0fa00f;
-$blue: #0095ff;
-$red: #ff0000;
+$fallback--bg: #121a24;
+$fallback--btn: #182230;
+$fallback--faint: #999;
+$fallback--fg: #b9b9ba;
+$fallback--link: #d8a070;
+$fallback--icon: #666;
+$fallback--lightBg: rgb(21, 30, 42);
+$fallback--lightFg: #b9b9ba;
+$fallback--border: #222;
+$fallback--cRed: #ff0000;
+$fallback--cBlue: #0095ff;
+$fallback--cGreen: #0fa00f;
+$fallback--cOrange: orange;
+
+$fallback--cAlertRed: rgba(211,16,20,.5);
+
+$fallback--panelRadius: 10px;
+$fallback--checkBoxRadius: 2px;
+$fallback--btnRadius: 4px;
+$fallback--tooltipRadius: 5px;
+$fallback--avatarRadius: 4px;
+$fallback--avatarAltRadius: 10px;
+$fallback--attachmentRadius: 10px;
diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue
index a1b35d91..04f6add4 100644
--- a/src/components/attachment/attachment.vue
+++ b/src/components/attachment/attachment.vue
@@ -1,5 +1,5 @@
<template>
- <div class="attachment base03-border" :class="{[type]: true, loading}" v-show="!isEmpty">
+ <div class="attachment" :class="{[type]: true, loading}" v-show="!isEmpty">
<a class="image-attachment" v-if="hidden" @click.prevent="toggleHidden()">
<img :key="nsfwImage" :src="nsfwImage"/>
</a>
@@ -8,10 +8,10 @@
</div>
<a v-if="type === 'image' && !hidden" class="image-attachment" :href="attachment.url" target="_blank">
- <StillImage class="base03-border" referrerpolicy="no-referrer" :mimetype="attachment.mimetype" :src="attachment.large_thumb_url || attachment.url"/>
+ <StillImage referrerpolicy="no-referrer" :mimetype="attachment.mimetype" :src="attachment.large_thumb_url || attachment.url"/>
</a>
- <video class="base03" v-if="type === 'video' && !hidden" :src="attachment.url" controls loop></video>
+ <video v-if="type === 'video' && !hidden" :src="attachment.url" controls loop></video>
<audio v-if="type === 'audio'" :src="attachment.url" controls></audio>
@@ -30,115 +30,121 @@
<script src="./attachment.js"></script>
<style lang="scss">
- .attachments {
+@import '../../_variables.scss';
+
+.attachments {
+ display: flex;
+ flex-wrap: wrap;
+ margin-right: -0.7em;
+
+ .attachment.media-upload-container {
+ flex: 0 0 auto;
+ max-height: 300px;
+ max-width: 100%;
+ line-height: 0;
+
+ video {
+ max-height: 300px;
+ }
+ }
+
+ .attachment {
+ flex: 1 0 30%;
+ margin: 0.5em 0.7em 0.6em 0.0em;
+ align-self: flex-start;
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border);
+
+ border-style: solid;
+ border-width: 1px;
+ border-radius: $fallback--attachmentRadius;
+ border-radius: var(--attachmentRadius, $fallback--attachmentRadius);
+ overflow: hidden;
+
+ // fixes small gap below video
+ &.video {
+ line-height: 0;
+ }
+
+ &.html {
+ flex-basis: 90%;
+ width: 100%;
display: flex;
- flex-wrap: wrap;
- margin-right: -0.7em;
+ }
+
+ &.loading {
+ cursor: progress;
+ }
+
+ .hider {
+ position: absolute;
+ margin: 10px;
+ padding: 5px;
+ background: rgba(230,230,230,0.6);
+ font-weight: bold;
+ z-index: 4;
+ }
+
+ video {
+ max-height: 500px;
+ height: 100%;
+ width: 100%;
+ z-index: 0;
+ }
+
+ audio {
+ width: 100%;
+ }
+
+ img.media-upload {
+ margin-bottom: -2px;
+ max-height: 300px;
+ max-width: 100%;
+ }
+
+ .oembed {
+ width: 100%;
+ margin-right: 15px;
+ display: flex;
+
+ img {
+ width: 100%;
+ }
- .attachment.media-upload-container {
- flex: 0 0 auto;
- max-height: 300px;
- max-width: 100%;
+ .image {
+ flex: 1;
+ img {
+ border: 0px;
+ border-radius: $fallback--attachmentRadius;
+ border-radius: var(--attachmentRadius, $fallback--attachmentRadius);
+ height: 100%;
+ object-fit: cover;
+ }
}
-
- .attachment {
- flex: 1 0 30%;
- margin: 0.5em 0.7em 0.6em 0.0em;
- align-self: flex-start;
-
- border-style: solid;
- border-width: 1px;
- border-radius: 5px;
- overflow: hidden;
-
- // fixes small gap below video
- &.video {
- line-height: 0;
- }
-
- &.html {
- flex-basis: 90%;
- width: 100%;
- display: flex;
- }
-
- &.loading {
- cursor: progress;
- }
-
- .hider {
- position: absolute;
- margin: 10px;
- padding: 5px;
- background: rgba(230,230,230,0.6);
- font-weight: bold;
- z-index: 4;
- }
-
- video {
- max-height: 500px;
- height: 100%;
- width: 100%;
- z-index: 0;
- }
-
- audio {
- width: 100%;
- }
-
- img.media-upload {
- margin-bottom: -2px;
- max-height: 300px;
- max-width: 100%;
- }
-
- .oembed {
- width: 100%;
- margin-right: 15px;
- display: flex;
-
- img {
- width: 100%;
- }
-
- .image {
- flex: 1;
- img {
- border: 0px;
- border-radius: 5px;
- height: 100%;
- object-fit: cover;
- }
- }
-
- .text {
- flex: 2;
- margin: 8px;
- word-break: break-all;
- h1 {
- font-size: 14px;
- margin: 0px;
- }
- }
- }
-
- a.image-attachment {
- display: flex;
- flex: 1;
-
- .still-image {
- width: 100%;
- height: 100%;
- }
-
- img {
- object-fit: contain;
- width: 100%;
- height: 100%; /* If this isn't here, chrome will stretch the images */
- max-height: 500px;
- image-orientation: from-image;
- }
- }
+
+ .text {
+ flex: 2;
+ margin: 8px;
+ word-break: break-all;
+ h1 {
+ font-size: 14px;
+ margin: 0px;
+ }
+ }
+ }
+
+ a.image-attachment {
+ display: flex;
+ flex: 1;
+
+ img {
+ object-fit: contain;
+ width: 100%;
+ height: 100%; /* If this isn't here, chrome will stretch the images */
+ max-height: 500px;
+ image-orientation: from-image;
}
- }
+ }
+ }
+}
</style>
diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue
index ec379db5..50bd0017 100644
--- a/src/components/chat_panel/chat_panel.vue
+++ b/src/components/chat_panel/chat_panel.vue
@@ -1,7 +1,7 @@
<template>
<div class="chat-panel">
- <div class="panel panel-default base01-background">
- <div class="panel-heading timeline-heading base02-background base04">
+ <div class="panel panel-default">
+ <div class="panel-heading timeline-heading">
<div class="title">
{{$t('chat.title')}}
</div>
@@ -29,30 +29,36 @@
<script src="./chat_panel.js"></script>
<style lang="scss">
- .chat-window {
- max-height: 200px;
- overflow-y: auto;
- overflow-x: hidden;
- }
- .chat-message {
- padding: 0.2em 0.5em
- }
- .chat-avatar {
- img {
- height: 32px;
- width: 32px;
- border-radius: 5px;
- margin-right: 0.5em;
- }
- }
- .chat-input {
- display: flex;
- form {
- flex: auto;
- input {
- margin: 0.5em;
- width: fill-available;
- }
- }
- }
+@import '../../_variables.scss';
+
+.chat-window {
+ max-height: 200px;
+ overflow-y: auto;
+ overflow-x: hidden;
+}
+
+.chat-message {
+ padding: 0.2em 0.5em
+}
+
+.chat-avatar {
+ img {
+ height: 32px;
+ width: 32px;
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
+ margin-right: 0.5em;
+ }
+}
+
+.chat-input {
+ display: flex;
+ form {
+ flex: auto;
+ input {
+ margin: 0.5em;
+ width: fill-available;
+ }
+ }
+}
</style>
diff --git a/src/components/conversation/conversation.vue b/src/components/conversation/conversation.vue
index 60d43fff..2ff122c2 100644
--- a/src/components/conversation/conversation.vue
+++ b/src/components/conversation/conversation.vue
@@ -1,6 +1,6 @@
<template>
<div class="timeline panel panel-default">
- <div class="panel-heading base02-background base04 base03-border conversation-heading">
+ <div class="panel-heading conversation-heading">
{{ $t('timeline.conversation') }}
<span v-if="collapsable" style="float:right;">
<small><a href="#" @click.prevent="$emit('toggleExpanded')">Collapse</a></small>
diff --git a/src/components/delete_button/delete_button.vue b/src/components/delete_button/delete_button.vue
index 845ac777..d13547e2 100644
--- a/src/components/delete_button/delete_button.vue
+++ b/src/components/delete_button/delete_button.vue
@@ -1,20 +1,21 @@
<template>
<div v-if="canDelete">
<a href="#" v-on:click.prevent="deleteStatus()">
- <i class='base09 icon-cancel delete-status'></i>
+ <i class='icon-cancel delete-status'></i>
</a>
</div>
</template>
<script src="./delete_button.js" ></script>
-<style lang='scss'>
- @import '../../_variables.scss';
+<style lang="scss">
+@import '../../_variables.scss';
- .icon-cancel,.delete-status {
- cursor: pointer;
- &:hover {
- color: $red;
- }
+.icon-cancel,.delete-status {
+ cursor: pointer;
+ &:hover {
+ color: var(--cRed, $fallback--cRed);
+ color: $fallback--cRed;
}
+}
</style>
diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue
index 65d368c7..1e1a6970 100644
--- a/src/components/favorite_button/favorite_button.vue
+++ b/src/components/favorite_button/favorite_button.vue
@@ -1,26 +1,31 @@
<template>
<div v-if="loggedIn">
- <i :class='classes' class='favorite-button fav-active base09' @click.prevent='favorite()'/>
+ <i :class='classes' class='favorite-button fav-active' @click.prevent='favorite()'/>
<span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
</div>
<div v-else>
- <i :class='classes' class='favorite-button base09'/>
+ <i :class='classes' class='favorite-button'/>
<span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
</div>
</template>
<script src="./favorite_button.js" ></script>
-<style lang='scss'>
- .fav-active {
- cursor: pointer;
- animation-duration: 0.6s;
- &:hover {
- color: orange;
- }
- }
- .favorite-button.icon-star {
- color: orange;
+<style lang="scss">
+@import '../../_variables.scss';
+
+.fav-active {
+ cursor: pointer;
+ animation-duration: 0.6s;
+
+ &:hover {
+ color: $fallback--cOrange;
+ color: var(--cOrange, $fallback--cOrange);
}
+}
+.favorite-button.icon-star {
+ color: $fallback--cOrange;
+ color: var(--cOrange, $fallback--cOrange);
+}
</style>
diff --git a/src/components/instance_specific_panel/instance_specific_panel.vue b/src/components/instance_specific_panel/instance_specific_panel.vue
index b3ea019d..ca8e00c0 100644
--- a/src/components/instance_specific_panel/instance_specific_panel.vue
+++ b/src/components/instance_specific_panel/instance_specific_panel.vue
@@ -1,6 +1,6 @@
<template>
<div class="instance-specific-panel">
- <div class="panel panel-default base01-background">
+ <div class="panel panel-default">
<div class="panel-body">
<div v-html="instanceSpecificPanelContent">
</div>
diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue
index c293d611..67fa95a8 100644
--- a/src/components/login_form/login_form.vue
+++ b/src/components/login_form/login_form.vue
@@ -1,7 +1,7 @@
<template>
- <div class="login panel panel-default base00-background">
+ <div class="login panel panel-default">
<!-- Default panel contents -->
- <div class="panel-heading base02-background base04">
+ <div class="panel-heading">
{{$t('login.login')}}
</div>
<div class="panel-body">
@@ -17,11 +17,11 @@
<div class='form-group'>
<div class='login-bottom'>
<div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div>
- <button :disabled="loggingIn" type='submit' class='btn btn-default base04 base02-background'>{{$t('login.login')}}</button>
+ <button :disabled="loggingIn" type='submit' class='btn btn-default'>{{$t('login.login')}}</button>
</div>
</div>
<div v-if="authError" class='form-group'>
- <div class='error base05'>{{authError}}</div>
+ <div class='alert error'>{{authError}}</div>
</div>
</form>
</div>
@@ -31,27 +31,16 @@
<script src="./login_form.js" ></script>
<style lang="scss">
+@import '../../_variables.scss';
.login-form {
- input {
- border-width: 1px;
- border-style: solid;
- border-color: silver;
- border-radius: 5px;
- padding: 0.1em 0.2em 0.2em 0.2em;
- }
-
.btn {
min-height: 28px;
width: 10em;
}
.error {
- border-radius: 5px;
text-align: center;
- background-color: rgba(255, 48, 16, 0.65);
- min-height: 28px;
- line-height: 28px;
}
.register {
@@ -66,5 +55,4 @@
justify-content: space-between;
}
}
-
</style>
diff --git a/src/components/media_upload/media_upload.vue b/src/components/media_upload/media_upload.vue
index 9e6ad608..8b931d2d 100644
--- a/src/components/media_upload/media_upload.vue
+++ b/src/components/media_upload/media_upload.vue
@@ -1,8 +1,8 @@
<template>
<div class="media-upload" @drop.prevent @dragover.prevent="fileDrag" @drop="fileDrop">
<label class="btn btn-default">
- <i class="base09 icon-spin4 animate-spin" v-if="uploading"></i>
- <i class="base09 icon-upload" v-if="!uploading"></i>
+ <i class="icon-spin4 animate-spin" v-if="uploading"></i>
+ <i class="icon-upload" v-if="!uploading"></i>
<input type=file style="position: fixed; top: -100em"></input>
</label>
</div>
diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue
index aea841e9..5db3f555 100644
--- a/src/components/nav_panel/nav_panel.vue
+++ b/src/components/nav_panel/nav_panel.vue
@@ -1,24 +1,24 @@
<template>
<div class="nav-panel">
- <div class="panel panel-default base01-background">
- <ul class="base03-border">
+ <div class="panel panel-default">
+ <ul>
<li v-if='currentUser'>
- <router-link class="base00-background" to='/main/friends'>
+ <router-link to='/main/friends'>
{{ $t("nav.timeline") }}
</router-link>
</li>
<li v-if='currentUser'>
- <router-link class="base00-background" :to="{ name: 'mentions', params: { username: currentUser.screen_name } }">
+ <router-link :to="{ name: 'mentions', params: { username: currentUser.screen_name } }">
{{ $t("nav.mentions") }}
</router-link>
</li>
<li>
- <router-link class="base00-background" to='/main/public'>
+ <router-link to='/main/public'>
{{ $t("nav.public_tl") }}
</router-link>
</li>
<li>
- <router-link class="base00-background" to='/main/all'>
+ <router-link to='/main/all'>
{{ $t("nav.twkn") }}
</router-link>
</li>
@@ -30,43 +30,58 @@
<script src="./nav_panel.js" ></script>
<style lang="scss">
- .nav-panel ul {
- list-style: none;
- margin: 0;
- padding: 0;
- }
+@import '../../_variables.scss';
- .nav-panel li {
- border-bottom: 1px solid;
- border-color: inherit;
- padding: 0;
- &:first-child a {
- border-top-right-radius: 10px;
- border-top-left-radius: 10px;
- }
- &:last-child a {
- border-bottom-right-radius: 10px;
- border-bottom-left-radius: 10px;
- }
- }
+.nav-panel ul {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+}
- .nav-panel li:last-child {
- border: none;
- }
+.nav-panel li {
+ border-bottom: 1px solid;
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border);
+ background-color: $fallback--bg;
+ background-color: var(--bg, $fallback--bg);
+ padding: 0;
- .nav-panel a {
- display: block;
- padding: 0.8em 0.85em;
- &:hover {
- background-color: transparent;
- }
- &.router-link-active {
- font-weight: bolder;
- background-color: transparent;
- &:hover {
- text-decoration: underline;
- }
- }
- }
+ &:first-child a {
+ border-top-right-radius: $fallback--panelRadius;
+ border-top-right-radius: var(--panelRadius, $fallback--panelRadius);
+ border-top-left-radius: $fallback--panelRadius;
+ border-top-left-radius: var(--panelRadius, $fallback--panelRadius);
+ }
+ &:last-child a {
+ border-bottom-right-radius: $fallback--panelRadius;
+ border-bottom-right-radius: var(--panelRadius, $fallback--panelRadius);
+ border-bottom-left-radius: $fallback--panelRadius;
+ border-bottom-left-radius: var(--panelRadius, $fallback--panelRadius);
+ }
+}
+
+.nav-panel li:last-child {
+ border: none;
+}
+
+.nav-panel a {
+ display: block;
+ padding: 0.8em 0.85em;
+
+ &:hover {
+ background-color: $fallback--lightBg;
+ background-color: var(--lightBg, $fallback--lightBg);
+ }
+
+ &.router-link-active {
+ font-weight: bolder;
+ background-color: $fallback--lightBg;
+ background-color: var(--lightBg, $fallback--lightBg);
+
+ &:hover {
+ text-decoration: underline;
+ }
+ }
+}
</style>
diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js
index e9b83bf0..e55c6e24 100644
--- a/src/components/notifications/notifications.js
+++ b/src/components/notifications/notifications.js
@@ -24,11 +24,6 @@ const Notifications = {
},
unseenCount () {
return this.unseenNotifications.length
- },
- hiderStyle () {
- return {
- background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors['base00']} 80%)`
- }
}
},
components: {
diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss
index 3c500b36..3b7403e4 100644
--- a/src/components/notifications/notifications.scss
+++ b/src/components/notifications/notifications.scss
@@ -4,21 +4,40 @@
// a bit of a hack to allow scrolling below notifications
padding-bottom: 15em;
+ .panel {
+ background: $fallback--bg;
+ background: var(--bg, $fallback--bg)
+ }
+
+ .panel-body {
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border)
+ }
+
.panel-heading {
// force the text to stay centered, while keeping
// the button in the right side of the panel heading
position: relative;
+ background: $fallback--btn;
+ background: var(--btn, $fallback--btn);
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
.read-button {
position: absolute;
right: 0.7em;
height: 1.8em;
line-height: 100%;
+ background-color: $fallback--btn;
+ background-color: var(--btn, $fallback--btn);
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
}
}
.unseen-count {
display: inline-block;
- background-color: rgba(255, 16, 8, 0.8);
+ background-color: $fallback--cRed;
+ background-color: var(--cRed, $fallback--cRed);
text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5);
min-width: 1.3em;
border-radius: 1.3em;
@@ -27,6 +46,7 @@
font-size: 0.9em;
text-align: center;
line-height: 1.3em;
+ padding: 1px;
}
.notification {
@@ -39,6 +59,14 @@
border-bottom: 1px solid;
border-bottom-color: inherit;
+ .notification-gradient {
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0), $fallback--bg 80%);
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--bg, $fallback--bg) 80%)
+ }
+
+ time {
+ white-space: nowrap;
+ }
.text {
min-width: 0px;
@@ -48,19 +76,24 @@
overflow: hidden;
.icon-retweet.lit {
- color: $green;
+ color: $fallback--cGreen;
+ color: var(--cGreen, $fallback--cGreen);
}
.icon-user-plus.lit {
- color: $blue;
+ color: $fallback--cBlue;
+ color: var(--cBlue, $fallback--cBlue);
}
.icon-reply.lit {
- color: $blue;
+ color: $fallback--cBlue;
+ color: var(--cBlue, $fallback--cBlue);
}
.icon-star.lit {
color: orange;
+ color: $fallback--cOrange;
+ color: var(--cOrange, $fallback--cOrange);
}
.status-content {
@@ -91,7 +124,8 @@
margin-top: 0.3em;
width: 32px;
height: 32px;
- border-radius: 50%;
+ border-radius: $fallback--avatarAltRadius;
+ border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
overflow: hidden;
line-height: 0;
@@ -112,7 +146,6 @@
&:last-child {
border-bottom: none;
- border-radius: 0 0 10px 10px;
}
}
@@ -134,7 +167,8 @@
}
.unseen {
- border-left: 4px solid rgba(255, 16, 8, 0.75);
+ border-left: 4px solid $fallback--cRed;
+ border-left: 4px solid var(--cRed, $fallback--cRed);
padding-left: 6px;
}
}
diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue
index 8e6f12b2..17bae71e 100644
--- a/src/components/notifications/notifications.vue
+++ b/src/components/notifications/notifications.vue
@@ -1,12 +1,12 @@
<template>
<div class="notifications">
- <div class="panel panel-default base00-background">
- <div class="panel-heading base02-background base04">
+ <div class="panel panel-default">
+ <div class="panel-heading">
<span class="unseen-count" v-if="unseenCount">{{unseenCount}}</span>
{{$t('notifications.notifications')}}
- <button v-if="unseenCount" @click.prevent="markAsSeen" class="base04 base02-background read-button">{{$t('notifications.read')}}</button>
+ <button v-if="unseenCount" @click.prevent="markAsSeen" class="read-button">{{$t('notifications.read')}}</button>
</div>
- <div class="panel-body base03-border">
+ <div class="panel-body">
<div v-for="notification in visibleNotifications" :key="notification" class="notification" :class='{"unseen": !notification.seen}'>
<div>
<a :href="notification.action.user.statusnet_profile_url" target="_blank">
@@ -20,7 +20,7 @@
<i class="fa icon-star lit"></i>
<small><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
</h1>
- <div class="notification-gradient" :style="hiderStyle"></div>
+ <div class="notification-gradient"></div>
<div class="notification-content" v-html="notification.status.statusnet_html"></div>
</div>
<div v-if="notification.type === 'repeat'">
@@ -29,7 +29,7 @@
<i class="fa icon-retweet lit"></i>
<small><router-link :to="{ name: 'conversation', params: { id: notification.status.id } }"><timeago :since="notification.action.created_at" :auto-update="240"></timeago></router-link></small>
</h1>
- <div class="notification-gradient" :style="hiderStyle"></div>
+ <div class="notification-gradient"></div>
<div class="notification-content" v-html="notification.status.statusnet_html"></div>
</div>
<div v-if="notification.type === 'mention'">
diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue
index 4871bcae..a3b8acde 100644
--- a/src/components/post_status_form/post_status_form.vue
+++ b/src/components/post_status_form/post_status_form.vue
@@ -1,21 +1,21 @@
<template>
<div class="post-status-form">
<form @submit.prevent="postStatus(newStatus)">
- <div class="form-group base03-border" >
+ <div class="form-group" >
<textarea @click="setCaret" @keyup="setCaret" v-model="newStatus.status" :placeholder="$t('post_status.default')" rows="1" class="form-control" @keydown.down="cycleForward" @keydown.up="cycleBackward" @keydown.shift.tab="cycleBackward" @keydown.tab="cycleForward" @keydown.enter="replaceCandidate" @keydown.meta.enter="postStatus(newStatus)" @keyup.ctrl.enter="postStatus(newStatus)" @drop="fileDrop" @dragover.prevent="fileDrag" @input="resize" @paste="paste"></textarea>
</div>
<div style="position:relative;" v-if="candidates">
- <div class="autocomplete-panel base05-background">
+ <div class="autocomplete-panel">
<div v-for="candidate in candidates" @click="replace(candidate.utf || (candidate.screen_name + ' '))">
- <div v-if="candidate.highlighted" class="autocomplete base02">
+ <div v-if="candidate.highlighted" class="autocomplete">
<span v-if="candidate.img"><img :src="candidate.img"></span>
<span v-else>{{candidate.utf}}</span>
- <span>{{candidate.screen_name}}<small class="base02">{{candidate.name}}</small></span>
+ <span>{{candidate.screen_name}}<small>{{candidate.name}}</small></span>
</div>
- <div v-else class="autocomplete base04">
+ <div v-else class="autocomplete">
<span v-if="candidate.img"><img :src="candidate.img"></img></span>
<span v-else>{{candidate.utf}}</span>
- <span>{{candidate.screen_name}}<small class="base02">{{candidate.name}}</small></span>
+ <span>{{candidate.screen_name}}<small>{{candidate.name}}</small></span>
</div>
</div>
</div>
@@ -24,18 +24,18 @@
<media-upload @uploading="disableSubmit" @uploaded="addMediaFile" @upload-failed="enableSubmit" :drop-files="dropFiles"></media-upload>
<p v-if="isOverLengthLimit" class="error">{{ charactersLeft }}</p>
- <p v-else-if="hasStatusLengthLimit" class="base04">{{ charactersLeft }}</p>
+ <p v-else-if="hasStatusLengthLimit">{{ charactersLeft }}</p>
- <button v-if="posting" disabled class="btn btn-default base05 base02-background">{{$t('post_status.posting')}}</button>
- <button v-else-if="isOverLengthLimit" disabled class="btn btn-default base05 base02-background">{{$t('general.submit')}}</button>
- <button v-else :disabled="submitDisabled" type="submit" class="btn btn-default base05 base02-background">{{$t('general.submit')}}</button>
+ <button v-if="posting" disabled class="btn btn-default">{{$t('post_status.posting')}}</button>
+ <button v-else-if="isOverLengthLimit" disabled class="btn btn-default">{{$t('general.submit')}}</button>
+ <button v-else :disabled="submitDisabled" type="submit" class="btn btn-default">{{$t('general.submit')}}</button>
</div>
- <div class='error' v-if="error">
+ <div class='alert error' v-if="error">
Error: {{ error }}
<i class="icon-cancel" @click="clearError"></i>
</div>
<div class="attachments">
- <div class="media-upload-container attachment base03-border" v-for="file in newStatus.files">
+ <div class="media-upload-container attachment" v-for="file in newStatus.files">
<i class="fa icon-cancel" @click="removeMediaFile(file)"></i>
<img class="thumbnail media-upload" :src="file.image" v-if="type(file) === 'image'"></img>
<video v-if="type(file) === 'video'" :src="file.image" controls></video>
@@ -50,147 +50,157 @@
<script src="./post_status_form.js"></script>
<style lang="scss">
-
- .tribute-container {
- ul {
- padding: 0px;
- li {
- display: flex;
- align-items: center;
- }
- }
- img {
- padding: 3px;
- width: 16px;
- height: 16px;
- border-radius: 50%;
- }
- }
-
- .post-status-form, .login {
- .form-bottom {
- display: flex;
- padding: 0.5em;
- height: 32px;
-
- button {
- width: 10em;
- }
-
- p {
- margin: 0.35em;
- padding: 0.35em;
- display: flex;
- }
- }
- .error {
- border-radius: 5px;
- text-align: center;
- background-color: rgba(255, 48, 16, 0.65);
- padding: 0.25em;
- margin: 0.35em;
- display: flex;
- }
-
- .attachments {
- padding: 0 0.5em;
-
- .attachment {
- position: relative;
- margin: 0.5em 0.8em 0.2em 0;
- }
-
- i {
- position: absolute;
- margin: 10px;
- padding: 5px;
- background: rgba(230,230,230,0.6);
- border-radius: 5px;
- font-weight: bold;
- }
- }
-
-
- .btn {
- cursor: pointer;
- }
-
- .btn[disabled] {
- cursor: not-allowed;
- }
-
- .icon-cancel {
- cursor: pointer;
- }
- form {
- display: flex;
- flex-direction: column;
- padding: 0.6em;
- }
-
- .form-group {
- display: flex;
- flex-direction: column;
- padding: 0.3em 0.5em 0.6em;
- line-height:24px;
- }
-
- form textarea {
- border: solid;
- border-width: 1px;
- border-color: inherit;
- border-radius: 5px;
- line-height:16px;
- padding: 5px;
- resize: none;
- overflow: hidden;
- }
-
- form textarea:focus {
- min-height: 48px;
- }
-
- .btn {
- cursor: pointer;
- }
-
- .btn[disabled] {
- cursor: not-allowed;
- }
-
- .icon-cancel {
- cursor: pointer;
- z-index: 4;
- }
-
- .autocomplete-panel {
- margin: 0 0.5em 0 0.5em;
- border-radius: 5px;
- position: absolute;
- z-index: 1;
- box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
- min-width: 75%;
- }
-
- .autocomplete {
- cursor: pointer;
- padding: 0.2em 0.4em 0.2em 0.4em;
- border-bottom: 1px solid rgba(0, 0, 0, 0.4);
- display: flex;
- img {
- width: 24px;
- height: 24px;
- border-radius: 2px;
- object-fit: contain;
- }
- span {
- line-height: 24px;
- margin: 0 0.1em 0 0.2em;
- }
- small {
- font-style: italic;
- }
- }
- }
-
+@import '../../_variables.scss';
+
+.tribute-container {
+ ul {
+ padding: 0px;
+ li {
+ display: flex;
+ align-items: center;
+ }
+ }
+ img {
+ padding: 3px;
+ width: 16px;
+ height: 16px;
+ border-radius: $fallback--avatarAltRadius;
+ border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
+ }
+}
+
+.post-status-form, .login {
+ .form-bottom {
+ display: flex;
+ padding: 0.5em;
+ height: 32px;
+
+ button {
+ width: 10em;
+ }
+
+ p {
+ margin: 0.35em;
+ padding: 0.35em;
+ display: flex;
+ }
+ }
+
+ .error {
+ text-align: center;
+ }
+
+ .attachments {
+ padding: 0 0.5em;
+
+ .attachment {
+ position: relative;
+ border: 1px solid $fallback--border;
+ border: 1px solid var(--border, $fallback--border);
+ margin: 0.5em 0.8em 0.2em 0;
+ }
+
+ i {
+ position: absolute;
+ margin: 10px;
+ padding: 5px;
+ background: rgba(230,230,230,0.6);
+ border-radius: $fallback--attachmentRadius;
+ border-radius: var(--attachmentRadius, $fallback--attachmentRadius);
+ font-weight: bold;
+ }
+ }
+
+
+ .btn {
+ cursor: pointer;
+ }
+
+ .btn[disabled] {
+ cursor: not-allowed;
+ }
+
+ .icon-cancel {
+ cursor: pointer;
+ }
+
+ form {
+ display: flex;
+ flex-direction: column;
+ padding: 0.6em;
+ }
+
+ .form-group {
+ display: flex;
+ flex-direction: column;
+ padding: 0.3em 0.5em 0.6em;
+ line-height:24px;
+ }
+
+ form textarea {
+ line-height:16px;
+ resize: none;
+ overflow: hidden;
+ transition: min-height 200ms 100ms;
+ min-height: 1px;
+ box-sizing: content-box;
+ }
+
+ form textarea:focus {
+ min-height: 48px;
+ }
+
+ .btn {
+ cursor: pointer;
+ }
+
+ .btn[disabled] {
+ cursor: not-allowed;
+ }
+
+ .icon-cancel {
+ cursor: pointer;
+ z-index: 4;
+ }
+
+ .autocomplete-panel {
+ margin: 0 0.5em 0 0.5em;
+ border-radius: $fallback--tooltipRadius;
+ border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
+ position: absolute;
+ z-index: 1;
+ box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
+ min-width: 75%;
+ background: $fallback--btn;
+ background: var(--btn, $fallback--btn);
+ color: $fallback--lightFg;
+ color: var(--lightFg, $fallback--lightFg);
+ }
+
+ .autocomplete {
+ cursor: pointer;
+ padding: 0.2em 0.4em 0.2em 0.4em;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.4);
+ display: flex;
+
+ img {
+ width: 24px;
+ height: 24px;
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
+ object-fit: contain;
+ }
+
+ span {
+ line-height: 24px;
+ margin: 0 0.1em 0 0.2em;
+ }
+
+ small {
+ margin-left: .5em;
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ }
+ }
+}
</style>
diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue
index adc751a3..00f665af 100644
--- a/src/components/registration/registration.vue
+++ b/src/components/registration/registration.vue
@@ -1,6 +1,6 @@
<template>
- <div class="settings panel panel-default base00-background">
- <div class="panel-heading base02-background base04">
+ <div class="settings panel panel-default">
+ <div class="panel-heading">
{{$t('registration.registration')}}
</div>
<div class="panel-body">
@@ -39,14 +39,14 @@
</div>
-->
<div class='form-group'>
- <button :disabled="registering" type='submit' class='btn btn-default base05 base02-background'>{{$t('general.submit')}}</button>
+ <button :disabled="registering" type='submit' class='btn btn-default'>{{$t('general.submit')}}</button>
</div>
</div>
<div class='terms-of-service' v-html="termsofservice">
</div>
</div>
<div v-if="error" class='form-group'>
- <div class='error base05'>{{error}}</div>
+ <div class='alert error'>{{error}}</div>
</div>
</form>
</div>
@@ -55,6 +55,7 @@
<script src="./registration.js"></script>
<style lang="scss">
+@import '../../_variables.scss';
.registration-form {
display: flex;
@@ -87,23 +88,10 @@
}
form textarea {
- border: solid;
- border-width: 1px;
- border-color: silver;
- border-radius: 5px;
line-height:16px;
- padding: 5px;
resize: vertical;
}
- input {
- border-width: 1px;
- border-style: solid;
- border-color: silver;
- border-radius: 5px;
- padding: 0.1em 0.2em 0.2em 0.2em;
- }
-
.captcha {
max-width: 350px;
margin-bottom: 0.4em;
@@ -117,12 +105,7 @@
}
.error {
- border-radius: 5px;
text-align: center;
- margin: 0.5em 0.6em 0;
- background-color: rgba(255, 48, 16, 0.65);
- min-height: 28px;
- line-height: 28px;
}
}
diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue
index 7a7ea763..1bee3d08 100644
--- a/src/components/retweet_button/retweet_button.vue
+++ b/src/components/retweet_button/retweet_button.vue
@@ -1,26 +1,28 @@
<template>
<div v-if="loggedIn">
- <i :class='classes' class='icon-retweet rt-active base09' v-on:click.prevent='retweet()'></i>
+ <i :class='classes' class='icon-retweet rt-active' v-on:click.prevent='retweet()'></i>
<span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
</div>
<div v-else>
- <i :class='classes' class='icon-retweet base09'></i>
+ <i :class='classes' class='icon-retweet'></i>
<span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
</div>
</template>
<script src="./retweet_button.js" ></script>
-<style lang='scss'>
- @import '../../_variables.scss';
- .rt-active {
- cursor: pointer;
- animation-duration: 0.6s;
- &:hover {
- color: $green;
- }
- }
- .icon-retweet.retweeted {
- color: $green;
+<style lang="scss">
+@import '../../_variables.scss';
+.rt-active {
+ cursor: pointer;
+ animation-duration: 0.6s;
+ &:hover {
+ color: $fallback--cGreen;
+ color: var(--cGreen, $fallback--cGreen);
}
+}
+.icon-retweet.retweeted {
+ color: $fallback--cGreen;
+ color: var(--cGreen, $fallback--cGreen);
+}
</style>
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 5aa7596a..0c9ddc3e 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -1,6 +1,6 @@
<template>
- <div class="settings panel panel-default base00-background">
- <div class="panel-heading base02-background base04">
+ <div class="settings panel panel-default">
+ <div class="panel-heading">
{{$t('settings.settings')}}
</div>
<div class="panel-body">
@@ -54,32 +54,40 @@
</script>
<style lang="scss">
- .setting-item {
- margin: 1em 1em 1.4em;
- textarea {
- width: 100%;
- height: 100px;
- }
+@import '../../_variables.scss';
- .old-avatar {
- width: 128px;
- border-radius: 5px;
- }
+.setting-item {
+ margin: 1em 1em 1.4em;
- .new-avatar {
- object-fit: cover;
- width: 128px;
- height: 128px;
- border-radius: 5px;
- }
+ textarea {
+ width: 100%;
+ height: 100px;
+ }
- .btn {
- margin-top: 1em;
- min-height: 28px;
- width: 10em;
- }
- }
- .setting-list {
- list-style-type: none;
- }
+ .old-avatar {
+ width: 128px;
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
+ }
+
+ .new-avatar {
+ object-fit: cover;
+ width: 128px;
+ height: 128px;
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
+ }
+
+ .btn {
+ margin-top: 1em;
+ min-height: 28px;
+ width: 10em;
+ }
+}
+.setting-list {
+ list-style-type: none;
+ li {
+ margin-bottom: 0.5em;
+ }
+}
</style>
diff --git a/src/components/status/status.js b/src/components/status/status.js
index 7397e80c..56fb2e27 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -55,11 +55,6 @@ const Status = {
},
muted () { return !this.unmuted && (this.status.user.muted || this.muteWordHits.length > 0) },
isReply () { return !!this.status.in_reply_to_status_id },
- borderColor () {
- return {
- borderBottomColor: this.$store.state.config.colors['base02']
- }
- },
isFocused () {
// retweet or root of an expanded conversation
if (this.focused) {
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index d451b67c..798443f1 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -1,11 +1,11 @@
<template>
- <div class="status-el base00-background" v-if="compact">
+ <div class="status-el" v-if="compact">
<div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
<div v-if="loggedIn">
<div class='status-actions'>
<div>
<a href="#" v-on:click.prevent="toggleReplying">
- <i class="base09 icon-reply" :class="{'icon-reply-active': replying}"></i>
+ <i class="icon-reply" :class="{'icon-reply-active': replying}"></i>
</a>
</div>
<retweet-button :loggedIn="loggedIn" :status=status></retweet-button>
@@ -14,12 +14,12 @@
</div>
<post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying" v-if="replying"/>
</div>
- <div class="status-el base00-background base03-border status-fadein" v-else-if="!status.deleted" v-bind:class="[{ 'base01-background': isFocused }, { 'status-conversation': inConversation }]" >
+ <div class="status-el status-fadein" v-else-if="!status.deleted" v-bind:class="[{ 'status-el_focused': isFocused }, { 'status-conversation': inConversation }]" >
<template v-if="muted">
<div class="media status container muted">
<small><router-link :to="{ name: 'user-profile', params: { id: status.user.id } }">{{status.user.screen_name}}</router-link></small>
<small class="muteWords">{{muteWordHits.join(', ')}}</small>
- <a href="#" class="unmute" @click.prevent="toggleMute"><i class="base09 icon-eye-off"></i></a>
+ <a href="#" class="unmute" @click.prevent="toggleMute"><i class="icon-eye-off"></i></a>
</div>
</template>
<template v-if="!muted">
@@ -39,7 +39,7 @@
</a>
</div>
<div class="media-body">
- <div class="base03-border usercard" v-if="userExpanded">
+ <div class="usercard" v-if="userExpanded">
<user-card-content :user="status.user" :switcher="false"></user-card-content>
</div>
<div class="user-content">
@@ -75,15 +75,15 @@
</h4>
</div>
<div class="heading-icons">
- <a href="#" @click.prevent="toggleMute" v-if="unmuted"><i class="base09 icon-eye-off"></i></a>
- <a :href="status.external_url" target="_blank" v-if="!status.is_local" class="source_url"><i class="base09 icon-binoculars"></i></a>
+ <a href="#" @click.prevent="toggleMute" v-if="unmuted"><i class="icon-eye-off"></i></a>
+ <a :href="status.external_url" target="_blank" v-if="!status.is_local" class="source_url"><i class="icon-binoculars"></i></a>
<template v-if="expandable">
- <a href="#" @click.prevent="toggleExpanded" class="expand"><i class="base09 icon-plus-squared"></i></a>
+ <a href="#" @click.prevent="toggleExpanded" class="expand"><i class="icon-plus-squared"></i></a>
</template>
</div>
</div>
- <div class="status-preview base00-background base03-border" v-if="showPreview && preview">
+ <div class="status-preview" v-if="showPreview && preview">
<StillImage class="avatar" :src="preview.user.profile_image_url_original"/>
<div class="text">
<h4>
@@ -93,8 +93,8 @@
<div @click.prevent="linkClicked" class="status-content" v-html="preview.statusnet_html"></div>
</div>
</div>
- <div class="status-preview status-preview-loading base00-background base03-border" v-else-if="showPreview">
- <i class="base09 icon-spin4 animate-spin"></i>
+ <div class="status-preview status-preview-loading" v-else-if="showPreview">
+ <i class="icon-spin4 animate-spin"></i>
</div>
<div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
@@ -108,7 +108,7 @@
<div class='status-actions'>
<div v-if="loggedIn">
<a href="#" v-on:click.prevent="toggleReplying">
- <i class="base09 icon-reply" :class="{'icon-reply-active': replying}"></i>
+ <i class="icon-reply" :class="{'icon-reply-active': replying}"></i>
</a>
</div>
<retweet-button :loggedIn="loggedIn" :status=status></retweet-button>
@@ -117,7 +117,7 @@
</div>
</div>
</div>
- <div class="status base00-background container" v-if="replying">
+ <div class="status container" v-if="replying">
<div class="reply-left"/>
<post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying"/>
</div>
@@ -128,318 +128,355 @@
<script src="./status.js" ></script>
<style lang="scss">
- @import '../../_variables.scss';
+@import '../../_variables.scss';
+
+status-text-container {
+ display: block;
+}
+
+.status-preview {
+ position: absolute;
+ max-width: 34em;
+ padding: 0.5em;
+ display: flex;
+ background-color: $fallback--bg;
+ background-color: var(--bg, $fallback--bg);
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border);
+ border-style: solid;
+ border-width: 1px;
+ border-radius: $fallback--tooltipRadius;
+ border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
+ box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5);
+ margin-top: 0.5em;
+ margin-left: 1em;
+ z-index: 50;
+
+ .avatar {
+ flex-shrink: 0;
+ width: 32px;
+ height: 32px;
+ border-radius: $fallback--avatarAltRadius;
+ border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
+ }
- status-text-container {
- display: block;
+ .text {
+ h4 {
+ margin-bottom: 0.4em;
+ small {
+ font-weight: lighter;
+ }
+ }
+ padding: 0 0.5em 0.5em 0.5em;
+ }
+}
+
+.status-preview-loading {
+ display: block;
+ font-size: 2em;
+ min-width: 8em;
+ text-align: center;
+}
+
+.status-el {
+ hyphens: auto;
+ overflow-wrap: break-word;
+ word-wrap: break-word;
+ word-break: break-word;
+ border-left-width: 0px;
+ line-height: 18px;
+ background-color: $fallback--bg;
+ background-color: var(--bg, $fallback--bg);
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border);
+
+ &_focused {
+ background-color: $fallback--lightBg;
+ background-color: var(--lightBg, $fallback--lightBg);
}
- .status-preview {
- position: absolute;
- max-width: 34em;
- padding: 0.5em;
+ .usercard {
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border);
+ }
+
+ .timeline & {
+ border-bottom-width: 1px;
+ border-bottom-style: solid;
+ }
+
+ .notify {
+ .avatar {
+ border-width: 3px;
+ border-style: solid;
+ }
+ }
+
+ .media-body {
+ flex: 1;
+ padding-left: 0.5em;
+ }
+
+
+ .user-content {
+ min-height: 52px;
+ padding-top: 1px;
+ }
+
+ .media-heading {
display: flex;
- border-color: inherit;
- border-style: solid;
- border-width: 1px;
- border-radius: 4px;
- box-shadow: 2px 2px 3px rgba(0, 0, 0, 0.5);
- margin-top: 0.5em;
- margin-left: 1em;
- z-index: 50;
+ min-height: 1.4em;
+ margin-bottom: 0.3em;
+
+ .links a i {
+ color: $fallback--link;
+ color: var(--link, $fallback--link);
+ }
+
+ small {
+ font-weight: lighter;
+ }
+
+ h4 {
+ margin-right: 0.4em;
+ }
+
+ .name-and-links {
+ flex: 1 0;
+ display: flex;
+ flex-wrap: wrap;
+ }
+
+ .replies {
+ flex-basis: 100%;
+ }
+ }
+
+ .source_url {
+
+ }
+
+ .expand {
+ margin-right: -0.3em;
+ }
+
+ a {
+ display: inline-block;
+ word-break: break-all;
+ }
+
+ .status-content {
+ margin: 3px 15px 4px 0;
+ max-height: 400px;
+ overflow-y: auto;
+ overflow-x: hidden;
+
+ img, video {
+ max-width: 100%;
+ max-height: 400px;
+ vertical-align: middle;
+ object-fit: contain;
+ }
+
+ blockquote {
+ margin: 0.2em 0 0.2em 2em;
+ font-style: italic;
+ }
+ }
+
+ p {
+ margin: 0;
+ margin-top: 0.2em;
+ margin-bottom: 0.5em;
+ }
+
+ .media-left {
+ margin: 0.2em 0.3em 0 0;
.avatar {
- flex-shrink: 0;
- width: 32px;
- height: 32px;
- border-radius: 50%;
+ float: right;
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
}
- .text {
- h4 {
- margin-bottom: 0.4em;
- small {
- font-weight: lighter;
- }
+ }
+
+ .retweet-info {
+ padding: 0.7em 0 0 0.6em;
+
+ .media-left {
+ display: flex;
+
+ i {
+ align-self: center;
+ text-align: right;
+ flex: 1;
+ padding-right: 0.3em;
}
- padding: 0 0.5em 0.5em 0.5em;
}
}
- .status-preview-loading {
- display: block;
- font-size: 2em;
- min-width: 8em;
- text-align: center;
+
+}
+
+.status-fadein {
+ animation-duration: 0.5s;
+ animation-name: fadein;
+}
+
+@keyframes fadein {
+ from {
+ opacity: 0;
+ }
+
+ to {
+ opacity: 1;
}
+}
- .status-el {
- hyphens: auto;
- overflow-wrap: break-word;
- word-wrap: break-word;
- word-break: break-word;
- border-left-width: 0px;
- line-height: 18px;
-
- .timeline & {
- border-bottom-width: 1px;
- border-bottom-style: solid;
- }
-
- .notify {
- .avatar {
- border-width: 3px;
- border-style: solid;
- }
- }
-
- .media-body {
- flex: 1;
- padding-left: 0.5em;
- }
-
-
- .user-content {
-
- min-height: 52px;
- padding-top: 1px;
- }
-
- .media-heading {
- display: flex;
- min-height: 1.4em;
- margin-bottom: 0.3em;
-
- small {
- font-weight: lighter;
- }
- h4 {
- margin-right: 0.4em;
- }
- .name-and-links {
- flex: 1 0;
- display: flex;
- flex-wrap: wrap;
- }
- .replies {
- flex-basis: 100%;
- }
- }
-
- .source_url {
-
- }
-
- .expand {
- margin-right: -0.3em;
- }
-
- a {
- display: inline-block;
- word-break: break-all;
- }
-
- .status-content {
- margin: 3px 15px 4px 0;
- max-height: 400px;
- overflow-y: auto;
- overflow-x: hidden;
-
- img, video {
- max-width: 100%;
- max-height: 400px;
- vertical-align: middle;
- object-fit: contain;
- }
-
- blockquote {
- margin: 0.2em 0 0.2em 2em;
- font-style: italic;
- }
- }
-
- p {
- margin: 0;
- margin-top: 0.2em;
- margin-bottom: 0.5em;
- }
-
- .media-left {
- margin: 0.2em 0.3em 0 0;
- .avatar {
- float: right;
- }
- }
-
- .retweet-info {
- padding: 0.7em 0 0 0.6em;
-
- .media-left {
- display: flex;
-
- i {
- align-self: center;
- text-align: right;
- flex: 1;
- padding-right: 0.3em;
- }
- }
- }
- }
-
- .status-fadein {
- animation-duration: 0.5s;
- animation-name: fadein;
- }
-
- @keyframes fadein {
- from {
- opacity: 0;
- }
- to {
- opacity: 1;
- }
- }
-
- .greentext {
- color: green;
- }
-
- .status-conversation {
- border-left-style: solid;
- }
-
- .status-actions {
- padding-top: 0.15em;
- width: 100%;
- display: flex;
-
- div, favorite-button {
- max-width: 6em;
- flex: 1;
- }
- }
-
- .icon-reply:hover {
- color: $blue;
- }
-
- .icon-reply.icon-reply-active {
- color: $blue;
- }
-
- .status .avatar {
- width: 48px;
- height: 48px;
- border-radius: 5px;
- overflow: hidden;
-
- img {
- width: 100%;
- height: 100%;
- }
-
- &.animated::before {
- display: none;
- }
-
- &.retweeted {
- width: 40px;
- height: 40px;
- margin-right: 8px;
- margin-bottom: 8px;
- }
- }
-
- .status:hover .animated.avatar {
- canvas {
- display: none;
- }
- img {
- visibility: visible;
- }
- }
-
- .status .avatar-retweeter {
- width: 24px;
- height: 24px;
- position: absolute;
- margin-left: 24px;
- margin-top: 24px;
- }
-
- .status.compact .avatar {
- width: 32px;
- }
-
- .status {
- padding: 0.4em 0.7em 0.45em 0.7em;
- border-left: 4px rgba(255, 48, 16, 0.65);
- border-left-style: inherit;
- }
-
- .status-conversation:last-child {
- border-bottom: none;
- }
-
- .timeline .panel.timeline {
- border-radius: 10px;
- overflow: hidden;
- }
-
- .muted {
- padding: 0.1em 0.4em 0.1em 0.8em;
- button {
- margin-left: auto;
- }
-
- .muteWords {
- margin-left: 10px;
- }
- }
-
- a.unmute {
- display: block;
- margin-left: auto;
- }
-
- .reply-left {
- flex: 0;
- min-width: 48px;
- }
-
- .reply-body {
- flex: 1;
- }
-
- @media all and (max-width: 960px) {
- .status-el {
- .name-and-links {
- margin-left: -0.25em;
- }
- }
- .status {
- max-width: 100%;
- }
-
- .status .avatar {
- width: 40px;
- height: 40px;
-
- &.retweeted {
- width: 34px;
- height: 34px;
- margin-right: 8px;
- margin-bottom: 8px;
- }
- }
-
- .status .avatar-retweeter {
- width: 22px;
- height: 22px;
- position: absolute;
- margin-left: 18px;
- margin-top: 18px;
- }
- }
+.greentext {
+ color: green;
+}
+
+.status-conversation {
+ border-left-style: solid;
+}
+
+.status-actions {
+ padding-top: 0.15em;
+ width: 100%;
+ display: flex;
+
+ div, favorite-button {
+ max-width: 6em;
+ flex: 1;
+ }
+}
+
+.icon-reply:hover {
+ color: $fallback--cBlue;
+ color: var(--cBlue, $fallback--cBlue);
+}
+
+.icon-reply.icon-reply-active {
+ color: $fallback--cBlue;
+ color: var(--cBlue, $fallback--cBlue);
+}
+
+.status .avatar {
+ width: 48px;
+ height: 48px;
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
+ overflow: hidden;
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+
+ &.animated::before {
+ display: none;
+ }
+
+ &.retweeted {
+ width: 40px;
+ height: 40px;
+ margin-right: 8px;
+ margin-bottom: 8px;
+ }
+}
+
+.status:hover .animated.avatar {
+ canvas {
+ display: none;
+ }
+ img {
+ visibility: visible;
+ }
+}
+
+.status .avatar-retweeter {
+ width: 24px;
+ height: 24px;
+ position: absolute;
+ margin-left: 24px;
+ margin-top: 24px;
+}
+
+.status.compact .avatar {
+ width: 32px;
+}
+
+.status {
+ padding: 0.4em 0.7em 0.45em 0.7em;
+ border-left: 4px $fallback--cRed;
+ border-left: 4px var(--cRed, $fallback--cRed);
+ border-left-style: inherit;
+}
+
+.status-conversation:last-child {
+ border-bottom: none;
+}
+
+.timeline .panel.timeline {
+ overflow: hidden;
+}
+
+.muted {
+ padding: 0.1em 0.4em 0.1em 0.8em;
+ button {
+ margin-left: auto;
+ }
+
+ .muteWords {
+ margin-left: 10px;
+ }
+}
+
+a.unmute {
+ display: block;
+ margin-left: auto;
+}
+
+.reply-left {
+ flex: 0;
+ min-width: 48px;
+}
+
+.reply-body {
+ flex: 1;
+}
+
+@media all and (max-width: 960px) {
+ .status-el {
+ .name-and-links {
+ margin-left: -0.25em;
+ }
+ }
+
+ .status {
+ max-width: 100%;
+ }
+
+ .status .avatar {
+ width: 40px;
+ height: 40px;
+
+ &.retweeted {
+ width: 34px;
+ height: 34px;
+ margin-right: 8px;
+ margin-bottom: 8px;
+ }
+ }
+
+ .status .avatar-retweeter {
+ width: 22px;
+ height: 22px;
+ position: absolute;
+ margin-left: 18px;
+ margin-top: 18px;
+ }
+}
</style>
diff --git a/src/components/still-image/still-image.vue b/src/components/still-image/still-image.vue
index 5695c554..a37c678d 100644
--- a/src/components/still-image/still-image.vue
+++ b/src/components/still-image/still-image.vue
@@ -10,53 +10,56 @@
<style lang="scss">
@import '../../_variables.scss';
.still-image {
- position: relative;
- line-height: 0;
- overflow: hidden;
+ position: relative;
+ line-height: 0;
+ overflow: hidden;
+ width: 100%;
+ height: 100%;
- &:hover canvas {
- display: none;
- }
+ &:hover canvas {
+ display: none;
+ }
+
+ img {
+ width: 100%;
+ height: 100%;
+ }
+ &.animated {
+ &:hover::before,
img {
- width: 100%;
- height: 100%
+ visibility: hidden;
}
- &.animated {
- &:hover::before,
- img {
- visibility: hidden;
- }
-
- &:hover img {
- visibility: visible
- }
-
- &::before {
- content: 'gif';
- position: absolute;
- line-height: 10px;
- font-size: 10px;
- top: 5px;
- left: 5px;
- background: rgba(127,127,127,.5);
- color: #FFF;
- display: block;
- padding: 2px 4px;
- border-radius: 3px;
- z-index: 2;
- }
+ &:hover img {
+ visibility: visible
}
- canvas {
- position: absolute;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- width: 100%;
- height: 100%;
+ &::before {
+ content: 'gif';
+ position: absolute;
+ line-height: 10px;
+ font-size: 10px;
+ top: 5px;
+ left: 5px;
+ background: rgba(127,127,127,.5);
+ color: #FFF;
+ display: block;
+ padding: 2px 4px;
+ border-radius: $fallback--tooltipRadius;
+ border-radius: var(--tooltipRadius, $fallback--tooltipRadius);
+ z-index: 2;
}
+ }
+
+ canvas {
+ position: absolute;
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ width: 100%;
+ height: 100%;
+ }
}
</style>
diff --git a/src/components/style_switcher/style_switcher.js b/src/components/style_switcher/style_switcher.js
index a762f914..08bc7113 100644
--- a/src/components/style_switcher/style_switcher.js
+++ b/src/components/style_switcher/style_switcher.js
@@ -6,9 +6,19 @@ export default {
availableStyles: [],
selected: this.$store.state.config.theme,
bgColorLocal: '',
- fgColorLocal: '',
+ btnColorLocal: '',
textColorLocal: '',
- linkColorLocal: ''
+ linkColorLocal: '',
+ redColorLocal: '',
+ blueColorLocal: '',
+ greenColorLocal: '',
+ orangeColorLocal: '',
+ btnRadiusLocal: '',
+ panelRadiusLocal: '',
+ avatarRadiusLocal: '',
+ avatarAltRadiusLocal: '',
+ attachmentRadiusLocal: '',
+ tooltipRadiusLocal: ''
}
},
created () {
@@ -21,16 +31,29 @@ export default {
})
},
mounted () {
- this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors['base00'])
- this.fgColorLocal = rgbstr2hex(this.$store.state.config.colors['base02'])
- this.textColorLocal = rgbstr2hex(this.$store.state.config.colors['base05'])
- this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors['base08'])
+ this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors.bg)
+ this.btnColorLocal = rgbstr2hex(this.$store.state.config.colors.btn)
+ this.textColorLocal = rgbstr2hex(this.$store.state.config.colors.fg)
+ this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors.link)
+
+ this.redColorLocal = rgbstr2hex(this.$store.state.config.colors.cRed)
+ this.blueColorLocal = rgbstr2hex(this.$store.state.config.colors.cBlue)
+ this.greenColorLocal = rgbstr2hex(this.$store.state.config.colors.cGreen)
+ this.orangeColorLocal = rgbstr2hex(this.$store.state.config.colors.cOrange)
+
+ this.btnRadiusLocal = this.$store.state.config.radii.btnRadius || 4
+ this.panelRadiusLocal = this.$store.state.config.radii.panelRadius || 10
+ this.avatarRadiusLocal = this.$store.state.config.radii.avatarRadius || 5
+ this.avatarAltRadiusLocal = this.$store.state.config.radii.avatarAltRadius || 50
+ this.tooltipRadiusLocal = this.$store.state.config.radii.tooltipRadius || 2
+ this.attachmentRadiusLocal = this.$store.state.config.radii.attachmentRadius || 5
},
methods: {
setCustomTheme () {
- if (!this.bgColorLocal && !this.fgColorLocal && !this.linkColorLocal) {
+ if (!this.bgColorLocal && !this.btnColorLocal && !this.linkColorLocal) {
// reset to picked themes
}
+
const rgb = (hex) => {
const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex)
return result ? {
@@ -40,17 +63,33 @@ export default {
} : null
}
const bgRgb = rgb(this.bgColorLocal)
- const fgRgb = rgb(this.fgColorLocal)
+ const btnRgb = rgb(this.btnColorLocal)
const textRgb = rgb(this.textColorLocal)
const linkRgb = rgb(this.linkColorLocal)
- if (bgRgb && fgRgb && linkRgb) {
+
+ const redRgb = rgb(this.redColorLocal)
+ const blueRgb = rgb(this.blueColorLocal)
+ const greenRgb = rgb(this.greenColorLocal)
+ const orangeRgb = rgb(this.orangeColorLocal)
+
+ if (bgRgb && btnRgb && linkRgb) {
this.$store.dispatch('setOption', {
name: 'customTheme',
value: {
- fg: fgRgb,
+ fg: btnRgb,
bg: bgRgb,
text: textRgb,
- link: linkRgb
+ link: linkRgb,
+ cRed: redRgb,
+ cBlue: blueRgb,
+ cGreen: greenRgb,
+ cOrange: orangeRgb,
+ btnRadius: this.btnRadiusLocal,
+ panelRadius: this.panelRadiusLocal,
+ avatarRadius: this.avatarRadiusLocal,
+ avatarAltRadius: this.avatarAltRadiusLocal,
+ tooltipRadius: this.tooltipRadiusLocal,
+ attachmentRadius: this.attachmentRadiusLocal
}})
}
}
@@ -58,9 +97,13 @@ export default {
watch: {
selected () {
this.bgColorLocal = this.selected[1]
- this.fgColorLocal = this.selected[2]
+ this.btnColorLocal = this.selected[2]
this.textColorLocal = this.selected[3]
this.linkColorLocal = this.selected[4]
+ this.redColorLocal = this.selected[5]
+ this.greenColorLocal = this.selected[6]
+ this.blueColorLocal = this.selected[7]
+ this.orangeColorLocal = this.selected[8]
}
}
}
diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue
index 31bf546d..9c39b245 100644
--- a/src/components/style_switcher/style_switcher.vue
+++ b/src/components/style_switcher/style_switcher.vue
@@ -1,99 +1,231 @@
<template>
<div>
- <p>{{$t('settings.presets')}}</p>
- <select v-model="selected" class="style-switcher">
- <option v-for="style in availableStyles" :value="style">{{style[0]}}</option>
- </select>
- <p>{{$t('settings.theme_help')}}</p>
+ <div>{{$t('settings.presets')}}
+ <label for="style-switcher" class='select'>
+ <select id="style-switcher" v-model="selected" class="style-switcher">
+ <option v-for="style in availableStyles" :value="style">{{style[0]}}</option>
+ </select>
+ <i class="icon-down-open"/>
+ </label>
+ </div>
<div class="color-container">
+ <p>{{$t('settings.theme_help')}}</p>
<div class="color-item">
- <label for="bgcolor" class="base04 theme-color-lb">{{$t('settings.background')}}</label>
+ <label for="bgcolor" class="theme-color-lb">{{$t('settings.background')}}</label>
<input id="bgcolor" class="theme-color-cl" type="color" v-model="bgColorLocal">
<input id="bgcolor-t" class="theme-color-in" type="text" v-model="bgColorLocal">
</div>
<div class="color-item">
- <label for="fgcolor" class="base04 theme-color-lb">{{$t('settings.foreground')}}</label>
- <input id="fgcolor" class="theme-color-cl" type="color" v-model="fgColorLocal">
- <input id="fgcolor-t" class="theme-color-in" type="text" v-model="fgColorLocal">
+ <label for="fgcolor" class="theme-color-lb">{{$t('settings.foreground')}}</label>
+ <input id="fgcolor" class="theme-color-cl" type="color" v-model="btnColorLocal">
+ <input id="fgcolor-t" class="theme-color-in" type="text" v-model="btnColorLocal">
</div>
<div class="color-item">
- <label for="textcolor" class="base04 theme-color-lb">{{$t('settings.text')}}</label>
+ <label for="textcolor" class="theme-color-lb">{{$t('settings.text')}}</label>
<input id="textcolor" class="theme-color-cl" type="color" v-model="textColorLocal">
<input id="textcolor-t" class="theme-color-in" type="text" v-model="textColorLocal">
</div>
<div class="color-item">
- <label for="linkcolor" class="base04 theme-color-lb">{{$t('settings.links')}}</label>
+ <label for="linkcolor" class="theme-color-lb">{{$t('settings.links')}}</label>
<input id="linkcolor" class="theme-color-cl" type="color" v-model="linkColorLocal">
<input id="linkcolor-t" class="theme-color-in" type="text" v-model="linkColorLocal">
</div>
+ <div class="color-item">
+ <label for="redcolor" class="theme-color-lb">{{$t('settings.cRed')}}</label>
+ <input id="redcolor" class="theme-color-cl" type="color" v-model="redColorLocal">
+ <input id="redcolor-t" class="theme-color-in" type="text" v-model="redColorLocal">
+ </div>
+ <div class="color-item">
+ <label for="bluecolor" class="theme-color-lb">{{$t('settings.cBlue')}}</label>
+ <input id="bluecolor" class="theme-color-cl" type="color" v-model="blueColorLocal">
+ <input id="bluecolor-t" class="theme-color-in" type="text" v-model="blueColorLocal">
+ </div>
+ <div class="color-item">
+ <label for="greencolor" class="theme-color-lb">{{$t('settings.cGreen')}}</label>
+ <input id="greencolor" class="theme-color-cl" type="color" v-model="greenColorLocal">
+ <input id="greencolor-t" class="theme-color-in" type="green" v-model="greenColorLocal">
+ </div>
+ <div class="color-item">
+ <label for="orangecolor" class="theme-color-lb">{{$t('settings.cOrange')}}</label>
+ <input id="orangecolor" class="theme-color-cl" type="color" v-model="orangeColorLocal">
+ <input id="orangecolor-t" class="theme-color-in" type="text" v-model="orangeColorLocal">
+ </div>
</div>
- <div>
- <div class="panel">
- <div class="panel-heading" :style="{ 'background-color': fgColorLocal, 'color': textColorLocal }">Preview</div>
+ <div class="radius-container">
+ <p>{{$t('settings.radii_help')}}</p>
+ <div class="radius-item">
+ <label for="btnradius" class="theme-radius-lb">{{$t('settings.btnRadius')}}</label>
+ <input id="btnradius" class="theme-radius-rn" type="range" v-model="btnRadiusLocal" max="16">
+ <input id="btnradius-t" class="theme-radius-in" type="text" v-model="btnRadiusLocal">
+ </div>
+ <div class="radius-item">
+ <label for="panelradius" class="theme-radius-lb">{{$t('settings.panelRadius')}}</label>
+ <input id="panelradius" class="theme-radius-rn" type="range" v-model="panelRadiusLocal" max="50">
+ <input id="panelradius-t" class="theme-radius-in" type="text" v-model="panelRadiusLocal">
+ </div>
+ <div class="radius-item">
+ <label for="avatarradius" class="theme-radius-lb">{{$t('settings.avatarRadius')}}</label>
+ <input id="avatarradius" class="theme-radius-rn" type="range" v-model="avatarRadiusLocal" max="28">
+ <input id="avatarradius-t" class="theme-radius-in" type="green" v-model="avatarRadiusLocal">
+ </div>
+ <div class="radius-item">
+ <label for="avataraltradius" class="theme-radius-lb">{{$t('settings.avatarAltRadius')}}</label>
+ <input id="avataraltradius" class="theme-radius-rn" type="range" v-model="avatarAltRadiusLocal" max="28">
+ <input id="avataraltradius-t" class="theme-radius-in" type="text" v-model="avatarAltRadiusLocal">
+ </div>
+ <div class="radius-item">
+ <label for="attachmentradius" class="theme-radius-lb">{{$t('settings.attachmentRadius')}}</label>
+ <input id="attachmentrradius" class="theme-radius-rn" type="range" v-model="attachmentRadiusLocal" max="50">
+ <input id="attachmentradius-t" class="theme-radius-in" type="text" v-model="attachmentRadiusLocal">
+ </div>
+ <div class="radius-item">
+ <label for="tooltipradius" class="theme-radius-lb">{{$t('settings.tooltipRadius')}}</label>
+ <input id="tooltipradius" class="theme-radius-rn" type="range" v-model="tooltipRadiusLocal" max="20">
+ <input id="tooltipradius-t" class="theme-radius-in" type="text" v-model="tooltipRadiusLocal">
+ </div>
+ </div>
+ <div :style="{
+ '--btnRadius': btnRadiusLocal + 'px',
+ '--panelRadius': panelRadiusLocal + 'px',
+ '--avatarRadius': avatarRadiusLocal + 'px',
+ '--avatarAltRadius': avatarAltRadiusLocal + 'px',
+ '--tooltipRadius': tooltipRadiusLocal + 'px',
+ '--attachmentRadius': attachmentRadiusLocal + 'px'
+ }">
+ <div class="panel dummy">
+ <div class="panel-heading" :style="{ 'background-color': btnColorLocal, 'color': textColorLocal }">Preview</div>
<div class="panel-body theme-preview-content" :style="{ 'background-color': bgColorLocal, 'color': textColorLocal }">
+ <div class="avatar" :style="{
+ 'border-radius': avatarRadiusLocal + 'px'
+ }">
+ ( ͡° ͜ʖ ͡°)
+ </div>
<h4>Content</h4>
<br>
A bunch of more content and
- <a :style="{ 'color': linkColorLocal }">a nice lil' link</a>
+ <a :style="{ color: linkColorLocal }">a nice lil' link</a>
+ <i :style="{ color: blueColorLocal }" class="icon-reply"/>
+ <i :style="{ color: greenColorLocal }" class="icon-retweet"/>
+ <i :style="{ color: redColorLocal }" class="icon-cancel"/>
+ <i :style="{ color: orangeColorLocal }" class="icon-star"/>
<br>
- <button class="btn" :style="{ 'background-color': fgColorLocal, 'color': textColorLocal }">Button</button>
+ <button class="btn" :style="{ 'background-color': btnColorLocal, 'color': textColorLocal }">Button</button>
</div>
</div>
</div>
- <button class="btn base02-background base04" @click="setCustomTheme">{{$t('general.apply')}}</button>
+ <button class="btn" @click="setCustomTheme">{{$t('general.apply')}}</button>
</div>
</template>
<script src="./style_switcher.js"></script>
<style lang="scss">
+@import '../../_variables.scss';
.style-switcher {
- margin-right: 1em;
+ margin-right: 1em;
}
+.radius-container,
.color-container {
- display: flex;
- flex-wrap: wrap;
- justify-content: space-between;
+ display: flex;
+
+ p {
+ margin-top: 2em;
+ margin-bottom: .5em;
+ }
+}
+.radius-container {
+ flex-direction: column;
}
+.color-container {
+ flex-wrap: wrap;
+ justify-content: space-between;
+}
+
+.radius-item,
.color-item {
- min-width: 20em;
- display:flex;
- flex: 1 1 0;
- align-items: baseline;
- margin: 5px 6px 5px 0;
+ min-width: 20em;
+ display:flex;
+ flex: 1 1 0;
+ align-items: baseline;
+ margin: 5px 6px 5px 0;
+
+ label {
+ color: var(--faint, $fallback--faint);
+ }
}
+
+.radius-item {
+ flex-basis: auto;
+}
+
+.theme-radius-rn,
+.theme-color-cl {
+ border: 0;
+ box-shadow: none;
+ background: transparent;
+ color: var(--faint, $fallback--faint);
+ align-self: stretch;
+}
+
.theme-color-cl,
+.theme-radius-in,
.theme-color-in {
- margin-left: 4px;
- border-radius: 2px;
- border: 0;
+ margin-left: 4px;
}
.theme-color-in {
- padding: 5px;
- min-width: 4em;
- max-width: 7em;
- flex: 1;
+ min-width: 4em;
}
+
+.theme-radius-in {
+ min-width: 1em;
+}
+
+.theme-radius-in,
+.theme-color-in {
+ max-width: 7em;
+ flex: 1;
+}
+
+.theme-radius-lb,
.theme-color-lb {
- flex: 2;
- min-width: 7em;
- max-width: 10em;
+ flex: 2;
+ min-width: 7em;
+}
+
+.theme-radius-lb{
+ max-width: 50em;
+}
+
+.theme-color-lb {
+ max-width: 10em;
}
.theme-color-cl {
- padding: 1px;
- max-width: 8em;
- align-self: stretch;
- height: 100%;
- flex: 0;
- min-width: 2em;
- cursor: pointer;
- }
-
- .theme-preview-content {
- padding: 20px;
- }
+ padding: 1px;
+ max-width: 8em;
+ height: 100%;
+ flex: 0;
+ min-width: 2em;
+ cursor: pointer;
+}
+
+.theme-preview-content {
+ padding: 20px;
+}
+
+.dummy {
+ .avatar {
+ background: linear-gradient(135deg, #b8e1fc 0%,#a9d2f3 10%,#90bae4 25%,#90bcea 37%,#90bff0 50%,#6ba8e5 51%,#a2daf5 83%,#bdf3fd 100%);
+ color: black;
+ text-align: center;
+ height: 48px;
+ line-height: 48px;
+ width: 48px;
+ float: left;
+ margin-right: 1em;
+ }
+}
</style>
diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue
index d6ecfd2f..4d2230cb 100644
--- a/src/components/timeline/timeline.vue
+++ b/src/components/timeline/timeline.vue
@@ -1,48 +1,48 @@
<template>
<div class="timeline panel panel-default" v-if="viewing == 'statuses'">
- <div class="panel-heading timeline-heading base02-background base04">
+ <div class="panel-heading timeline-heading">
<div class="title">
{{title}}
</div>
- <button @click.prevent="showNewStatuses" class="base05 base02-background loadmore-button" v-if="timeline.newStatusCount > 0 && !timelineError">
+ <button @click.prevent="showNewStatuses" class="loadmore-button" v-if="timeline.newStatusCount > 0 && !timelineError">
{{$t('timeline.show_new')}}{{newStatusCountStr}}
</button>
- <div @click.prevent class="base06 error loadmore-text" v-if="timelineError">
+ <div @click.prevent class="loadmore-text" v-if="timelineError">
{{$t('timeline.error_fetching')}}
</div>
- <div @click.prevent class="base04 base02-background loadmore-text" v-if="!timeline.newStatusCount > 0 && !timelineError">
+ <div @click.prevent class="loadmore-text" v-if="!timeline.newStatusCount > 0 && !timelineError">
{{$t('timeline.up_to_date')}}
</div>
</div>
- <div class="panel-body base01-background">
+ <div class="panel-body">
<div class="timeline">
<status-or-conversation v-for="status in timeline.visibleStatuses" :key="status.id" v-bind:statusoid="status"></status-or-conversation>
<a href="#" v-on:click.prevent='fetchOlderStatuses()' v-if="!timeline.loading">
- <div class="base02-background base03-border new-status-notification text-center">{{$t('timeline.load_older')}}</div>
+ <div class="new-status-notification text-center">{{$t('timeline.load_older')}}</div>
</a>
- <div class="base02-background base03-border new-status-notification text-center" v-else>...</div>
+ <div class="new-status-notification text-center" v-else>...</div>
</div>
</div>
</div>
<div class="timeline panel panel-default" v-else-if="viewing == 'followers'">
- <div class="panel-heading timeline-heading base02-background base04">
+ <div class="panel-heading timeline-heading">
<div class="title">
{{$t('user_card.followers')}}
</div>
</div>
- <div class="panel-body base01-background">
+ <div class="panel-body">
<div class="timeline">
<user-card v-for="follower in followers" :key="follower.id" :user="follower" :showFollows="false"></user-card>
</div>
</div>
</div>
<div class="timeline panel panel-default" v-else-if="viewing == 'friends'">
- <div class="panel-heading timeline-heading base02-background base04">
+ <div class="panel-heading timeline-heading">
<div class="title">
{{$t('user_card.followees')}}
</div>
</div>
- <div class="panel-body base01-background">
+ <div class="panel-body">
<div class="timeline">
<user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card>
</div>
@@ -52,51 +52,56 @@
<script src="./timeline.js"></script>
<style lang="scss">
+@import '../../_variables.scss';
- .timeline {
- .timeline-heading {
- position: relative;
- display: flex;
- }
- .title {
- white-space: nowrap;
- overflow: hidden;
- text-overflow: ellipsis;
- max-width: 70%;
- }
- .loadmore-button {
- position: absolute;
- right: 0.6em;
- font-size: 14px;
+.timeline {
+ .timeline-heading {
+ position: relative;
+ display: flex;
+ }
- min-width: 6em;
- height: 1.8em;
- line-height: 100%;
- }
- .loadmore-text {
- position: absolute;
- right: 0.6em;
- font-size: 14px;
- min-width: 6em;
- border-radius: 5px;
- font-family: sans-serif;
- text-align: center;
- padding: 0 0.5em 0 0.5em;
- opacity: 0.8;
- }
- .error {
- background-color: rgba(255, 48, 16, 0.65);
- }
+ .title {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ max-width: 70%;
}
- .new-status-notification {
- position:relative;
- margin-top: -1px;
- font-size: 1.1em;
- border-width: 1px 0 0 0;
- border-style: solid;
- border-radius: 0 0 10px 10px;
- padding: 10px;
- z-index: 1;
+ .loadmore-button {
+ position: absolute;
+ right: 0.6em;
+ font-size: 14px;
+
+ min-width: 6em;
+ height: 1.8em;
+ line-height: 100%;
}
+
+ .loadmore-text {
+ position: absolute;
+ right: 0.6em;
+ font-size: 14px;
+ min-width: 6em;
+ background-color: transparent;
+ color: $fallback--faint;
+ color: var(--faint, $fallback--faint);
+ font-family: sans-serif;
+ text-align: center;
+ padding: 0 0.5em 0 0.5em;
+ opacity: 0.8;
+ }
+}
+
+.new-status-notification {
+ position:relative;
+ margin-top: -1px;
+ font-size: 1.1em;
+ border-width: 1px 0 0 0;
+ border-style: solid;
+ border-color: var(--border, $fallback--border);
+ padding: 10px;
+ z-index: 1;
+ background-color: $fallback--btn;
+ background-color: var(--btn, $fallback--btn);
+}
</style>
diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue
index dd14d1b4..51d6965f 100644
--- a/src/components/user_card/user_card.vue
+++ b/src/components/user_card/user_card.vue
@@ -1,5 +1,5 @@
<template>
- <div class="card base00-background">
+ <div class="card">
<a href="#">
<img @click.prevent="toggleUserExpanded" class="avatar" :src="user.profile_image_url">
</a>
@@ -7,7 +7,7 @@
<user-card-content :user="user" :switcher="false"></user-card-content>
</div>
<div class="name-and-screen-name" v-else>
- <div class="user-name">
+ <div :title="user.name" class="user-name">
{{ user.name }}
<span class="follows-you" v-if="!userExpanded && showFollows && user.follows_you">
{{ $t('user_card.follows_you') }}
@@ -21,54 +21,58 @@
<script src="./user_card.js"></script>
<style lang="scss">
- .name-and-screen-name {
- margin-left: 0.7em;
- margin-top:0.0em;
- margin-right: 2em;
- text-align: left;
- width: 100%;
- }
+@import '../../_variables.scss';
- .follows-you {
- margin-left: 2em;
- float: right;
- }
+.name-and-screen-name {
+ margin-left: 0.7em;
+ margin-top:0.0em;
+ text-align: left;
+ width: 100%;
+}
- .follows {
+.follows-you {
+ margin-left: 2em;
+ float: right;
+}
- }
+.card {
+ display: flex;
+ flex: 1 0;
+ padding-top: 0.6em;
+ padding-right: 1em;
+ padding-bottom: 0.6em;
+ padding-left: 1em;
+ border-bottom: 1px solid;
+ margin: 0;
+ border-bottom-color: $fallback--border;
+ border-bottom-color: var(--border, $fallback--border);
- .card {
- display: flex;
- flex: 1 0;
- padding-top: 0.6em;
- padding-right: 1em;
- padding-bottom: 0.6em;
- padding-left: 1em;
- border-bottom: 1px solid;
- margin: 0;
- border-bottom-color: inherit;
+ .avatar {
+ margin-top: 0.2em;
+ width:32px;
+ height: 32px;
+ border-radius: $fallback--avatarAltRadius;
+ border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius);
+ }
+}
+.usercard {
+ width: fill-available;
+ margin: 0.2em 0 0.7em 0;
+ border-radius: $fallback--panelRadius;
+ border-radius: var(--panelRadius, $fallback--panelRadius);
+ border-style: solid;
+ border-color: $fallback--border;
+ border-color: var(--border, $fallback--border);
+ border-width: 1px;
+ overflow: hidden;
- .avatar {
- margin-top: 0.2em;
- width:32px;
- height: 32px;
- border-radius: 50%;
- }
+ .panel-heading {
+ background: transparent;
}
- .usercard {
- width: fill-available;
- margin: 0.2em 0 0.7em 0;
- border-radius: 10px;
- border-style: solid;
- border-color: inherit;
- border-width: 1px;
- overflow: hidden;
-
- p {
- margin-bottom: 0;
- }
+ p {
+ margin-bottom: 0;
}
+}
</style>
diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js
index 8c9ccda1..2e448f1c 100644
--- a/src/components/user_card_content/user_card_content.js
+++ b/src/components/user_card_content/user_card_content.js
@@ -5,7 +5,7 @@ export default {
props: [ 'user', 'switcher' ],
computed: {
headingStyle () {
- const color = this.$store.state.config.colors['base00']
+ const color = this.$store.state.config.colors.bg
if (color) {
const rgb = hex2rgb(color)
console.log(rgb)
@@ -15,11 +15,6 @@ export default {
}
}
},
- bodyStyle () {
- return {
- background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors['base00']} 80%)`
- }
- },
isOtherUser () {
return this.user.id !== this.$store.state.users.currentUser.id
},
diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue
index 71a879df..68e2583f 100644
--- a/src/components/user_card_content/user_card_content.vue
+++ b/src/components/user_card_content/user_card_content.vue
@@ -9,39 +9,38 @@
<router-link :to="{ name: 'user-profile', params: { id: user.id } }">
<StillImage class="avatar" :src="user.profile_image_url_original"/>
</router-link>
- <span class="glyphicon glyphicon-user"></span>
<div class="name-and-screen-name">
- <div class='user-name'>{{user.name}}</div>
+ <div :title="user.name" class='user-name'>{{user.name}}</div>
<router-link :to="{ name: 'user-profile', params: { id: user.id } }">
<div class='user-screen-name'>@{{user.screen_name}}</div>
</router-link>
</div>
</div>
<div v-if="isOtherUser" class="user-interactions">
- <div v-if="user.follows_you && loggedIn" class="following base06">
+ <div v-if="user.follows_you && loggedIn" class="following">
{{ $t('user_card.follows_you') }}
</div>
<div class="follow" v-if="loggedIn">
<span v-if="user.following">
<!--Following them!-->
- <button @click="unfollowUser" class="base04 base00-background pressed">
+ <button @click="unfollowUser" class="pressed">
{{ $t('user_card.following') }}
</button>
</span>
<span v-if="!user.following">
- <button @click="followUser" class="base05 base02-background">
+ <button @click="followUser">
{{ $t('user_card.follow') }}
</button>
</span>
</div>
<div class='mute' v-if='isOtherUser'>
<span v-if='user.muted'>
- <button @click="toggleMute" class="base04 base00-background pressed">
+ <button @click="toggleMute" class="pressed">
{{ $t('user_card.muted') }}
</button>
</span>
<span v-if='!user.muted'>
- <button @click="toggleMute" class="base05 base02-background">
+ <button @click="toggleMute">
{{ $t('user_card.mute') }}
</button>
</span>
@@ -50,19 +49,19 @@
<form method="POST" :action='subscribeUrl'>
<input type="hidden" name="nickname" :value="user.screen_name">
<input type="hidden" name="profile" value="">
- <button click="submit" class="remote-button base05 base02-background">
+ <button click="submit" class="remote-button">
{{ $t('user_card.remote_follow') }}
</button>
</form>
</div>
<div class='block' v-if='isOtherUser && loggedIn'>
<span v-if='user.statusnet_blocking'>
- <button @click="unblockUser" class="base04 base00-background pressed">
+ <button @click="unblockUser" class="pressed">
{{ $t('user_card.blocked') }}
</button>
</span>
<span v-if='!user.statusnet_blocking'>
- <button @click="blockUser" class="base05 base02-background">
+ <button @click="blockUser">
{{ $t('user_card.block') }}
</button>
</span>
@@ -70,22 +69,22 @@
</div>
</div>
</div>
- <div class="panel-body profile-panel-body" :style="bodyStyle">
+ <div class="panel-body profile-panel-body">
<div class="user-counts">
<div class="user-count">
- <a href="#" v-on:click.prevent="setProfileView('statuses')" v-if="switcher"><h5 class="base05">{{ $t('user_card.statuses') }}</h5></a>
+ <a href="#" v-on:click.prevent="setProfileView('statuses')" v-if="switcher"><h5>{{ $t('user_card.statuses') }}</h5></a>
<h5 v-else>{{ $t('user_card.statuses') }}</h5>
- <span class="base05">{{user.statuses_count}} <br><span class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span></span>
+ <span>{{user.statuses_count}} <br><span class="dailyAvg">{{dailyAvg}} {{ $t('user_card.per_day') }}</span></span>
</div>
<div class="user-count">
- <a href="#" v-on:click.prevent="setProfileView('friends')" v-if="switcher"><h5 class="base05">{{ $t('user_card.followees') }}</h5></a>
+ <a href="#" v-on:click.prevent="setProfileView('friends')" v-if="switcher"><h5>{{ $t('user_card.followees') }}</h5></a>
<h5 v-else>{{ $t('user_card.followees') }}</h5>
- <span class="base05">{{user.friends_count}}</span>
+ <span>{{user.friends_count}}</span>
</div>
<div class="user-count">
- <a href="#" v-on:click.prevent="setProfileView('followers')" v-if="switcher"><h5 class="base05">{{ $t('user_card.followers') }}</h5></a>
+ <a href="#" v-on:click.prevent="setProfileView('followers')" v-if="switcher"><h5>{{ $t('user_card.followers') }}</h5></a>
<h5 v-else>{{ $t('user_card.followers') }}</h5>
- <span class="base05">{{user.followers_count}}</span>
+ <span>{{user.followers_count}}</span>
</div>
</div>
<p>{{user.description}}</p>
@@ -100,7 +99,8 @@
.profile-panel-background {
background-size: cover;
- border-radius: 10px;
+ border-radius: $fallback--panelRadius;
+ border-radius: var(--panelRadius, $fallback--panelRadius);
.panel-heading {
padding: 0.6em 0em;
@@ -112,39 +112,33 @@
top: -0em;
padding-top: 4em;
word-wrap: break-word;
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0), $fallback--bg 80%);
+ background: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--bg, $fallback--bg) 80%)
}
.user-info {
- color: white;
+ color: white;
padding: 0 16px 16px 16px;
margin-bottom: -4em;
- .usersettings {
- color: white;
- opacity: 0.8;
- }
-
- .container{
+ .container {
padding: 16px 10px 4px 10px;
display: flex;
- flex-wrap: wrap;
- flex-direction: column;
- align-content: flex-start;
- justify-content: center;
max-height: 56px;
overflow: hidden;
- }
- .avatar {
- border-radius: 5px;
- flex: 1 0 100%;
- width: 56px;
- height: 56px;
- box-shadow: 0px 1px 8px rgba(0,0,0,0.75);
- object-fit: cover;
+ .avatar {
+ border-radius: $fallback--avatarRadius;
+ border-radius: var(--avatarRadius, $fallback--avatarRadius);
+ flex: 1 0 100%;
+ width: 56px;
+ height: 56px;
+ box-shadow: 0px 1px 8px rgba(0,0,0,0.75);
+ object-fit: cover;
- &.animated::before {
- display: none;
+ &.animated::before {
+ display: none;
+ }
}
}
@@ -157,7 +151,12 @@
}
}
- text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0);
+ text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0);
+
+ .usersettings {
+ color: #fff;
+ opacity: .8;
+ }
.name-and-screen-name {
display: block;
@@ -165,18 +164,20 @@
text-align: left;
text-overflow: ellipsis;
white-space: nowrap;
+ flex: 1 1 0;
}
- .user-name{
- color: white;
- }
+ .user-name{
+ color: white;
+ text-overflow: ellipsis;
+ overflow: hidden;
+ }
.user-screen-name {
- color: white;
- font-weight: lighter;
- font-size: 15px;
- padding-right: 0.1em;
- flex: 0 0 auto;
+ color: white;
+ font-weight: lighter;
+ font-size: 15px;
+ padding-right: 0.1em;
}
.user-interactions {
@@ -232,23 +233,24 @@
}
.user-counts {
- display: flex;
- line-height:16px;
- padding: 1em 1.5em 0em 1em;
- text-align: center;
+ display: flex;
+ line-height:16px;
+ padding: 1em 1.5em 0em 1em;
+ text-align: center;
}
.user-count {
- flex: 1;
+ flex: 1;
- h5 {
- font-size:1em;
- font-weight: bolder;
- margin: 0 0 0.25em;
- }
- a {
- text-decoration: none;
- }
+ h5 {
+ color: white;
+ font-size:1em;
+ font-weight: bolder;
+ margin: 0 0 0.25em;
+ }
+ a {
+ text-decoration: none;
+ }
}
.dailyAvg {
diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue
index 3c69e3b4..69bd1d21 100644
--- a/src/components/user_finder/user_finder.vue
+++ b/src/components/user_finder/user_finder.vue
@@ -1,13 +1,13 @@
<template>
<span class="user-finder-container">
- <span class="finder-error base05" v-if="error">
+ <span class="alert error" v-if="error">
<i class="icon-cancel user-finder-icon" @click="dismissError"/>
{{$t('finder.error_fetching_user')}}
</span>
<i class="icon-spin4 user-finder-icon animate-spin-slow" v-if="loading" />
<a href="#" v-if="hidden"><i class="icon-user-plus user-finder-icon" @click.prevent.stop="toggleHidden"/></a>
<span v-else>
- <input class="user-finder-input base03-border" @keyup.enter="findUser(username)" v-model="username" :placeholder="$t('finder.find_user')" id="user-finder-input" type="text"/>
+ <input class="user-finder-input" @keyup.enter="findUser(username)" v-model="username" :placeholder="$t('finder.find_user')" id="user-finder-input" type="text"/>
<i class="icon-cancel user-finder-icon" @click.prevent.stop="toggleHidden"/>
</span>
</span>
@@ -16,27 +16,16 @@
<script src="./user_finder.js"></script>
<style lang="scss">
- .user-finder-container {
- height: 21px;
- max-width: 100%;
- }
+@import '../../_variables.scss';
- .user-finder-icon {
- }
+.user-finder-container {
+ height: 29px;
+ max-width: 100%;
+}
- .user-finder-input {
- border-width: 1px;
- border-style: solid;
- border-color: inherit;
- border-radius: 5px;
- max-width: 80%;
- padding: 0.1em 0.2em 0.2em 0.2em;
- }
+.user-finder-input {
+ max-width: 80%;
+ vertical-align: middle;
+}
- .finder-error {
- background-color: rgba(255, 48, 16, 0.65);
- margin: 0.35em;
- border-radius: 5px;
- padding: 0.25em;
- }
</style>
diff --git a/src/components/user_panel/user_panel.vue b/src/components/user_panel/user_panel.vue
index 1a5e20fb..05af7bc3 100644
--- a/src/components/user_panel/user_panel.vue
+++ b/src/components/user_panel/user_panel.vue
@@ -2,7 +2,7 @@
<div class="user-panel">
<div v-if='user' class="panel panel-default" style="overflow: visible;">
<user-card-content :user="user" :switcher="false"></user-card-content>
- <div class="panel-footer base00-background">
+ <div class="panel-footer">
<post-status-form v-if='user'></post-status-form>
</div>
</div>
@@ -11,3 +11,11 @@
</template>
<script src="./user_panel.js"></script>
+
+<style lang="scss">
+.user-panel {
+ .profile-panel-background .panel-heading {
+ background: transparent;
+ }
+}
+</style>
diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue
index 359abfef..838a43ab 100644
--- a/src/components/user_profile/user_profile.vue
+++ b/src/components/user_profile/user_profile.vue
@@ -1,6 +1,6 @@
<template>
<div>
- <div v-if="user" class="user-profile panel panel-default base00-background">
+ <div v-if="user" class="user-profile panel panel-default">
<user-card-content :user="user" :switcher="true"></user-card-content>
</div>
<Timeline :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="userId"/>
@@ -15,7 +15,8 @@
flex: 2;
flex-basis: 500px;
padding-bottom: 10px;
- border-radius: 10px;
+ .panel-heading {
+ background: transparent;
+ }
}
-
</style>
diff --git a/src/components/user_settings/user_settings.vue b/src/components/user_settings/user_settings.vue
index 1ef52bbf..ed1864cc 100644
--- a/src/components/user_settings/user_settings.vue
+++ b/src/components/user_settings/user_settings.vue
@@ -1,16 +1,16 @@
<template>
- <div class="settings panel panel-default base00-background">
- <div class="panel-heading base02-background base04">
+ <div class="settings panel panel-default">
+ <div class="panel-heading">
{{$t('settings.user_settings')}}
</div>
<div class="panel-body profile-edit">
<div class="setting-item">
<h3>{{$t('settings.name_bio')}}</h3>
<p>{{$t('settings.name')}}</p>
- <input class='name-changer base03-border' id='username' v-model="newname"></input>
+ <input class='name-changer' id='username' v-model="newname"></input>
<p>{{$t('settings.bio')}}</p>
- <textarea class="bio base03-border" v-model="newbio"></textarea>
- <button :disabled='newname.length <= 0' class="btn btn-default base05 base02-background" @click="updateProfile">{{$t('general.submit')}}</button>
+ <textarea class="bio" v-model="newbio"></textarea>
+ <button :disabled='newname.length <= 0' class="btn btn-default" @click="updateProfile">{{$t('general.submit')}}</button>
</div>
<div class="setting-item">
<h3>{{$t('settings.avatar')}}</h3>
@@ -22,8 +22,8 @@
<div>
<input type="file" @change="uploadFile(0, $event)" ></input>
</div>
- <i class="base09 icon-spin4 animate-spin" v-if="uploading[0]"></i>
- <button class="btn btn-default base05 base02-background" v-else-if="previews[0]" @click="submitAvatar">{{$t('general.submit')}}</button>
+ <i class="icon-spin4 animate-spin" v-if="uploading[0]"></i>
+ <button class="btn btn-default" v-else-if="previews[0]" @click="submitAvatar">{{$t('general.submit')}}</button>
</div>
<div class="setting-item">
<h3>{{$t('settings.profile_banner')}}</h3>
@@ -35,8 +35,8 @@
<div>
<input type="file" @change="uploadFile(1, $event)" ></input>
</div>
- <i class="base09 icon-spin4 animate-spin uploading" v-if="uploading[1]"></i>
- <button class="btn btn-default base05 base02-background" v-else-if="previews[1]" @click="submitBanner">{{$t('general.submit')}}</button>
+ <i class=" icon-spin4 animate-spin uploading" v-if="uploading[1]"></i>
+ <button class="btn btn-default" v-else-if="previews[1]" @click="submitBanner">{{$t('general.submit')}}</button>
</div>
<div class="setting-item">
<h3>{{$t('settings.profile_background')}}</h3>
@@ -46,8 +46,8 @@
<div>
<input type="file" @change="uploadFile(2, $event)" ></input>
</div>
- <i class="base09 icon-spin4 animate-spin uploading" v-if="uploading[2]"></i>
- <button class="btn btn-default base05 base02-background" v-else-if="previews[2]" @click="submitBg">{{$t('general.submit')}}</button>
+ <i class=" icon-spin4 animate-spin uploading" v-if="uploading[2]"></i>
+ <button class="btn btn-default" v-else-if="previews[2]" @click="submitBg">{{$t('general.submit')}}</button>
</div>
<div class="setting-item" v-if="pleromaBackend">
<h3>{{$t('settings.follow_import')}}</h3>
@@ -55,8 +55,8 @@
<form v-model="followImportForm">
<input type="file" ref="followlist" v-on:change="followListChange"></input>
</form>
- <i class="base09 icon-spin4 animate-spin uploading" v-if="uploading[3]"></i>
- <button class="btn btn-default base05 base02-background" v-else @click="importFollows">{{$t('general.submit')}}</button>
+ <i class=" icon-spin4 animate-spin uploading" v-if="uploading[3]"></i>
+ <button class="btn btn-default" v-else @click="importFollows">{{$t('general.submit')}}</button>
<div v-if="followsImported">
<i class="icon-cross" @click="dismissImported"></i>
<p>{{$t('settings.follows_imported')}}</p>
@@ -75,24 +75,16 @@
<style lang="scss">
.profile-edit {
- .name-changer {
- border-width: 1px;
- border-style: solid;
- border-radius: 5px;
- padding: 0.2em 0.2em 0.2em 0.2em;
- }
- .name-submit {
- padding: 0.2em 0.5em 0.2em 0.5em;
- }
.bio {
- border-width: 1px;
- border-style: solid;
- border-radius: 5px;
margin: 0;
}
+
+ input[type=file] {
+ padding: 5px;
+ }
+
.banner {
max-width: 400px;
- border-radius: 5px;
}
.uploading {
diff --git a/src/i18n/messages.js b/src/i18n/messages.js
index cc7dfe7d..7bedfa8c 100644
--- a/src/i18n/messages.js
+++ b/src/i18n/messages.js
@@ -46,7 +46,7 @@ const de = {
settings: 'Einstellungen',
theme: 'Farbschema',
presets: 'Voreinstellungen',
- theme_help: 'Benutze HTML Farbcodes (#aabbcc) um dein Farbschema anzupassen.',
+ theme_help: 'Benutze HTML Farbcodes (#rrggbb) um dein Farbschema anzupassen.',
background: 'Hintergrund',
foreground: 'Vordergrund',
text: 'Text',
@@ -238,11 +238,22 @@ const en = {
settings: 'Settings',
theme: 'Theme',
presets: 'Presets',
- theme_help: 'Use hex color codes (#aabbcc) to customize your color theme.',
+ theme_help: 'Use hex color codes (#rrggbb) to customize your color theme.',
+ radii_help: 'Set up interface edge rounding (in pixels)',
background: 'Background',
foreground: 'Foreground',
text: 'Text',
links: 'Links',
+ cBlue: 'Blue (Reply, follow)',
+ cRed: 'Red (Cancel)',
+ cOrange: 'Orange (Favorite)',
+ cGreen: 'Green (Retweet)',
+ btnRadius: 'Buttons',
+ panelRadius: 'Panels',
+ avatarRadius: 'Avatars',
+ avatarAltRadius: 'Avatars (Notifications)',
+ tooltipRadius: 'Tooltips/alerts',
+ attachmentRadius: 'Attachments',
filtering: 'Filtering',
filtering_explanation: 'All statuses containing these words will be muted, one per line',
attachments: 'Attachments',
@@ -835,7 +846,7 @@ const oc = {
settings: 'Paramètres',
theme: 'Tèma',
presets: 'Pre-enregistrats',
- theme_help: 'Emplegatz los còdis de color hex (#aabbcc) per personalizar vòstre tèma de color.',
+ theme_help: 'Emplegatz los còdis de color hex (#rrggbb) per personalizar vòstre tèma de color.',
background: 'Rèire plan',
foreground: 'Endavant',
text: 'Tèxte',
@@ -1021,7 +1032,7 @@ const es = {
settings: 'Ajustes',
theme: 'Tema',
presets: 'Por defecto',
- theme_help: 'Use códigos de color hexadecimales (#aabbcc) para personalizar su tema de colores.',
+ theme_help: 'Use códigos de color hexadecimales (#rrggbb) para personalizar su tema de colores.',
background: 'Segundo plano',
foreground: 'Primer plano',
text: 'Texto',
@@ -1121,7 +1132,7 @@ const pt = {
settings: 'Configurações',
theme: 'Tema',
presets: 'Predefinições',
- theme_help: 'Use cores em código hexadecimal (#aabbcc) para personalizar seu esquema de cores.',
+ theme_help: 'Use cores em código hexadecimal (#rrggbb) para personalizar seu esquema de cores.',
background: 'Plano de Fundo',
foreground: 'Primeiro Plano',
text: 'Texto',
@@ -1221,7 +1232,7 @@ const ru = {
settings: 'Настройки',
theme: 'Тема',
presets: 'Пресеты',
- theme_help: 'Используйте шестнадцатеричные коды цветов (#aabbcc) для настройки темы.',
+ theme_help: 'Используйте шестнадцатеричные коды цветов (#rrggbb) для настройки темы.',
background: 'Фон',
foreground: 'Передний план',
text: 'Текст',
diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js
index 6863bd0a..532af1ba 100644
--- a/src/services/style_setter/style_setter.js
+++ b/src/services/style_setter/style_setter.js
@@ -45,12 +45,8 @@ const setStyle = (href, commit) => {
const styleEl = document.createElement('style')
head.appendChild(styleEl)
- const styleSheet = styleEl.sheet
+ // const styleSheet = styleEl.sheet
- styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max')
- styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max')
- styleSheet.insertRule(`.base05-border { border-color: ${colors['base05']}`, 'index-max')
- styleSheet.insertRule(`.base03-border { border-color: ${colors['base03']}`, 'index-max')
body.style.display = 'initial'
}
@@ -68,37 +64,50 @@ const setColors = (col, commit) => {
const isDark = (col.text.r + col.text.g + col.text.b) > (col.bg.r + col.bg.g + col.bg.b)
let colors = {}
+ let radii = {}
let mod = 10
if (isDark) {
mod = mod * -1
}
+ console.log(JSON.stringify(col, null, ' '))
+
+ colors.bg = rgb2hex(col.bg.r, col.bg.g, col.bg.b) // background
+ colors.lightBg = rgb2hex((col.bg.r + col.fg.r) / 2, (col.bg.g + col.fg.g) / 2, (col.bg.b + col.fg.b) / 2) // hilighted bg
+ colors.btn = rgb2hex(col.fg.r, col.fg.g, col.fg.b) // panels & buttons
+ colors.border = rgb2hex(col.fg.r - mod, col.fg.g - mod, col.fg.b - mod) // borders
+ colors.faint = rgb2hex(col.text.r + mod * 2, col.text.g + mod * 2, col.text.b + mod * 2) // faint text
+ colors.fg = rgb2hex(col.text.r, col.text.g, col.text.b) // text
+ colors.lightFg = rgb2hex(col.text.r - mod, col.text.g - mod, col.text.b - mod) // strong text
- colors['base00'] = rgb2hex(col.bg.r, col.bg.g, col.bg.b) // background
- colors['base01'] = rgb2hex((col.bg.r + col.fg.r) / 2, (col.bg.g + col.fg.g) / 2, (col.bg.b + col.fg.b) / 2) // hilighted bg
- colors['base02'] = rgb2hex(col.fg.r, col.fg.g, col.fg.b) // panels & buttons
- colors['base03'] = rgb2hex(col.fg.r - mod, col.fg.g - mod, col.fg.b - mod) // borders
- colors['base04'] = rgb2hex(col.text.r + mod * 2, col.text.g + mod * 2, col.text.b + mod * 2) // faint text
- colors['base05'] = rgb2hex(col.text.r, col.text.g, col.text.b) // text
- colors['base06'] = rgb2hex(col.text.r - mod, col.text.g - mod, col.text.b - mod) // strong text
colors['base07'] = rgb2hex(col.text.r - mod * 2, col.text.g - mod * 2, col.text.b - mod * 2)
- colors['base08'] = rgb2hex(col.link.r, col.link.g, col.link.b) // links
- colors['base09'] = rgb2hex((col.bg.r + col.text.r) / 2, (col.bg.g + col.text.g) / 2, (col.bg.b + col.text.b) / 2) // icons
-
- const num = 10
- times(num, (n) => {
- const color = colors[`base0${num - 1 - n}`]
- styleSheet.insertRule(`.base0${num - 1 - n} { color: ${color}`, 'index-max')
- styleSheet.insertRule(`.base0${num - 1 - n}-background { background-color: ${color}`, 'index-max')
- })
-
- styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max')
- styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max')
- styleSheet.insertRule(`.base05-border { border-color: ${colors['base05']}`, 'index-max')
- styleSheet.insertRule(`.base03-border { border-color: ${colors['base03']}`, 'index-max')
+
+ colors.link = rgb2hex(col.link.r, col.link.g, col.link.b) // links
+ colors.icon = rgb2hex((col.bg.r + col.text.r) / 2, (col.bg.g + col.text.g) / 2, (col.bg.b + col.text.b) / 2) // icons
+
+ colors.cBlue = col.cBlue && rgb2hex(col.cBlue.r, col.cBlue.g, col.cBlue.b)
+ colors.cRed = col.cRed && rgb2hex(col.cRed.r, col.cRed.g, col.cRed.b)
+ colors.cGreen = col.cGreen && rgb2hex(col.cGreen.r, col.cGreen.g, col.cGreen.b)
+ colors.cOrange = col.cOrange && rgb2hex(col.cOrange.r, col.cOrange.g, col.cOrange.b)
+
+ colors.cAlertRed = col.cRed && `rgba(${col.cRed.r}, ${col.cRed.g}, ${col.cRed.b}, .5)`
+
+ console.log('OMGGGG')
+ console.log(JSON.stringify(col))
+ radii.btnRadius = col.btnRadius
+ radii.panelRadius = col.panelRadius
+ radii.avatarRadius = col.avatarRadius
+ radii.avatarAltRadius = col.avatarAltRadius
+ radii.tooltipRadius = col.tooltipRadius
+ radii.attachmentRadius = col.attachmentRadius
+
+ styleSheet.toString()
+ styleSheet.insertRule(`body { ${Object.entries(colors).filter(([k, v]) => v).map(([k, v]) => `--${k}: ${v}`).join(';')} }`, 'index-max')
+ styleSheet.insertRule(`body { ${Object.entries(radii).filter(([k, v]) => v).map(([k, v]) => `--${k}: ${v}px`).join(';')} }`, 'index-max')
body.style.display = 'initial'
commit('setOption', { name: 'colors', value: colors })
+ commit('setOption', { name: 'radii', value: radii })
commit('setOption', { name: 'customTheme', value: col })
}
@@ -111,12 +120,23 @@ const setPreset = (val, commit) => {
const fgRgb = hex2rgb(theme[2])
const textRgb = hex2rgb(theme[3])
const linkRgb = hex2rgb(theme[4])
+
+ const cRedRgb = hex2rgb(theme[5] || '#FF0000')
+ const cGreenRgb = hex2rgb(theme[6] || '#00FF00')
+ const cBlueRgb = hex2rgb(theme[7] || '#0000FF')
+ const cOrangeRgb = hex2rgb(theme[8] || '#E3FF00')
+
const col = {
bg: bgRgb,
fg: fgRgb,
text: textRgb,
- link: linkRgb
+ link: linkRgb,
+ cRed: cRedRgb,
+ cBlue: cBlueRgb,
+ cGreen: cGreenRgb,
+ cOrange: cOrangeRgb
}
+
// This is a hack, this function is only called during initial load.
// We want to cancel loading the theme from config.json if we're already
// loading a theme from the persisted state.