getting rid of baseXX, some small fixes. Seems to be usable.

This commit is contained in:
Henry Jameson 2018-03-31 21:14:36 +03:00
parent 936ca1a38c
commit aa0564406a
32 changed files with 761 additions and 636 deletions

View File

@ -33,14 +33,18 @@ body {
font-family: sans-serif; font-family: sans-serif;
font-size: 14px; font-size: 14px;
margin: 0; margin: 0;
color: var(--fg);
} }
a { a {
text-decoration: none; text-decoration: none;
color: var(--link);
} }
button{ button{
user-select: none; user-select: none;
color: var(--faint);
background-color: var(--btn);
border: none; border: none;
border-radius: 5px; border-radius: 5px;
cursor: pointer; cursor: pointer;
@ -50,6 +54,8 @@ button{
font-size: 14px; font-size: 14px;
font-family: sans-serif; font-family: sans-serif;
&:hover { &:hover {
box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3); box-shadow: 0px 0px 4px rgba(255, 255, 255, 0.3);
} }
@ -58,8 +64,72 @@ button{
cursor: not-allowed; cursor: not-allowed;
opacity: 0.5; 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 { .container {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
@ -73,8 +143,8 @@ button{
.item { .item {
flex: 1; flex: 1;
line-height: 21px; line-height: 25px;
height: 21px; height: 25px;
overflow: hidden; overflow: hidden;
.nav-icon { .nav-icon {
@ -132,6 +202,8 @@ main-router {
flex-direction: column; flex-direction: column;
margin: 0.5em; margin: 0.5em;
background-color: var(--bg);
border-radius: 10px; border-radius: 10px;
box-shadow: 1px 1px 4px rgba(0,0,0,.6); box-shadow: 1px 1px 4px rgba(0,0,0,.6);
overflow: hidden; overflow: hidden;
@ -151,6 +223,7 @@ main-router {
text-align: left; text-align: left;
font-size: 1.3em; font-size: 1.3em;
line-height: 24px; line-height: 24px;
background-color: var(--btn);
} }
.panel-footer { .panel-footer {
@ -173,6 +246,8 @@ main-router {
nav { nav {
z-index: 1000; z-index: 1000;
background-color: var(--bg);
color: var(--faint);
box-shadow: 0px 0px 4px rgba(0,0,0,.6); box-shadow: 0px 0px 4px rgba(0,0,0,.6);
} }

View File

@ -1,6 +1,6 @@
<template> <template>
<div id="app" v-bind:style="style" class="base02-background"> <div id="app" v-bind:style="style">
<nav class='container base02-background base05' @click="scrollToTop()" id="nav"> <nav class='container' @click="scrollToTop()" id="nav">
<div class='inner-nav' :style="logoStyle"> <div class='inner-nav' :style="logoStyle">
<div class='item'> <div class='item'>
<router-link :to="{ name: 'root'}">{{sitename}}</router-link> <router-link :to="{ name: 'root'}">{{sitename}}</router-link>
@ -14,8 +14,8 @@
</nav> </nav>
<div class="container" id="content"> <div class="container" id="content">
<div class="panel-switcher"> <div class="panel-switcher">
<button @click="activatePanel('sidebar')" class="base02-background base05">Sidebar</button> <button @click="activatePanel('sidebar')">Sidebar</button>
<button @click="activatePanel('timeline')" class="base02-background base05">Timeline</button> <button @click="activatePanel('timeline')">Timeline</button>
</div> </div>
<div class="sidebar-flexer" :class="{ 'mobile-hidden': mobileActivePanel != 'sidebar'}"> <div class="sidebar-flexer" :class="{ 'mobile-hidden': mobileActivePanel != 'sidebar'}">
<div class="sidebar-bounds"> <div class="sidebar-bounds">

View File

@ -1,7 +1,6 @@
$main-color: #f58d2c; $main-color: #f58d2c;
$main-background: white; $main-background: white;
$darkened-background: whitesmoke; $darkened-background: whitesmoke;
$green: #0fa00f; $green_: #0fa00f;
$blue: #0095ff; $blue_: #0095ff;
$red: #ff0000; $red_: #ff0000;

View File

@ -1,5 +1,5 @@
<template> <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()"> <a class="image-attachment" v-if="hidden" @click.prevent="toggleHidden()">
<img :key="nsfwImage" :src="nsfwImage"/> <img :key="nsfwImage" :src="nsfwImage"/>
</a> </a>
@ -8,10 +8,10 @@
</div> </div>
<a v-if="type === 'image' && !hidden" class="image-attachment" :href="attachment.url" target="_blank"> <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> </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> <audio v-if="type === 'audio'" :src="attachment.url" controls></audio>
@ -30,115 +30,111 @@
<script src="./attachment.js"></script> <script src="./attachment.js"></script>
<style lang="scss"> <style lang="scss">
.attachments { .attachments {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
margin-right: -0.7em; margin-right: -0.7em;
.attachment.media-upload-container { .attachment.media-upload-container {
flex: 0 0 auto; flex: 0 0 auto;
max-height: 300px; max-height: 300px;
max-width: 100%; max-width: 100%;
} }
.attachment {
flex: 1 0 30%;
margin: 0.5em 0.7em 0.6em 0.0em;
align-self: flex-start;
border-style: solid; .attachment {
border-width: 1px; flex: 1 0 30%;
border-radius: 5px; margin: 0.5em 0.7em 0.6em 0.0em;
overflow: hidden; align-self: flex-start;
border-color: var(--border);
// fixes small gap below video border-style: solid;
&.video { border-width: 1px;
border-radius: 5px;
overflow: hidden;
// fixes small gap below video
&.video {
line-height: 0; line-height: 0;
} }
&.html { &.html {
flex-basis: 90%; flex-basis: 90%;
width: 100%; width: 100%;
display: flex; display: flex;
} }
&.loading { &.loading {
cursor: progress; cursor: progress;
} }
.hider { .hider {
position: absolute; position: absolute;
margin: 10px; margin: 10px;
padding: 5px; padding: 5px;
background: rgba(230,230,230,0.6); background: rgba(230,230,230,0.6);
font-weight: bold; font-weight: bold;
z-index: 4; z-index: 4;
} }
video { video {
max-height: 500px; max-height: 500px;
height: 100%; height: 100%;
width: 100%; width: 100%;
z-index: 0; z-index: 0;
} }
audio { audio {
width: 100%; width: 100%;
} }
img.media-upload { img.media-upload {
margin-bottom: -2px; margin-bottom: -2px;
max-height: 300px; max-height: 300px;
max-width: 100%; max-width: 100%;
} }
.oembed { .oembed {
width: 100%; width: 100%;
margin-right: 15px; margin-right: 15px;
display: flex; display: flex;
img { img {
width: 100%; width: 100%;
} }
.image { .image {
flex: 1; flex: 1;
img { img {
border: 0px; border: 0px;
border-radius: 5px; border-radius: 5px;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }
} }
.text { .text {
flex: 2; flex: 2;
margin: 8px; margin: 8px;
word-break: break-all; word-break: break-all;
h1 { h1 {
font-size: 14px; font-size: 14px;
margin: 0px; margin: 0px;
} }
} }
} }
a.image-attachment { a.image-attachment {
display: flex; display: flex;
flex: 1; flex: 1;
.still-image { img {
width: 100%; object-fit: contain;
height: 100%; width: 100%;
} height: 100%; /* If this isn't here, chrome will stretch the images */
max-height: 500px;
img { image-orientation: from-image;
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> </style>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="chat-panel"> <div class="chat-panel">
<div class="panel panel-default base01-background"> <div class="panel panel-default">
<div class="panel-heading timeline-heading base02-background base04"> <div class="panel-heading timeline-heading">
<div class="title"> <div class="title">
{{$t('chat.title')}} {{$t('chat.title')}}
</div> </div>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="timeline panel panel-default"> <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') }} {{ $t('timeline.conversation') }}
<span v-if="collapsable" style="float:right;"> <span v-if="collapsable" style="float:right;">
<small><a href="#" @click.prevent="$emit('toggleExpanded')">Collapse</a></small> <small><a href="#" @click.prevent="$emit('toggleExpanded')">Collapse</a></small>

View File

@ -1,7 +1,7 @@
<template> <template>
<div v-if="canDelete"> <div v-if="canDelete">
<a href="#" v-on:click.prevent="deleteStatus()"> <a href="#" v-on:click.prevent="deleteStatus()">
<i class='base09 icon-cancel delete-status'></i> <i class='icon-cancel delete-status'></i>
</a> </a>
</div> </div>
</template> </template>
@ -14,7 +14,8 @@
.icon-cancel,.delete-status { .icon-cancel,.delete-status {
cursor: pointer; cursor: pointer;
&:hover { &:hover {
color: $red; color: $red_;
color: var(--red);
} }
} }
</style> </style>

View File

@ -1,10 +1,10 @@
<template> <template>
<div v-if="loggedIn"> <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> <span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
</div> </div>
<div v-else> <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> <span v-if='status.fave_num > 0'>{{status.fave_num}}</span>
</div> </div>
</template> </template>
@ -17,10 +17,12 @@
animation-duration: 0.6s; animation-duration: 0.6s;
&:hover { &:hover {
color: orange; color: orange;
color: var(--cOrange);
} }
} }
.favorite-button.icon-star { .favorite-button.icon-star {
color: orange; color: orange;
color: var(--cOrange);
} }
</style> </style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="instance-specific-panel"> <div class="instance-specific-panel">
<div class="panel panel-default base01-background"> <div class="panel panel-default">
<div class="panel-body"> <div class="panel-body">
<div v-html="instanceSpecificPanelContent"> <div v-html="instanceSpecificPanelContent">
</div> </div>

View File

@ -1,7 +1,7 @@
<template> <template>
<div class="login panel panel-default base00-background"> <div class="login panel panel-default">
<!-- Default panel contents --> <!-- Default panel contents -->
<div class="panel-heading base02-background base04"> <div class="panel-heading">
{{$t('login.login')}} {{$t('login.login')}}
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -17,11 +17,11 @@
<div class='form-group'> <div class='form-group'>
<div class='login-bottom'> <div class='login-bottom'>
<div><router-link :to="{name: 'registration'}" v-if='registrationOpen' class='register'>{{$t('login.register')}}</router-link></div> <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> </div>
<div v-if="authError" class='form-group'> <div v-if="authError" class='form-group'>
<div class='error base05'>{{authError}}</div> <div class='error'>{{authError}}</div>
</div> </div>
</form> </form>
</div> </div>
@ -33,38 +33,36 @@
<style lang="scss"> <style lang="scss">
.login-form { .login-form {
input { input {
border-width: 1px; border-radius: 5px;
border-style: solid; padding: 0.1em 0.2em 0.2em 0.2em;
border-color: silver; }
border-radius: 5px;
padding: 0.1em 0.2em 0.2em 0.2em;
}
.btn { .btn {
min-height: 28px; min-height: 28px;
width: 10em; width: 10em;
} }
.error { .error {
border-radius: 5px; border-radius: 5px;
text-align: center; text-align: center;
background-color: rgba(255, 48, 16, 0.65); background-color: rgba(255, 48, 16, 0.65);
min-height: 28px; background-color: var(--cRed);
line-height: 28px; min-height: 28px;
} line-height: 28px;
}
.register { .register {
flex: 1 1; flex: 1 1;
} }
.login-bottom { .login-bottom {
margin-top: 1.0em; margin-top: 1.0em;
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
} }
} }
</style> </style>

View File

@ -1,8 +1,8 @@
<template> <template>
<div class="media-upload" @drop.prevent @dragover.prevent="fileDrag" @drop="fileDrop"> <div class="media-upload" @drop.prevent @dragover.prevent="fileDrag" @drop="fileDrop">
<label class="btn btn-default"> <label class="btn btn-default">
<i class="base09 icon-spin4 animate-spin" v-if="uploading"></i> <i class="animate-spin" v-if="uploading"></i>
<i class="base09 icon-upload" v-if="!uploading"></i> <i class="icon-upload" v-if="!uploading"></i>
<input type=file style="position: fixed; top: -100em"></input> <input type=file style="position: fixed; top: -100em"></input>
</label> </label>
</div> </div>

View File

@ -1,24 +1,24 @@
<template> <template>
<div class="nav-panel"> <div class="nav-panel">
<div class="panel panel-default base01-background"> <div class="panel panel-default">
<ul class="base03-border"> <ul>
<li v-if='currentUser'> <li v-if='currentUser'>
<router-link class="base00-background" to='/main/friends'> <router-link to='/main/friends'>
{{ $t("nav.timeline") }} {{ $t("nav.timeline") }}
</router-link> </router-link>
</li> </li>
<li v-if='currentUser'> <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") }} {{ $t("nav.mentions") }}
</router-link> </router-link>
</li> </li>
<li> <li>
<router-link class="base00-background" to='/main/public'> <router-link to='/main/public'>
{{ $t("nav.public_tl") }} {{ $t("nav.public_tl") }}
</router-link> </router-link>
</li> </li>
<li> <li>
<router-link class="base00-background" to='/main/all'> <router-link to='/main/all'>
{{ $t("nav.twkn") }} {{ $t("nav.twkn") }}
</router-link> </router-link>
</li> </li>
@ -30,43 +30,44 @@
<script src="./nav_panel.js" ></script> <script src="./nav_panel.js" ></script>
<style lang="scss"> <style lang="scss">
.nav-panel ul { .nav-panel ul {
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
.nav-panel li { .nav-panel li {
border-bottom: 1px solid; border-bottom: 1px solid;
border-color: inherit; border-color: var(--border);
padding: 0; background-color: var(--bg);
&:first-child a { padding: 0;
border-top-right-radius: 10px; &:first-child a {
border-top-left-radius: 10px; border-top-right-radius: 10px;
} border-top-left-radius: 10px;
&:last-child a { }
border-bottom-right-radius: 10px; &:last-child a {
border-bottom-left-radius: 10px; border-bottom-right-radius: 10px;
} border-bottom-left-radius: 10px;
} }
}
.nav-panel li:last-child { .nav-panel li:last-child {
border: none; border: none;
} }
.nav-panel a { .nav-panel a {
display: block; display: block;
padding: 0.8em 0.85em; padding: 0.8em 0.85em;
&:hover { &:hover {
background-color: transparent; background-color: var(--lightBg);
} }
&.router-link-active { &.router-link-active {
font-weight: bolder; font-weight: bolder;
background-color: transparent; background-color: var(--lightBg);
&:hover { &:hover {
text-decoration: underline; text-decoration: underline;
} }
} }
} }
</style> </style>

View File

@ -27,7 +27,7 @@ const Notifications = {
}, },
hiderStyle () { hiderStyle () {
return { 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%)`
} }
} }
}, },

View File

@ -4,21 +4,33 @@
// a bit of a hack to allow scrolling below notifications // a bit of a hack to allow scrolling below notifications
padding-bottom: 15em; padding-bottom: 15em;
.panel {
background: var(--bg)
}
.panel-body {
border-color: var(--border)
}
.panel-heading { .panel-heading {
// force the text to stay centered, while keeping // force the text to stay centered, while keeping
// the button in the right side of the panel heading // the button in the right side of the panel heading
position: relative; position: relative;
background: var(--btn);
color: var(--faint);
.read-button { .read-button {
position: absolute; position: absolute;
right: 0.7em; right: 0.7em;
height: 1.8em; height: 1.8em;
line-height: 100%; line-height: 100%;
background-color: var(--btn);
color: var(--faint);
} }
} }
.unseen-count { .unseen-count {
display: inline-block; 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); text-shadow: 0px 0px 3px rgba(0, 0, 0, 0.5);
min-width: 1.3em; min-width: 1.3em;
border-radius: 1.3em; border-radius: 1.3em;
@ -27,6 +39,7 @@
font-size: 0.9em; font-size: 0.9em;
text-align: center; text-align: center;
line-height: 1.3em; line-height: 1.3em;
padding: 1px;
} }
.notification { .notification {
@ -48,19 +61,23 @@
overflow: hidden; overflow: hidden;
.icon-retweet.lit { .icon-retweet.lit {
color: $green; color: $green_;
color: var(--cGreen);
} }
.icon-user-plus.lit { .icon-user-plus.lit {
color: $blue; color: $blue_;
color: var(--cBlue);
} }
.icon-reply.lit { .icon-reply.lit {
color: $blue; color: $blue_;
color: var(--cBlue);
} }
.icon-star.lit { .icon-star.lit {
color: orange; color: orange;
color: var(--cOrange);
} }
.status-content { .status-content {
@ -134,7 +151,7 @@
} }
.unseen { .unseen {
border-left: 4px solid rgba(255, 16, 8, 0.75); border-left: 4px solid var(--cRed);
padding-left: 6px; padding-left: 6px;
} }
} }

View File

@ -1,12 +1,12 @@
<template> <template>
<div class="notifications"> <div class="notifications">
<div class="panel panel-default base00-background"> <div class="panel panel-default">
<div class="panel-heading base02-background base04"> <div class="panel-heading">
<span class="unseen-count" v-if="unseenCount">{{unseenCount}}</span> <span class="unseen-count" v-if="unseenCount">{{unseenCount}}</span>
{{$t('notifications.notifications')}} {{$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>
<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 v-for="notification in visibleNotifications" :key="notification" class="notification" :class='{"unseen": !notification.seen}'>
<div> <div>
<a :href="notification.action.user.statusnet_profile_url" target="_blank"> <a :href="notification.action.user.statusnet_profile_url" target="_blank">

View File

@ -1,21 +1,21 @@
<template> <template>
<div class="post-status-form"> <div class="post-status-form">
<form @submit.prevent="postStatus(newStatus)"> <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> <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>
<div style="position:relative;" v-if="candidates"> <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-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-if="candidate.img"><img :src="candidate.img"></span>
<span v-else>{{candidate.utf}}</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 v-else class="autocomplete base04"> <div v-else class="autocomplete">
<span v-if="candidate.img"><img :src="candidate.img"></img></span> <span v-if="candidate.img"><img :src="candidate.img"></img></span>
<span v-else>{{candidate.utf}}</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> </div>
</div> </div>
@ -24,18 +24,18 @@
<media-upload @uploading="disableSubmit" @uploaded="addMediaFile" @upload-failed="enableSubmit" :drop-files="dropFiles"></media-upload> <media-upload @uploading="disableSubmit" @uploaded="addMediaFile" @upload-failed="enableSubmit" :drop-files="dropFiles"></media-upload>
<p v-if="isOverLengthLimit" class="error">{{ charactersLeft }}</p> <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-if="posting" disabled class="btn btn-default">{{$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-if="isOverLengthLimit" disabled class="btn btn-default">{{$t('general.submit')}}</button>
<button v-else :disabled="submitDisabled" type="submit" class="btn btn-default base05 base02-background">{{$t('general.submit')}}</button> <button v-else :disabled="submitDisabled" type="submit" class="btn btn-default">{{$t('general.submit')}}</button>
</div> </div>
<div class='error' v-if="error"> <div class='error' v-if="error">
Error: {{ error }} Error: {{ error }}
<i class="icon-cancel" @click="clearError"></i> <i class="icon-cancel" @click="clearError"></i>
</div> </div>
<div class="attachments"> <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> <i class="fa icon-cancel" @click="removeMediaFile(file)"></i>
<img class="thumbnail media-upload" :src="file.image" v-if="type(file) === 'image'"></img> <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> <video v-if="type(file) === 'video'" :src="file.image" controls></video>
@ -51,146 +51,149 @@
<style lang="scss"> <style lang="scss">
.tribute-container { .tribute-container {
ul { ul {
padding: 0px; padding: 0px;
li { li {
display: flex; display: flex;
align-items: center; align-items: center;
} }
} }
img { img {
padding: 3px; padding: 3px;
width: 16px; width: 16px;
height: 16px; height: 16px;
border-radius: 50%; border-radius: 50%;
} }
} }
.post-status-form, .login { .post-status-form, .login {
.form-bottom { .form-bottom {
display: flex; display: flex;
padding: 0.5em; padding: 0.5em;
height: 32px; height: 32px;
button { button {
width: 10em; width: 10em;
} }
p { p {
margin: 0.35em; margin: 0.35em;
padding: 0.35em; padding: 0.35em;
display: flex; display: flex;
} }
} }
.error { .error {
border-radius: 5px; border-radius: 5px;
text-align: center; text-align: center;
background-color: rgba(255, 48, 16, 0.65); background-color: rgba(255, 48, 16, 0.65);
padding: 0.25em; background-color: var(--cRed);
margin: 0.35em; padding: 0.25em;
display: flex; margin: 0.35em;
} display: flex;
}
.attachments { .attachments {
padding: 0 0.5em; padding: 0 0.5em;
.attachment { .attachment {
position: relative; position: relative;
margin: 0.5em 0.8em 0.2em 0; border: var(--border);
} margin: 0.5em 0.8em 0.2em 0;
}
i { i {
position: absolute; position: absolute;
margin: 10px; margin: 10px;
padding: 5px; padding: 5px;
background: rgba(230,230,230,0.6); background: rgba(230,230,230,0.6);
border-radius: 5px; border-radius: 5px;
font-weight: bold; font-weight: bold;
} }
} }
.btn { .btn {
cursor: pointer; cursor: pointer;
} }
.btn[disabled] { .btn[disabled] {
cursor: not-allowed; cursor: not-allowed;
} }
.icon-cancel { .icon-cancel {
cursor: pointer; cursor: pointer;
} }
form {
display: flex;
flex-direction: column;
padding: 0.6em;
}
.form-group { form {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 0.3em 0.5em 0.6em; padding: 0.6em;
line-height:24px; }
}
form textarea { .form-group {
border: solid; display: flex;
border-width: 1px; flex-direction: column;
border-color: inherit; padding: 0.3em 0.5em 0.6em;
border-radius: 5px; line-height:24px;
line-height:16px; }
padding: 5px;
resize: none;
overflow: hidden;
}
form textarea:focus { form textarea {
min-height: 48px; border-radius: 5px;
} line-height:16px;
padding: 5px;
resize: none;
overflow: hidden;
}
.btn { form textarea:focus {
cursor: pointer; min-height: 48px;
} }
.btn[disabled] { .btn {
cursor: not-allowed; cursor: pointer;
} }
.icon-cancel { .btn[disabled] {
cursor: pointer; cursor: not-allowed;
z-index: 4; }
}
.autocomplete-panel { .icon-cancel {
margin: 0 0.5em 0 0.5em; cursor: pointer;
border-radius: 5px; z-index: 4;
position: absolute; }
z-index: 1;
box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
min-width: 75%;
}
.autocomplete { .autocomplete-panel {
cursor: pointer; margin: 0 0.5em 0 0.5em;
padding: 0.2em 0.4em 0.2em 0.4em; border-radius: 5px;
border-bottom: 1px solid rgba(0, 0, 0, 0.4); position: absolute;
display: flex; z-index: 1;
img { box-shadow: 1px 2px 4px rgba(0, 0, 0, 0.5);
width: 24px; min-width: 75%;
height: 24px; background: var(--btn);
border-radius: 2px; color: var(--lightFg);
object-fit: contain; }
}
span { .autocomplete {
line-height: 24px; cursor: pointer;
margin: 0 0.1em 0 0.2em; padding: 0.2em 0.4em 0.2em 0.4em;
} border-bottom: 1px solid rgba(0, 0, 0, 0.4);
small { display: flex;
font-style: italic; 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> </style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="settings panel panel-default base00-background"> <div class="settings panel panel-default">
<div class="panel-heading base02-background base04"> <div class="panel-heading">
{{$t('registration.registration')}} {{$t('registration.registration')}}
</div> </div>
<div class="panel-body"> <div class="panel-body">
@ -39,14 +39,14 @@
</div> </div>
--> -->
<div class='form-group'> <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> </div>
<div class='terms-of-service' v-html="termsofservice"> <div class='terms-of-service' v-html="termsofservice">
</div> </div>
</div> </div>
<div v-if="error" class='form-group'> <div v-if="error" class='form-group'>
<div class='error base05'>{{error}}</div> <div class='error'>{{error}}</div>
</div> </div>
</form> </form>
</div> </div>
@ -57,63 +57,60 @@
<style lang="scss"> <style lang="scss">
.registration-form { .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; display: flex;
flex-direction: column; flex-direction: column;
} margin: 0.6em;
.form-group { .container {
display: flex; display: flex;
flex-direction: column; flex-direction: row;
padding: 0.3em 0.0em 0.3em; //margin-bottom: 1em;
line-height:24px; }
}
form textarea { .terms-of-service {
border: solid; flex: 0 1 50%;
border-width: 1px; margin: 0.8em;
border-color: silver; }
border-radius: 5px;
line-height:16px;
padding: 5px;
resize: vertical;
}
input { .text-fields {
border-width: 1px; margin-top: 0.6em;
border-style: solid; flex: 1 0;
border-color: silver; display: flex;
border-radius: 5px; flex-direction: column;
padding: 0.1em 0.2em 0.2em 0.2em; }
}
.captcha { .form-group {
max-width: 350px; display: flex;
margin-bottom: 0.4em; flex-direction: column;
} padding: 0.3em 0.0em 0.3em;
line-height:24px;
}
.btn { form textarea {
//align-self: flex-start; border: solid;
//width: 10em; border-width: 1px;
margin-top: 0.6em; border-color: silver;
height: 28px; 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 { .error {
@ -121,6 +118,7 @@
text-align: center; text-align: center;
margin: 0.5em 0.6em 0; margin: 0.5em 0.6em 0;
background-color: rgba(255, 48, 16, 0.65); background-color: rgba(255, 48, 16, 0.65);
background-color: var(--cRed);
min-height: 28px; min-height: 28px;
line-height: 28px; line-height: 28px;
} }

View File

@ -1,10 +1,10 @@
<template> <template>
<div v-if="loggedIn"> <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> <span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
</div> </div>
<div v-else> <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> <span v-if='status.repeat_num > 0'>{{status.repeat_num}}</span>
</div> </div>
</template> </template>
@ -17,10 +17,12 @@
cursor: pointer; cursor: pointer;
animation-duration: 0.6s; animation-duration: 0.6s;
&:hover { &:hover {
color: $green; color: $green_;
color: var(--cGreen);
} }
} }
.icon-retweet.retweeted { .icon-retweet.retweeted {
color: $green; color: $green_;
color: var(--cGreen);
} }
</style> </style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="settings panel panel-default base00-background"> <div class="settings panel panel-default">
<div class="panel-heading base02-background base04"> <div class="panel-heading">
{{$t('settings.settings')}} {{$t('settings.settings')}}
</div> </div>
<div class="panel-body"> <div class="panel-body">

View File

@ -55,11 +55,6 @@ const Status = {
}, },
muted () { return !this.unmuted && (this.status.user.muted || this.muteWordHits.length > 0) }, muted () { return !this.unmuted && (this.status.user.muted || this.muteWordHits.length > 0) },
isReply () { return !!this.status.in_reply_to_status_id }, isReply () { return !!this.status.in_reply_to_status_id },
borderColor () {
return {
borderBottomColor: this.$store.state.config.colors['base02']
}
},
isFocused () { isFocused () {
// retweet or root of an expanded conversation // retweet or root of an expanded conversation
if (this.focused) { if (this.focused) {

View File

@ -1,11 +1,11 @@
<template> <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 @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
<div v-if="loggedIn"> <div v-if="loggedIn">
<div class='status-actions'> <div class='status-actions'>
<div> <div>
<a href="#" v-on:click.prevent="toggleReplying"> <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> </a>
</div> </div>
<retweet-button :loggedIn="loggedIn" :status=status></retweet-button> <retweet-button :loggedIn="loggedIn" :status=status></retweet-button>
@ -14,12 +14,12 @@
</div> </div>
<post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying" v-if="replying"/> <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>
<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"> <template v-if="muted">
<div class="media status container 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><router-link :to="{ name: 'user-profile', params: { id: status.user.id } }">{{status.user.screen_name}}</router-link></small>
<small class="muteWords">{{muteWordHits.join(', ')}}</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> </div>
</template> </template>
<template v-if="!muted"> <template v-if="!muted">
@ -39,7 +39,7 @@
</a> </a>
</div> </div>
<div class="media-body"> <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> <user-card-content :user="status.user" :switcher="false"></user-card-content>
</div> </div>
<div class="user-content"> <div class="user-content">
@ -75,15 +75,15 @@
</h4> </h4>
</div> </div>
<div class="heading-icons"> <div class="heading-icons">
<a href="#" @click.prevent="toggleMute" v-if="unmuted"><i class="base09 icon-eye-off"></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="base09 icon-binoculars"></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"> <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> </template>
</div> </div>
</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"/> <StillImage class="avatar" :src="preview.user.profile_image_url_original"/>
<div class="text"> <div class="text">
<h4> <h4>
@ -93,8 +93,8 @@
<div @click.prevent="linkClicked" class="status-content" v-html="preview.statusnet_html"></div> <div @click.prevent="linkClicked" class="status-content" v-html="preview.statusnet_html"></div>
</div> </div>
</div> </div>
<div class="status-preview status-preview-loading base00-background base03-border" v-else-if="showPreview"> <div class="status-preview status-preview-loading" v-else-if="showPreview">
<i class="base09 icon-spin4 animate-spin"></i> <i class="icon-spin4 animate-spin"></i>
</div> </div>
<div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div> <div @click.prevent="linkClicked" class="status-content" v-html="status.statusnet_html"></div>
@ -108,7 +108,7 @@
<div class='status-actions'> <div class='status-actions'>
<div v-if="loggedIn"> <div v-if="loggedIn">
<a href="#" v-on:click.prevent="toggleReplying"> <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> </a>
</div> </div>
<retweet-button :loggedIn="loggedIn" :status=status></retweet-button> <retweet-button :loggedIn="loggedIn" :status=status></retweet-button>
@ -117,7 +117,7 @@
</div> </div>
</div> </div>
</div> </div>
<div class="status base00-background container" v-if="replying"> <div class="status container" v-if="replying">
<div class="reply-left"/> <div class="reply-left"/>
<post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying"/> <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" v-on:posted="toggleReplying"/>
</div> </div>
@ -128,18 +128,19 @@
<script src="./status.js" ></script> <script src="./status.js" ></script>
<style lang="scss"> <style lang="scss">
@import '../../_variables.scss'; @import '../../_variables.scss';
status-text-container { status-text-container {
display: block; display: block;
} }
.status-preview { .status-preview {
position: absolute; position: absolute;
max-width: 34em; max-width: 34em;
padding: 0.5em; padding: 0.5em;
display: flex; display: flex;
border-color: inherit; background-color: var(--bg);
border-color: var(--border);
border-style: solid; border-style: solid;
border-width: 1px; border-width: 1px;
border-radius: 4px; border-radius: 4px;
@ -149,182 +150,198 @@
z-index: 50; z-index: 50;
.avatar { .avatar {
flex-shrink: 0; flex-shrink: 0;
width: 32px; width: 32px;
height: 32px; height: 32px;
border-radius: 50%; 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; display: block;
font-size: 2em; font-size: 2em;
min-width: 8em; min-width: 8em;
text-align: center; text-align: center;
} }
.status-el { .status-el {
hyphens: auto; hyphens: auto;
overflow-wrap: break-word; overflow-wrap: break-word;
word-wrap: break-word; word-wrap: break-word;
word-break: break-word; word-break: break-word;
border-left-width: 0px; border-left-width: 0px;
line-height: 18px; 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-width: 1px;
border-bottom-style: solid; border-bottom-style: solid;
} }
.notify { .notify {
.avatar { .avatar {
border-width: 3px; border-width: 3px;
border-style: solid; border-style: solid;
} }
} }
.media-body { .media-body {
flex: 1; flex: 1;
padding-left: 0.5em; padding-left: 0.5em;
} }
.user-content { .user-content {
min-height: 52px; min-height: 52px;
padding-top: 1px; padding-top: 1px;
} }
.media-heading { .media-heading {
display: flex; display: flex;
min-height: 1.4em; min-height: 1.4em;
margin-bottom: 0.3em; margin-bottom: 0.3em;
small { small {
font-weight: lighter; font-weight: lighter;
} }
h4 { h4 {
margin-right: 0.4em; margin-right: 0.4em;
} }
.name-and-links { .name-and-links {
flex: 1 0; flex: 1 0;
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
} }
.replies { .replies {
flex-basis: 100%; flex-basis: 100%;
} }
} }
.source_url { .source_url {
} }
.expand { .expand {
margin-right: -0.3em; margin-right: -0.3em;
} }
a { a {
display: inline-block; display: inline-block;
word-break: break-all; word-break: break-all;
} }
.status-content { .status-content {
margin: 3px 15px 4px 0; margin: 3px 15px 4px 0;
max-height: 400px; max-height: 400px;
overflow-y: auto; overflow-y: auto;
overflow-x: hidden; overflow-x: hidden;
img, video { img, video {
max-width: 100%; max-width: 100%;
max-height: 400px; max-height: 400px;
vertical-align: middle; vertical-align: middle;
object-fit: contain; object-fit: contain;
} }
blockquote { blockquote {
margin: 0.2em 0 0.2em 2em; margin: 0.2em 0 0.2em 2em;
font-style: italic; font-style: italic;
} }
} }
p { p {
margin: 0; margin: 0;
margin-top: 0.2em; margin-top: 0.2em;
margin-bottom: 0.5em; margin-bottom: 0.5em;
} }
.media-left { .media-left {
margin: 0.2em 0.3em 0 0; margin: 0.2em 0.3em 0 0;
.avatar { .avatar {
float: right; float: right;
border-radius: 5px;
} }
} }
.retweet-info { .retweet-info {
padding: 0.7em 0 0 0.6em; padding: 0.7em 0 0 0.6em;
.media-left { .media-left {
display: flex; display: flex;
i { i {
align-self: center; align-self: center;
text-align: right; text-align: right;
flex: 1; flex: 1;
padding-right: 0.3em; padding-right: 0.3em;
} }
} }
} }
}
.status-fadein {
animation-duration: 0.5s;
animation-name: fadein;
}
@keyframes fadein { }
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.greentext { .status-fadein {
color: green; animation-duration: 0.5s;
} animation-name: fadein;
}
.status-conversation { @keyframes fadein {
border-left-style: solid; from {
} opacity: 0;
}
to {
opacity: 1;
}
}
.status-actions { .greentext {
padding-top: 0.15em; color: green;
width: 100%; }
display: flex;
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; max-width: 6em;
flex: 1; flex: 1;
} }
} }
.icon-reply:hover { .icon-reply:hover {
color: $blue; color: $blue_;
color: var(--cBlue);
} }
.icon-reply.icon-reply-active { .icon-reply.icon-reply-active {
color: $blue; color: $blue_;
color: var(--cBlue);
} }
.status .avatar { .status .avatar {
@ -373,7 +390,7 @@
.status { .status {
padding: 0.4em 0.7em 0.45em 0.7em; 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; border-left-style: inherit;
} }

View File

@ -21,10 +21,10 @@ export default {
}) })
}, },
mounted () { mounted () {
this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors['base00']) this.bgColorLocal = rgbstr2hex(this.$store.state.config.colors.bg)
this.fgColorLocal = rgbstr2hex(this.$store.state.config.colors['base02']) this.fgColorLocal = rgbstr2hex(this.$store.state.config.colors.lightBg)
this.textColorLocal = rgbstr2hex(this.$store.state.config.colors['base05']) this.textColorLocal = rgbstr2hex(this.$store.state.config.colors.fg)
this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors['base08']) this.linkColorLocal = rgbstr2hex(this.$store.state.config.colors.link)
}, },
methods: { methods: {
setCustomTheme () { setCustomTheme () {

View File

@ -7,22 +7,22 @@
<p>{{$t('settings.theme_help')}}</p> <p>{{$t('settings.theme_help')}}</p>
<div class="color-container"> <div class="color-container">
<div class="color-item"> <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" class="theme-color-cl" type="color" v-model="bgColorLocal">
<input id="bgcolor-t" class="theme-color-in" type="text" v-model="bgColorLocal"> <input id="bgcolor-t" class="theme-color-in" type="text" v-model="bgColorLocal">
</div> </div>
<div class="color-item"> <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" 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-t" class="theme-color-in" type="text" v-model="fgColorLocal">
</div> </div>
<div class="color-item"> <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" class="theme-color-cl" type="color" v-model="textColorLocal">
<input id="textcolor-t" class="theme-color-in" type="text" v-model="textColorLocal"> <input id="textcolor-t" class="theme-color-in" type="text" v-model="textColorLocal">
</div> </div>
<div class="color-item"> <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" class="theme-color-cl" type="color" v-model="linkColorLocal">
<input id="linkcolor-t" class="theme-color-in" type="text" v-model="linkColorLocal"> <input id="linkcolor-t" class="theme-color-in" type="text" v-model="linkColorLocal">
</div> </div>
@ -40,7 +40,7 @@
</div> </div>
</div> </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> </div>
</template> </template>
@ -63,6 +63,10 @@
flex: 1 1 0; flex: 1 1 0;
align-items: baseline; align-items: baseline;
margin: 5px 6px 5px 0; margin: 5px 6px 5px 0;
label {
color: var(--faint);
}
} }
.theme-color-cl, .theme-color-cl,
.theme-color-in { .theme-color-in {

View File

@ -1,48 +1,48 @@
<template> <template>
<div class="timeline panel panel-default" v-if="viewing == 'statuses'"> <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"> <div class="title">
{{title}} {{title}}
</div> </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}} {{$t('timeline.show_new')}}{{newStatusCountStr}}
</button> </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')}} {{$t('timeline.error_fetching')}}
</div> </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')}} {{$t('timeline.up_to_date')}}
</div> </div>
</div> </div>
<div class="panel-body base01-background"> <div class="panel-body">
<div class="timeline"> <div class="timeline">
<status-or-conversation v-for="status in timeline.visibleStatuses" :key="status.id" v-bind:statusoid="status"></status-or-conversation> <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"> <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> </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>
</div> </div>
<div class="timeline panel panel-default" v-else-if="viewing == 'followers'"> <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"> <div class="title">
{{$t('user_card.followers')}} {{$t('user_card.followers')}}
</div> </div>
</div> </div>
<div class="panel-body base01-background"> <div class="panel-body">
<div class="timeline"> <div class="timeline">
<user-card v-for="follower in followers" :key="follower.id" :user="follower" :showFollows="false"></user-card> <user-card v-for="follower in followers" :key="follower.id" :user="follower" :showFollows="false"></user-card>
</div> </div>
</div> </div>
</div> </div>
<div class="timeline panel panel-default" v-else-if="viewing == 'friends'"> <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"> <div class="title">
{{$t('user_card.followees')}} {{$t('user_card.followees')}}
</div> </div>
</div> </div>
<div class="panel-body base01-background"> <div class="panel-body">
<div class="timeline"> <div class="timeline">
<user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card> <user-card v-for="friend in friends" :key="friend.id" :user="friend" :showFollows="true"></user-card>
</div> </div>
@ -79,13 +79,16 @@
font-size: 14px; font-size: 14px;
min-width: 6em; min-width: 6em;
border-radius: 5px; border-radius: 5px;
background-color: transparent;
color: var(--faint);
font-family: sans-serif; font-family: sans-serif;
text-align: center; text-align: center;
padding: 0 0.5em 0 0.5em; padding: 0 0.5em 0 0.5em;
opacity: 0.8; opacity: 0.8;
} }
.error { .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-width: 1px 0 0 0;
border-style: solid; border-style: solid;
border-radius: 0 0 10px 10px; border-radius: 0 0 10px 10px;
border-color: var(--border);
padding: 10px; padding: 10px;
z-index: 1; z-index: 1;
} }

View File

@ -1,5 +1,5 @@
<template> <template>
<div class="card base00-background"> <div class="card">
<a href="#"> <a href="#">
<img @click.prevent="toggleUserExpanded" class="avatar" :src="user.profile_image_url"> <img @click.prevent="toggleUserExpanded" class="avatar" :src="user.profile_image_url">
</a> </a>
@ -21,24 +21,24 @@
<script src="./user_card.js"></script> <script src="./user_card.js"></script>
<style lang="scss"> <style lang="scss">
.name-and-screen-name { .name-and-screen-name {
margin-left: 0.7em; margin-left: 0.7em;
margin-top:0.0em; margin-top:0.0em;
margin-right: 2em; margin-right: 2em;
text-align: left; text-align: left;
width: 100%; width: 100%;
} }
.follows-you { .follows-you {
margin-left: 2em; margin-left: 2em;
float: right; float: right;
} }
.follows { .follows {
} }
.card { .card {
display: flex; display: flex;
flex: 1 0; flex: 1 0;
padding-top: 0.6em; padding-top: 0.6em;
@ -47,18 +47,17 @@
padding-left: 1em; padding-left: 1em;
border-bottom: 1px solid; border-bottom: 1px solid;
margin: 0; margin: 0;
border-bottom-color: inherit; border-bottom-color: var(--border);
.avatar { .avatar {
margin-top: 0.2em; margin-top: 0.2em;
width:32px; width:32px;
height: 32px; height: 32px;
border-radius: 50%; border-radius: 50%;
} }
} }
.usercard { .usercard {
width: fill-available; width: fill-available;
margin: 0.2em 0 0.7em 0; margin: 0.2em 0 0.7em 0;
border-radius: 10px; border-radius: 10px;
@ -67,6 +66,9 @@
border-width: 1px; border-width: 1px;
overflow: hidden; overflow: hidden;
.panel-heading {
background: transparent;
}
p { p {
margin-bottom: 0; margin-bottom: 0;
} }

View File

@ -5,7 +5,7 @@ export default {
props: [ 'user', 'switcher' ], props: [ 'user', 'switcher' ],
computed: { computed: {
headingStyle () { headingStyle () {
const color = this.$store.state.config.colors['base00'] const color = this.$store.state.config.colors.bg
if (color) { if (color) {
const rgb = hex2rgb(color) const rgb = hex2rgb(color)
console.log(rgb) console.log(rgb)
@ -17,7 +17,7 @@ export default {
}, },
bodyStyle () { bodyStyle () {
return { 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 () { isOtherUser () {

View File

@ -18,30 +18,30 @@
</div> </div>
</div> </div>
<div v-if="isOtherUser" class="user-interactions"> <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') }} {{ $t('user_card.follows_you') }}
</div> </div>
<div class="follow" v-if="loggedIn"> <div class="follow" v-if="loggedIn">
<span v-if="user.following"> <span v-if="user.following">
<!--Following them!--> <!--Following them!-->
<button @click="unfollowUser" class="base04 base00-background pressed"> <button @click="unfollowUser" class="pressed">
{{ $t('user_card.following') }} {{ $t('user_card.following') }}
</button> </button>
</span> </span>
<span v-if="!user.following"> <span v-if="!user.following">
<button @click="followUser" class="base05 base02-background"> <button @click="followUser">
{{ $t('user_card.follow') }} {{ $t('user_card.follow') }}
</button> </button>
</span> </span>
</div> </div>
<div class='mute' v-if='isOtherUser'> <div class='mute' v-if='isOtherUser'>
<span v-if='user.muted'> <span v-if='user.muted'>
<button @click="toggleMute" class="base04 base00-background pressed"> <button @click="toggleMute" class="pressed">
{{ $t('user_card.muted') }} {{ $t('user_card.muted') }}
</button> </button>
</span> </span>
<span v-if='!user.muted'> <span v-if='!user.muted'>
<button @click="toggleMute" class="base05 base02-background"> <button @click="toggleMute">
{{ $t('user_card.mute') }} {{ $t('user_card.mute') }}
</button> </button>
</span> </span>
@ -50,19 +50,19 @@
<form method="POST" :action='subscribeUrl'> <form method="POST" :action='subscribeUrl'>
<input type="hidden" name="nickname" :value="user.screen_name"> <input type="hidden" name="nickname" :value="user.screen_name">
<input type="hidden" name="profile" value=""> <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') }} {{ $t('user_card.remote_follow') }}
</button> </button>
</form> </form>
</div> </div>
<div class='block' v-if='isOtherUser && loggedIn'> <div class='block' v-if='isOtherUser && loggedIn'>
<span v-if='user.statusnet_blocking'> <span v-if='user.statusnet_blocking'>
<button @click="unblockUser" class="base04 base00-background pressed"> <button @click="unblockUser" class="pressed">
{{ $t('user_card.blocked') }} {{ $t('user_card.blocked') }}
</button> </button>
</span> </span>
<span v-if='!user.statusnet_blocking'> <span v-if='!user.statusnet_blocking'>
<button @click="blockUser" class="base05 base02-background"> <button @click="blockUser">
{{ $t('user_card.block') }} {{ $t('user_card.block') }}
</button> </button>
</span> </span>
@ -73,19 +73,19 @@
<div class="panel-body profile-panel-body" :style="bodyStyle"> <div class="panel-body profile-panel-body" :style="bodyStyle">
<div class="user-counts"> <div class="user-counts">
<div class="user-count"> <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> <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>
<div class="user-count"> <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> <h5 v-else>{{ $t('user_card.followees') }}</h5>
<span class="base05">{{user.friends_count}}</span> <span>{{user.friends_count}}</span>
</div> </div>
<div class="user-count"> <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> <h5 v-else>{{ $t('user_card.followers') }}</h5>
<span class="base05">{{user.followers_count}}</span> <span>{{user.followers_count}}</span>
</div> </div>
</div> </div>
<p>{{user.description}}</p> <p>{{user.description}}</p>

View File

@ -1,13 +1,13 @@
<template> <template>
<span class="user-finder-container"> <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"/> <i class="icon-cancel user-finder-icon" @click="dismissError"/>
{{$t('finder.error_fetching_user')}} {{$t('finder.error_fetching_user')}}
</span> </span>
<i class="icon-spin4 user-finder-icon animate-spin-slow" v-if="loading" /> <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> <a href="#" v-if="hidden"><i class="icon-user-plus user-finder-icon" @click.prevent.stop="toggleHidden"/></a>
<span v-else> <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"/> <i class="icon-cancel user-finder-icon" @click.prevent.stop="toggleHidden"/>
</span> </span>
</span> </span>
@ -25,9 +25,6 @@
} }
.user-finder-input { .user-finder-input {
border-width: 1px;
border-style: solid;
border-color: inherit;
border-radius: 5px; border-radius: 5px;
max-width: 80%; max-width: 80%;
padding: 0.1em 0.2em 0.2em 0.2em; padding: 0.1em 0.2em 0.2em 0.2em;
@ -38,5 +35,6 @@
margin: 0.35em; margin: 0.35em;
border-radius: 5px; border-radius: 5px;
padding: 0.25em; padding: 0.25em;
color: var(--faint);
} }
</style> </style>

View File

@ -2,7 +2,7 @@
<div class="user-panel"> <div class="user-panel">
<div v-if='user' class="panel panel-default" style="overflow: visible;"> <div v-if='user' class="panel panel-default" style="overflow: visible;">
<user-card-content :user="user" :switcher="false"></user-card-content> <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> <post-status-form v-if='user'></post-status-form>
</div> </div>
</div> </div>
@ -11,3 +11,11 @@
</template> </template>
<script src="./user_panel.js"></script> <script src="./user_panel.js"></script>
<style lang="scss">
.user-panel {
.panel-heading {
background: transparent;
}
}
</style>

View File

@ -1,6 +1,6 @@
<template> <template>
<div> <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> <user-card-content :user="user" :switcher="true"></user-card-content>
</div> </div>
<Timeline :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="userId"/> <Timeline :title="$t('user_profile.timeline_title')" :timeline="timeline" :timeline-name="'user'" :user-id="userId"/>
@ -16,6 +16,9 @@
flex-basis: 500px; flex-basis: 500px;
padding-bottom: 10px; padding-bottom: 10px;
border-radius: 10px; border-radius: 10px;
.panel-heading {
background: transparent;
}
} }
</style> </style>

View File

@ -1,16 +1,16 @@
<template> <template>
<div class="settings panel panel-default base00-background"> <div class="settings panel panel-default">
<div class="panel-heading base02-background base04"> <div class="panel-heading">
{{$t('settings.user_settings')}} {{$t('settings.user_settings')}}
</div> </div>
<div class="panel-body profile-edit"> <div class="panel-body profile-edit">
<div class="setting-item"> <div class="setting-item">
<h3>{{$t('settings.name_bio')}}</h3> <h3>{{$t('settings.name_bio')}}</h3>
<p>{{$t('settings.name')}}</p> <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> <p>{{$t('settings.bio')}}</p>
<textarea class="bio base03-border" v-model="newbio"></textarea> <textarea class="bio" v-model="newbio"></textarea>
<button :disabled='newname.length <= 0' class="btn btn-default base05 base02-background" @click="updateProfile">{{$t('general.submit')}}</button> <button :disabled='newname.length <= 0' class="btn btn-default" @click="updateProfile">{{$t('general.submit')}}</button>
</div> </div>
<div class="setting-item"> <div class="setting-item">
<h3>{{$t('settings.avatar')}}</h3> <h3>{{$t('settings.avatar')}}</h3>
@ -22,8 +22,8 @@
<div> <div>
<input type="file" @change="uploadFile(0, $event)" ></input> <input type="file" @change="uploadFile(0, $event)" ></input>
</div> </div>
<i class="base09 icon-spin4 animate-spin" v-if="uploading[0]"></i> <i class="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> <button class="btn btn-default" v-else-if="previews[0]" @click="submitAvatar">{{$t('general.submit')}}</button>
</div> </div>
<div class="setting-item"> <div class="setting-item">
<h3>{{$t('settings.profile_banner')}}</h3> <h3>{{$t('settings.profile_banner')}}</h3>
@ -35,8 +35,8 @@
<div> <div>
<input type="file" @change="uploadFile(1, $event)" ></input> <input type="file" @change="uploadFile(1, $event)" ></input>
</div> </div>
<i class="base09 icon-spin4 animate-spin uploading" v-if="uploading[1]"></i> <i class=" 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> <button class="btn btn-default" v-else-if="previews[1]" @click="submitBanner">{{$t('general.submit')}}</button>
</div> </div>
<div class="setting-item"> <div class="setting-item">
<h3>{{$t('settings.profile_background')}}</h3> <h3>{{$t('settings.profile_background')}}</h3>
@ -46,8 +46,8 @@
<div> <div>
<input type="file" @change="uploadFile(2, $event)" ></input> <input type="file" @change="uploadFile(2, $event)" ></input>
</div> </div>
<i class="base09 icon-spin4 animate-spin uploading" v-if="uploading[2]"></i> <i class=" 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> <button class="btn btn-default" v-else-if="previews[2]" @click="submitBg">{{$t('general.submit')}}</button>
</div> </div>
<div class="setting-item" v-if="pleromaBackend"> <div class="setting-item" v-if="pleromaBackend">
<h3>{{$t('settings.follow_import')}}</h3> <h3>{{$t('settings.follow_import')}}</h3>
@ -55,8 +55,8 @@
<form v-model="followImportForm"> <form v-model="followImportForm">
<input type="file" ref="followlist" v-on:change="followListChange"></input> <input type="file" ref="followlist" v-on:change="followListChange"></input>
</form> </form>
<i class="base09 icon-spin4 animate-spin uploading" v-if="uploading[3]"></i> <i class=" 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> <button class="btn btn-default" v-else @click="importFollows">{{$t('general.submit')}}</button>
<div v-if="followsImported"> <div v-if="followsImported">
<i class="icon-cross" @click="dismissImported"></i> <i class="icon-cross" @click="dismissImported"></i>
<p>{{$t('settings.follows_imported')}}</p> <p>{{$t('settings.follows_imported')}}</p>
@ -76,8 +76,6 @@
<style lang="scss"> <style lang="scss">
.profile-edit { .profile-edit {
.name-changer { .name-changer {
border-width: 1px;
border-style: solid;
border-radius: 5px; border-radius: 5px;
padding: 0.2em 0.2em 0.2em 0.2em; padding: 0.2em 0.2em 0.2em 0.2em;
} }
@ -85,11 +83,15 @@
padding: 0.2em 0.5em 0.2em 0.5em; padding: 0.2em 0.5em 0.2em 0.5em;
} }
.bio { .bio {
border-width: 1px;
border-style: solid;
border-radius: 5px; border-radius: 5px;
margin: 0; margin: 0;
} }
input[type=file] {
padding: 5px;
border-radius: 5px;
}
.banner { .banner {
max-width: 400px; max-width: 400px;
border-radius: 5px; border-radius: 5px;

View File

@ -45,12 +45,10 @@ const setStyle = (href, commit) => {
const styleEl = document.createElement('style') const styleEl = document.createElement('style')
head.appendChild(styleEl) head.appendChild(styleEl)
const styleSheet = styleEl.sheet // const styleSheet = styleEl.sheet
styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max') // styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max')
styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max') // styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max')
styleSheet.insertRule(`.base05-border { border-color: ${colors['base05']}`, 'index-max')
styleSheet.insertRule(`.base03-border { border-color: ${colors['base03']}`, 'index-max')
body.style.display = 'initial' body.style.display = 'initial'
} }
@ -74,28 +72,30 @@ const setColors = (col, commit) => {
mod = mod * -1 mod = mod * -1
} }
colors['base00'] = rgb2hex(col.bg.r, col.bg.g, col.bg.b) // background colors.bg = 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.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['base02'] = rgb2hex(col.fg.r, col.fg.g, col.fg.b) // panels & buttons colors.btn = 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.border = 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.faint = 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.fg = 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.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['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.link = 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.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 const colorVars = Object.entries(colors).map(([k, v]) => {
times(num, (n) => { return `--${k}: ${v}`
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')
}) })
console.log(colorVars)
styleSheet.insertRule(`a { color: ${colors['base08']}`, 'index-max') styleSheet.insertRule(`body { ${colorVars.join(';')} }`, 'index-max')
styleSheet.insertRule(`body { color: ${colors['base05']}`, 'index-max') // styleSheet.insertRule(`.base05-border { border-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(`.base03-border { border-color: ${colors['base03']}`, 'index-max')
body.style.display = 'initial' body.style.display = 'initial'
commit('setOption', { name: 'colors', value: colors }) commit('setOption', { name: 'colors', value: colors })