mirror of
https://github.com/nkanaev/yarr.git
synced 2025-05-24 00:33:14 +00:00
design tweaks
This commit is contained in:
parent
d07a5fd173
commit
22c463fd77
@ -12,43 +12,43 @@
|
||||
<div class="vh-100 overflow-auto border-right flex-shrink-0" style="width: 300px">
|
||||
<div class="p-2">
|
||||
<div class="mb-5">
|
||||
<label class="nav-select">
|
||||
<label class="selectgroup">
|
||||
<input type="radio" name="filter" value="" v-model="filterSelected">
|
||||
<div class="menu-item d-flex align-items-center w-100">
|
||||
<div class="selectgroup-label d-flex align-items-center w-100">
|
||||
<span class="icon mr-2">{% inline "circle-full.svg" %}</span>
|
||||
<span class="flex-fill text-left text-truncate">All</span>
|
||||
<span class="counter text-right"></span>
|
||||
</div>
|
||||
</label>
|
||||
<label class="nav-select">
|
||||
<label class="selectgroup">
|
||||
<input type="radio" name="filter" value="unread" v-model="filterSelected">
|
||||
<div class="menu-item d-flex align-items-center w-100">
|
||||
<div class="selectgroup-label d-flex align-items-center w-100">
|
||||
<span class="icon mr-2">{% inline "circle.svg" %}</span>
|
||||
<span class="flex-fill text-left text-truncate">Unread</span>
|
||||
<span class="counter text-right">{{totalStats.unread || ''}}</span>
|
||||
</div>
|
||||
</label>
|
||||
<label class="nav-select">
|
||||
<label class="selectgroup">
|
||||
<input type="radio" name="filter" value="starred" v-model="filterSelected">
|
||||
<div class="menu-item d-flex align-items-center w-100">
|
||||
<div class="selectgroup-label d-flex align-items-center w-100">
|
||||
<span class="icon mr-2">{% inline "star.svg" %}</span>
|
||||
<span class="flex-fill text-left text-truncate">Starred</span>
|
||||
<span class="counter text-right">{{totalStats.starred || ''}}</span>
|
||||
</div>
|
||||
</label>
|
||||
</div>
|
||||
<label class="nav-select">
|
||||
<label class="selectgroup">
|
||||
<input type="radio" name="feed" value="" v-model="feedSelected">
|
||||
<div class="menu-item d-flex align-items-center w-100">
|
||||
<div class="selectgroup-label d-flex align-items-center w-100">
|
||||
<span class="icon mr-2">{% inline "layers.svg" %}</span>
|
||||
<span class="flex-fill text-left text-truncate">All Feeds</span>
|
||||
<span class="counter text-right"></span>
|
||||
</div>
|
||||
</label>
|
||||
<div v-for="folder in foldersWithFeeds">
|
||||
<label class="nav-select mt-1">
|
||||
<label class="selectgroup mt-1">
|
||||
<input type="radio" name="feed" :value="'folder:'+folder.id" v-model="feedSelected">
|
||||
<div class="menu-item d-flex align-items-center w-100" v-if="folder.id">
|
||||
<div class="selectgroup-label d-flex align-items-center w-100" v-if="folder.id">
|
||||
<span class="icon mr-2"
|
||||
:class="{expanded: folder.is_expanded}"
|
||||
@click.prevent="toggleFolderExpanded(folder)">
|
||||
@ -59,10 +59,10 @@
|
||||
</div>
|
||||
</label>
|
||||
<div v-show="!folder.id || folder.is_expanded" class="mt-1" :class="{'pl-3': folder.id}">
|
||||
<label class="nav-select"
|
||||
<label class="selectgroup"
|
||||
v-for="feed in folder.feeds">
|
||||
<input type="radio" name="feed" :value="'feed:'+feed.id" v-model="feedSelected">
|
||||
<div class="menu-item d-flex align-items-center w-100">
|
||||
<div class="selectgroup-label d-flex align-items-center w-100">
|
||||
<span class="icon mr-2">{% inline "rss.svg" %}</span>
|
||||
<span class="flex-fill text-left text-truncate">{{ feed.title }}</span>
|
||||
<span class="counter text-right">{{filteredFeedStats[feed.id] || ''}}</span>
|
||||
@ -73,61 +73,59 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="vh-100 d-flex flex-column border-right flex-shrink-0" style="width: 300px">
|
||||
<div class="d-flex">
|
||||
<input class="form-control" type="" v-model="itemSearch">
|
||||
<div class="p-2 border-bottom" v-if="filterSelected != 'starred'">
|
||||
<button class="btn btn-outline-secondary p-0" @click="markItemsRead()">
|
||||
<span class="icon">{% inline "layers.svg" %}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="px-2 toolbar d-flex align-items-center">
|
||||
<button class="toolbar-item">
|
||||
<span class="icon">{% inline "search.svg" %}</span>
|
||||
</button>
|
||||
<input class="d-block toolbar-search" type="" v-model="itemSearch">
|
||||
<div class="flex-grow-1"> </div>
|
||||
<button class="toolbar-item" @click="markItemsRead()" v-if="filterSelected != 'starred'">
|
||||
<span class="icon">{% inline "check.svg" %}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="p-2 overflow-auto" v-scroll="loadMoreItems">
|
||||
<div class="p-2 overflow-auto border-top" v-scroll="loadMoreItems">
|
||||
<label v-for="item in items" :key="item.id"
|
||||
class="nav-select"
|
||||
class="selectgroup"
|
||||
:class="{'text-muted' : filterSelected=='all' && item.status=='read',
|
||||
'text-primary': filterSelected=='all' && item.status=='starred'}">
|
||||
<input type="radio" name="item" :value="item.id" v-model="itemSelected">
|
||||
<div class="menu-item p-2">
|
||||
<div class="d-flex flex-column">
|
||||
<div style="line-height: 1.2; opacity: .6;" class="d-flex">
|
||||
<small class="flex-fill text-truncate mr-1">{{feedsById[item.feed_id].title}}</small>
|
||||
<small class="flex-shrink-0"><relative-time :val="item.date"/></small>
|
||||
</div>
|
||||
<span>{{item.title}}</span>
|
||||
<div class="selectgroup-label d-flex flex-column">
|
||||
<div style="line-height: 1.2; opacity: .6;" class="d-flex">
|
||||
<small class="flex-fill text-truncate mr-1">{{feedsById[item.feed_id].title}}</small>
|
||||
<small class="flex-shrink-0"><relative-time :val="item.date"/></small>
|
||||
</div>
|
||||
<span>{{item.title}}</span>
|
||||
</div>
|
||||
</label>
|
||||
<button class="btn btn-link btn-block loading my-3" v-if="itemsPage.cur < itemsPage.num"></button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="vh-100 d-flex flex-column w-100">
|
||||
<div class="p-2 d-flex">
|
||||
<div class="flex-grow-1">
|
||||
<div v-if="itemSelected">
|
||||
<button class="btn btn-link p-0" style="line-height: 1" @click="toggleItemStarred(itemSelectedDetails)">
|
||||
<span class="icon" v-if="itemSelectedDetails.status=='starred'" >{% inline "star-full.svg" %}</span>
|
||||
<span class="icon" v-else-if="itemSelectedDetails.status!='starred'" >{% inline "star.svg" %}</span>
|
||||
</button>
|
||||
<button class="btn btn-link p-0"
|
||||
style="line-height: 1"
|
||||
:disabled="itemSelectedDetails.status=='starred'"
|
||||
@click="toggleItemRead(itemSelectedDetails)">
|
||||
<span class="icon" v-if="itemSelectedDetails.status=='unread'">{% inline "circle-full.svg" %}</span>
|
||||
<span class="icon" v-if="itemSelectedDetails.status!='unread'">{% inline "circle.svg" %}</span>
|
||||
</button>
|
||||
<a class="btn btn-link p-0" :href="itemSelectedDetails.link" target="_blank" style="line-height: 1">
|
||||
<span class="icon">{% inline "external-link.svg" %}</span>
|
||||
</a>
|
||||
<button class="btn btn-link p-0" @click="getReadable(itemSelectedDetails)">
|
||||
<span class="icon">{% inline "book.svg" %}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div class="toolbar pl-2 d-flex align-items-center">
|
||||
<div v-if="itemSelected">
|
||||
<button class="toolbar-item" @click="toggleItemStarred(itemSelectedDetails)">
|
||||
<span class="icon" v-if="itemSelectedDetails.status=='starred'" >{% inline "star-full.svg" %}</span>
|
||||
<span class="icon" v-else-if="itemSelectedDetails.status!='starred'" >{% inline "star.svg" %}</span>
|
||||
</button>
|
||||
<button class="toolbar-item"
|
||||
:disabled="itemSelectedDetails.status=='starred'"
|
||||
@click="toggleItemRead(itemSelectedDetails)">
|
||||
<span class="icon" v-if="itemSelectedDetails.status=='unread'">{% inline "circle-full.svg" %}</span>
|
||||
<span class="icon" v-if="itemSelectedDetails.status!='unread'">{% inline "circle.svg" %}</span>
|
||||
</button>
|
||||
<a class="toolbar-item" :href="itemSelectedDetails.link" target="_blank">
|
||||
<span class="icon">{% inline "external-link.svg" %}</span>
|
||||
</a>
|
||||
<button class="toolbar-item" @click="getReadable(itemSelectedDetails)">
|
||||
<span class="icon">{% inline "book-open.svg" %}</span>
|
||||
</button>
|
||||
</div>
|
||||
<button class="btn btn-link p-0" v-b-modal.settings-modal style="line-height: 1">
|
||||
<div class="flex-grow-1"> </div>
|
||||
<button class="toolbar-item" v-b-modal.settings-modal>
|
||||
<span class="icon">{% inline "settings.svg" %}</span>
|
||||
</button>
|
||||
</div>
|
||||
<div v-if="itemSelected" class="px-5 pt-3 pb-5 border-top overflow-auto">
|
||||
<div v-if="itemSelected" class="px-4 pt-3 pb-5 border-top overflow-auto">
|
||||
<h3>{{itemSelectedDetails.title}}</h3>
|
||||
<div class="text-muted">
|
||||
<div>{{ feedsById[itemSelectedDetails.feed_id].title }}</div>
|
||||
|
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-book"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"></path><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"></path></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-book-open"><path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z"></path><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z"></path></svg>
|
Before Width: | Height: | Size: 345 B After Width: | Height: | Size: 339 B |
1
template/static/images/search.svg
Normal file
1
template/static/images/search.svg
Normal file
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-search"><circle cx="11" cy="11" r="8"></circle><line x1="21" y1="21" x2="16.65" y2="16.65"></line></svg>
|
After Width: | Height: | Size: 308 B |
@ -10,6 +10,17 @@ body {
|
||||
font-size: 15px !important;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
max-width: 1368px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* bootstrap customizations */
|
||||
|
||||
.btn-link {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.form-control {
|
||||
box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.07);
|
||||
}
|
||||
@ -32,72 +43,6 @@ select.form-control:not([multiple]):not([size]) {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.wrapper {
|
||||
max-width: 1368px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.icon {
|
||||
height: 1rem;
|
||||
width: 1rem;
|
||||
}
|
||||
|
||||
.icon > svg {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.feed-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
min-width: 16px;
|
||||
margin-left: -18px !important;
|
||||
}
|
||||
|
||||
.counter {
|
||||
max-width: 100px;
|
||||
}
|
||||
|
||||
.menu-item {
|
||||
padding: .375rem .5rem;
|
||||
}
|
||||
|
||||
.menu-item, .feed-item {
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.nav-select {
|
||||
position: relative;
|
||||
display: block;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.nav-select input {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
top: 0; left: 0;
|
||||
}
|
||||
|
||||
.nav-select + .nav-select {
|
||||
margin-top: .25rem;
|
||||
}
|
||||
|
||||
.menu-item:hover, .feed-item:hover {
|
||||
background-color: #f8f9fa;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.feed-item:active, .nav-select input:checked + .menu-item {
|
||||
background-color: var(--color-primary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.expanded {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.dropdown-header {
|
||||
cursor: default;
|
||||
}
|
||||
@ -155,6 +100,66 @@ select.form-control:not([multiple]):not([size]) {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/* custom elements */
|
||||
|
||||
.icon {
|
||||
height: 1rem;
|
||||
width: 1rem;
|
||||
}
|
||||
|
||||
.icon > svg {
|
||||
width: 1rem;
|
||||
height: 1rem;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.feed-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
min-width: 16px;
|
||||
margin-left: -18px !important;
|
||||
}
|
||||
|
||||
.counter {
|
||||
max-width: 100px;
|
||||
}
|
||||
|
||||
.selectgroup {
|
||||
position: relative;
|
||||
display: block;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.selectgroup input {
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
top: 0; left: 0;
|
||||
}
|
||||
|
||||
.selectgroup + .selectgroup {
|
||||
margin-top: .25rem;
|
||||
}
|
||||
|
||||
.selectgroup .selectgroup-label {
|
||||
padding: .375rem .5rem;
|
||||
border-radius: 4px;
|
||||
}
|
||||
|
||||
.selectgroup > .selectgroup-label:hover {
|
||||
background-color: #f8f9fa;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.selectgroup input:checked + .selectgroup-label {
|
||||
background-color: var(--color-primary);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.expanded {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
@keyframes loading {
|
||||
0% {
|
||||
transform: rotate(0)
|
||||
@ -190,10 +195,6 @@ select.form-control:not([multiple]):not([size]) {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.btn-link {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.btn-default {
|
||||
border: 1px solid #ced4da;
|
||||
border-radius: .25rem;
|
||||
@ -206,9 +207,47 @@ select.form-control:not([multiple]):not([size]) {
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
.toolbar {
|
||||
height: 2rem !important;
|
||||
min-height: 2rem !important;
|
||||
}
|
||||
|
||||
.toolbar-item {
|
||||
display: inline-block;
|
||||
background-color: transparent;
|
||||
text-decoration: none;
|
||||
user-select: none;
|
||||
border: 1px solid transparent;
|
||||
padding: .25rem .5rem;
|
||||
font-size: 1rem;
|
||||
line-height: 2;
|
||||
border-radius: .25rem;
|
||||
color: inherit;
|
||||
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
.toolbar-item:hover {
|
||||
background-color: #f3f3f3;
|
||||
cursor: pointer;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.toolbar-item:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.toolbar-item:disabled {
|
||||
opacity: 0.4;
|
||||
cursor: not-allowed;
|
||||
}
|
||||
|
||||
/* content */
|
||||
|
||||
.content {
|
||||
font-size: 1.2rem;
|
||||
line-height: 1.6;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
.content a:hover {
|
||||
@ -219,8 +258,3 @@ select.form-control:not([multiple]):not([size]) {
|
||||
border-left: 3px solid #22262a;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
|
||||
.content img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user