From aa0564406a95824cc45c815571292716b65806a1 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sat, 31 Mar 2018 21:14:36 +0300 Subject: [PATCH 01/19] getting rid of baseXX, some small fixes. Seems to be usable. --- src/App.scss | 79 ++++- src/App.vue | 8 +- src/_variables.scss | 7 +- src/components/attachment/attachment.vue | 176 +++++----- src/components/chat_panel/chat_panel.vue | 4 +- src/components/conversation/conversation.vue | 2 +- .../delete_button/delete_button.vue | 5 +- .../favorite_button/favorite_button.vue | 6 +- .../instance_specific_panel.vue | 2 +- src/components/login_form/login_form.vue | 62 ++-- src/components/media_upload/media_upload.vue | 4 +- src/components/nav_panel/nav_panel.vue | 81 ++--- src/components/notifications/notifications.js | 2 +- .../notifications/notifications.scss | 27 +- .../notifications/notifications.vue | 8 +- .../post_status_form/post_status_form.vue | 259 +++++++------- src/components/registration/registration.vue | 106 +++--- .../retweet_button/retweet_button.vue | 10 +- src/components/settings/settings.vue | 4 +- src/components/status/status.js | 5 - src/components/status/status.vue | 319 +++++++++--------- .../style_switcher/style_switcher.js | 8 +- .../style_switcher/style_switcher.vue | 14 +- src/components/timeline/timeline.vue | 28 +- src/components/user_card/user_card.vue | 34 +- .../user_card_content/user_card_content.js | 4 +- .../user_card_content/user_card_content.vue | 28 +- src/components/user_finder/user_finder.vue | 8 +- src/components/user_panel/user_panel.vue | 10 +- src/components/user_profile/user_profile.vue | 5 +- .../user_settings/user_settings.vue | 36 +- src/services/style_setter/style_setter.js | 46 +-- 32 files changed, 761 insertions(+), 636 deletions(-) diff --git a/src/App.scss b/src/App.scss index 95a653ce..6e0378db 100644 --- a/src/App.scss +++ b/src/App.scss @@ -33,14 +33,18 @@ body { font-family: sans-serif; font-size: 14px; margin: 0; + color: var(--fg); } a { text-decoration: none; + color: var(--link); } button{ user-select: none; + color: var(--faint); + background-color: var(--btn); border: none; border-radius: 5px; cursor: pointer; @@ -50,6 +54,8 @@ button{ font-size: 14px; font-family: sans-serif; + + &:hover { box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3); } @@ -58,8 +64,72 @@ button{ cursor: not-allowed; opacity: 0.5; } + + &.pressed { + color: var(--faint); + background-color: var(--bg) + } } + +input, textarea, select { + border: none; + border-radius: 5px; + 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: var(--lightBg); + color: var(--lightFg); + font-family: sans-serif; + font-size: 14px; + padding: 5px; + + // TODO: Restyle <select> in a decent way. Needs different markup + // -webkit-appearance:none; + // -moz-appearance:none; + // appearance:none; + + &[type=radio], + &[type=checkbox] { + display: none; + &:checked + label::before { + color: var(--fg); + } + + label::before { + display: inline-block; + content: '✔'; + transition: color 200ms; + width: 1.1em; + height: 1.1em; + border-radius: 2px; + 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: var(--btn); + vertical-align: baseline; + text-align: center; + line-height: 1.1em; + font-size: 1.1em; + box-sizing: border-box; + color: transparent; + overflow: hidden; + } + } +} + +.icon-cancel, +.icon-reply, +.icon-retweet, +.icon-star-empty, +.icon-eye-off, +.icon-binoculars, +.icon-plus-squared, +.icon-spin4 { + color: var(--icon) +} + + .container { display: flex; flex-wrap: wrap; @@ -73,8 +143,8 @@ button{ .item { flex: 1; - line-height: 21px; - height: 21px; + line-height: 25px; + height: 25px; overflow: hidden; .nav-icon { @@ -132,6 +202,8 @@ main-router { flex-direction: column; margin: 0.5em; + background-color: var(--bg); + border-radius: 10px; box-shadow: 1px 1px 4px rgba(0,0,0,.6); overflow: hidden; @@ -151,6 +223,7 @@ main-router { text-align: left; font-size: 1.3em; line-height: 24px; + background-color: var(--btn); } .panel-footer { @@ -173,6 +246,8 @@ main-router { nav { z-index: 1000; + background-color: var(--bg); + color: var(--faint); box-shadow: 0px 0px 4px rgba(0,0,0,.6); } 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..fa7eaec1 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -1,7 +1,6 @@ $main-color: #f58d2c; $main-background: white; $darkened-background: whitesmoke; -$green: #0fa00f; -$blue: #0095ff; -$red: #ff0000; - +$green_: #0fa00f; +$blue_: #0095ff; +$red_: #ff0000; diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index a1b35d91..eeb6e6b8 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,111 @@ <script src="./attachment.js"></script> <style lang="scss"> - .attachments { - display: flex; - flex-wrap: wrap; - margin-right: -0.7em; +.attachments { + display: flex; + flex-wrap: wrap; + margin-right: -0.7em; - .attachment.media-upload-container { + .attachment.media-upload-container { flex: 0 0 auto; max-height: 300px; max-width: 100%; - } - - .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; + .attachment { + flex: 1 0 30%; + margin: 0.5em 0.7em 0.6em 0.0em; + align-self: flex-start; + border-color: var(--border); - // fixes small gap below video - &.video { + border-style: solid; + border-width: 1px; + border-radius: 5px; + overflow: hidden; + + // fixes small gap below video + &.video { line-height: 0; - } + } - &.html { + &.html { flex-basis: 90%; width: 100%; display: flex; - } + } - &.loading { + &.loading { cursor: progress; - } + } - .hider { - position: absolute; - margin: 10px; - padding: 5px; - background: rgba(230,230,230,0.6); - font-weight: bold; - z-index: 4; - } + .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; - } + video { + max-height: 500px; + height: 100%; + width: 100%; + z-index: 0; + } - audio { - width: 100%; - } + audio { + width: 100%; + } - img.media-upload { - margin-bottom: -2px; - max-height: 300px; - max-width: 100%; - } + img.media-upload { + margin-bottom: -2px; + max-height: 300px; + max-width: 100%; + } - .oembed { - width: 100%; - margin-right: 15px; - display: flex; + .oembed { + width: 100%; + margin-right: 15px; + display: flex; - img { - width: 100%; - } + img { + width: 100%; + } - .image { - flex: 1; - img { - border: 0px; - border-radius: 5px; - height: 100%; - object-fit: cover; - } - } + .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; - } - } - } + .text { + flex: 2; + margin: 8px; + word-break: break-all; + h1 { + font-size: 14px; + margin: 0px; + } + } + } - a.image-attachment { - display: flex; - flex: 1; + 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; - } - } - } + 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..69996f76 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> 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..66727e7c 100644 --- a/src/components/delete_button/delete_button.vue +++ b/src/components/delete_button/delete_button.vue @@ -1,7 +1,7 @@ <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> @@ -14,7 +14,8 @@ .icon-cancel,.delete-status { cursor: pointer; &:hover { - color: $red; + color: $red_; + color: var(--red); } } </style> diff --git a/src/components/favorite_button/favorite_button.vue b/src/components/favorite_button/favorite_button.vue index 65d368c7..a6e4c46b 100644 --- a/src/components/favorite_button/favorite_button.vue +++ b/src/components/favorite_button/favorite_button.vue @@ -1,10 +1,10 @@ <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> @@ -17,10 +17,12 @@ animation-duration: 0.6s; &:hover { color: orange; + color: var(--cOrange); } } .favorite-button.icon-star { color: orange; + color: var(--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..553858a3 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='error'>{{authError}}</div> </div> </form> </div> @@ -33,38 +33,36 @@ <style lang="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; - } + input { + border-radius: 5px; + padding: 0.1em 0.2em 0.2em 0.2em; + } - .btn { - min-height: 28px; - width: 10em; - } + .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; - } + .error { + border-radius: 5px; + text-align: center; + background-color: rgba(255, 48, 16, 0.65); + background-color: var(--cRed); + min-height: 28px; + line-height: 28px; + } - .register { - flex: 1 1; - } + .register { + flex: 1 1; + } - .login-bottom { - margin-top: 1.0em; - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - } + .login-bottom { + margin-top: 1.0em; + display: flex; + flex-direction: row; + align-items: center; + 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..8e83e7f1 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="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..2a92586b 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,44 @@ <script src="./nav_panel.js" ></script> <style lang="scss"> - .nav-panel ul { - list-style: none; - margin: 0; - padding: 0; - } +.nav-panel ul { + list-style: none; + margin: 0; + padding: 0; +} - .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 li { + border-bottom: 1px solid; + border-color: var(--border); + background-color: var(--bg); + 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 li:last-child { - border: none; - } +.nav-panel li:last-child { + border: none; +} - .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; - } - } +.nav-panel a { + display: block; + padding: 0.8em 0.85em; + &:hover { + background-color: var(--lightBg); + } + &.router-link-active { + font-weight: bolder; + background-color: var(--lightBg); + &:hover { + text-decoration: underline; + } + } } </style> diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index e9b83bf0..58d82a09 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -27,7 +27,7 @@ const Notifications = { }, hiderStyle () { return { - background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors['base00']} 80%)` + background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors.bg} 80%)` } } }, diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss index 3c500b36..a739d52e 100644 --- a/src/components/notifications/notifications.scss +++ b/src/components/notifications/notifications.scss @@ -4,21 +4,33 @@ // a bit of a hack to allow scrolling below notifications padding-bottom: 15em; + .panel { + background: var(--bg) + } + + .panel-body { + border-color: var(--border) + } + .panel-heading { // force the text to stay centered, while keeping // the button in the right side of the panel heading position: relative; + background: var(--btn); + color: var(--faint); .read-button { position: absolute; right: 0.7em; height: 1.8em; line-height: 100%; + background-color: var(--btn); + color: var(--faint); } } .unseen-count { display: inline-block; - background-color: rgba(255, 16, 8, 0.8); + background-color: var(--cRed); text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5); min-width: 1.3em; border-radius: 1.3em; @@ -27,6 +39,7 @@ font-size: 0.9em; text-align: center; line-height: 1.3em; + padding: 1px; } .notification { @@ -48,19 +61,23 @@ overflow: hidden; .icon-retweet.lit { - color: $green; + color: $green_; + color: var(--cGreen); } .icon-user-plus.lit { - color: $blue; + color: $blue_; + color: var(--cBlue); } .icon-reply.lit { - color: $blue; + color: $blue_; + color: var(--cBlue); } .icon-star.lit { color: orange; + color: var(--cOrange); } .status-content { @@ -134,7 +151,7 @@ } .unseen { - border-left: 4px solid rgba(255, 16, 8, 0.75); + border-left: 4px solid var(--cRed); padding-left: 6px; } } diff --git a/src/components/notifications/notifications.vue b/src/components/notifications/notifications.vue index 8e6f12b2..77e29426 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"> diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 4871bcae..3f268ff5 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"> 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> @@ -51,146 +51,149 @@ <style lang="scss"> - .tribute-container { - ul { - padding: 0px; - li { - display: flex; - align-items: center; - } - } - img { - padding: 3px; - width: 16px; - height: 16px; - border-radius: 50%; - } - } +.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; +.post-status-form, .login { + .form-bottom { + display: flex; + padding: 0.5em; + height: 32px; - button { - width: 10em; - } + 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; - } + p { + margin: 0.35em; + padding: 0.35em; + display: flex; + } + } + .error { + border-radius: 5px; + text-align: center; + background-color: rgba(255, 48, 16, 0.65); + background-color: var(--cRed); + padding: 0.25em; + margin: 0.35em; + display: flex; + } - .attachments { - padding: 0 0.5em; + .attachments { + padding: 0 0.5em; - .attachment { - position: relative; - margin: 0.5em 0.8em 0.2em 0; - } + .attachment { + position: relative; + border: var(--border); + margin: 0.5em 0.8em 0.2em 0; + } - i { + i { position: absolute; margin: 10px; padding: 5px; background: rgba(230,230,230,0.6); border-radius: 5px; font-weight: bold; - } - } + } + } - .btn { - cursor: pointer; - } + .btn { + cursor: pointer; + } - .btn[disabled] { - cursor: not-allowed; - } + .btn[disabled] { + cursor: not-allowed; + } - .icon-cancel { - cursor: pointer; - } - form { - display: flex; - flex-direction: column; - padding: 0.6em; - } + .icon-cancel { + cursor: pointer; + } - .form-group { - display: flex; - flex-direction: column; - padding: 0.3em 0.5em 0.6em; - line-height:24px; - } + form { + display: flex; + flex-direction: column; + padding: 0.6em; + } - form textarea { - border: solid; - border-width: 1px; - border-color: inherit; - border-radius: 5px; - line-height:16px; - padding: 5px; - resize: none; - overflow: hidden; - } + .form-group { + display: flex; + flex-direction: column; + padding: 0.3em 0.5em 0.6em; + line-height:24px; + } - form textarea:focus { - min-height: 48px; - } + form textarea { + border-radius: 5px; + line-height:16px; + padding: 5px; + resize: none; + overflow: hidden; + } - .btn { - cursor: pointer; - } + form textarea:focus { + min-height: 48px; + } - .btn[disabled] { - cursor: not-allowed; - } + .btn { + cursor: pointer; + } - .icon-cancel { - cursor: pointer; - z-index: 4; - } + .btn[disabled] { + cursor: not-allowed; + } - .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%; - } + .icon-cancel { + cursor: pointer; + z-index: 4; + } - .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; - } - } - } + .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%; + background: var(--btn); + color: var(--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: 2px; + object-fit: contain; + } + span { + line-height: 24px; + margin: 0 0.1em 0 0.2em; + } + small { + margin-left: .5em; + color: var(--faint); + } + } +} </style> diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index adc751a3..786a59e3 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='error'>{{error}}</div> </div> </form> </div> @@ -57,63 +57,60 @@ <style lang="scss"> .registration-form { - display: flex; - flex-direction: column; - margin: 0.6em; - - .container { - display: flex; - flex-direction: row; - //margin-bottom: 1em; - } - - .terms-of-service { - flex: 0 1 50%; - margin: 0.8em; - } - - .text-fields { - margin-top: 0.6em; - flex: 1 0; display: flex; flex-direction: column; - } + margin: 0.6em; - .form-group { - display: flex; - flex-direction: column; - padding: 0.3em 0.0em 0.3em; - line-height:24px; - } + .container { + display: flex; + flex-direction: row; + //margin-bottom: 1em; + } - form textarea { - border: solid; - border-width: 1px; - border-color: silver; - border-radius: 5px; - line-height:16px; - padding: 5px; - resize: vertical; - } + .terms-of-service { + flex: 0 1 50%; + margin: 0.8em; + } - input { - border-width: 1px; - border-style: solid; - border-color: silver; - border-radius: 5px; - padding: 0.1em 0.2em 0.2em 0.2em; - } + .text-fields { + margin-top: 0.6em; + flex: 1 0; + display: flex; + flex-direction: column; + } - .captcha { - max-width: 350px; - margin-bottom: 0.4em; - } + .form-group { + display: flex; + flex-direction: column; + padding: 0.3em 0.0em 0.3em; + line-height:24px; + } - .btn { - //align-self: flex-start; - //width: 10em; - margin-top: 0.6em; - height: 28px; + form textarea { + border: solid; + border-width: 1px; + border-color: silver; + border-radius: 5px; + line-height:16px; + padding: 5px; + resize: vertical; + } + + input { + border-radius: 5px; + padding: 0.1em 0.2em 0.2em 0.2em; + } + + .captcha { + max-width: 350px; + margin-bottom: 0.4em; + } + + .btn { + //align-self: flex-start; + //width: 10em; + margin-top: 0.6em; + height: 28px; } .error { @@ -121,6 +118,7 @@ text-align: center; margin: 0.5em 0.6em 0; background-color: rgba(255, 48, 16, 0.65); + background-color: var(--cRed); 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..7c75f3bc 100644 --- a/src/components/retweet_button/retweet_button.vue +++ b/src/components/retweet_button/retweet_button.vue @@ -1,10 +1,10 @@ <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> @@ -17,10 +17,12 @@ cursor: pointer; animation-duration: 0.6s; &:hover { - color: $green; + color: $green_; + color: var(--cGreen); } } .icon-retweet.retweeted { - color: $green; + color: $green_; + color: var(--cGreen); } </style> diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index 5aa7596a..b842c9e9 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"> 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..8410aeba 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,18 +128,19 @@ <script src="./status.js" ></script> <style lang="scss"> - @import '../../_variables.scss'; +@import '../../_variables.scss'; - status-text-container { +status-text-container { display: block; - } +} - .status-preview { +.status-preview { position: absolute; max-width: 34em; padding: 0.5em; display: flex; - border-color: inherit; + background-color: var(--bg); + border-color: var(--border); border-style: solid; border-width: 1px; border-radius: 4px; @@ -149,182 +150,198 @@ z-index: 50; .avatar { - flex-shrink: 0; - width: 32px; - height: 32px; - border-radius: 50%; + flex-shrink: 0; + width: 32px; + height: 32px; + border-radius: 50%; } - .text { - h4 { - margin-bottom: 0.4em; - small { - font-weight: lighter; - } - } - padding: 0 0.5em 0.5em 0.5em; - } - } - .status-preview-loading { + .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; +.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: var(--bg); + border-color: var(--border); - .timeline & { + &_focused { + background-color: var(--lightBg); + } + + .usercard { + border-color: var(--border); + } + + .timeline & { border-bottom-width: 1px; border-bottom-style: solid; - } + } - .notify { - .avatar { - border-width: 3px; - border-style: solid; - } - } + .notify { + .avatar { + border-width: 3px; + border-style: solid; + } + } - .media-body { - flex: 1; - padding-left: 0.5em; - } + .media-body { + flex: 1; + padding-left: 0.5em; + } - .user-content { + .user-content { - min-height: 52px; - padding-top: 1px; - } + min-height: 52px; + padding-top: 1px; + } - .media-heading { - display: flex; - min-height: 1.4em; - margin-bottom: 0.3em; + .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%; - } - } + 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 { + .source_url { - } + } - .expand { - margin-right: -0.3em; - } + .expand { + margin-right: -0.3em; + } - a { - display: inline-block; - word-break: break-all; - } + a { + display: inline-block; + word-break: break-all; + } - .status-content { - margin: 3px 15px 4px 0; - max-height: 400px; - overflow-y: auto; - overflow-x: hidden; + .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; - } + 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; - } - } + blockquote { + margin: 0.2em 0 0.2em 2em; + font-style: italic; + } + } - p { - margin: 0; - margin-top: 0.2em; - margin-bottom: 0.5em; - } + p { + margin: 0; + margin-top: 0.2em; + margin-bottom: 0.5em; + } - .media-left { + .media-left { margin: 0.2em 0.3em 0 0; .avatar { - float: right; + float: right; + border-radius: 5px; } - } + } - .retweet-info { - padding: 0.7em 0 0 0.6em; + .retweet-info { + padding: 0.7em 0 0 0.6em; - .media-left { - display: flex; + .media-left { + display: flex; - i { - align-self: center; - text-align: right; - flex: 1; - padding-right: 0.3em; - } - } - } - } + 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-fadein { + animation-duration: 0.5s; + animation-name: fadein; +} - .status-conversation { - border-left-style: solid; - } +@keyframes fadein { + from { + opacity: 0; + } + to { + opacity: 1; + } +} - .status-actions { - padding-top: 0.15em; - width: 100%; - display: flex; +.greentext { + color: green; +} - div, favorite-button { +.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:hover { + color: $blue_; + color: var(--cBlue); } .icon-reply.icon-reply-active { - color: $blue; + color: $blue_; + color: var(--cBlue); } .status .avatar { @@ -373,7 +390,7 @@ .status { padding: 0.4em 0.7em 0.45em 0.7em; - border-left: 4px rgba(255, 48, 16, 0.65); + border-left: 4px var(--cRed); border-left-style: inherit; } diff --git a/src/components/style_switcher/style_switcher.js b/src/components/style_switcher/style_switcher.js index a762f914..6e414338 100644 --- a/src/components/style_switcher/style_switcher.js +++ b/src/components/style_switcher/style_switcher.js @@ -21,10 +21,10 @@ 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.fgColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg) + this.textColorLocal = rgbstr2hex(this.$store.state.config.colors.fg) + this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors.link) }, methods: { setCustomTheme () { diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index 31bf546d..6c0cc6e7 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -7,22 +7,22 @@ <p>{{$t('settings.theme_help')}}</p> <div class="color-container"> <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> + <label for="fgcolor" class="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"> </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> @@ -40,7 +40,7 @@ </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> @@ -63,6 +63,10 @@ flex: 1 1 0; align-items: baseline; margin: 5px 6px 5px 0; + + label { + color: var(--faint); + } } .theme-color-cl, .theme-color-in { diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index d6ecfd2f..b6a5ab14 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> @@ -79,13 +79,16 @@ font-size: 14px; min-width: 6em; border-radius: 5px; + background-color: transparent; + color: var(--faint); 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); + color: var(--lightFg); + background-color: var(--cRed); } } @@ -96,6 +99,7 @@ border-width: 1px 0 0 0; border-style: solid; border-radius: 0 0 10px 10px; + border-color: var(--border); padding: 10px; z-index: 1; } diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index dd14d1b4..0561fa95 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> @@ -21,24 +21,24 @@ <script src="./user_card.js"></script> <style lang="scss"> - .name-and-screen-name { +.name-and-screen-name { margin-left: 0.7em; margin-top:0.0em; margin-right: 2em; text-align: left; width: 100%; - } +} - .follows-you { +.follows-you { margin-left: 2em; float: right; - } +} - .follows { +.follows { - } +} - .card { +.card { display: flex; flex: 1 0; padding-top: 0.6em; @@ -47,18 +47,17 @@ padding-left: 1em; border-bottom: 1px solid; margin: 0; - border-bottom-color: inherit; - + border-bottom-color: var(--border); .avatar { - margin-top: 0.2em; - width:32px; - height: 32px; - border-radius: 50%; + margin-top: 0.2em; + width:32px; + height: 32px; + border-radius: 50%; } - } +} - .usercard { +.usercard { width: fill-available; margin: 0.2em 0 0.7em 0; border-radius: 10px; @@ -67,6 +66,9 @@ border-width: 1px; overflow: hidden; + .panel-heading { + background: transparent; + } p { margin-bottom: 0; } diff --git a/src/components/user_card_content/user_card_content.js b/src/components/user_card_content/user_card_content.js index 8c9ccda1..b7f156d2 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) @@ -17,7 +17,7 @@ export default { }, bodyStyle () { return { - background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors['base00']} 80%)` + background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors.bg} 80%)` } }, isOtherUser () { diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index 71a879df..e3c9b5f9 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -18,30 +18,30 @@ </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 +50,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> @@ -73,19 +73,19 @@ <div class="panel-body profile-panel-body" :style="bodyStyle"> <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> diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index 3c69e3b4..66b2fc87 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="finder-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> @@ -25,9 +25,6 @@ } .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; @@ -38,5 +35,6 @@ margin: 0.35em; border-radius: 5px; padding: 0.25em; + color: var(--faint); } </style> diff --git a/src/components/user_panel/user_panel.vue b/src/components/user_panel/user_panel.vue index 1a5e20fb..7da767b7 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 { + .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..14d8cfe9 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"/> @@ -16,6 +16,9 @@ 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..fecc67b8 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> @@ -76,8 +76,6 @@ <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; } @@ -85,11 +83,15 @@ 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; + border-radius: 5px; + } + .banner { max-width: 400px; border-radius: 5px; diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 6863bd0a..1bd8df51 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -45,12 +45,10 @@ 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') + // styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max') + // styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max') body.style.display = 'initial' } @@ -74,28 +72,30 @@ const setColors = (col, commit) => { mod = mod * -1 } - 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.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['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 + 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 = 'blue' + colors.cRed = 'red' + colors.cGreen = 'green' + colors.cYellow = 'yellow' + colors.cOrange = 'orange' - 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') + const colorVars = Object.entries(colors).map(([k, v]) => { + return `--${k}: ${v}` }) + console.log(colorVars) - 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') + styleSheet.insertRule(`body { ${colorVars.join(';')} }`, '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' commit('setOption', { name: 'colors', value: colors }) From acdb5e5c7a2dac1908a5daafd94c31bc116a1799 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 1 Apr 2018 05:28:20 +0300 Subject: [PATCH 02/19] cleanup. added fallback mechanism for IE11 and unsupported browsers. --- src/App.scss | 290 +++++++++--------- src/_variables.scss | 20 +- src/components/attachment/attachment.vue | 5 +- .../delete_button/delete_button.vue | 4 +- .../favorite_button/favorite_button.vue | 30 +- src/components/login_form/login_form.vue | 3 +- src/components/nav_panel/nav_panel.vue | 20 +- src/components/notifications/notifications.js | 5 - .../notifications/notifications.scss | 43 ++- .../notifications/notifications.vue | 4 +- .../post_status_form/post_status_form.vue | 24 +- src/components/registration/registration.vue | 28 +- .../retweet_button/retweet_button.vue | 28 +- src/components/settings/settings.vue | 1 + src/components/status/status.vue | 169 +++++----- .../style_switcher/style_switcher.vue | 11 +- src/components/timeline/timeline.vue | 71 +++-- src/components/user_card/user_card.vue | 14 +- .../user_card_content/user_card_content.js | 5 - .../user_card_content/user_card_content.vue | 22 +- src/components/user_finder/user_finder.vue | 36 +-- src/services/style_setter/style_setter.js | 16 +- 22 files changed, 464 insertions(+), 385 deletions(-) diff --git a/src/App.scss b/src/App.scss index 6e0378db..ec80626b 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,49 +27,53 @@ h4 { } .text-center { - text-align: center; + text-align: center; } body { - font-family: sans-serif; - font-size: 14px; - margin: 0; - color: var(--fg); + font-family: sans-serif; + font-size: 14px; + margin: 0; + color: $fallback--fg; + color: var(--fg, $fallback--fg); } a { - text-decoration: none; - color: var(--link); + text-decoration: none; + color: $fallback--link; + color: var(--link, $fallback--link); } button{ - user-select: none; - color: var(--faint); - background-color: var(--btn); - 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; + 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: 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); + } + &:disabled { + cursor: not-allowed; + opacity: 0.5; + } - &:hover { - box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3); - } - - &:disabled { - cursor: not-allowed; - opacity: 0.5; - } - - &.pressed { - color: var(--faint); - background-color: var(--bg) - } + &.pressed { + color: $fallback--faint; + color: var(--faint, $fallback--faint); + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg) + } } @@ -78,11 +83,13 @@ input, textarea, select { 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: var(--lightBg); - color: var(--lightFg); + 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: 5px; + padding: 8px 7px 4px; // TODO: Restyle <select> in a decent way. Needs different markup // -webkit-appearance:none; @@ -93,7 +100,8 @@ input, textarea, select { &[type=checkbox] { display: none; &:checked + label::before { - color: var(--fg); + color: $fallback--fg; + color: var(--fg, $fallback--fg); } + label::before { display: inline-block; @@ -106,7 +114,8 @@ input, textarea, select { border-top: 1px solid rgba(0, 0, 0, 0.2); box-shadow: 0px 0px 2px black inset; margin-right: .5em; - background-color: var(--btn); + background-color: $fallback--btn; + background-color: var(--btn, $fallback--btn); vertical-align: baseline; text-align: center; line-height: 1.1em; @@ -126,129 +135,136 @@ input, textarea, select { .icon-binoculars, .icon-plus-squared, .icon-spin4 { - color: var(--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: 25px; - height: 25px; - overflow: hidden; + flex: 1; + line-height: 25px; + height: 25px; + 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%; - align-items: center; - position: fixed; - height: 50px; + width: 100%; + align-items: center; + position: fixed; + height: 50px; - .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; - } + .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; + } } 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; - background-color: var(--bg); + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg); - border-radius: 10px; - box-shadow: 1px 1px 4px rgba(0,0,0,.6); - overflow: hidden; + border-radius: 10px; + border-radius: $fallback--panelRadius; + border-radius: var(--panelRadius, 10px); + 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; - background-color: var(--btn); + border-radius: 10px 10px 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 10px 10px; } .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; - background-color: var(--bg); - color: var(--faint); - 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 { @@ -259,9 +275,9 @@ nav { } .main { - flex-basis: 60%; - flex-grow: 1; - flex-shrink: 1; + flex-basis: 60%; + flex-grow: 1; + flex-shrink: 1; } .sidebar-bounds { @@ -276,20 +292,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) { @@ -324,24 +340,24 @@ nav { } @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/_variables.scss b/src/_variables.scss index fa7eaec1..eccc0aab 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -1,6 +1,20 @@ $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--cYellow: yellow; + +$fallback--panelRadius: 10px; diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index eeb6e6b8..e3b1e4d4 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -30,6 +30,8 @@ <script src="./attachment.js"></script> <style lang="scss"> +@import '../../_variables.scss'; + .attachments { display: flex; flex-wrap: wrap; @@ -45,7 +47,8 @@ flex: 1 0 30%; margin: 0.5em 0.7em 0.6em 0.0em; align-self: flex-start; - border-color: var(--border); + border-color: $fallback--border; + border-color: var(--border, $fallback--border); border-style: solid; border-width: 1px; diff --git a/src/components/delete_button/delete_button.vue b/src/components/delete_button/delete_button.vue index 66727e7c..9966d85e 100644 --- a/src/components/delete_button/delete_button.vue +++ b/src/components/delete_button/delete_button.vue @@ -14,8 +14,8 @@ .icon-cancel,.delete-status { cursor: pointer; &:hover { - color: $red_; - color: var(--red); + 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 a6e4c46b..f25c589a 100644 --- a/src/components/favorite_button/favorite_button.vue +++ b/src/components/favorite_button/favorite_button.vue @@ -11,18 +11,22 @@ <script src="./favorite_button.js" ></script> -<style lang='scss'> - .fav-active { - cursor: pointer; - animation-duration: 0.6s; - &:hover { - color: orange; - color: var(--cOrange); - } - } - .favorite-button.icon-star { - color: orange; - color: var(--cOrange); - } +<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/login_form/login_form.vue b/src/components/login_form/login_form.vue index 553858a3..82000d6b 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -31,6 +31,7 @@ <script src="./login_form.js" ></script> <style lang="scss"> +@import '../../_variables.scss'; .login-form { input { @@ -47,7 +48,7 @@ border-radius: 5px; text-align: center; background-color: rgba(255, 48, 16, 0.65); - background-color: var(--cRed); + background-color: $fallback--cRed; min-height: 28px; line-height: 28px; } diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue index 2a92586b..43b4c3dc 100644 --- a/src/components/nav_panel/nav_panel.vue +++ b/src/components/nav_panel/nav_panel.vue @@ -30,6 +30,8 @@ <script src="./nav_panel.js" ></script> <style lang="scss"> +@import '../../_variables.scss'; + .nav-panel ul { list-style: none; margin: 0; @@ -38,13 +40,17 @@ .nav-panel li { border-bottom: 1px solid; - border-color: var(--border); - background-color: var(--bg); + border-color: $fallback--border; + border-color: var(--border, $fallback--border); + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg); 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; @@ -58,16 +64,20 @@ .nav-panel a { display: block; padding: 0.8em 0.85em; + &:hover { - background-color: var(--lightBg); + background-color: $fallback--lightBg; + background-color: var(--lightBg, $fallback--lightBg); } + &.router-link-active { font-weight: bolder; - background-color: var(--lightBg); + 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 58d82a09..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.bg} 80%)` - } } }, components: { diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss index a739d52e..5af2454e 100644 --- a/src/components/notifications/notifications.scss +++ b/src/components/notifications/notifications.scss @@ -5,32 +5,39 @@ padding-bottom: 15em; .panel { - background: var(--bg) + background: $fallback--bg; + background: var(--bg, $fallback--bg) } .panel-body { - border-color: var(--border) + 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: var(--btn); - color: var(--faint); + 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: var(--btn); - color: var(--faint); + 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: var(--cRed); + 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; @@ -52,6 +59,10 @@ 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%) + } .text { min-width: 0px; @@ -61,23 +72,24 @@ overflow: hidden; .icon-retweet.lit { - color: $green_; - color: var(--cGreen); + color: $fallback--cGreen; + color: var(--cGreen, $fallback--cGreen); } .icon-user-plus.lit { - color: $blue_; - color: var(--cBlue); + color: $fallback--cBlue; + color: var(--cBlue, $fallback--cBlue); } .icon-reply.lit { - color: $blue_; - color: var(--cBlue); + color: $fallback--cBlue; + color: var(--cBlue, $fallback--cBlue); } .icon-star.lit { color: orange; - color: var(--cOrange); + color: $fallback--cOrange; + color: var(--cOrange, $fallback--cOrange); } .status-content { @@ -151,7 +163,8 @@ } .unseen { - border-left: 4px solid var(--cRed); + 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 77e29426..17bae71e 100644 --- a/src/components/notifications/notifications.vue +++ b/src/components/notifications/notifications.vue @@ -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 3f268ff5..d57418fb 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -50,6 +50,7 @@ <script src="./post_status_form.js"></script> <style lang="scss"> +@import '../../_variables.scss'; .tribute-container { ul { @@ -83,11 +84,13 @@ display: flex; } } + .error { border-radius: 5px; text-align: center; background-color: rgba(255, 48, 16, 0.65); - background-color: var(--cRed); + background-color: $fallback--cRed; + background-color: var(--cRed, $fallback--cRed); padding: 0.25em; margin: 0.35em; display: flex; @@ -98,7 +101,8 @@ .attachment { position: relative; - border: var(--border); + border: $fallback--border; + border: var(--border, $fallback--border); margin: 0.5em 0.8em 0.2em 0; } @@ -139,11 +143,11 @@ } form textarea { - border-radius: 5px; line-height:16px; - padding: 5px; resize: none; overflow: hidden; + transition: min-height 200ms; + min-height: 1px; } form textarea:focus { @@ -170,8 +174,10 @@ z-index: 1; box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5); min-width: 75%; - background: var(--btn); - color: var(--lightFg); + background: $fallback--btn; + background: var(--btn, $fallback--btn); + color: $fallback--lightFg; + color: var(--lightFg, $fallback--lightFg); } .autocomplete { @@ -179,19 +185,23 @@ 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 { margin-left: .5em; - color: var(--faint); + color: $fallback--faint; + color: var(--faint, $fallback--faint); } } } diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 786a59e3..0966645d 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -55,6 +55,7 @@ <script src="./registration.js"></script> <style lang="scss"> +@import '../../_variables.scss'; .registration-form { display: flex; @@ -87,18 +88,13 @@ } form textarea { - border: solid; - border-width: 1px; - border-color: silver; border-radius: 5px; line-height:16px; - padding: 5px; resize: vertical; } input { border-radius: 5px; - padding: 0.1em 0.2em 0.2em 0.2em; } .captcha { @@ -111,21 +107,21 @@ //width: 10em; margin-top: 0.6em; height: 28px; - } + } - .error { - border-radius: 5px; - text-align: center; - margin: 0.5em 0.6em 0; - background-color: rgba(255, 48, 16, 0.65); - background-color: var(--cRed); - min-height: 28px; - line-height: 28px; - } + .error { + border-radius: 5px; + text-align: center; + margin: 0.5em 0.6em 0; + background-color: $fallback--cRed; + background-color: var(--cRed, $fallback--cRed); + min-height: 28px; + line-height: 28px; + } } @media all and (max-width: 959px) { - .registration-form .container { + .registration-form .container { flex-direction: column-reverse; } } diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue index 7c75f3bc..a21942c3 100644 --- a/src/components/retweet_button/retweet_button.vue +++ b/src/components/retweet_button/retweet_button.vue @@ -11,18 +11,18 @@ <script src="./retweet_button.js" ></script> -<style lang='scss'> - @import '../../_variables.scss'; - .rt-active { - cursor: pointer; - animation-duration: 0.6s; - &:hover { - color: $green_; - color: var(--cGreen); - } - } - .icon-retweet.retweeted { - color: $green_; - color: var(--cGreen); - } +<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 b842c9e9..98f70f7b 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -56,6 +56,7 @@ <style lang="scss"> .setting-item { margin: 1em 1em 1.4em; + textarea { width: 100%; height: 100px; diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 8410aeba..80f6a315 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -139,8 +139,10 @@ status-text-container { max-width: 34em; padding: 0.5em; display: flex; - background-color: var(--bg); - border-color: var(--border); + 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: 4px; @@ -181,15 +183,19 @@ status-text-container { word-break: break-word; border-left-width: 0px; line-height: 18px; - background-color: var(--bg); - border-color: var(--border); + background-color: $fallback--bg; + background-color: var(--bg, $fallback--bg); + border-color: $fallback--border; + border-color: var(--border, $fallback--border); &_focused { - background-color: var(--lightBg); + background-color: $fallback--lightBg; + background-color: var(--lightBg, $fallback--lightBg); } .usercard { - border-color: var(--border); + border-color: $fallback--border; + border-color: var(--border, $fallback--border); } .timeline & { @@ -211,7 +217,6 @@ status-text-container { .user-content { - min-height: 52px; padding-top: 1px; } @@ -224,14 +229,17 @@ status-text-container { small { font-weight: lighter; } + h4 { margin-right: 0.4em; } + .name-and-links { flex: 1 0; display: flex; flex-wrap: wrap; } + .replies { flex-basis: 100%; } @@ -310,6 +318,7 @@ status-text-container { from { opacity: 0; } + to { opacity: 1; } @@ -335,14 +344,14 @@ status-text-container { } .icon-reply:hover { - color: $blue_; - color: var(--cBlue); - } + color: $fallback--cBlue; + color: var(--cBlue, $fallback--cBlue); +} - .icon-reply.icon-reply-active { - color: $blue_; - color: var(--cBlue); - } +.icon-reply.icon-reply-active { + color: $fallback--cBlue; + color: var(--cBlue, $fallback--cBlue); +} .status .avatar { width: 48px; @@ -359,13 +368,13 @@ status-text-container { display: none; } - &.retweeted { - width: 40px; - height: 40px; - margin-right: 8px; - margin-bottom: 8px; - } - } + &.retweeted { + width: 40px; + height: 40px; + margin-right: 8px; + margin-bottom: 8px; + } +} .status:hover .animated.avatar { canvas { @@ -376,79 +385,81 @@ status-text-container { } } - .status .avatar-retweeter { - width: 24px; - height: 24px; - position: absolute; - margin-left: 24px; - margin-top: 24px; - } +.status img.avatar-retweeter { + width: 24px; + height: 24px; + position: absolute; + margin-left: 24px; + margin-top: 24px; +} - .status.compact .avatar { - width: 32px; - } +.status.compact .avatar { + width: 32px; +} - .status { - padding: 0.4em 0.7em 0.45em 0.7em; - border-left: 4px var(--cRed); - border-left-style: inherit; - } +.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 { +.status-conversation:last-child { border-bottom: none; - } +} - .timeline .panel.timeline { +.timeline .panel.timeline { border-radius: 10px; overflow: hidden; - } +} - .muted { - padding: 0.1em 0.4em 0.1em 0.8em; - button { - margin-left: auto; - } +.muted { + padding: 0.1em 0.4em 0.1em 0.8em; + button { + margin-left: auto; + } - .muteWords { - margin-left: 10px; - } - } + .muteWords { + margin-left: 10px; + } +} - a.unmute { - display: block; - margin-left: auto; - } +a.unmute { + display: block; + margin-left: auto; +} - .reply-left { - flex: 0; - min-width: 48px; - } +.reply-left { + flex: 0; + min-width: 48px; +} - .reply-body { - flex: 1; - } +.reply-body { + flex: 1; +} - @media all and (max-width: 960px) { - .status-el { - .name-and-links { - margin-left: -0.25em; - } - } - .status { - max-width: 100%; - } +@media all and (max-width: 960px) { + .status-el { + .name-and-links { + margin-left: -0.25em; + } + } - .status .avatar { - width: 40px; - height: 40px; + .status { + max-width: 100%; + } - &.retweeted { - width: 34px; - height: 34px; - margin-right: 8px; - margin-bottom: 8px; - } - } + .status .avatar { + width: 40px; + height: 40px; + + &.retweeted { + width: 34px; + height: 34px; + margin-right: 8px; + margin-bottom: 8px; + } + } .status .avatar-retweeter { width: 22px; diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index 6c0cc6e7..e6a00275 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -47,6 +47,7 @@ <script src="./style_switcher.js"></script> <style lang="scss"> +@import '../../_variables.scss'; .style-switcher { margin-right: 1em; } @@ -65,14 +66,20 @@ margin: 5px 6px 5px 0; label { - color: var(--faint); + color: var(--faint, $fallback--faint); } } + +.theme-color-cl { + border: 0; + box-shadow: none; + background: transparent; +} + .theme-color-cl, .theme-color-in { margin-left: 4px; border-radius: 2px; - border: 0; } .theme-color-in { diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index b6a5ab14..c3cc939a 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -52,54 +52,63 @@ <script src="./timeline.js"></script> <style lang="scss"> +@import '../../_variables.scss'; - .timeline { +.timeline { .timeline-heading { - position: relative; - display: flex; + position: relative; + display: flex; } + .title { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 70%; } + .loadmore-button { - position: absolute; - right: 0.6em; - font-size: 14px; + position: absolute; + right: 0.6em; + font-size: 14px; - min-width: 6em; - height: 1.8em; - line-height: 100%; + 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; - background-color: transparent; - color: var(--faint); - font-family: sans-serif; - text-align: center; - padding: 0 0.5em 0 0.5em; - opacity: 0.8; + position: absolute; + right: 0.6em; + font-size: 14px; + min-width: 6em; + border-radius: 5px; + 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; } - .error { - color: var(--lightFg); - background-color: var(--cRed); - } - } - .new-status-notification { + .error { + color: $fallback--lightFg; + color: var(--lightFg, $fallback--lightFg); + background-color: $fallback--cRed; + background-color: var(--cRed, $fallback--cRed); + } +} + +.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; - border-color: var(--border); + border-color: $fallback--border; + border-color: var(--border, $fallback--border); padding: 10px; z-index: 1; } diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 0561fa95..6487d2a6 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -21,6 +21,8 @@ <script src="./user_card.js"></script> <style lang="scss"> +@import '../../_variables.scss'; + .name-and-screen-name { margin-left: 0.7em; margin-top:0.0em; @@ -34,10 +36,6 @@ float: right; } -.follows { - -} - .card { display: flex; flex: 1 0; @@ -47,7 +45,8 @@ padding-left: 1em; border-bottom: 1px solid; margin: 0; - border-bottom-color: var(--border); + border-bottom-color: $fallback--border; + border-bottom-color: var(--border, $fallback--border); .avatar { margin-top: 0.2em; @@ -69,8 +68,9 @@ .panel-heading { background: transparent; } + p { - margin-bottom: 0; + 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 b7f156d2..2e448f1c 100644 --- a/src/components/user_card_content/user_card_content.js +++ b/src/components/user_card_content/user_card_content.js @@ -15,11 +15,6 @@ export default { } } }, - bodyStyle () { - return { - background: `linear-gradient(to bottom, rgba(0, 0, 0, 0), ${this.$store.state.config.colors.bg} 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 e3c9b5f9..ca3da632 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -70,7 +70,7 @@ </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>{{ $t('user_card.statuses') }}</h5></a> @@ -99,19 +99,21 @@ @import '../../_variables.scss'; .profile-panel-background { - background-size: cover; - border-radius: 10px; + background-size: cover; + border-radius: 10px; - .panel-heading { - padding: 0.6em 0em; - text-align: center; - } + .panel-heading { + padding: 0.6em 0em; + text-align: center; + } } .profile-panel-body { - top: -0em; - padding-top: 4em; - word-wrap: break-word; + 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 { diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index 66b2fc87..e4453fe7 100644 --- a/src/components/user_finder/user_finder.vue +++ b/src/components/user_finder/user_finder.vue @@ -16,25 +16,25 @@ <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: 21px; + max-width: 100%; +} - .user-finder-input { - border-radius: 5px; - max-width: 80%; - padding: 0.1em 0.2em 0.2em 0.2em; - } +.user-finder-input { + border-radius: 5px; + max-width: 80%; + padding: 0.1em 0.2em 0.2em 0.2em; +} - .finder-error { - background-color: rgba(255, 48, 16, 0.65); - margin: 0.35em; - border-radius: 5px; - padding: 0.25em; - color: var(--faint); - } +.finder-error { + background-color: rgba(255, 48, 16, 0.65); + margin: 0.35em; + border-radius: 5px; + padding: 0.25em; + color: $fallback--faint; + color: var(--faint, $fallback--faint); +} </style> diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 1bd8df51..bedadb12 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -47,8 +47,6 @@ const setStyle = (href, commit) => { head.appendChild(styleEl) // const styleSheet = styleEl.sheet - // styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max') - // styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max') body.style.display = 'initial' } @@ -82,20 +80,14 @@ const setColors = (col, commit) => { colors['base07'] = rgb2hex(col.text.r - mod * 2, col.text.g - mod * 2, col.text.b - mod * 2) 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 = 'blue' + colors.cBlue = '#0095ff' colors.cRed = 'red' - colors.cGreen = 'green' + colors.cGreen = '#0fa00f' colors.cYellow = 'yellow' colors.cOrange = 'orange' - const colorVars = Object.entries(colors).map(([k, v]) => { - return `--${k}: ${v}` - }) - console.log(colorVars) - - styleSheet.insertRule(`body { ${colorVars.join(';')} }`, 'index-max') - // styleSheet.insertRule(`.base05-border { border-color: ${colors['base05']}`, 'index-max') - // styleSheet.insertRule(`.base03-border { border-color: ${colors['base03']}`, 'index-max') + styleSheet.toString() + styleSheet.insertRule(`body { ${Object.entries(colors).map(([k, v]) => `--${k}: ${v}`).join(';')} }`, 'index-max') body.style.display = 'initial' commit('setOption', { name: 'colors', value: colors }) From 33b1d85921e326e0d81c4bf1a6fa02fec2cbbd5c Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 1 Apr 2018 22:07:25 +0300 Subject: [PATCH 03/19] border-radii moved to variables, made rgbo colors use theme data, customizable from settings screen. --- src/App.scss | 36 ++--- src/_variables.scss | 7 +- src/components/attachment/attachment.vue | 6 +- src/components/chat_panel/chat_panel.vue | 58 ++++---- src/components/login_form/login_form.vue | 10 +- src/components/media_upload/media_upload.vue | 2 +- .../notifications/notifications.scss | 2 +- .../post_status_form/post_status_form.vue | 16 ++- src/components/registration/registration.vue | 8 +- src/components/settings/settings.vue | 57 ++++---- src/components/status/status.vue | 10 +- .../style_switcher/style_switcher.js | 27 +++- .../style_switcher/style_switcher.vue | 23 ++- src/components/timeline/timeline.vue | 3 - src/components/user_card/user_card.vue | 9 +- .../user_card_content/user_card_content.vue | 136 ++++++++++++------ src/components/user_finder/user_finder.vue | 4 +- src/components/user_panel/user_panel.vue | 8 +- src/components/user_profile/user_profile.vue | 13 +- .../user_settings/user_settings.vue | 36 ++--- src/services/style_setter/style_setter.js | 26 +++- 21 files changed, 309 insertions(+), 188 deletions(-) diff --git a/src/App.scss b/src/App.scss index ec80626b..a7b56523 100644 --- a/src/App.scss +++ b/src/App.scss @@ -51,7 +51,8 @@ button{ background-color: $fallback--btn; background-color: var(--btn, $fallback--btn); border: none; - border-radius: 5px; + 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); @@ -79,7 +80,8 @@ button{ input, textarea, select { border: none; - border-radius: 5px; + 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; @@ -90,6 +92,7 @@ input, textarea, select { font-family: sans-serif; font-size: 14px; padding: 8px 7px 4px; + box-sizing: border-box; // TODO: Restyle <select> in a decent way. Needs different markup // -webkit-appearance:none; @@ -109,32 +112,27 @@ input, textarea, select { transition: color 200ms; width: 1.1em; height: 1.1em; - border-radius: 2px; + 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: baseline; + 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; } } } -.icon-cancel, -.icon-reply, -.icon-retweet, -.icon-star-empty, -.icon-eye-off, -.icon-binoculars, -.icon-plus-squared, -.icon-spin4 { +i[class^=icon-] { color: $fallback--icon; color: var(--icon, $fallback--icon) } @@ -188,6 +186,11 @@ nav { background-repeat: no-repeat; background-position: center; background-size: contain; + + a i { + color: $fallback--link; + color: var(--link, $fallback--link); + } } } @@ -215,9 +218,8 @@ main-router { background-color: $fallback--bg; background-color: var(--bg, $fallback--bg); - border-radius: 10px; border-radius: $fallback--panelRadius; - border-radius: var(--panelRadius, 10px); + border-radius: var(--panelRadius, $fallback--panelRadius); box-shadow: 1px 1px 4px rgba(0,0,0,.6); overflow: hidden; } @@ -230,7 +232,8 @@ main-router { } .panel-heading { - border-radius: 10px 10px 0 0; + 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; @@ -241,7 +244,8 @@ main-router { } .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 { diff --git a/src/_variables.scss b/src/_variables.scss index eccc0aab..1f5d4b3e 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -15,6 +15,11 @@ $fallback--cRed: #ff0000; $fallback--cBlue: #0095ff; $fallback--cGreen: #0fa00f; $fallback--cOrange: orange; -$fallback--cYellow: yellow; $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 e3b1e4d4..1fdee5d3 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -52,7 +52,8 @@ border-style: solid; border-width: 1px; - border-radius: 5px; + border-radius: $fallback--attachmentRadius; + border-radius: var(--attachmentRadius, $fallback--attachmentRadius); overflow: hidden; // fixes small gap below video @@ -109,7 +110,8 @@ flex: 1; img { border: 0px; - border-radius: 5px; + border-radius: $fallback--attachmentRadius; + border-radius: var(--attachmentRadius, $fallback--attachmentRadius); height: 100%; object-fit: cover; } diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue index 69996f76..fd997aa8 100644 --- a/src/components/chat_panel/chat_panel.vue +++ b/src/components/chat_panel/chat_panel.vue @@ -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/login_form/login_form.vue b/src/components/login_form/login_form.vue index 82000d6b..ac492262 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -34,21 +34,17 @@ @import '../../_variables.scss'; .login-form { - input { - border-radius: 5px; - padding: 0.1em 0.2em 0.2em 0.2em; - } - .btn { min-height: 28px; width: 10em; } .error { - border-radius: 5px; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); text-align: center; background-color: rgba(255, 48, 16, 0.65); - background-color: $fallback--cRed; + background-color: $fallback--cRed; min-height: 28px; line-height: 28px; } diff --git a/src/components/media_upload/media_upload.vue b/src/components/media_upload/media_upload.vue index 8e83e7f1..8b931d2d 100644 --- a/src/components/media_upload/media_upload.vue +++ b/src/components/media_upload/media_upload.vue @@ -1,7 +1,7 @@ <template> <div class="media-upload" @drop.prevent @dragover.prevent="fileDrag" @drop="fileDrop"> <label class="btn btn-default"> - <i class="animate-spin" 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> diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss index 5af2454e..7ef4f07d 100644 --- a/src/components/notifications/notifications.scss +++ b/src/components/notifications/notifications.scss @@ -120,6 +120,7 @@ margin-top: 0.3em; width: 32px; height: 32px; + border-radius: $fallback--avatarAltRadius; border-radius: 50%; overflow: hidden; line-height: 0; @@ -141,7 +142,6 @@ &:last-child { border-bottom: none; - border-radius: 0 0 10px 10px; } } diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index d57418fb..abf3b5b7 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -64,7 +64,8 @@ padding: 3px; width: 16px; height: 16px; - border-radius: 50%; + border-radius: $fallback--avatarAltRadius; + border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius); } } @@ -86,7 +87,8 @@ } .error { - border-radius: 5px; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); text-align: center; background-color: rgba(255, 48, 16, 0.65); background-color: $fallback--cRed; @@ -111,7 +113,8 @@ margin: 10px; padding: 5px; background: rgba(230,230,230,0.6); - border-radius: 5px; + border-radius: $fallback--attachmentRadius; + border-radius: var(--attachmentRadius, $fallback--attachmentRadius); font-weight: bold; } } @@ -148,6 +151,7 @@ overflow: hidden; transition: min-height 200ms; min-height: 1px; + box-sizing: content-box; } form textarea:focus { @@ -169,7 +173,8 @@ .autocomplete-panel { margin: 0 0.5em 0 0.5em; - border-radius: 5px; + 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); @@ -189,7 +194,8 @@ img { width: 24px; height: 24px; - border-radius: 2px; + border-radius: $fallback--avatarRadius; + border-radius: var(--avatarRadius, $fallback--avatarRadius); object-fit: contain; } diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index 0966645d..b9093082 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -88,15 +88,10 @@ } form textarea { - border-radius: 5px; line-height:16px; resize: vertical; } - input { - border-radius: 5px; - } - .captcha { max-width: 350px; margin-bottom: 0.4em; @@ -110,7 +105,8 @@ } .error { - border-radius: 5px; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); text-align: center; margin: 0.5em 0.6em 0; background-color: $fallback--cRed; diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue index 98f70f7b..9f195687 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -54,33 +54,40 @@ </script> <style lang="scss"> - .setting-item { - margin: 1em 1em 1.4em; +@import '../../_variables.scss'; - textarea { - width: 100%; - height: 100px; - } +.setting-item { + margin: 1em 1em 1.4em; - .old-avatar { - width: 128px; - border-radius: 5px; - } + textarea { + width: 100%; + height: 100px; + } - .new-avatar { - object-fit: cover; - width: 128px; - height: 128px; - border-radius: 5px; - } + .old-avatar { + width: 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; - } + .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.vue b/src/components/status/status.vue index 80f6a315..14ffd922 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -145,7 +145,8 @@ status-text-container { border-color: var(--border, $fallback--border); border-style: solid; border-width: 1px; - border-radius: 4px; + 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; @@ -155,7 +156,8 @@ status-text-container { flex-shrink: 0; width: 32px; height: 32px; - border-radius: 50%; + border-radius: $fallback--avatarAltRadius; + border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius); } .text { @@ -287,7 +289,8 @@ status-text-container { margin: 0.2em 0.3em 0 0; .avatar { float: right; - border-radius: 5px; + border-radius: $fallback--avatarRadius; + border-radius: var(--avatarRadius, $fallback--avatarRadius); } } @@ -409,7 +412,6 @@ status-text-container { } .timeline .panel.timeline { - border-radius: 10px; overflow: hidden; } diff --git a/src/components/style_switcher/style_switcher.js b/src/components/style_switcher/style_switcher.js index 6e414338..5e5ba266 100644 --- a/src/components/style_switcher/style_switcher.js +++ b/src/components/style_switcher/style_switcher.js @@ -8,7 +8,11 @@ export default { bgColorLocal: '', fgColorLocal: '', textColorLocal: '', - linkColorLocal: '' + linkColorLocal: '', + redColorLocal: '#ff0000', + blueColorLocal: '#0095ff', + greenColorLocal: '#0fa00f', + orangeColorLocal: '#E3FF00' } }, created () { @@ -25,6 +29,11 @@ export default { this.fgColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg) 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.redColorLocal) + this.blueColorLocal = rgbstr2hex(this.$store.state.config.colors.cBlue || this.blueColorLocal) + this.greenColorLocal = rgbstr2hex(this.$store.state.config.colors.cGreen || this.greenColorLocal) + this.orangeColorLocal = rgbstr2hex(this.$store.state.config.colors.cOrange || this.orangeColorLocal) }, methods: { setCustomTheme () { @@ -43,6 +52,12 @@ export default { const fgRgb = rgb(this.fgColorLocal) const textRgb = rgb(this.textColorLocal) const linkRgb = rgb(this.linkColorLocal) + + const redRgb = rgb(this.redColorLocal) + const blueRgb = rgb(this.blueColorLocal) + const greenRgb = rgb(this.greenColorLocal) + const orangeRgb = rgb(this.orangeColorLocal) + if (bgRgb && fgRgb && linkRgb) { this.$store.dispatch('setOption', { name: 'customTheme', @@ -50,7 +65,11 @@ export default { fg: fgRgb, bg: bgRgb, text: textRgb, - link: linkRgb + link: linkRgb, + cRed: redRgb, + cBlue: blueRgb, + cGreen: greenRgb, + cOrange: orangeRgb }}) } } @@ -61,6 +80,10 @@ export default { this.fgColorLocal = this.selected[2] this.textColorLocal = this.selected[3] this.linkColorLocal = this.selected[4] + this.redColorLocal = this.selected[5] + this.blueColorLocal = this.selected[6] + this.greenColorLocal = 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 e6a00275..e2853d01 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -27,6 +27,28 @@ <input id="linkcolor-t" class="theme-color-in" type="text" v-model="linkColorLocal"> </div> </div> + <div class="color-container additional colors"> + <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> @@ -79,7 +101,6 @@ .theme-color-cl, .theme-color-in { margin-left: 4px; - border-radius: 2px; } .theme-color-in { diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index c3cc939a..aa3a8bff 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -82,7 +82,6 @@ right: 0.6em; font-size: 14px; min-width: 6em; - border-radius: 5px; background-color: transparent; color: $fallback--faint; color: var(--faint, $fallback--faint); @@ -106,8 +105,6 @@ font-size: 1.1em; border-width: 1px 0 0 0; border-style: solid; - border-radius: 0 0 10px 10px; - border-color: $fallback--border; border-color: var(--border, $fallback--border); padding: 10px; z-index: 1; diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 6487d2a6..660689d2 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -52,16 +52,19 @@ margin-top: 0.2em; width:32px; height: 32px; - border-radius: 50%; + border-radius: $fallback--avatarAltRadius; + border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius); } } .usercard { width: fill-available; margin: 0.2em 0 0.7em 0; - border-radius: 10px; + border-radius: $fallback--panelRadius; + border-radius: var(--panelRadius, $fallback--panelRadius); border-style: solid; - border-color: inherit; + border-color: $fallback--border; + border-color: var(--border, $fallback--border); border-width: 1px; overflow: hidden; diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index ca3da632..3f4689fd 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -100,7 +100,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; @@ -117,14 +118,9 @@ } .user-info { - color: white; - padding: 0 16px 16px 16px; - margin-bottom: -4em; - - .usersettings { color: white; - opacity: 0.8; - } + padding: 0 16px 16px 16px; + margin-bottom: -4em; .container{ padding: 16px 10px 4px 10px; @@ -186,51 +182,104 @@ flex-flow: row wrap; justify-content: space-between; - div { - flex: 1; - } - margin-top: 0.7em; - margin-bottom: -1.0em; - - .following { - color: white; - font-size: 14px; - flex: 0 0 100%; - margin: -0.7em 0.0em 0.3em 0.0em; - padding-left: 16px; - text-align: left; + .usersettings { + color: white; + opacity: 0.8; } - .mute { - max-width: 220px; - min-height: 28px; + .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; } - .remote-follow { - max-width: 220px; - min-height: 28px; + img { + 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; } - .follow { - max-width: 220px; - min-height: 28px; + text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0); + + .name-and-screen-name { + display: block; + margin-left: 0.6em; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; } - button { - width: 92%; - height: 100%; + .user-name{ + color: white; } - .remote-button { - height: 28px !important; - width: 92%; + .user-screen-name { + color: white; + font-weight: lighter; + font-size: 15px; + padding-right: 0.1em; + flex: 0 0 auto; } - .pressed { - border-bottom-color: rgba(255, 255, 255, 0.2); - border-top-color: rgba(0, 0, 0, 0.2); + .user-interactions { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + + div { + flex: 1; + } + margin-top: 0.7em; + margin-bottom: -1.0em; + + .following { + color: white; + font-size: 14px; + flex: 0 0 100%; + margin: -0.7em 0.0em 0.3em 0.0em; + padding-left: 16px; + text-align: left; + } + + .mute { + max-width: 220px; + min-height: 28px; + } + + .remote-follow { + max-width: 220px; + min-height: 28px; + } + + .follow { + max-width: 220px; + min-height: 28px; + } + + button { + width: 92%; + height: 100%; + } + + .remote-button { + height: 28px !important; + width: 92%; + } + + .pressed { + border-bottom-color: rgba(255, 255, 255, 0.2); + border-top-color: rgba(0, 0, 0, 0.2); + } } - } } .user-counts { @@ -244,7 +293,8 @@ flex: 1; h5 { - font-size:1em; + color: white; + font-size:1em; font-weight: bolder; margin: 0 0 0.25em; } @@ -254,7 +304,7 @@ } .dailyAvg { - font-size: 0.8em; - opacity: 0.5; + font-size: 0.8em; + opacity: 0.5; } </style> diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index e4453fe7..f9362a7d 100644 --- a/src/components/user_finder/user_finder.vue +++ b/src/components/user_finder/user_finder.vue @@ -24,7 +24,6 @@ } .user-finder-input { - border-radius: 5px; max-width: 80%; padding: 0.1em 0.2em 0.2em 0.2em; } @@ -32,7 +31,8 @@ .finder-error { background-color: rgba(255, 48, 16, 0.65); margin: 0.35em; - border-radius: 5px; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); padding: 0.25em; color: $fallback--faint; color: var(--faint, $fallback--faint); diff --git a/src/components/user_panel/user_panel.vue b/src/components/user_panel/user_panel.vue index 7da767b7..05af7bc3 100644 --- a/src/components/user_panel/user_panel.vue +++ b/src/components/user_panel/user_panel.vue @@ -13,9 +13,9 @@ <script src="./user_panel.js"></script> <style lang="scss"> - .user-panel { - .panel-heading { - background: transparent; +.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 14d8cfe9..e6060451 100644 --- a/src/components/user_profile/user_profile.vue +++ b/src/components/user_profile/user_profile.vue @@ -12,13 +12,12 @@ <style lang="scss"> .user-profile { - flex: 2; - flex-basis: 500px; - padding-bottom: 10px; - border-radius: 10px; - .panel-heading { - background: transparent; - } + flex: 2; + flex-basis: 500px; + padding-bottom: 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 fecc67b8..39bb498c 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -75,31 +75,21 @@ <style lang="scss"> .profile-edit { - .name-changer { - 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-radius: 5px; - margin: 0; - } + .bio { + margin: 0; + } - input[type=file] { - padding: 5px; - border-radius: 5px; - } + input[type=file] { + padding: 5px; + } - .banner { - max-width: 400px; - border-radius: 5px; - } + .banner { + max-width: 400px; + } - .uploading { - font-size: 1.5em; - margin: 0.25em; - } + .uploading { + font-size: 1.5em; + margin: 0.25em; + } } </style> diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index bedadb12..503a0d72 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -69,6 +69,7 @@ const setColors = (col, commit) => { 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 @@ -77,14 +78,16 @@ const setColors = (col, commit) => { 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['base07'] = rgb2hex(col.text.r - mod * 2, col.text.g - mod * 2, col.text.b - mod * 2) + 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 = '#0095ff' - colors.cRed = 'red' - colors.cGreen = '#0fa00f' - colors.cYellow = 'yellow' - colors.cOrange = 'orange' + + 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) styleSheet.toString() styleSheet.insertRule(`body { ${Object.entries(colors).map(([k, v]) => `--${k}: ${v}`).join(';')} }`, 'index-max') @@ -103,12 +106,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 cBlueRgb = hex2rgb(theme[6] || '#0000FF') + const cGreenRgb = hex2rgb(theme[7] || '#00FF00') + 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. From 3df7c1977fac3060f584a314cb02f0747ad67696 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sat, 7 Apr 2018 16:29:50 +0300 Subject: [PATCH 04/19] fixes --- src/App.scss | 2 +- src/components/post_status_form/post_status_form.vue | 2 +- src/components/status/status.vue | 6 ++++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/App.scss b/src/App.scss index a7b56523..63815bf9 100644 --- a/src/App.scss +++ b/src/App.scss @@ -132,7 +132,7 @@ input, textarea, select { } } -i[class^=icon-] { +i[class*=icon-] { color: $fallback--icon; color: var(--icon, $fallback--icon) } diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index abf3b5b7..bce361db 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -149,7 +149,7 @@ line-height:16px; resize: none; overflow: hidden; - transition: min-height 200ms; + transition: min-height 200ms 100ms; min-height: 1px; box-sizing: content-box; } diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 14ffd922..152b0608 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -228,6 +228,12 @@ status-text-container { min-height: 1.4em; margin-bottom: 0.3em; + .links a i { + color: $fallback--link; + color: var(--link, $fallback--link); + } + + small { font-weight: lighter; } From 5ded84e982ff7dd85601e71f0062a8518380bed7 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sat, 7 Apr 2018 16:48:49 +0300 Subject: [PATCH 05/19] post-rebase fix --- .../user_card_content/user_card_content.vue | 85 ++++--------------- 1 file changed, 16 insertions(+), 69 deletions(-) diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index 3f4689fd..d028e866 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -122,72 +122,7 @@ padding: 0 16px 16px 16px; margin-bottom: -4em; - .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; - - &.animated::before { - display: none; - } - } - - &:hover .animated.avatar { - canvas { - display: none; - } - img { - visibility: visible; - } - } - - text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0); - - .name-and-screen-name { - display: block; - margin-left: 0.6em; - text-align: left; - text-overflow: ellipsis; - white-space: nowrap; - } - - .user-name{ - color: white; - } - - .user-screen-name { - color: white; - font-weight: lighter; - font-size: 15px; - padding-right: 0.1em; - flex: 0 0 auto; - } - - .user-interactions { - display: flex; - flex-flow: row wrap; - justify-content: space-between; - - .usersettings { - color: white; - opacity: 0.8; - } - - .container{ + .container { padding: 16px 10px 4px 10px; display: flex; flex-wrap: wrap; @@ -198,14 +133,26 @@ overflow: hidden; } - img { - border-radius: $fallback--avatarRadius; - border-radius: var(--avatarRadius, $fallback--avatarRadius); + .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; + + &.animated::before { + display: none; + } + } + + &:hover .animated.avatar { + canvas { + display: none; + } + img { + visibility: visible; + } } text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0); From 94195024e649e6a370dcdea46b5f5d87c541fe59 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sat, 7 Apr 2018 16:55:51 +0300 Subject: [PATCH 06/19] another post-rebase fix --- src/components/status/status.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 152b0608..3f49fd7a 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -394,7 +394,7 @@ status-text-container { } } -.status img.avatar-retweeter { +.status .avatar-retweeter { width: 24px; height: 24px; position: absolute; From 529643d35acf10ce5d8793cd2d8309f5bd36d249 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sat, 7 Apr 2018 19:30:27 +0300 Subject: [PATCH 07/19] indents --- src/components/attachment/attachment.vue | 210 ++++---- src/components/chat_panel/chat_panel.vue | 36 +- .../delete_button/delete_button.vue | 16 +- .../favorite_button/favorite_button.vue | 17 +- src/components/login_form/login_form.vue | 47 +- src/components/nav_panel/nav_panel.vue | 66 +-- .../post_status_form/post_status_form.vue | 283 +++++----- src/components/registration/registration.vue | 100 ++-- .../retweet_button/retweet_button.vue | 16 +- src/components/settings/settings.vue | 52 +- src/components/status/status.vue | 482 +++++++++--------- .../style_switcher/style_switcher.vue | 68 +-- src/components/timeline/timeline.vue | 92 ++-- src/components/user_card/user_card.vue | 78 +-- .../user_card_content/user_card_content.vue | 244 ++++----- src/components/user_finder/user_finder.vue | 22 +- src/components/user_profile/user_profile.vue | 13 +- .../user_settings/user_settings.vue | 26 +- 18 files changed, 932 insertions(+), 936 deletions(-) diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index 1fdee5d3..65dc3bab 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -33,113 +33,113 @@ @import '../../_variables.scss'; .attachments { - display: flex; - flex-wrap: wrap; - margin-right: -0.7em; + display: flex; + flex-wrap: wrap; + margin-right: -0.7em; - .attachment.media-upload-container { - flex: 0 0 auto; - max-height: 300px; - max-width: 100%; + .attachment.media-upload-container { + flex: 0 0 auto; + max-height: 300px; + max-width: 100%; + } + + .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; } - .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; - } - - &.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: $fallback--attachmentRadius; - border-radius: var(--attachmentRadius, $fallback--attachmentRadius); - 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; - - 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; - } - } + &.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: $fallback--attachmentRadius; + border-radius: var(--attachmentRadius, $fallback--attachmentRadius); + 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; + + 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 fd997aa8..50bd0017 100644 --- a/src/components/chat_panel/chat_panel.vue +++ b/src/components/chat_panel/chat_panel.vue @@ -32,33 +32,33 @@ @import '../../_variables.scss'; .chat-window { - max-height: 200px; - overflow-y: auto; - overflow-x: hidden; + max-height: 200px; + overflow-y: auto; + overflow-x: hidden; } .chat-message { - padding: 0.2em 0.5em + 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; - } + 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; - } + display: flex; + form { + flex: auto; + input { + margin: 0.5em; + width: fill-available; } + } } </style> diff --git a/src/components/delete_button/delete_button.vue b/src/components/delete_button/delete_button.vue index 9966d85e..d13547e2 100644 --- a/src/components/delete_button/delete_button.vue +++ b/src/components/delete_button/delete_button.vue @@ -8,14 +8,14 @@ <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: var(--cRed, $fallback--cRed); - color: $fallback--cRed; - } +.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 f25c589a..1e1a6970 100644 --- a/src/components/favorite_button/favorite_button.vue +++ b/src/components/favorite_button/favorite_button.vue @@ -15,18 +15,17 @@ @import '../../_variables.scss'; .fav-active { - cursor: pointer; - animation-duration: 0.6s; + cursor: pointer; + animation-duration: 0.6s; - &:hover { - color: $fallback--cOrange; - color: var(--cOrange, $fallback--cOrange); - } + &:hover { + color: $fallback--cOrange; + color: var(--cOrange, $fallback--cOrange); + } } .favorite-button.icon-star { - color: $fallback--cOrange; - color: var(--cOrange, $fallback--cOrange); + color: $fallback--cOrange; + color: var(--cOrange, $fallback--cOrange); } - </style> diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index ac492262..840ea1a4 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -34,32 +34,31 @@ @import '../../_variables.scss'; .login-form { - .btn { - min-height: 28px; - width: 10em; - } + .btn { + min-height: 28px; + width: 10em; + } - .error { - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); - text-align: center; - background-color: rgba(255, 48, 16, 0.65); - background-color: $fallback--cRed; - min-height: 28px; - line-height: 28px; - } + .error { + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); + text-align: center; + background-color: rgba(255, 48, 16, 0.65); + background-color: $fallback--cRed; + min-height: 28px; + line-height: 28px; + } - .register { - flex: 1 1; - } + .register { + flex: 1 1; + } - .login-bottom { - margin-top: 1.0em; - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-between; - } + .login-bottom { + margin-top: 1.0em; + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + } } - </style> diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue index 43b4c3dc..04ac5738 100644 --- a/src/components/nav_panel/nav_panel.vue +++ b/src/components/nav_panel/nav_panel.vue @@ -33,51 +33,51 @@ @import '../../_variables.scss'; .nav-panel ul { - list-style: none; - margin: 0; - padding: 0; + list-style: none; + margin: 0; + padding: 0; } .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; + 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; - &:first-child a { - border-top-right-radius: 10px; - border-top-left-radius: 10px; - } + &: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; - } + &:last-child a { + border-bottom-right-radius: 10px; + border-bottom-left-radius: 10px; + } } .nav-panel li:last-child { - border: none; + border: none; } .nav-panel a { - display: block; - padding: 0.8em 0.85em; + 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 { - background-color: $fallback--lightBg; - background-color: var(--lightBg, $fallback--lightBg); + text-decoration: underline; } - - &.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/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index bce361db..0f99b3b1 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -53,163 +53,162 @@ @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); + 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; + .form-bottom { + display: flex; + padding: 0.5em; + height: 32px; - button { - width: 10em; - } - - p { - margin: 0.35em; - padding: 0.35em; - display: flex; - } + button { + width: 10em; } - .error { - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); - text-align: center; - background-color: rgba(255, 48, 16, 0.65); - background-color: $fallback--cRed; - background-color: var(--cRed, $fallback--cRed); - padding: 0.25em; - margin: 0.35em; - display: flex; + p { + margin: 0.35em; + padding: 0.35em; + display: flex; + } + } + + .error { + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); + text-align: center; + background-color: rgba(255, 48, 16, 0.65); + background-color: $fallback--cRed; + background-color: var(--cRed, $fallback--cRed); + padding: 0.25em; + margin: 0.35em; + display: flex; + } + + .attachments { + padding: 0 0.5em; + + .attachment { + position: relative; + border: $fallback--border; + border: var(--border, $fallback--border); + margin: 0.5em 0.8em 0.2em 0; } - .attachments { - padding: 0 0.5em; + 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; + } + } - .attachment { - position: relative; - border: $fallback--border; - border: 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; } - - .btn { - cursor: pointer; + span { + line-height: 24px; + margin: 0 0.1em 0 0.2em; } - .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); - } + 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 b9093082..b443024b 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -58,66 +58,66 @@ @import '../../_variables.scss'; .registration-form { + display: flex; + flex-direction: column; + margin: 0.6em; + + .container { + display: flex; + flex-direction: row; + //margin-bottom: 1em; + } + + .terms-of-service { + flex: 0 1 50%; + margin: 0.8em; + } + + .text-fields { + margin-top: 0.6em; + flex: 1 0; display: flex; flex-direction: column; - margin: 0.6em; + } - .container { - display: flex; - flex-direction: row; - //margin-bottom: 1em; - } + .form-group { + display: flex; + flex-direction: column; + padding: 0.3em 0.0em 0.3em; + line-height:24px; + } - .terms-of-service { - flex: 0 1 50%; - margin: 0.8em; - } + form textarea { + line-height:16px; + resize: vertical; + } - .text-fields { - margin-top: 0.6em; - flex: 1 0; - display: flex; - flex-direction: column; - } + .captcha { + max-width: 350px; + margin-bottom: 0.4em; + } - .form-group { - display: flex; - flex-direction: column; - padding: 0.3em 0.0em 0.3em; - line-height:24px; - } + .btn { + //align-self: flex-start; + //width: 10em; + margin-top: 0.6em; + height: 28px; + } - form textarea { - line-height:16px; - resize: vertical; - } - - .captcha { - max-width: 350px; - margin-bottom: 0.4em; - } - - .btn { - //align-self: flex-start; - //width: 10em; - margin-top: 0.6em; - height: 28px; - } - - .error { - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); - text-align: center; - margin: 0.5em 0.6em 0; - background-color: $fallback--cRed; - background-color: var(--cRed, $fallback--cRed); - min-height: 28px; - line-height: 28px; - } + .error { + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); + text-align: center; + margin: 0.5em 0.6em 0; + background-color: $fallback--cRed; + background-color: var(--cRed, $fallback--cRed); + min-height: 28px; + line-height: 28px; + } } @media all and (max-width: 959px) { - .registration-form .container { + .registration-form .container { flex-direction: column-reverse; } } diff --git a/src/components/retweet_button/retweet_button.vue b/src/components/retweet_button/retweet_button.vue index a21942c3..1bee3d08 100644 --- a/src/components/retweet_button/retweet_button.vue +++ b/src/components/retweet_button/retweet_button.vue @@ -14,15 +14,15 @@ <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 { + 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 9f195687..0c9ddc3e 100644 --- a/src/components/settings/settings.vue +++ b/src/components/settings/settings.vue @@ -57,37 +57,37 @@ @import '../../_variables.scss'; .setting-item { - margin: 1em 1em 1.4em; + margin: 1em 1em 1.4em; - textarea { - width: 100%; - height: 100px; - } + textarea { + width: 100%; + height: 100px; + } - .old-avatar { - width: 128px; - border-radius: $fallback--avatarRadius; - border-radius: var(--avatarRadius, $fallback--avatarRadius); - } + .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); - } + .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; - } + .btn { + margin-top: 1em; + min-height: 28px; + width: 10em; + } } .setting-list { - list-style-type: none; - li { - margin-bottom: 0.5em; - } + list-style-type: none; + li { + margin-bottom: 0.5em; + } } </style> diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 3f49fd7a..4937ae8b 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -131,351 +131,351 @@ @import '../../_variables.scss'; status-text-container { - display: block; + 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; + 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); - } + .avatar { + flex-shrink: 0; + width: 32px; + height: 32px; + border-radius: $fallback--avatarAltRadius; + border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius); + } - .text { - h4 { - margin-bottom: 0.4em; - small { - font-weight: lighter; - } - } - padding: 0 0.5em 0.5em 0.5em; + .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; + 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); + 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); + } + + .usercard { border-color: $fallback--border; border-color: var(--border, $fallback--border); + } - &_focused { - background-color: $fallback--lightBg; - background-color: var(--lightBg, $fallback--lightBg); + .timeline & { + border-bottom-width: 1px; + border-bottom-style: solid; + } + + .notify { + .avatar { + border-width: 3px; + border-style: solid; } + } - .usercard { - border-color: $fallback--border; - border-color: var(--border, $fallback--border); - } + .media-body { + flex: 1; + padding-left: 0.5em; + } - .timeline & { - border-bottom-width: 1px; - border-bottom-style: solid; - } - .notify { - .avatar { - border-width: 3px; - border-style: solid; - } - } + .user-content { + min-height: 52px; + padding-top: 1px; + } - .media-body { - flex: 1; - padding-left: 0.5em; + .media-heading { + display: flex; + min-height: 1.4em; + margin-bottom: 0.3em; + + .links a i { + color: $fallback--link; + color: var(--link, $fallback--link); } - .user-content { - min-height: 52px; - padding-top: 1px; + small { + font-weight: lighter; } - .media-heading { - display: flex; - 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%; - } + h4 { + margin-right: 0.4em; } - .source_url { - + .name-and-links { + flex: 1 0; + display: flex; + flex-wrap: wrap; } - .expand { - margin-right: -0.3em; + .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; } - a { - display: inline-block; - word-break: break-all; + blockquote { + margin: 0.2em 0 0.2em 2em; + font-style: italic; } + } - .status-content { - margin: 3px 15px 4px 0; - max-height: 400px; - overflow-y: auto; - overflow-x: hidden; + p { + margin: 0; + margin-top: 0.2em; + margin-bottom: 0.5em; + } - 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; - } + .media-left { + margin: 0.2em 0.3em 0 0; + .avatar { + float: right; + border-radius: $fallback--avatarRadius; + border-radius: var(--avatarRadius, $fallback--avatarRadius); } + } - p { - margin: 0; - margin-top: 0.2em; - margin-bottom: 0.5em; - } + .retweet-info { + padding: 0.7em 0 0 0.6em; .media-left { - margin: 0.2em 0.3em 0 0; - .avatar { - float: right; - border-radius: $fallback--avatarRadius; - border-radius: var(--avatarRadius, $fallback--avatarRadius); - } - } - - .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; - } - } + display: flex; + + i { + align-self: center; + text-align: right; + flex: 1; + padding-right: 0.3em; + } } + } } .status-fadein { - animation-duration: 0.5s; - animation-name: fadein; + animation-duration: 0.5s; + animation-name: fadein; } @keyframes fadein { - from { - opacity: 0; - } + from { + opacity: 0; + } - to { - opacity: 1; - } + to { + opacity: 1; + } } .greentext { - color: green; + color: green; } .status-conversation { - border-left-style: solid; + border-left-style: solid; } .status-actions { - padding-top: 0.15em; - width: 100%; - display: flex; + padding-top: 0.15em; + width: 100%; + display: flex; - div, favorite-button { - max-width: 6em; - flex: 1; - } + div, favorite-button { + max-width: 6em; + flex: 1; + } } .icon-reply:hover { - color: $fallback--cBlue; - color: var(--cBlue, $fallback--cBlue); + color: $fallback--cBlue; + color: var(--cBlue, $fallback--cBlue); } .icon-reply.icon-reply-active { - color: $fallback--cBlue; - color: var(--cBlue, $fallback--cBlue); + color: $fallback--cBlue; + color: var(--cBlue, $fallback--cBlue); } - .status .avatar { - width: 48px; - height: 48px; - border-radius: 5px; - overflow: hidden; +.status .avatar { + width: 48px; + height: 48px; + border-radius: 5px; + overflow: hidden; - img { - width: 100%; - height: 100%; - } + img { + width: 100%; + height: 100%; + } - &.animated::before { - display: none; - } + &.animated::before { + display: none; + } - &.retweeted { - width: 40px; - height: 40px; - margin-right: 8px; - margin-bottom: 8px; - } + &.retweeted { + width: 40px; + height: 40px; + margin-right: 8px; + margin-bottom: 8px; + } } - .status:hover .animated.avatar { - canvas { - display: none; - } - img { - visibility: visible; - } - } +.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; + width: 24px; + height: 24px; + position: absolute; + margin-left: 24px; + margin-top: 24px; } .status.compact .avatar { - width: 32px; + 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; + 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; + border-bottom: none; } .timeline .panel.timeline { - overflow: hidden; + overflow: hidden; } .muted { - padding: 0.1em 0.4em 0.1em 0.8em; - button { - margin-left: auto; - } + padding: 0.1em 0.4em 0.1em 0.8em; + button { + margin-left: auto; + } - .muteWords { - margin-left: 10px; - } + .muteWords { + margin-left: 10px; + } } a.unmute { - display: block; - margin-left: auto; + display: block; + margin-left: auto; } .reply-left { - flex: 0; - min-width: 48px; + flex: 0; + min-width: 48px; } .reply-body { - flex: 1; + flex: 1; } @media all and (max-width: 960px) { - .status-el { - .name-and-links { - margin-left: -0.25em; - } + .status-el { + .name-and-links { + margin-left: -0.25em; } + } - .status { - max-width: 100%; + .status { + max-width: 100%; + } + + .status .avatar { + width: 40px; + height: 40px; + + &.retweeted { + width: 34px; + height: 34px; + margin-right: 8px; + margin-bottom: 8px; } + } - .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; - } - } + .status .avatar-retweeter { + width: 22px; + height: 22px; + position: absolute; + margin-left: 18px; + margin-top: 18px; + } +} </style> diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index e2853d01..6bdd4391 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -71,61 +71,61 @@ <style lang="scss"> @import '../../_variables.scss'; .style-switcher { - margin-right: 1em; + margin-right: 1em; } .color-container { - display: flex; - flex-wrap: wrap; - justify-content: space-between; + display: flex; + flex-wrap: wrap; + justify-content: space-between; } .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); - } + label { + color: var(--faint, $fallback--faint); + } } .theme-color-cl { - border: 0; - box-shadow: none; - background: transparent; + border: 0; + box-shadow: none; + background: transparent; } .theme-color-cl, .theme-color-in { - margin-left: 4px; + margin-left: 4px; } .theme-color-in { - padding: 5px; - min-width: 4em; - max-width: 7em; - flex: 1; + padding: 5px; + min-width: 4em; + max-width: 7em; + flex: 1; } .theme-color-lb { - flex: 2; - min-width: 7em; - max-width: 10em; + flex: 2; + min-width: 7em; + max-width: 10em; } .theme-color-cl { - padding: 1px; - max-width: 8em; - align-self: stretch; - height: 100%; - flex: 0; - min-width: 2em; - cursor: pointer; - } + padding: 1px; + max-width: 8em; + align-self: stretch; + height: 100%; + flex: 0; + min-width: 2em; + cursor: pointer; +} - .theme-preview-content { - padding: 20px; - } +.theme-preview-content { + padding: 20px; +} </style> diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index aa3a8bff..adbbcd47 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -55,58 +55,58 @@ @import '../../_variables.scss'; .timeline { - .timeline-heading { - position: relative; - display: flex; - } + .timeline-heading { + position: relative; + display: flex; + } - .title { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - max-width: 70%; - } + .title { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + max-width: 70%; + } - .loadmore-button { - position: absolute; - right: 0.6em; - font-size: 14px; + .loadmore-button { + position: absolute; + right: 0.6em; + font-size: 14px; - min-width: 6em; - height: 1.8em; - line-height: 100%; - } + 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; - } + .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; + } - .error { - color: $fallback--lightFg; - color: var(--lightFg, $fallback--lightFg); - background-color: $fallback--cRed; - background-color: var(--cRed, $fallback--cRed); - } + .error { + color: $fallback--lightFg; + color: var(--lightFg, $fallback--lightFg); + background-color: $fallback--cRed; + background-color: var(--cRed, $fallback--cRed); + } } .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; - } + 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; +} </style> diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 660689d2..7381ef8f 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -24,56 +24,56 @@ @import '../../_variables.scss'; .name-and-screen-name { - margin-left: 0.7em; - margin-top:0.0em; - margin-right: 2em; - text-align: left; - width: 100%; + margin-left: 0.7em; + margin-top:0.0em; + margin-right: 2em; + text-align: left; + width: 100%; } .follows-you { - margin-left: 2em; - float: right; + 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); + 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); - .avatar { - margin-top: 0.2em; - width:32px; - height: 32px; - border-radius: $fallback--avatarAltRadius; - border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius); - } + .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; + 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; - .panel-heading { - background: transparent; - } + .panel-heading { + background: transparent; + } - p { - margin-bottom: 0; - } + p { + margin-bottom: 0; + } } </style> diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index d028e866..eb1d2338 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -99,159 +99,159 @@ @import '../../_variables.scss'; .profile-panel-background { - background-size: cover; - border-radius: $fallback--panelRadius; - border-radius: var(--panelRadius, $fallback--panelRadius); + background-size: cover; + border-radius: $fallback--panelRadius; + border-radius: var(--panelRadius, $fallback--panelRadius); - .panel-heading { - padding: 0.6em 0em; - text-align: center; - } + .panel-heading { + padding: 0.6em 0em; + text-align: center; + } } .profile-panel-body { - 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%) + 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; + padding: 0 16px 16px 16px; + margin-bottom: -4em; + + .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; + + &.animated::before { + display: none; + } + } + + &:hover .animated.avatar { + canvas { + display: none; + } + img { + visibility: visible; + } + } + + text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0); + + .name-and-screen-name { + display: block; + margin-left: 0.6em; + text-align: left; + text-overflow: ellipsis; + white-space: nowrap; + } + + .user-name{ color: white; - padding: 0 16px 16px 16px; - margin-bottom: -4em; + } - .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; + .user-screen-name { + color: white; + font-weight: lighter; + font-size: 15px; + padding-right: 0.1em; + flex: 0 0 auto; + } + + .user-interactions { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + + div { + flex: 1; + } + margin-top: 0.7em; + margin-bottom: -1.0em; + + .following { + color: white; + font-size: 14px; + flex: 0 0 100%; + margin: -0.7em 0.0em 0.3em 0.0em; + padding-left: 16px; + text-align: left; } - .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; - - &.animated::before { - display: none; - } + .mute { + max-width: 220px; + min-height: 28px; } - &:hover .animated.avatar { - canvas { - display: none; - } - img { - visibility: visible; - } + .remote-follow { + max-width: 220px; + min-height: 28px; } - text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0); - - .name-and-screen-name { - display: block; - margin-left: 0.6em; - text-align: left; - text-overflow: ellipsis; - white-space: nowrap; + .follow { + max-width: 220px; + min-height: 28px; } - .user-name{ - color: white; + button { + width: 92%; + height: 100%; } - .user-screen-name { - color: white; - font-weight: lighter; - font-size: 15px; - padding-right: 0.1em; - flex: 0 0 auto; + .remote-button { + height: 28px !important; + width: 92%; } - .user-interactions { - display: flex; - flex-flow: row wrap; - justify-content: space-between; - - div { - flex: 1; - } - margin-top: 0.7em; - margin-bottom: -1.0em; - - .following { - color: white; - font-size: 14px; - flex: 0 0 100%; - margin: -0.7em 0.0em 0.3em 0.0em; - padding-left: 16px; - text-align: left; - } - - .mute { - max-width: 220px; - min-height: 28px; - } - - .remote-follow { - max-width: 220px; - min-height: 28px; - } - - .follow { - max-width: 220px; - min-height: 28px; - } - - button { - width: 92%; - height: 100%; - } - - .remote-button { - height: 28px !important; - width: 92%; - } - - .pressed { - border-bottom-color: rgba(255, 255, 255, 0.2); - border-top-color: rgba(0, 0, 0, 0.2); - } + .pressed { + border-bottom-color: rgba(255, 255, 255, 0.2); + border-top-color: rgba(0, 0, 0, 0.2); } + } } .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 { - color: white; - 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 { - font-size: 0.8em; - opacity: 0.5; + font-size: 0.8em; + opacity: 0.5; } </style> diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index f9362a7d..6a0df947 100644 --- a/src/components/user_finder/user_finder.vue +++ b/src/components/user_finder/user_finder.vue @@ -19,22 +19,22 @@ @import '../../_variables.scss'; .user-finder-container { - height: 21px; - max-width: 100%; + height: 21px; + max-width: 100%; } .user-finder-input { - max-width: 80%; - padding: 0.1em 0.2em 0.2em 0.2em; + max-width: 80%; + padding: 0.1em 0.2em 0.2em 0.2em; } .finder-error { - background-color: rgba(255, 48, 16, 0.65); - margin: 0.35em; - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); - padding: 0.25em; - color: $fallback--faint; - color: var(--faint, $fallback--faint); + background-color: rgba(255, 48, 16, 0.65); + margin: 0.35em; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); + padding: 0.25em; + color: $fallback--faint; + color: var(--faint, $fallback--faint); } </style> diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue index e6060451..838a43ab 100644 --- a/src/components/user_profile/user_profile.vue +++ b/src/components/user_profile/user_profile.vue @@ -12,12 +12,11 @@ <style lang="scss"> .user-profile { - flex: 2; - flex-basis: 500px; - padding-bottom: 10px; - .panel-heading { - background: transparent; - } + flex: 2; + flex-basis: 500px; + padding-bottom: 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 39bb498c..ed1864cc 100644 --- a/src/components/user_settings/user_settings.vue +++ b/src/components/user_settings/user_settings.vue @@ -75,21 +75,21 @@ <style lang="scss"> .profile-edit { - .bio { - margin: 0; - } + .bio { + margin: 0; + } - input[type=file] { - padding: 5px; - } + input[type=file] { + padding: 5px; + } - .banner { - max-width: 400px; - } + .banner { + max-width: 400px; + } - .uploading { - font-size: 1.5em; - margin: 0.25em; - } + .uploading { + font-size: 1.5em; + margin: 0.25em; + } } </style> From 65f82cf29438fc898cb7733f7bfc8a7868e6f4af Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sat, 7 Apr 2018 21:58:29 +0300 Subject: [PATCH 08/19] <select> styling (abeit somewhat not pretty code-wise), default colors for default schemes. --- src/App.scss | 40 +++++++-- src/components/attachment/attachment.vue | 5 ++ .../post_status_form/post_status_form.vue | 4 +- src/components/still-image/still-image.vue | 82 +++++++++--------- .../style_switcher/style_switcher.js | 18 ++-- .../style_switcher/style_switcher.vue | 30 ++++--- src/i18n/messages.js | 12 +-- src/services/style_setter/style_setter.js | 4 +- static/font/config.json | 12 +++ static/font/css/animation.css | 7 -- static/font/css/fontello-codes.css | 2 + static/font/css/fontello-embedded.css | 14 +-- static/font/css/fontello-ie7-codes.css | 2 + static/font/css/fontello-ie7.css | 2 + static/font/css/fontello.css | 16 ++-- static/font/demo.html | 53 +++++------ static/font/font/fontello.eot | Bin 9340 -> 9812 bytes static/font/font/fontello.svg | 6 +- static/font/font/fontello.ttf | Bin 9172 -> 9644 bytes static/font/font/fontello.woff | Bin 5728 -> 6032 bytes static/font/font/fontello.woff2 | Bin 4916 -> 5108 bytes static/styles.json | 14 +-- 22 files changed, 193 insertions(+), 130 deletions(-) diff --git a/src/App.scss b/src/App.scss index 63815bf9..942f5fb2 100644 --- a/src/App.scss +++ b/src/App.scss @@ -77,8 +77,12 @@ button{ } } +label.select { + padding: 0; -input, textarea, select { +} + +input, textarea, .select { border: none; border-radius: $fallback--btnRadius; border-radius: var(--btnRadius, $fallback--btnRadius); @@ -93,11 +97,35 @@ input, textarea, select { font-size: 14px; padding: 8px 7px 4px; box-sizing: border-box; + display: inline-block; + position: relative; - // TODO: Restyle <select> in a decent way. Needs different markup - // -webkit-appearance:none; - // -moz-appearance:none; - // appearance:none; + .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; + margin: 0; + color: $fallback--fg; + color: var(--fg, $fallback--fg); + padding: 4px 3ch 3px 3px; + width: 100%; + z-index: 1; + } &[type=radio], &[type=checkbox] { @@ -185,7 +213,7 @@ nav { height: 50px; background-repeat: no-repeat; background-position: center; - background-size: contain; + background-size: auto 80%; a i { color: $fallback--link; diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index 65dc3bab..04f6add4 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -41,6 +41,11 @@ flex: 0 0 auto; max-height: 300px; max-width: 100%; + line-height: 0; + + video { + max-height: 300px; + } } .attachment { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 0f99b3b1..929f81ee 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -103,8 +103,8 @@ .attachment { position: relative; - border: $fallback--border; - border: var(--border, $fallback--border); + border: 1px solid $fallback--border; + border: 1px solid var(--border, $fallback--border); margin: 0.5em 0.8em 0.2em 0; } diff --git a/src/components/still-image/still-image.vue b/src/components/still-image/still-image.vue index 5695c554..5fefe714 100644 --- a/src/components/still-image/still-image.vue +++ b/src/components/still-image/still-image.vue @@ -10,53 +10,55 @@ <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: 3px; + 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 5e5ba266..e6b80ac9 100644 --- a/src/components/style_switcher/style_switcher.js +++ b/src/components/style_switcher/style_switcher.js @@ -6,7 +6,7 @@ export default { availableStyles: [], selected: this.$store.state.config.theme, bgColorLocal: '', - fgColorLocal: '', + btnColorLocal: '', textColorLocal: '', linkColorLocal: '', redColorLocal: '#ff0000', @@ -26,7 +26,7 @@ export default { }, mounted () { this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors.bg) - this.fgColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg) + this.btnColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg) this.textColorLocal = rgbstr2hex(this.$store.state.config.colors.fg) this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors.link) @@ -37,7 +37,7 @@ export default { }, methods: { setCustomTheme () { - if (!this.bgColorLocal && !this.fgColorLocal && !this.linkColorLocal) { + if (!this.bgColorLocal && !this.btnColorLocal && !this.linkColorLocal) { // reset to picked themes } const rgb = (hex) => { @@ -49,7 +49,7 @@ 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) @@ -58,11 +58,11 @@ export default { const greenRgb = rgb(this.greenColorLocal) const orangeRgb = rgb(this.orangeColorLocal) - if (bgRgb && fgRgb && linkRgb) { + if (bgRgb && btnRgb && linkRgb) { this.$store.dispatch('setOption', { name: 'customTheme', value: { - fg: fgRgb, + fg: btnRgb, bg: bgRgb, text: textRgb, link: linkRgb, @@ -77,12 +77,12 @@ 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.blueColorLocal = this.selected[6] - this.greenColorLocal = this.selected[7] + 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 6bdd4391..2ebf2b90 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -1,11 +1,15 @@ <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="theme-color-lb">{{$t('settings.background')}}</label> <input id="bgcolor" class="theme-color-cl" type="color" v-model="bgColorLocal"> @@ -13,8 +17,8 @@ </div> <div class="color-item"> <label for="fgcolor" class="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"> + <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="theme-color-lb">{{$t('settings.text')}}</label> @@ -26,8 +30,6 @@ <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> - <div class="color-container additional colors"> <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"> @@ -51,14 +53,20 @@ </div> <div> <div class="panel"> - <div class="panel-heading" :style="{ 'background-color': fgColorLocal, 'color': textColorLocal }">Preview</div> + <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 }"> <h4>Content</h4> <br> A bunch of more content and <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> + <br> + <div class="finder-error" :style="{ 'background-color': redColorLocal }">And a scary alert</div> + <button class="btn" :style="{ 'background-color': btnColorLocal, 'color': textColorLocal }">Button</button> </div> </div> </div> diff --git a/src/i18n/messages.js b/src/i18n/messages.js index df923be4..9f3d65ce 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,7 +238,7 @@ 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.', background: 'Background', foreground: 'Foreground', text: 'Text', @@ -812,7 +812,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', @@ -998,7 +998,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', @@ -1098,7 +1098,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', @@ -1198,7 +1198,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 503a0d72..9ec9b735 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -108,8 +108,8 @@ const setPreset = (val, commit) => { const linkRgb = hex2rgb(theme[4]) const cRedRgb = hex2rgb(theme[5] || '#FF0000') - const cBlueRgb = hex2rgb(theme[6] || '#0000FF') - const cGreenRgb = hex2rgb(theme[7] || '#00FF00') + const cGreenRgb = hex2rgb(theme[6] || '#00FF00') + const cBlueRgb = hex2rgb(theme[7] || '#0000FF') const cOrangeRgb = hex2rgb(theme[8] || '#E3FF00') const col = { diff --git a/static/font/config.json b/static/font/config.json index 98ece6ad..c3985655 100644 --- a/static/font/config.json +++ b/static/font/config.json @@ -95,6 +95,18 @@ "css": "logout", "code": 59400, "src": "fontawesome" + }, + { + "uid": "ccddff8e8670dcd130e3cb55fdfc2fd0", + "css": "down-open", + "code": 59401, + "src": "fontawesome" + }, + { + "uid": "44b9e75612c5fad5505edd70d071651f", + "css": "attach", + "code": 59402, + "src": "entypo" } ] } \ No newline at end of file diff --git a/static/font/css/animation.css b/static/font/css/animation.css index c8cfc252..ac5a9562 100644 --- a/static/font/css/animation.css +++ b/static/font/css/animation.css @@ -8,13 +8,6 @@ animation: spin 2s infinite linear; display: inline-block; } -.animate-spin-slow { - -moz-animation: spin 4s infinite linear; - -o-animation: spin 4s infinite linear; - -webkit-animation: spin 4s infinite linear; - animation: spin 4s infinite linear; - display: inline-block; -} @-moz-keyframes spin { 0% { -moz-transform: rotate(0deg); diff --git a/static/font/css/fontello-codes.css b/static/font/css/fontello-codes.css index 8831e4ee..7402a411 100644 --- a/static/font/css/fontello-codes.css +++ b/static/font/css/fontello-codes.css @@ -8,6 +8,8 @@ .icon-plus-squared:before { content: '\e806'; } /* '' */ .icon-cog:before { content: '\e807'; } /* '' */ .icon-logout:before { content: '\e808'; } /* '' */ +.icon-down-open:before { content: '\e809'; } /* '' */ +.icon-attach:before { content: '\e80a'; } /* '' */ .icon-spin3:before { content: '\e832'; } /* '' */ .icon-spin4:before { content: '\e834'; } /* '' */ .icon-menu:before { content: '\f0c9'; } /* '' */ diff --git a/static/font/css/fontello-embedded.css b/static/font/css/fontello-embedded.css index f9d38315..e3405676 100644 --- a/static/font/css/fontello-embedded.css +++ b/static/font/css/fontello-embedded.css @@ -1,15 +1,15 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?34768509'); - src: url('../font/fontello.eot?34768509#iefix') format('embedded-opentype'), - url('../font/fontello.svg?34768509#fontello') format('svg'); + src: url('../font/fontello.eot?50813206'); + src: url('../font/fontello.eot?50813206#iefix') format('embedded-opentype'), + url('../font/fontello.svg?50813206#fontello') format('svg'); font-weight: normal; font-style: normal; } @font-face { font-family: 'fontello'; - src: url('data:application/octet-stream;base64,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') format('woff'), - url('data:application/octet-stream;base64,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') format('truetype'); + src: url('data:application/octet-stream;base64,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') format('woff'), + url('data:application/octet-stream;base64,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AAEBFRQTLrAxKi2wRSywABUgR7AAI0KyAAEBFRQTLrAxKi2wRiyxAAEUE7AyKi2wRyywNCotsEgssAAWRSMgLiBGiiNhOLErARQrLbBJLLAII0KwSCstsEossgAAQSstsEsssgABQSstsEwssgEAQSstsE0ssgEBQSstsE4ssgAAQistsE8ssgABQistsFAssgEAQistsFEssgEBQistsFIssgAAPistsFMssgABPistsFQssgEAPistsFUssgEBPistsFYssgAAQCstsFcssgABQCstsFgssgEAQCstsFkssgEBQCstsFossgAAQystsFsssgABQystsFwssgEAQystsF0ssgEBQystsF4ssgAAPystsF8ssgABPystsGAssgEAPystsGEssgEBPystsGIssDcrLrErARQrLbBjLLA3K7A7Ky2wZCywNyuwPCstsGUssAAWsDcrsD0rLbBmLLA4Ky6xKwEUKy2wZyywOCuwOystsGgssDgrsDwrLbBpLLA4K7A9Ky2waiywOSsusSsBFCstsGsssDkrsDsrLbBsLLA5K7A8Ky2wbSywOSuwPSstsG4ssDorLrErARQrLbBvLLA6K7A7Ky2wcCywOiuwPCstsHEssDorsD0rLbByLLMJBAIDRVghGyMhWUIrsAhlsAMkUHiwARUwLQBLuADIUlixAQGOWbABuQgACABjcLEABUKyAAEAKrEABUKzCgIBCCqxAAVCsw4AAQgqsQAGQroCwAABAAkqsQAHQroAQAABAAkqsQMARLEkAYhRWLBAiFixA2REsSYBiFFYugiAAAEEQIhjVFixAwBEWVlZWbMMAgEMKrgB/4WwBI2xAgBEAAA=') format('truetype'); } /* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */ /* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */ @@ -17,7 +17,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?34768509#fontello') format('svg'); + src: url('../font/fontello.svg?50813206#fontello') format('svg'); } } */ @@ -61,6 +61,8 @@ .icon-plus-squared:before { content: '\e806'; } /* '' */ .icon-cog:before { content: '\e807'; } /* '' */ .icon-logout:before { content: '\e808'; } /* '' */ +.icon-down-open:before { content: '\e809'; } /* '' */ +.icon-attach:before { content: '\e80a'; } /* '' */ .icon-spin3:before { content: '\e832'; } /* '' */ .icon-spin4:before { content: '\e834'; } /* '' */ .icon-menu:before { content: '\f0c9'; } /* '' */ diff --git a/static/font/css/fontello-ie7-codes.css b/static/font/css/fontello-ie7-codes.css index 3c915b3c..9e9969bb 100644 --- a/static/font/css/fontello-ie7-codes.css +++ b/static/font/css/fontello-ie7-codes.css @@ -8,6 +8,8 @@ .icon-plus-squared { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-attach { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-spin3 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-spin4 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } diff --git a/static/font/css/fontello-ie7.css b/static/font/css/fontello-ie7.css index 2fe2a707..5ed9dff1 100644 --- a/static/font/css/fontello-ie7.css +++ b/static/font/css/fontello-ie7.css @@ -19,6 +19,8 @@ .icon-plus-squared { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-cog { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-logout { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-down-open { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } +.icon-attach { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-spin3 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-spin4 { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } .icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = ' '); } diff --git a/static/font/css/fontello.css b/static/font/css/fontello.css index 0c0d2930..09e6bb54 100644 --- a/static/font/css/fontello.css +++ b/static/font/css/fontello.css @@ -1,11 +1,11 @@ @font-face { font-family: 'fontello'; - src: url('../font/fontello.eot?64848116'); - src: url('../font/fontello.eot?64848116#iefix') format('embedded-opentype'), - url('../font/fontello.woff2?64848116') format('woff2'), - url('../font/fontello.woff?64848116') format('woff'), - url('../font/fontello.ttf?64848116') format('truetype'), - url('../font/fontello.svg?64848116#fontello') format('svg'); + src: url('../font/fontello.eot?73580499'); + src: url('../font/fontello.eot?73580499#iefix') format('embedded-opentype'), + url('../font/fontello.woff2?73580499') format('woff2'), + url('../font/fontello.woff?73580499') format('woff'), + url('../font/fontello.ttf?73580499') format('truetype'), + url('../font/fontello.svg?73580499#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -15,7 +15,7 @@ @media screen and (-webkit-min-device-pixel-ratio:0) { @font-face { font-family: 'fontello'; - src: url('../font/fontello.svg?64848116#fontello') format('svg'); + src: url('../font/fontello.svg?73580499#fontello') format('svg'); } } */ @@ -64,6 +64,8 @@ .icon-plus-squared:before { content: '\e806'; } /* '' */ .icon-cog:before { content: '\e807'; } /* '' */ .icon-logout:before { content: '\e808'; } /* '' */ +.icon-down-open:before { content: '\e809'; } /* '' */ +.icon-attach:before { content: '\e80a'; } /* '' */ .icon-spin3:before { content: '\e832'; } /* '' */ .icon-spin4:before { content: '\e834'; } /* '' */ .icon-menu:before { content: '\f0c9'; } /* '' */ diff --git a/static/font/demo.html b/static/font/demo.html index 2c5503c0..7afc7267 100644 --- a/static/font/demo.html +++ b/static/font/demo.html @@ -229,11 +229,11 @@ body { } @font-face { font-family: 'fontello'; - src: url('./font/fontello.eot?1253892'); - src: url('./font/fontello.eot?1253892#iefix') format('embedded-opentype'), - url('./font/fontello.woff?1253892') format('woff'), - url('./font/fontello.ttf?1253892') format('truetype'), - url('./font/fontello.svg?1253892#fontello') format('svg'); + src: url('./font/fontello.eot?97388161'); + src: url('./font/fontello.eot?97388161#iefix') format('embedded-opentype'), + url('./font/fontello.woff?97388161') format('woff'), + url('./font/fontello.ttf?97388161') format('truetype'), + url('./font/fontello.svg?97388161#fontello') format('svg'); font-weight: normal; font-style: normal; } @@ -275,7 +275,7 @@ body { /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */ } </style> - <link rel="stylesheet" href="css/animation.css"><!--[if IE 7]><link rel="stylesheet" href="css/fontello-ie7.css"><![endif]--> + <link rel="stylesheet" href="css/animation.css"><!--[if IE 7]><link rel="stylesheet" href="css/" + font.fontname + "-ie7.css"><![endif]--> <script> function toggleCodes(on) { var obj = document.getElementById('icons'); @@ -291,37 +291,38 @@ body { </head> <body> <div class="container header"> - <h1> - fontello - <small>font demo</small> - </h1> + <h1>fontello <small>font demo</small></h1> <label class="switch"> <input type="checkbox" onclick="toggleCodes(this.checked)">show codes </label> </div> - <div id="icons" class="container"> + <div class="container" id="icons"> <div class="row"> - <div title="Code: 0xe800" class="the-icons span3"><i class="demo-icon icon-cancel"></i> <span class="i-name">icon-cancel</span><span class="i-code">0xe800</span></div> - <div title="Code: 0xe801" class="the-icons span3"><i class="demo-icon icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe801</span></div> - <div title="Code: 0xe802" class="the-icons span3"><i class="demo-icon icon-star"></i> <span class="i-name">icon-star</span><span class="i-code">0xe802</span></div> - <div title="Code: 0xe803" class="the-icons span3"><i class="demo-icon icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0xe803</span></div> + <div class="the-icons span3" title="Code: 0xe800"><i class="demo-icon icon-cancel"></i> <span class="i-name">icon-cancel</span><span class="i-code">0xe800</span></div> + <div class="the-icons span3" title="Code: 0xe801"><i class="demo-icon icon-upload"></i> <span class="i-name">icon-upload</span><span class="i-code">0xe801</span></div> + <div class="the-icons span3" title="Code: 0xe802"><i class="demo-icon icon-star"></i> <span class="i-name">icon-star</span><span class="i-code">0xe802</span></div> + <div class="the-icons span3" title="Code: 0xe803"><i class="demo-icon icon-star-empty"></i> <span class="i-name">icon-star-empty</span><span class="i-code">0xe803</span></div> </div> <div class="row"> - <div title="Code: 0xe804" class="the-icons span3"><i class="demo-icon icon-retweet"></i> <span class="i-name">icon-retweet</span><span class="i-code">0xe804</span></div> - <div title="Code: 0xe805" class="the-icons span3"><i class="demo-icon icon-eye-off"></i> <span class="i-name">icon-eye-off</span><span class="i-code">0xe805</span></div> - <div title="Code: 0xe806" class="the-icons span3"><i class="demo-icon icon-plus-squared"></i> <span class="i-name">icon-plus-squared</span><span class="i-code">0xe806</span></div> - <div title="Code: 0xe807" class="the-icons span3"><i class="demo-icon icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0xe807</span></div> + <div class="the-icons span3" title="Code: 0xe804"><i class="demo-icon icon-retweet"></i> <span class="i-name">icon-retweet</span><span class="i-code">0xe804</span></div> + <div class="the-icons span3" title="Code: 0xe805"><i class="demo-icon icon-eye-off"></i> <span class="i-name">icon-eye-off</span><span class="i-code">0xe805</span></div> + <div class="the-icons span3" title="Code: 0xe806"><i class="demo-icon icon-plus-squared"></i> <span class="i-name">icon-plus-squared</span><span class="i-code">0xe806</span></div> + <div class="the-icons span3" title="Code: 0xe807"><i class="demo-icon icon-cog"></i> <span class="i-name">icon-cog</span><span class="i-code">0xe807</span></div> </div> <div class="row"> - <div title="Code: 0xe808" class="the-icons span3"><i class="demo-icon icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe808</span></div> - <div title="Code: 0xe832" class="the-icons span3"><i class="demo-icon icon-spin3 animate-spin"></i> <span class="i-name">icon-spin3</span><span class="i-code">0xe832</span></div> - <div title="Code: 0xe834" class="the-icons span3"><i class="demo-icon icon-spin4 animate-spin"></i> <span class="i-name">icon-spin4</span><span class="i-code">0xe834</span></div> - <div title="Code: 0xf0c9" class="the-icons span3"><i class="demo-icon icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xf0c9</span></div> + <div class="the-icons span3" title="Code: 0xe808"><i class="demo-icon icon-logout"></i> <span class="i-name">icon-logout</span><span class="i-code">0xe808</span></div> + <div class="the-icons span3" title="Code: 0xe809"><i class="demo-icon icon-down-open"></i> <span class="i-name">icon-down-open</span><span class="i-code">0xe809</span></div> + <div class="the-icons span3" title="Code: 0xe80a"><i class="demo-icon icon-attach"></i> <span class="i-name">icon-attach</span><span class="i-code">0xe80a</span></div> + <div class="the-icons span3" title="Code: 0xe832"><i class="demo-icon icon-spin3 animate-spin"></i> <span class="i-name">icon-spin3</span><span class="i-code">0xe832</span></div> </div> <div class="row"> - <div title="Code: 0xf112" class="the-icons span3"><i class="demo-icon icon-reply"></i> <span class="i-name">icon-reply</span><span class="i-code">0xf112</span></div> - <div title="Code: 0xf1e5" class="the-icons span3"><i class="demo-icon icon-binoculars"></i> <span class="i-name">icon-binoculars</span><span class="i-code">0xf1e5</span></div> - <div title="Code: 0xf234" class="the-icons span3"><i class="demo-icon icon-user-plus"></i> <span class="i-name">icon-user-plus</span><span class="i-code">0xf234</span></div> + <div class="the-icons span3" title="Code: 0xe834"><i class="demo-icon icon-spin4 animate-spin"></i> <span class="i-name">icon-spin4</span><span class="i-code">0xe834</span></div> + <div class="the-icons span3" title="Code: 0xf0c9"><i class="demo-icon icon-menu"></i> <span class="i-name">icon-menu</span><span class="i-code">0xf0c9</span></div> + <div class="the-icons span3" title="Code: 0xf112"><i class="demo-icon icon-reply"></i> <span class="i-name">icon-reply</span><span class="i-code">0xf112</span></div> + <div class="the-icons span3" title="Code: 0xf1e5"><i class="demo-icon icon-binoculars"></i> <span class="i-name">icon-binoculars</span><span class="i-code">0xf1e5</span></div> + </div> + <div class="row"> + <div class="the-icons span3" title="Code: 0xf234"><i class="demo-icon icon-user-plus"></i> <span class="i-name">icon-user-plus</span><span class="i-code">0xf234</span></div> </div> </div> <div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div> diff --git a/static/font/font/fontello.eot b/static/font/font/fontello.eot index 52fbefa9b7ff67e42482179ffc0c9fea260a79f7..78ba01c92eda359f896c6f0c003ef1187f41510b 100644 GIT binary patch delta 1267 zcmZ8gZD?C%6h7y@@4Yw4&F5{J+@>{6N1F5_t+bY`Kgzt*(J#Y@qm-6@nDiqpvuWZQ zW`{pI{4v25v|j%xo5-x7Y>bVRGRA&vDh|g41(8wxyIB-QJ2!+n6VGj{p!f3J^FHU} zdEawh?$h2M64F2f;8OjH6z8tBtHz3ccIhktCIMh@GMmnyK6T+k;-3Mq(~~C)A!)nx z0HEr9iia}!ne5vu?+z1R15ola>4iM`-Ncv4T4v@>Wh$PWy9K}-$h|Q;ou2Z%cAMgr zoZ|6Wa>#cC(yQzu9-hq>7GHD@mUqaJB1i9BZZaMIqs~X14gisCdNGe}c7^zN#6$Dx z?DXC9!4UB+I^ehY+(KdG`1eHs?Iy+V=1)xL?;mcy0Z<<{KE@HeZal@Fz7%{)Q6%g= zA{l`YBhbNcbwBnIdCjaCS=+9k!wKSUdMSU?W-PPklra4J8h2Qo>;@0zN}p^qR4Lg` z0Qh<L3*dQ==f<p5OE5Jz_W{(?X8Rt@lFg1ifCFIbn>~ONV4EaOfQ#(?J(vT3MENGb zQ(WVpqyHH_pt@{a5P@M2Fkm^PPBO-_v=EHy;hHM1(_yv9k|?14e<^YKt>O*&196E8 z%D)KftP#9WrTZKRh&_ySFh?6@yna;>{moXC4n#51@jS-c{Z{(aqR%T_EKS&gw$g;6 zjFH6#Y*1?KqYA!Lnp6}#uLNzQic-2qZe>)dp?Q@{<$`ccNI@Ia>NV!rmvDeKgds*7 zLIR<w5!$d#5WUU*1JPDIh;e@q{XQ9;7>&e<(o*vK4w}nIG(sfE_PviYM|$}nZY9TK z-S$AT6lq9>f>I0<T1TL?7Srr@&4(N9p{{tmq`ttX&h+D!_A<rX$Ci7$Z;n%Cz}_88 znU%JXHr0ej105Pw1}u!5l_%ZK_L7=7Gr@IysI{7fG$LT-zskpj--Kfjg(O@trW}XF zm#&19L&gP1eM`082*?D6LRLnBGl9P<QQy=rO92-}J^-AHLm+Z7F<iXukT79Nmdhi; zuOwLuhoMimab$o!ZHPy9mGug`ZBoE24R2l`Jv;PO>n>U`$dRArD3BS}9mPML6AXVc z#yv;(4|U1YDpc$3#$`{f*M=5ZwhWN5$b(jtEpq>`vEli$cuq}W*tojpdd1cC1QcP@ zZ1l&6x32wTspk>CD5Q*#x4QCozG&X%e;(CHdYdHr<t~;>#-g{bUd1_l#8%m3VV!sK zd45m4EFF?or5*VTOO{Ga0kwGDYenodzN%cu&f*)seni#y+8^SmVukU*-{Y}P<zAm} f$>pc#rF5Z?o}4vWv}cVmEhMIBWU1nt+K%!!uBQ~x delta 826 zcma)4TS!z<6y5vW$Gom{Cm&-@rZcGo=7Z84sIV&}lO{0?B~5<FG(HA#W-d9{SYZ)H zVG$1JCxXZigZv5M_5}ax!=yq;A)>!9q@Wk}6WVQ$V|{lHi_O|=-*wjE+{KQy!}9q` zfW?Z8+$1VfMROVL+J$of7zBXMXgs1{3^NDudjPB_I-K&#OTRw?6wi|G?bG|?<C%#t z@%I1@y+1OfQ{P4W0aa`N;7DKeL&IADQ2|h!W4)0cXT~oA6m*c@6r+Y^Uid<MjCf@% zo=WdO+i9**gAN33Fd2=MwR#qauMpo6kEC_1S13>+8G<(viTA#|y}g`x4F!CqCx=p( zW-hk_xXA+^>!*A5<(6F(wxWYiVi!K)YZzz?!Cg|3kXsTJfj}NW;c#+OyG7mXR1H=8 zMqh*kaTjfxU$OG*tij=hf1A%UpYfF`XnRg$*`;z(Ot$W!VM5kqr7;JfOMH8g1JGr@ z=jQ-<RF`uAC%_My&jM6qL7c|=y_!8=wTprT3<F1IN`ogf1rZqNz?j0?wrO@EEJ;1+ z3qRx&@{nKCwv?6>I`eE+i!2GK{MV<Njr%NDjA_eFNoD4`IUsx%La-BpFv=&K&HRnC z%BWIhtYfBWb_t(IEQc1T)v85gfPvkJhbRd}!#E%&1PY`;n{mc<is2-Gmw%Mk7S!=f z!87A{VK*L|E1FWe)dN4lA!OegmPSXO{;hO;mzbs#=%*sj+#)|AWDd}i4U@hurZ?Vd zQ`{&nZgp4leeQB!8ICbKn-vt{wHTBX>4vl_x67-RJ2Xc=;4((tHbg(aTKow8#=))a dh%P=};^p^C0$ldg^G1(P3ei17#!1gF#~&{0x4r-X diff --git a/static/font/font/fontello.svg b/static/font/font/fontello.svg index 43e9bee4..d57b9628 100644 --- a/static/font/font/fontello.svg +++ b/static/font/font/fontello.svg @@ -1,7 +1,7 @@ <?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg"> -<metadata>Copyright (C) 2017 by original authors @ fontello.com</metadata> +<metadata>Copyright (C) 2018 by original authors @ fontello.com</metadata> <defs> <font id="fontello" horiz-adv-x="1000" > <font-face font-family="fontello" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" /> @@ -24,6 +24,10 @@ <glyph glyph-name="logout" unicode="" d="M357 46q0-2 1-11t0-14-2-14-5-11-12-3h-178q-67 0-114 47t-47 114v392q0 67 47 114t114 47h178q8 0 13-5t5-13q0-2 1-11t0-15-2-13-5-11-12-3h-178q-37 0-63-26t-27-64v-392q0-37 27-63t63-27h174t6 0 7-2 4-3 4-5 1-8z m518 304q0-14-11-25l-303-304q-11-10-25-10t-25 10-11 25v161h-250q-14 0-25 11t-11 25v214q0 15 11 25t25 11h250v161q0 14 11 25t25 10 25-10l303-304q11-10 11-25z" horiz-adv-x="928.6" /> +<glyph glyph-name="down-open" unicode="" d="M939 399l-414-413q-10-11-25-11t-25 11l-414 413q-11 11-11 26t11 25l93 92q10 11 25 11t25-11l296-296 296 296q11 11 25 11t26-11l92-92q11-11 11-25t-11-26z" horiz-adv-x="1000" /> + +<glyph glyph-name="attach" unicode="" d="M244-140q-102 0-170 72-72 70-74 166t84 190l496 496q80 80 174 54 44-12 79-47t47-79q26-96-54-176l-474-474q-40-40-88-46-48-4-80 28-30 24-27 74t47 92l332 334q24 26 50 0t0-50l-332-332q-44-44-20-70 12-8 24-6 24 4 46 26l474 474q50 50 34 108-16 60-76 76-54 14-108-36l-494-494q-66-76-64-143t52-117q50-48 117-50t141 62l496 494q24 24 50 0 26-22 0-48l-496-496q-82-82-186-82z" horiz-adv-x="939" /> + <glyph glyph-name="spin3" unicode="" d="M494 850c-266 0-483-210-494-472-1-19 13-20 13-20l84 0c16 0 19 10 19 18 10 199 176 358 378 358 107 0 205-45 273-118l-58-57c-11-12-11-27 5-31l247-50c21-5 46 11 37 44l-58 227c-2 9-16 22-29 13l-65-60c-89 91-214 148-352 148z m409-508c-16 0-19-10-19-18-10-199-176-358-377-358-108 0-205 45-274 118l59 57c10 12 10 27-5 31l-248 50c-21 5-46-11-37-44l58-227c2-9 16-22 30-13l64 60c89-91 214-148 353-148 265 0 482 210 493 473 1 18-13 19-13 19l-84 0z" horiz-adv-x="1000" /> <glyph glyph-name="spin4" unicode="" d="M498 850c-114 0-228-39-320-116l0 0c173 140 428 130 588-31 134-134 164-332 89-495-10-29-5-50 12-68 21-20 61-23 84 0 3 3 12 15 15 24 71 180 33 393-112 539-99 98-228 147-356 147z m-409-274c-14 0-29-5-39-16-3-3-13-15-15-24-71-180-34-393 112-539 185-185 479-195 676-31l0 0c-173-140-428-130-589 31-134 134-163 333-89 495 11 29 6 50-12 68-11 11-27 17-44 16z" horiz-adv-x="1001" /> diff --git a/static/font/font/fontello.ttf b/static/font/font/fontello.ttf index 2548731d5f15813084fefd38a1953b47167f04d5..91feac6d4545b72bb4ee659667485b0a3b6a1a3c 100644 GIT binary patch delta 1276 zcmZ8hUrbwN6hG&F-@Ui(y>02G^p=8cH%rUEVdzN51Hn!g${1M~5(0tETmBS+l-AK8 zdtxunL>Jw1ebH<_7#?P3%uJCiW)GV_7|l#(G-g2`Hzk@ZFj-tkY(1A^jNY4b&-Xij ze&^4Z+#gaOpSbkw%3A<9006_2*>wK=xewnbd<{T2Ke<#0OWUPi0BYYQe>jt$$-a5{ z(kS6I03|<@Ud)rditt6!wwd{Jnd&E3?f~#cGH=XIr>8uxentKoPX5F!8RTym@zrz@ zj?88Y%P+cy%e!PS$k02Vn@mUkJm4ct4L~%TUe05?st~?MIJ}U~PT##63=`g>2EWbc z77Jr@-xUG;x5<Aue|9?m@My~|fQHEBr(^iJIfN-R%qtjbS_PyKfDeG}omxpdXwp^S zaF*;<^fG`=hxq^xACADkF9m@>J`N&CAcGC;l&OFUPH=&n@;nqGnWu!OrXeV9b+69P zdtU&LIl^+M?ZixCRovVcVt~zfMTiSFJ1Rn~u=RCCh#$7KiclrkepnG}=Z`7g67UpN z{t@cWBm<h;!I=mGrl?^dhct1<d>}3cW64N;t=HwW+hj>(sQxeHZRw4oSAI`ip@j0U zY+YyqFVrS|P6Wi1Ks=bELK&~FF;Q=^qjWHa(T?Xa5!dbX38Bx+u9qepK}TsqQBIS_ zMr>5-)o}&iDNQO0UR8pQaYZTJC$loH)YHbwrE-DYWCpZDC|Pe^$_frqK^PIJAoL?N zH$gkLGtt|kAB?r(5lrYo)O|9#FcwV^q@$$!j#$TNEJ`3K>|1v-$9nlNZVjAi?NI{* zrD&rO4oa=q@9zkd)>{3l>i6MBJlvH?l(ZN4)P+9W@}DAK)!@b6p4(?AGobdg8djzw z?4N4JlYtIDWd>{lw=$QiT=A0De_?_r@sYpHN~9HmQ2wht$9`vn5Q71@Vct@^#S=Fo z10&|H+Hj~Y*#sys0a;c?#s$V-k!Wt3S1^E!A|C?I#Ssv>*gskfIVJ43D9hzB_8U=# z;3ynVIyee|sdmI;d(6pdx@}^>EG=(=5uXaj>ymCd36LYZkRwNCH0dn9<eCuhCv&~( z<bG4!)5hwOaZ~byybiR<vTcZzO&+$RY?J#&&A8{w;*Q6_A@kEU_sj0CC!nxRYtSDb z-MRUXrkTh1GBXI<sAlD%KG<M+j(!G9<o|;&TQ~flM>DTgH%k<Dy<9TyRUc^3a2_8E ztHKUj=be0k-xoiTx}{ZVSN_75rBsVRD{5XlVy9VOvyPp`?`!%HH8ZG(IcivKcIzpR leJc0b!l7J#dO=DT3hBvN^L70>^D{jx8nj5GxS{VVe*=*Q5(xkR delta 830 zcma)3TSyd982<lrW@c}*JL~Eyo93=*RBCQ%wGV}ikStz^Z3#(?bX#wP>kcWg7FmQ6 zM1*!8iYW4-hk^oWx`J=@P|@unqlX@XGPZ)qFo@8$e_bMaYYyN1^Zl3aeCN!ymY3m) z@}q|VFaiK=@kGox*3KNnuK=*__`%_TGW+WTK+z1<1HDFH;^gE+JMlLF4x=wNWKiBs z{3b<f-@r(3{9WB^07(VV>ic_Q-LA=y1d!iK^)3CBusr5ph>sDk=uZr%wjOHBEK-6t z1brYGkCisActJc(d{rWrGBBu;p#l<wz+f!V^W@@6Kk;fZ_|!-a4IiH#Zw4qN4Y*?* z=rQIRs>p14>*S9PyeoEL7^C6>`qxbXQVYO&;LBgt6zz1<DUe{0@@`rjAZ-=zu`U>Z zzl)lHQB49F6tI95Y&7Wr6`bG#jmnDH$reQyvuIhH01uYmbOmA$Pd3()Dj~aDdQ%QG z4PPJSKsqq*$$=DMel7>nhHuoL1!(44=_&>{>voT3m$(cJ!!6S#k=?qAS$767rn07D z-A;rhDF?mnw?tYV3h8=YiLb!rv{@~R%u)TXQQam+loKXe&dD0fEM@ld&pZliAOfQz z?W`A7uGQudmx47clgV`OPgL|n1FY98C1il%jfmUH30cDgAP#aeq(YPVT-(QRO4NFG zh;dJi_~^NBUeE8uiih6IYNxjCJ2-gu&%^BK$h|+2w(pQqJSsMLi@i%yid6r7+@i}{ zDb9HPWu-XA>}-as{FxMyRr$2MpfoEBmP<5{opPJ6yf(y;cw2ZIL+06{W-N0fLyi*4 osGtR{XhS<XP(>%YP(wH73B?x{dwoH1%2y^w>9kSvhVQ52H&!&U3IG5A diff --git a/static/font/font/fontello.woff b/static/font/font/fontello.woff index fbbf748fe9ce25e70c1f50e36d290cca965eeaf3..539e4835ab736fe680804745b78c6d4c282976e5 100644 GIT binary patch delta 3963 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 N{9E8-Pv4{r`XB8WGNk|j delta 3657 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 O_Vms=0FVX08U7zoj;+4{ diff --git a/static/font/font/fontello.woff2 b/static/font/font/fontello.woff2 index 89c497872bce4444e54ce70b1d4d4c6c7fec8cd2..99d5813718ff379b6796e20474bae5d7252e56da 100644 GIT binary patch literal 5108 zcmV<Q6ASEjPew8T0RR9102A~84*&oF041yd027-40RR9100000000000000000000 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 Wdb-+U|8bg{ORnn8gr|-%0e$u<A+|yQ literal 4916 zcmV-46U*#(Pew8T0RR91024F-4*&oF03*}@020~&0RR9100000000000000000000 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 diff --git a/static/styles.json b/static/styles.json index 92715565..7116ef20 100644 --- a/static/styles.json +++ b/static/styles.json @@ -1,9 +1,9 @@ { - "pleroma-dark": [ "Pleroma Dark", "#121a24", "#182230", "#b9b9ba", "#d8a070" ], - "pleroma-light": [ "Pleroma Light", "#f2f4f6", "#dbe0e8", "#304055", "#f86f0f" ], - "classic-dark": [ "Classic Dark", "#161c20", "#282e32", "#b9b9b9", "#baaa9c" ], - "bird": [ "Bird", "#f8fafd", "#e6ecf0", "#14171a", "#0084b8"], - "ir-black": [ "Ir Black", "#000000", "#242422", "#b5b3aa", "#ff6c60" ], - "monokai": [ "Monokai", "#272822", "#383830", "#f8f8f2", "#f92672" ], - "mammal": [ "Mammal", "#272c37", "#444b5d", "#f8f8f8", "#9bacc8" ] + "pleroma-dark": [ "Pleroma Dark", "#121a24", "#182230", "#b9b9ba", "#d8a070", "#d31014", "#0fa00f", "#0095ff", "#ffa500" ], + "pleroma-light": [ "Pleroma Light", "#f2f4f6", "#dbe0e8", "#304055", "#f86f0f", "#d31014", "#0fa00f", "#0095ff", "#ffa500" ], + "classic-dark": [ "Classic Dark", "#161c20", "#282e32", "#b9b9b9", "#baaa9c", "#d31014", "#0fa00f", "#0095ff", "#ffa500" ], + "bird": [ "Bird", "#f8fafd", "#e6ecf0", "#14171a", "#0084b8", "#e0245e", "#17bf63", "#1b95e0", "#fab81e"], + "ir-black": [ "Ir Black", "#000000", "#242422", "#b5b3aa", "#ff6c60", "#FF6C60", "#A8FF60", "#96CBFE", "#FFFFB6" ], + "monokai": [ "Monokai", "#272822", "#383830", "#f8f8f2", "#f92672", "#F92672", "#a6e22e", "#66d9ef", "#f4bf75" ], + "mammal": [ "Mammal", "#272c37", "#444b5d", "#f8f8f8", "#9bacc8", "#7f3142", "#2bd850", "#2b90d9", "#ca8f04" ] } From b23bd076c320b84d47bf062c5b969236eb77479a Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 02:39:39 +0300 Subject: [PATCH 09/19] raddi customization UI --- .../notifications/notifications.scss | 2 +- src/components/status/status.vue | 3 +- .../style_switcher/style_switcher.js | 40 +++++++++--- .../style_switcher/style_switcher.vue | 62 ++++++++++++++++++- .../user_card_content/user_card_content.vue | 3 +- src/services/style_setter/style_setter.js | 14 ++++- 6 files changed, 109 insertions(+), 15 deletions(-) diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss index 7ef4f07d..e9a60a93 100644 --- a/src/components/notifications/notifications.scss +++ b/src/components/notifications/notifications.scss @@ -121,7 +121,7 @@ width: 32px; height: 32px; border-radius: $fallback--avatarAltRadius; - border-radius: 50%; + border-radius: var(--avatarAltRadius, $fallback--avatarAltRadius); overflow: hidden; line-height: 0; diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 4937ae8b..798443f1 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -365,7 +365,8 @@ status-text-container { .status .avatar { width: 48px; height: 48px; - border-radius: 5px; + border-radius: $fallback--avatarRadius; + border-radius: var(--avatarRadius, $fallback--avatarRadius); overflow: hidden; img { diff --git a/src/components/style_switcher/style_switcher.js b/src/components/style_switcher/style_switcher.js index e6b80ac9..08bc7113 100644 --- a/src/components/style_switcher/style_switcher.js +++ b/src/components/style_switcher/style_switcher.js @@ -9,10 +9,16 @@ export default { btnColorLocal: '', textColorLocal: '', linkColorLocal: '', - redColorLocal: '#ff0000', - blueColorLocal: '#0095ff', - greenColorLocal: '#0fa00f', - orangeColorLocal: '#E3FF00' + redColorLocal: '', + blueColorLocal: '', + greenColorLocal: '', + orangeColorLocal: '', + btnRadiusLocal: '', + panelRadiusLocal: '', + avatarRadiusLocal: '', + avatarAltRadiusLocal: '', + attachmentRadiusLocal: '', + tooltipRadiusLocal: '' } }, created () { @@ -26,20 +32,28 @@ export default { }, mounted () { this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors.bg) - this.btnColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg) + 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.redColorLocal) - this.blueColorLocal = rgbstr2hex(this.$store.state.config.colors.cBlue || this.blueColorLocal) - this.greenColorLocal = rgbstr2hex(this.$store.state.config.colors.cGreen || this.greenColorLocal) - this.orangeColorLocal = rgbstr2hex(this.$store.state.config.colors.cOrange || this.orangeColorLocal) + 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.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 ? { @@ -69,7 +83,13 @@ export default { cRed: redRgb, cBlue: blueRgb, cGreen: greenRgb, - cOrange: orangeRgb + cOrange: orangeRgb, + btnRadius: this.btnRadiusLocal, + panelRadius: this.panelRadiusLocal, + avatarRadius: this.avatarRadiusLocal, + avatarAltRadius: this.avatarAltRadiusLocal, + tooltipRadius: this.tooltipRadiusLocal, + attachmentRadius: this.attachmentRadiusLocal }}) } } diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index 2ebf2b90..b096f00e 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -51,7 +51,46 @@ <input id="orangecolor-t" class="theme-color-in" type="text" v-model="orangeColorLocal"> </div> </div> - <div> + <div class="radius-container"> + <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"> + <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"> + <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"> + <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"> + <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"> + <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"> + <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"> <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 }"> @@ -88,6 +127,7 @@ justify-content: space-between; } +.radius-item, .color-item { min-width: 20em; display:flex; @@ -100,13 +140,16 @@ } } +.theme-radius-rn, .theme-color-cl { border: 0; box-shadow: none; background: transparent; + color: var(--faint, $fallback--faint); } .theme-color-cl, +.theme-radius-in, .theme-color-in { margin-left: 4px; } @@ -114,12 +157,29 @@ .theme-color-in { padding: 5px; 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; +} + +.theme-radius-lb{ + max-width: 50em; +} + +.theme-color-lb { max-width: 10em; } diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index eb1d2338..46d1c8b5 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -134,7 +134,8 @@ } .avatar { - border-radius: 5px; + border-radius: $fallback--avatarRadius; + border-radius: var(--avatarRadius, $fallback--avatarRadius); flex: 1 0 100%; width: 56px; height: 56px; diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 9ec9b735..2010fdfd 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -64,6 +64,7 @@ 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) { @@ -89,11 +90,22 @@ const setColors = (col, commit) => { 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) + 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).map(([k, v]) => `--${k}: ${v}`).join(';')} }`, 'index-max') + 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 }) } From 2e95193559b51d81a3e6de6f29ec277a842556cc Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 02:52:15 +0300 Subject: [PATCH 10/19] localisations and stuff --- src/components/style_switcher/style_switcher.vue | 13 +++++++++++++ src/i18n/messages.js | 11 +++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index b096f00e..cfc2d83d 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -52,6 +52,7 @@ </div> </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"> @@ -121,8 +122,20 @@ margin-right: 1em; } +.radius-container, .color-container { display: flex; + + p { + margin-top: 2em; + margin-bottom: .5em; + } +} +.radius-container { + flex-direction: column; +} + +.color-container { flex-wrap: wrap; justify-content: space-between; } diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 9f3d65ce..cbe702d0 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -239,10 +239,21 @@ const en = { theme: 'Theme', presets: 'Presets', 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', From cc02672e1451f28bcb85a0b34d34117567cc0802 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 03:22:03 +0300 Subject: [PATCH 11/19] made alerts use red with transparent theme red. some UI improvs --- src/App.scss | 22 +++++++++++- src/_variables.scss | 2 ++ src/components/login_form/login_form.vue | 8 +---- .../post_status_form/post_status_form.vue | 10 +----- src/components/registration/registration.vue | 9 +---- .../style_switcher/style_switcher.vue | 36 ++++++++++++++----- src/components/timeline/timeline.vue | 7 ---- src/components/user_finder/user_finder.vue | 11 +----- src/services/style_setter/style_setter.js | 2 ++ 9 files changed, 57 insertions(+), 50 deletions(-) diff --git a/src/App.scss b/src/App.scss index 942f5fb2..047cd333 100644 --- a/src/App.scss +++ b/src/App.scss @@ -99,6 +99,8 @@ input, textarea, .select { box-sizing: border-box; display: inline-block; position: relative; + height: 29px; + line-height: 16px; .icon-down-open { position: absolute; @@ -122,9 +124,11 @@ input, textarea, .select { margin: 0; color: $fallback--fg; color: var(--fg, $fallback--fg); - padding: 4px 3ch 3px 3px; + padding: 4px 2em 3px 3px; width: 100%; z-index: 1; + height: 29px; + line-height: 16px; } &[type=radio], @@ -371,6 +375,22 @@ 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; diff --git a/src/_variables.scss b/src/_variables.scss index 1f5d4b3e..d90a1d48 100644 --- a/src/_variables.scss +++ b/src/_variables.scss @@ -16,6 +16,8 @@ $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; diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index 840ea1a4..67fa95a8 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -21,7 +21,7 @@ </div> </div> <div v-if="authError" class='form-group'> - <div class='error'>{{authError}}</div> + <div class='alert error'>{{authError}}</div> </div> </form> </div> @@ -40,13 +40,7 @@ } .error { - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); text-align: center; - background-color: rgba(255, 48, 16, 0.65); - background-color: $fallback--cRed; - min-height: 28px; - line-height: 28px; } .register { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 929f81ee..a3b8acde 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -30,7 +30,7 @@ <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> @@ -87,15 +87,7 @@ } .error { - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); text-align: center; - background-color: rgba(255, 48, 16, 0.65); - background-color: $fallback--cRed; - background-color: var(--cRed, $fallback--cRed); - padding: 0.25em; - margin: 0.35em; - display: flex; } .attachments { diff --git a/src/components/registration/registration.vue b/src/components/registration/registration.vue index b443024b..00f665af 100644 --- a/src/components/registration/registration.vue +++ b/src/components/registration/registration.vue @@ -46,7 +46,7 @@ </div> </div> <div v-if="error" class='form-group'> - <div class='error'>{{error}}</div> + <div class='alert error'>{{error}}</div> </div> </form> </div> @@ -105,14 +105,7 @@ } .error { - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); text-align: center; - margin: 0.5em 0.6em 0; - background-color: $fallback--cRed; - background-color: var(--cRed, $fallback--cRed); - min-height: 28px; - line-height: 28px; } } diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index cfc2d83d..ef4a21bd 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -92,20 +92,23 @@ '--tooltipRadius': tooltipRadiusLocal + 'px', '--attachmentRadius': attachmentRadiusLocal + 'px' }"> - <div class="panel"> + <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> - <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"/> + <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> - <br> - <div class="finder-error" :style="{ 'background-color': redColorLocal }">And a scary alert</div> <button class="btn" :style="{ 'background-color': btnColorLocal, 'color': textColorLocal }">Button</button> </div> </div> @@ -153,6 +156,10 @@ } } +.radius-item { + flex-basis: auto; +} + .theme-radius-rn, .theme-color-cl { border: 0; @@ -209,4 +216,17 @@ .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 adbbcd47..68439681 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -90,13 +90,6 @@ padding: 0 0.5em 0 0.5em; opacity: 0.8; } - - .error { - color: $fallback--lightFg; - color: var(--lightFg, $fallback--lightFg); - background-color: $fallback--cRed; - background-color: var(--cRed, $fallback--cRed); - } } .new-status-notification { diff --git a/src/components/user_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index 6a0df947..22d4bd77 100644 --- a/src/components/user_finder/user_finder.vue +++ b/src/components/user_finder/user_finder.vue @@ -1,6 +1,6 @@ <template> <span class="user-finder-container"> - <span class="finder-error" 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> @@ -28,13 +28,4 @@ padding: 0.1em 0.2em 0.2em 0.2em; } -.finder-error { - background-color: rgba(255, 48, 16, 0.65); - margin: 0.35em; - border-radius: $fallback--tooltipRadius; - border-radius: var(--tooltipRadius, $fallback--tooltipRadius); - padding: 0.25em; - color: $fallback--faint; - color: var(--faint, $fallback--faint); -} </style> diff --git a/src/services/style_setter/style_setter.js b/src/services/style_setter/style_setter.js index 2010fdfd..532af1ba 100644 --- a/src/services/style_setter/style_setter.js +++ b/src/services/style_setter/style_setter.js @@ -90,6 +90,8 @@ const setColors = (col, commit) => { 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 From 59a05081c5ab6250a51b58a44c6b11245c7c79c4 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 03:43:07 +0300 Subject: [PATCH 12/19] some styles fixes --- src/App.scss | 6 +++--- src/components/style_switcher/style_switcher.vue | 15 +++++++-------- src/components/timeline/timeline.vue | 2 ++ src/components/user_finder/user_finder.vue | 4 ++-- 4 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/App.scss b/src/App.scss index 047cd333..e4b02017 100644 --- a/src/App.scss +++ b/src/App.scss @@ -95,7 +95,7 @@ input, textarea, .select { color: var(--lightFg, $fallback--lightFg); font-family: sans-serif; font-size: 14px; - padding: 8px 7px 4px; + padding: 8px 7px; box-sizing: border-box; display: inline-block; position: relative; @@ -183,8 +183,8 @@ i[class*=icon-] { .item { flex: 1; - line-height: 25px; - height: 25px; + line-height: 50px; + height: 50px; overflow: hidden; .nav-icon { diff --git a/src/components/style_switcher/style_switcher.vue b/src/components/style_switcher/style_switcher.vue index ef4a21bd..9c39b245 100644 --- a/src/components/style_switcher/style_switcher.vue +++ b/src/components/style_switcher/style_switcher.vue @@ -55,32 +55,32 @@ <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"> + <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"> + <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"> + <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"> + <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"> + <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"> + <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> @@ -166,6 +166,7 @@ box-shadow: none; background: transparent; color: var(--faint, $fallback--faint); + align-self: stretch; } .theme-color-cl, @@ -175,7 +176,6 @@ } .theme-color-in { - padding: 5px; min-width: 4em; } @@ -206,7 +206,6 @@ .theme-color-cl { padding: 1px; max-width: 8em; - align-self: stretch; height: 100%; flex: 0; min-width: 2em; diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index 68439681..4d2230cb 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -101,5 +101,7 @@ 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_finder/user_finder.vue b/src/components/user_finder/user_finder.vue index 22d4bd77..69bd1d21 100644 --- a/src/components/user_finder/user_finder.vue +++ b/src/components/user_finder/user_finder.vue @@ -19,13 +19,13 @@ @import '../../_variables.scss'; .user-finder-container { - height: 21px; + height: 29px; max-width: 100%; } .user-finder-input { max-width: 80%; - padding: 0.1em 0.2em 0.2em 0.2em; + vertical-align: middle; } </style> From 38d366f9aaee189b6ad48edea189e1d8b7f66ed6 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 04:23:43 +0300 Subject: [PATCH 13/19] some more improvements. changed the way user-card is layout, but should look the same, except that longer user names should be properly ellipsis-ed. --- .../notifications/notifications.scss | 4 ++ src/components/user_card/user_card.vue | 3 +- .../user_card_content/user_card_content.vue | 38 ++++++++++--------- 3 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/components/notifications/notifications.scss b/src/components/notifications/notifications.scss index e9a60a93..3b7403e4 100644 --- a/src/components/notifications/notifications.scss +++ b/src/components/notifications/notifications.scss @@ -64,6 +64,10 @@ background: linear-gradient(to bottom, rgba(0, 0, 0, 0), var(--bg, $fallback--bg) 80%) } + time { + white-space: nowrap; + } + .text { min-width: 0px; word-wrap: break-word; diff --git a/src/components/user_card/user_card.vue b/src/components/user_card/user_card.vue index 7381ef8f..51d6965f 100644 --- a/src/components/user_card/user_card.vue +++ b/src/components/user_card/user_card.vue @@ -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') }} @@ -26,7 +26,6 @@ .name-and-screen-name { margin-left: 0.7em; margin-top:0.0em; - margin-right: 2em; text-align: left; width: 100%; } diff --git a/src/components/user_card_content/user_card_content.vue b/src/components/user_card_content/user_card_content.vue index 46d1c8b5..68e2583f 100644 --- a/src/components/user_card_content/user_card_content.vue +++ b/src/components/user_card_content/user_card_content.vue @@ -9,9 +9,8 @@ <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> @@ -125,25 +124,21 @@ .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: $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; + .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; + } } } @@ -158,16 +153,24 @@ text-shadow: 0px 1px 1.5px rgba(0, 0, 0, 1.0); + .usersettings { + color: #fff; + opacity: .8; + } + .name-and-screen-name { display: block; margin-left: 0.6em; text-align: left; text-overflow: ellipsis; white-space: nowrap; + flex: 1 1 0; } .user-name{ color: white; + text-overflow: ellipsis; + overflow: hidden; } .user-screen-name { @@ -175,7 +178,6 @@ font-weight: lighter; font-size: 15px; padding-right: 0.1em; - flex: 0 0 auto; } .user-interactions { From 01c56547d077b33a91fef1393115c9fe6797c8af Mon Sep 17 00:00:00 2001 From: imncls <git@imncls.moe> Date: Sun, 8 Apr 2018 18:58:33 +0900 Subject: [PATCH 14/19] Add missing Japanese translation and Update some Japanese translation --- src/i18n/messages.js | 51 ++++++++++++++++++++++++++++++++------------ 1 file changed, 37 insertions(+), 14 deletions(-) diff --git a/src/i18n/messages.js b/src/i18n/messages.js index df923be4..075a3952 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -544,9 +544,13 @@ const ro = { } const ja = { + chat: { + title: 'チャット' + }, nav: { + chat: 'ローカルチャット', timeline: 'タイムライン', - mentions: '通知', + mentions: 'メンション', public_tl: '公開タイムライン', twkn: '接続しているすべてのネットワーク' }, @@ -554,22 +558,26 @@ const ja = { follows_you: 'フォローされました!', following: 'フォロー中!', follow: 'フォロー', + blocked: 'ブロック済み!', + block: 'ブロック', statuses: 'ステータス', mute: 'ミュート', muted: 'ミュート済み', followers: 'フォロワー', followees: 'フォロー', - per_day: '/日' + per_day: '/日', + remote_follow: 'リモートフォロー' }, timeline: { show_new: '新しいものを表示', - error_fetching: '更新の取得中にエラーが発生しました', + error_fetching: '更新の取得中にエラーが発生しました。', up_to_date: '最新', - load_older: '古いステータスを読み込む' + load_older: '古いステータスを読み込む', + conversation: '会話' }, settings: { user_settings: 'ユーザー設定', - name_bio: '名前 & プロフィール', + name_bio: '名前とプロフィール', name: '名前', bio: 'プロフィール', avatar: 'アバター', @@ -582,14 +590,25 @@ const ja = { set_new_profile_background: '新しいプロフィールの背景を設定する', settings: '設定', theme: 'テーマ', + presets: 'プリセット', + theme_help: '16進数カラーコードを使用してカラーテーマをカスタマイズ出来ます。', + background: '背景', + foreground: '前景', + text: '文字', + links: 'リンク', filtering: 'フィルタリング', - filtering_explanation: 'これらの単語を含むすべてのものはミュートされます、1行に1つのワードを入力してください', + filtering_explanation: 'これらの単語を含むすべてのものはミュートされます、1行に1つのワードを入力してください。', attachments: '添付ファイル', - hide_attachments_in_tl: 'タイムラインの添付ファイルを隠す', - hide_attachments_in_convo: '会話の中の添付ファイルを隠す', - nsfw_clickthrough: 'NSFWファイルの非表示を有効にする', - autoload: '下にスクロールした時に自動で読み込むようにする', - reply_link_preview: 'マウスカーソルを重ねたときに返信リンクプレビューを表示するようにする' + hide_attachments_in_tl: 'タイムラインの添付ファイルを隠す。', + hide_attachments_in_convo: '会話の中の添付ファイルを隠す。', + nsfw_clickthrough: 'NSFWファイルの非表示を有効にする。', + stop_gifs: 'カーソルを重ねた時にGIFを再生する。', + autoload: '下にスクロールした時に自動で読み込むようにする。', + streaming: '上までスクロールした時に自動でストリーミングされるようにする。', + reply_link_preview: 'マウスカーソルを重ねたときに返信リンクプレビューを表示するようにする。', + import_followers_from_a_csv_file: 'CSVファイルからフォローをインポートする。', + follows_imported: 'フォローがインポートされました!処理に少し時間がかかるかもしれません。', + follow_import_error: 'フォロワーのインポート中にエラーが発生しました。' }, notifications: { notifications: '通知', @@ -598,7 +617,7 @@ const ja = { }, login: { login: 'ログイン', - username: 'ユーザーネーム', + username: 'ユーザー名', password: 'パスワード', register: '登録', logout: 'ログアウト' @@ -612,14 +631,18 @@ const ja = { }, post_status: { posting: '投稿', - default: 'ちょうど羽田に着陸しました' + default: 'ちょうどL.A.に着陸しました' }, finder: { find_user: 'ユーザー検索', error_fetching_user: 'ユーザー検索でエラーが発生しました' }, general: { - submit: '送信' + submit: '送信', + apply: '適用' + }, + user_profile: { + timeline_title: 'ユーザータイムライン' } } From b97ef22a32c1a624b3be4e59bba018369888cfd5 Mon Sep 17 00:00:00 2001 From: imncls <git@imncls.moe> Date: Sun, 8 Apr 2018 19:07:08 +0900 Subject: [PATCH 15/19] Improve some Japanese translation --- src/i18n/messages.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 075a3952..b0df214c 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -591,21 +591,21 @@ const ja = { settings: '設定', theme: 'テーマ', presets: 'プリセット', - theme_help: '16進数カラーコードを使用してカラーテーマをカスタマイズ出来ます。', + theme_help: '16進数カラーコード (#aabbcc) を使用してカラーテーマをカスタマイズ出来ます。', background: '背景', foreground: '前景', text: '文字', links: 'リンク', filtering: 'フィルタリング', - filtering_explanation: 'これらの単語を含むすべてのものはミュートされます、1行に1つのワードを入力してください。', - attachments: '添付ファイル', - hide_attachments_in_tl: 'タイムラインの添付ファイルを隠す。', - hide_attachments_in_convo: '会話の中の添付ファイルを隠す。', + filtering_explanation: 'これらの単語を含むすべてのものがミュートされます、1行に1つの単語を入力してください。', + attachments: 'ファイル', + hide_attachments_in_tl: 'タイムラインのファイルを隠す。', + hide_attachments_in_convo: '会話の中のファイルを隠す。', nsfw_clickthrough: 'NSFWファイルの非表示を有効にする。', stop_gifs: 'カーソルを重ねた時にGIFを再生する。', autoload: '下にスクロールした時に自動で読み込むようにする。', streaming: '上までスクロールした時に自動でストリーミングされるようにする。', - reply_link_preview: 'マウスカーソルを重ねたときに返信リンクプレビューを表示するようにする。', + reply_link_preview: 'マウスカーソルを重ねた時に返信リンクプレビューを表示するようにする。', import_followers_from_a_csv_file: 'CSVファイルからフォローをインポートする。', follows_imported: 'フォローがインポートされました!処理に少し時間がかかるかもしれません。', follow_import_error: 'フォロワーのインポート中にエラーが発生しました。' @@ -631,7 +631,7 @@ const ja = { }, post_status: { posting: '投稿', - default: 'ちょうどL.A.に着陸しました' + default: 'ちょうどL.A.に着陸した' }, finder: { find_user: 'ユーザー検索', From b6a608b447749f3b3588085073937b7af31178e1 Mon Sep 17 00:00:00 2001 From: imncls <git@imncls.moe> Date: Sun, 8 Apr 2018 19:11:46 +0900 Subject: [PATCH 16/19] Improve some Japanese translation 2 --- src/i18n/messages.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/i18n/messages.js b/src/i18n/messages.js index b0df214c..cc7dfe7d 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -605,7 +605,7 @@ const ja = { stop_gifs: 'カーソルを重ねた時にGIFを再生する。', autoload: '下にスクロールした時に自動で読み込むようにする。', streaming: '上までスクロールした時に自動でストリーミングされるようにする。', - reply_link_preview: 'マウスカーソルを重ねた時に返信リンクプレビューを表示するようにする。', + reply_link_preview: 'マウスカーソルを重ねた時に返信のプレビューを表示するようにする。', import_followers_from_a_csv_file: 'CSVファイルからフォローをインポートする。', follows_imported: 'フォローがインポートされました!処理に少し時間がかかるかもしれません。', follow_import_error: 'フォロワーのインポート中にエラーが発生しました。' From 4bbc3ada5d12cfd1dbccbdcb081246b00735452a Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 14:45:12 +0300 Subject: [PATCH 17/19] fix some incorrect radii --- src/components/nav_panel/nav_panel.vue | 12 ++++++++---- src/components/still-image/still-image.vue | 5 +++-- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue index 04ac5738..5db3f555 100644 --- a/src/components/nav_panel/nav_panel.vue +++ b/src/components/nav_panel/nav_panel.vue @@ -47,13 +47,17 @@ padding: 0; &:first-child a { - border-top-right-radius: 10px; - border-top-left-radius: 10px; + 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: 10px; - border-bottom-left-radius: 10px; + 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); } } diff --git a/src/components/still-image/still-image.vue b/src/components/still-image/still-image.vue index 5fefe714..071e0380 100644 --- a/src/components/still-image/still-image.vue +++ b/src/components/still-image/still-image.vue @@ -16,7 +16,7 @@ width: 100%; height: 100% - &:hover canvas { + &:hover canvas { display: none; } @@ -46,7 +46,8 @@ color: #FFF; display: block; padding: 2px 4px; - border-radius: 3px; + border-radius: $fallback--tooltipRadius; + border-radius: var(--tooltipRadius, $fallback--tooltipRadius); z-index: 2; } } From bc8ae96cac0fa83e11602a0d909c025b4f1f1e89 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Sun, 8 Apr 2018 14:46:36 +0300 Subject: [PATCH 18/19] indent fix (my editor screws up here) --- src/components/still-image/still-image.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/still-image/still-image.vue b/src/components/still-image/still-image.vue index 071e0380..cffd5d42 100644 --- a/src/components/still-image/still-image.vue +++ b/src/components/still-image/still-image.vue @@ -16,7 +16,7 @@ width: 100%; height: 100% - &:hover canvas { + &:hover canvas { display: none; } From bf2d4516d59884c657feed4ebe16bf3f1357bda1 Mon Sep 17 00:00:00 2001 From: Henry Jameson <me@hjkos.com> Date: Mon, 9 Apr 2018 02:10:04 +0300 Subject: [PATCH 19/19] small fix for still-gifs --- src/components/still-image/still-image.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/still-image/still-image.vue b/src/components/still-image/still-image.vue index cffd5d42..a37c678d 100644 --- a/src/components/still-image/still-image.vue +++ b/src/components/still-image/still-image.vue @@ -14,7 +14,7 @@ line-height: 0; overflow: hidden; width: 100%; - height: 100% + height: 100%; &:hover canvas { display: none; @@ -22,7 +22,7 @@ img { width: 100%; - height: 100% + height: 100%; } &.animated {