From 2825991e09272d6e7227da9d9b8dc387614a83df Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 28 Feb 2016 14:02:53 +0100 Subject: [PATCH] Improving status display design, including replies and threads --- app/assets/images/avatars/missing.png | Bin 3890 -> 909 bytes app/assets/images/background-pattern.png | Bin 0 -> 29274 bytes app/assets/stylesheets/application.scss | 23 +++++--------- app/assets/stylesheets/profile.scss | 33 +++++++++++++-------- app/helpers/profile_helper.rb | 17 +++++++++++ app/views/profile/_status.html.haml | 15 +++++++--- app/views/profile/_status_header.html.haml | 3 +- app/views/profile/entry.html.haml | 2 +- app/views/profile/show.html.haml | 2 +- 9 files changed, 58 insertions(+), 37 deletions(-) create mode 100644 app/assets/images/background-pattern.png diff --git a/app/assets/images/avatars/missing.png b/app/assets/images/avatars/missing.png index 40353039fd4c94c018d765c97bcd935fd0307a88..223b4ed2ce532f2110a2e8338b75076d0fac4aee 100644 GIT binary patch literal 909 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYY>nc6VX;4}uH!E}sk(;Vkfo zEM{Qf76xHPhFNnYfP(BLp1!W^513?lRD?EONq!F$k}PqJC~?lu%}vcKVQ?-=O)N=G zQ7F$W$xv|j^bH7a+KaoK?Va3hK)fV-!^1iV4Uvpzopr0DGJM@&Et; literal 3890 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

t);DD~v+VcgJel0Es?q!9 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 N002ovPDHLkV1nTFwDAA{ literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index 068480994..9787c6be1 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -3,6 +3,9 @@ $secondary-color: #ffc952; $tertiary-color: #47b8e0; $quaternary-color: #34314c; $background-color: #fff; +$darker-background-color: #e3dede; +$text-color: #333030; +$lighter-text-color: #8b8687; @import url("https://fonts.googleapis.com/css?family=Noto+Sans:400,700,400italic"); @import "font-awesome-sprockets"; @@ -10,35 +13,23 @@ $background-color: #fff; body { font-family: 'Noto Sans', sans-serif; - background: $secondary-color; + background: $background-color image-url('background-pattern.png'); font-size: 13px; line-height: 18px; - color: $quaternary-color; - - &::before { - display: block; - content: ""; - position: absolute; - background: $secondary-color; - width: 100%; - height: 200px; - z-index: -1; - top: 0; - left: 0; - } + color: $text-color; } .container { width: 800px; margin: 0 auto; - z-index: 2; + margin-top: 40px; } .footer { text-align: center; padding: 100px 0; font-size: 12px; - color: lighten($quaternary-color, 15%); + color: $text-color; .mastodon-link { color: $quaternary-color; diff --git a/app/assets/stylesheets/profile.scss b/app/assets/stylesheets/profile.scss index e2b59268a..71466527e 100644 --- a/app/assets/stylesheets/profile.scss +++ b/app/assets/stylesheets/profile.scss @@ -1,8 +1,7 @@ .card { - margin-top: 40px; display: flex; - background: darken($background-color, 10%); - border-bottom: 1px solid darken($background-color, 15%); + background: $darker-background-color; + border: 1px solid darken($darker-background-color, 15%); box-shadow: 4px 3px 0 rgba(0, 0, 0, 0.1); .bio { @@ -12,11 +11,12 @@ .name { font-size: 24px; line-height: 18px * 1.5; + color: $text-color; small { display: block; font-size: 14px; - color: lighten($quaternary-color, 15%); + color: $lighter-text-color; } } @@ -25,13 +25,15 @@ float: left; margin-right: 10px; padding: 10px; + padding-left: 9px; margin-top: -30px; img { width: 94px; height: 94px; display: block; - border: 2px solid $background-color; + border: 2px solid $lighter-text-color; + border-radius: 5px; } } } @@ -49,12 +51,17 @@ border-left: 2px solid $tertiary-color; } + &.entry-predecessor, &.entry-successor { + border-left: 2px solid $lighter-text-color; + background: darken($background-color, 5%); + } + &:last-child { border-bottom: 0; } } - .entry-container { + .entry__container { display: flex; } @@ -69,11 +76,11 @@ width: 48px; height: 48px; display: block; - box-shadow: 2px 2px 0 rgba(0, 0, 0, 0.1); + border-radius: 5px; } } - .container { + .entry__container__container { flex-grow: 1; } @@ -84,10 +91,10 @@ .name { text-decoration: none; - color: lighten($quaternary-color, 15%); + color: $lighter-text-color; strong { - color: $quaternary-color; + color: $text-color; } &:hover { @@ -124,7 +131,7 @@ .time { text-decoration: none; - color: lighten($quaternary-color, 15%); + color: $lighter-text-color; &:hover { text-decoration: underline; @@ -133,7 +140,7 @@ .counters { margin-top: 15px; - color: lighten($quaternary-color, 15%); + color: $lighter-text-color; cursor: default; padding: 10px; padding-top: 0; @@ -141,7 +148,7 @@ .counter { display: inline-block; margin-right: 10px; - color: lighten($quaternary-color, 50%); + color: $lighter-text-color; } .conversation-link { diff --git a/app/helpers/profile_helper.rb b/app/helpers/profile_helper.rb index 2abe67635..cb19638d3 100644 --- a/app/helpers/profile_helper.rb +++ b/app/helpers/profile_helper.rb @@ -10,4 +10,21 @@ module ProfileHelper def status_url(status) status.local? ? super(name: status.account.username, id: status.stream_entry.id) : status.url end + + def avatar_for_status_url(status) + status.reblog? ? status.reblog.account.avatar.url(:small) : status.account.avatar.url(:small) + end + + def entry_classes(status, is_predecessor, is_successor, include_threads) + classes = ['entry'] + classes << 'entry-reblog' if status.reblog? + classes << 'entry-predecessor' if is_predecessor + classes << 'entry-successor' if is_successor + classes << 'entry-center' if include_threads + classes.join(' ') + end + + def relative_time(date) + date < 5.days.ago ? date.strftime("%d.%m.%Y") : "#{time_ago_in_words(date)} ago" + end end diff --git a/app/views/profile/_status.html.haml b/app/views/profile/_status.html.haml index c2033b4f7..1edd8df77 100644 --- a/app/views/profile/_status.html.haml +++ b/app/views/profile/_status.html.haml @@ -1,16 +1,23 @@ -%div.entry{ class: status.reblog? ? 'entry-reblog' : 'entry-status' } +- if status.reply? && include_threads + = render partial: 'status', locals: { status: status.thread, include_threads: false, is_predecessor: true, is_successor: false } + +.entry{ class: entry_classes(status, is_predecessor, is_successor, include_threads) } - if status.reblog? .pre-header %i.fa.fa-retweet Shared by = link_to display_name(status.account), profile_url(status.account), class: 'name' - .entry-container + .entry__container .avatar - = image_tag status.reblog? ? status.reblog.account.avatar.url(:small) : status.account.avatar.url(:small) - .container + = image_tag avatar_for_status_url(status) + .entry__container__container .header = render partial: 'status_header', locals: { status: status.reblog? ? status.reblog : status } .content = status.content .counters = render partial: 'status_footer', locals: { status: status.reblog? ? status.reblog : status } + +- if include_threads + - status.replies.each do |status| + = render partial: 'status', locals: { status: status, include_threads: false, is_successor: true, is_predecessor: false } diff --git a/app/views/profile/_status_header.html.haml b/app/views/profile/_status_header.html.haml index e1c810088..225a89d71 100644 --- a/app/views/profile/_status_header.html.haml +++ b/app/views/profile/_status_header.html.haml @@ -4,5 +4,4 @@ = link_to status_url(status), class: 'time' do %span{ title: status.created_at } - = time_ago_in_words(status.created_at) - ago + = relative_time(status.created_at) diff --git a/app/views/profile/entry.html.haml b/app/views/profile/entry.html.haml index 8d0b23607..33eaa5f1d 100644 --- a/app/views/profile/entry.html.haml +++ b/app/views/profile/entry.html.haml @@ -1,2 +1,2 @@ %div.activity-stream - = render partial: @type, locals: { @type.to_sym => @entry.activity } + = render partial: @type, locals: { @type.to_sym => @entry.activity, include_threads: true, is_predecessor: false, is_successor: false } diff --git a/app/views/profile/show.html.haml b/app/views/profile/show.html.haml index b93791734..b7f4bdeaf 100644 --- a/app/views/profile/show.html.haml +++ b/app/views/profile/show.html.haml @@ -7,4 +7,4 @@ .activity-stream - @account.statuses.order('id desc').each do |status| - = render partial: 'status', locals: { status: status } + = render partial: 'status', locals: { status: status, include_threads: false, is_successor: false, is_predecessor: false }