Adding config for puma, dashboard layout, fixing some queries
This commit is contained in:
parent
447cfef62d
commit
aab9f57e36
25 changed files with 264 additions and 134 deletions
|
@ -9,7 +9,6 @@ $lighter-text-color: #8b8687;
|
|||
|
||||
@import url(https://fonts.googleapis.com/css?family=Roboto:400,500,400italic);
|
||||
@import url(https://fonts.googleapis.com/css?family=Roboto+Mono);
|
||||
@import "font-awesome-sprockets";
|
||||
@import "font-awesome";
|
||||
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
|
@ -334,3 +333,4 @@ body {
|
|||
@import 'home';
|
||||
@import 'accounts';
|
||||
@import 'stream_entries';
|
||||
@import 'dashboard'
|
||||
|
|
130
app/assets/stylesheets/dashboard.scss
Normal file
130
app/assets/stylesheets/dashboard.scss
Normal file
|
@ -0,0 +1,130 @@
|
|||
.dashboard-wrapper {
|
||||
background: #282c37;
|
||||
border-radius: 4px;
|
||||
margin: 20px auto;
|
||||
width: 940px;
|
||||
display: flex;
|
||||
|
||||
.dashboard__sidebar {
|
||||
width: 240px;
|
||||
border-radius: 4px 0 0 4px;
|
||||
|
||||
.dashboard__top-bar {
|
||||
border-radius: 4px 0 0 0;
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 20px 0;
|
||||
|
||||
a {
|
||||
display: block;
|
||||
padding: 7px 20px;
|
||||
color: #d9e1e8;
|
||||
text-decoration: none;
|
||||
font-size: 14px;
|
||||
font-weight: 400;
|
||||
|
||||
.fa {
|
||||
display: inline-block;
|
||||
width: 18px;
|
||||
text-align: center;
|
||||
margin-right: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.active {
|
||||
a {
|
||||
background: darken(#282c37, 5%);
|
||||
border-left: 2px solid #2b90d9;
|
||||
padding-left: 18px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard__current-user {
|
||||
padding: 20px;
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
.dashboard__current-user__avatar {
|
||||
display: block;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 50px;
|
||||
float: left;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.dashboard__current-user__display-name {
|
||||
font-weight: 500;
|
||||
font-size: 13px;
|
||||
color: #d9e1e8;
|
||||
display: block;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.dashboard__current-user__username {
|
||||
font-size: 12px;
|
||||
display: block;
|
||||
color: #2b90d9;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard__logo {
|
||||
color: #2b90d9;
|
||||
|
||||
span {
|
||||
font-weight: 500;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard__top-bar {
|
||||
background: #fff;
|
||||
padding: 20px;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, 0.1);
|
||||
border-bottom: 1px solid #d9e1e8;
|
||||
color: #282c37;
|
||||
font-size: 16px;
|
||||
overflow: hidden;
|
||||
|
||||
&.alternate {
|
||||
background: lighten(#282c37, 10%);
|
||||
border-bottom: 1px solid lighten(#282c37, 10%);
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
ul {
|
||||
float: right;
|
||||
list-style: none;
|
||||
display: block;
|
||||
|
||||
li {
|
||||
display: inline-block;
|
||||
}
|
||||
}
|
||||
|
||||
a {
|
||||
color: #9baec8;
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
.dashboard__content {
|
||||
flex: 1;
|
||||
background: #d9e1e8;
|
||||
border-radius: 0 4px 4px 0;
|
||||
|
||||
.dashboard__content__content {
|
||||
//padding: 20px;
|
||||
}
|
||||
|
||||
.dashboard__top-bar {
|
||||
border-radius: 0 4px 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -14,6 +14,14 @@
|
|||
&.entry-predecessor, &.entry-successor {
|
||||
background: #d9e1e8;
|
||||
border-left-color: #d9e1e8;
|
||||
|
||||
.header {
|
||||
.header__right {
|
||||
.counter-btn {
|
||||
color: darken(#d9e1e8, 15%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.entry-follow, &.entry-favourite {
|
||||
|
@ -43,6 +51,14 @@
|
|||
}
|
||||
}
|
||||
|
||||
&.activity-stream-embedded {
|
||||
box-shadow: none;
|
||||
|
||||
.entry {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.entry__container {
|
||||
display: flex;
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ class AccountsController < ApplicationController
|
|||
before_action :set_webfinger_header
|
||||
|
||||
def show
|
||||
@statuses = @account.statuses.order('id desc').includes(thread: [:account], reblog: [:account], stream_entry: [])
|
||||
@statuses = @account.statuses.order('id desc').with_includes.with_counters
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
|
|
|
@ -15,7 +15,7 @@ class Api::AccountsController < ApiController
|
|||
end
|
||||
|
||||
def statuses
|
||||
@statuses = @account.statuses.order('created_at desc')
|
||||
@statuses = @account.statuses.with_includes.with_counts.order('created_at desc')
|
||||
end
|
||||
|
||||
def follow
|
||||
|
|
|
@ -1,8 +1,16 @@
|
|||
class HomeController < ApplicationController
|
||||
layout 'dashboard'
|
||||
|
||||
before_action :authenticate_user!
|
||||
|
||||
def index
|
||||
feed = Feed.new(:home, current_user.account)
|
||||
@statuses = feed.get(20, (params[:offset] || 0).to_i)
|
||||
end
|
||||
|
||||
def mentions
|
||||
feed = Feed.new(:mentions, current_user.account)
|
||||
@statuses = feed.get(20, (params[:offset] || 0).to_i)
|
||||
render action: :index
|
||||
end
|
||||
end
|
||||
|
|
|
@ -49,6 +49,14 @@ class Status < ActiveRecord::Base
|
|||
content.truncate(80, omission: "...")
|
||||
end
|
||||
|
||||
def reblogs_count
|
||||
self.attributes['reblogs_count'] || self.reblogs.count
|
||||
end
|
||||
|
||||
def favourites_count
|
||||
self.attributes['favourites_count'] || self.favourites.count
|
||||
end
|
||||
|
||||
def mentions
|
||||
m = []
|
||||
|
||||
|
|
|
@ -4,8 +4,8 @@ attributes :id, :created_at, :in_reply_to_id
|
|||
node(:uri) { |status| uri_for_target(status) }
|
||||
node(:content) { |status| status.local? ? linkify(status) : status.content }
|
||||
node(:url) { |status| url_for_target(status) }
|
||||
node(:reblogs_count) { |status| status.reblogs.count }
|
||||
node(:favourites_count) { |status| status.favourites.count }
|
||||
node(:reblogs_count) { |status| status.reblogs_count }
|
||||
node(:favourites_count) { |status| status.favourites_count }
|
||||
node(:favourited) { |status| current_user.account.favourited?(status) }
|
||||
node(:reblogged) { |status| current_user.account.reblogged?(status) }
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
.activity-stream.activity-stream-headless
|
||||
.activity-stream.activity-stream-embedded
|
||||
- @statuses.each do |status|
|
||||
= render partial: 'stream_entries/status', locals: { status: status, include_threads: false, is_successor: false, is_predecessor: false }
|
||||
|
|
|
@ -8,5 +8,4 @@
|
|||
= csrf_meta_tags
|
||||
= yield :header_tags
|
||||
%body
|
||||
.container
|
||||
= content_for?(:content) ? yield(:content) : yield
|
||||
= content_for?(:content) ? yield(:content) : yield
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
- content_for :content do
|
||||
.logo-container
|
||||
%h1
|
||||
= link_to root_path do
|
||||
= render partial: 'application/logo', locals: { dim: 200 }
|
||||
%small= Rails.configuration.x.local_domain
|
||||
.container
|
||||
.logo-container
|
||||
%h1
|
||||
= link_to root_path do
|
||||
= render partial: 'application/logo', locals: { dim: 200 }
|
||||
%small= Rails.configuration.x.local_domain
|
||||
|
||||
.form-container
|
||||
= yield
|
||||
.form-container
|
||||
= yield
|
||||
|
||||
= render template: "layouts/application"
|
||||
|
|
45
app/views/layouts/dashboard.html.haml
Normal file
45
app/views/layouts/dashboard.html.haml
Normal file
|
@ -0,0 +1,45 @@
|
|||
- content_for :content do
|
||||
.dashboard-wrapper
|
||||
.dashboard__sidebar
|
||||
.dashboard__top-bar.alternate
|
||||
|
||||
.dashboard__current-user
|
||||
= link_to account_path(current_user.account) do
|
||||
= image_tag current_user.account.avatar.url(:medium), class: 'dashboard__current-user__avatar'
|
||||
%strong.dashboard__current-user__display-name= current_user.account.display_name
|
||||
%span.dashboard__current-user__username= "@#{current_user.account.username}"
|
||||
%ul
|
||||
%li.active
|
||||
= link_to root_path do
|
||||
= fa_icon 'home'
|
||||
Home
|
||||
%li
|
||||
= link_to mentions_path do
|
||||
= fa_icon 'at'
|
||||
Mentions
|
||||
%li
|
||||
= link_to root_path do
|
||||
= fa_icon 'group'
|
||||
Subscriptions
|
||||
%li
|
||||
= link_to oauth_authorized_applications_path do
|
||||
= fa_icon 'shield'
|
||||
Authorized apps
|
||||
%li
|
||||
= link_to root_path do
|
||||
= fa_icon 'user'
|
||||
Edit profile
|
||||
%li
|
||||
= link_to edit_registration_path(current_user) do
|
||||
= fa_icon 'wrench'
|
||||
Change password
|
||||
.dashboard__content
|
||||
.dashboard__top-bar
|
||||
Home
|
||||
%ul
|
||||
%li= link_to fa_icon('sign-out'), destroy_user_session_path, method: :delete
|
||||
.dashboard__content__content= yield
|
||||
.footer
|
||||
.domain= Rails.configuration.x.local_domain
|
||||
|
||||
= render template: "layouts/application"
|
|
@ -1,37 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Doorkeeper</title>
|
||||
<%= stylesheet_link_tag "doorkeeper/admin/application" %>
|
||||
<%= csrf_meta_tags %>
|
||||
</head>
|
||||
<body>
|
||||
<div class="navbar navbar-inverse navbar-static-top" role="navigation">
|
||||
<div class="container-fluid">
|
||||
<div class="navbar-header">
|
||||
<%= link_to t('doorkeeper.layouts.admin.nav.oauth2_provider'), oauth_applications_path, class: 'navbar-brand' %>
|
||||
</div>
|
||||
<ul class="nav navbar-nav">
|
||||
<%= content_tag :li, class: "#{'active' if request.path == oauth_applications_path}" do %>
|
||||
<%= link_to t('doorkeeper.layouts.admin.nav.applications'), oauth_applications_path %>
|
||||
<% end %>
|
||||
<%= content_tag :li do %>
|
||||
<%= link_to 'Home', root_path %>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="container">
|
||||
<%- if flash[:notice].present? %>
|
||||
<div class="alert alert-info">
|
||||
<%= flash[:notice] %>
|
||||
</div>
|
||||
<% end -%>
|
||||
|
||||
<%= yield %>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,23 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title><%= t('doorkeeper.layouts.application.title') %></title>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
|
||||
<%= stylesheet_link_tag "doorkeeper/application" %>
|
||||
<%= csrf_meta_tags %>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<%- if flash[:notice].present? %>
|
||||
<div class="alert alert-info">
|
||||
<%= flash[:notice] %>
|
||||
</div>
|
||||
<% end -%>
|
||||
|
||||
<%= yield %>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,5 +1,5 @@
|
|||
- content_for :content do
|
||||
= yield
|
||||
.container= yield
|
||||
.footer
|
||||
.domain= Rails.configuration.x.local_domain
|
||||
|
||||
|
|
|
@ -24,10 +24,10 @@
|
|||
.header__right
|
||||
.counter-btn{ class: reblogged_by_me_class(status) }
|
||||
%i.fa.fa-retweet
|
||||
%span.counter-number= status.reblog? ? status.reblog.reblogs.count : status.reblogs_count
|
||||
%span.counter-number= status.reblog? ? status.reblog.reblogs_count : status.reblogs_count
|
||||
.counter-btn{ class: favourited_by_me_class(status) }
|
||||
%i.fa.fa-star
|
||||
%span.counter-number= status.reblog? ? status.reblog.favourites.count : status.favourites_count
|
||||
%span.counter-number= status.reblog? ? status.reblog.favourites_count : status.favourites_count
|
||||
.content
|
||||
= status.reblog? ? (status.reblog.local? ? linkify(status.reblog) : status.reblog.content.html_safe) : (status.local? ? linkify(status) : status.content.html_safe)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue