From 2530f58070bdc3566edf654bf553f9c1baeeb3df Mon Sep 17 00:00:00 2001 From: Judd Lillestrand Date: Sun, 30 Jun 2013 23:16:22 -0500 Subject: [PATCH] more polish on the layout --- app/assets/images/vegas_bars_and_star.png | Bin 0 -> 56122 bytes app/assets/stylesheets/application.css.scss | 27 +++++- .../bootstrap_and_overrides.css.scss | 33 +++++++- app/assets/stylesheets/colors.css.scss | 2 +- app/assets/stylesheets/stories.css.scss | 77 ++++++++++------- app/controllers/comments_controller.rb | 1 + app/controllers/info_controller.rb | 4 + app/controllers/sessions_controller.rb | 1 + app/controllers/stories_controller.rb | 2 +- app/helpers/bootstrap_flash_helper.rb | 18 ++++ app/models/comment.rb | 2 +- app/models/user.rb | 2 +- ...comment.html.erb => _cold_omment.html.erb} | 8 +- app/views/comments/_comment.html.slim | 78 ++++++++++++++++++ app/views/info/about.html.slim | 16 ++++ app/views/info/best_of_week.html.erb | 6 -- app/views/info/best_of_week.html.slim | 4 + app/views/info/recent.html.erb | 2 +- app/views/info/users.html.erb | 4 +- app/views/layouts/application.html.slim | 56 ++++++------- app/views/shared/_events_index.html.slim | 12 ++- app/views/shared/_story_index.html.slim | 2 - app/views/stories/_form.html.slim | 5 +- app/views/stories/_story.html.slim | 69 ++++++++++------ app/views/stories/edit.html.erb | 6 -- app/views/stories/edit.html.slim | 5 ++ app/views/stories/show.html.erb | 42 ---------- app/views/stories/show.html.slim | 34 ++++++++ app/views/tags/show.html.slim | 2 + app/views/votes/create.js.erb | 2 +- config/locales/en.yml | 2 + config/routes.rb | 9 +- ..._add_twitter_profile_image_url_to_users.rb | 5 ++ db/schema.rb | 7 +- 34 files changed, 378 insertions(+), 167 deletions(-) create mode 100644 app/assets/images/vegas_bars_and_star.png create mode 100644 app/helpers/bootstrap_flash_helper.rb rename app/views/comments/{_comment.html.erb => _cold_omment.html.erb} (91%) create mode 100644 app/views/comments/_comment.html.slim create mode 100644 app/views/info/about.html.slim delete mode 100644 app/views/info/best_of_week.html.erb create mode 100644 app/views/info/best_of_week.html.slim delete mode 100644 app/views/stories/edit.html.erb create mode 100644 app/views/stories/edit.html.slim delete mode 100644 app/views/stories/show.html.erb create mode 100644 app/views/stories/show.html.slim create mode 100644 db/migrate/20130701035258_add_twitter_profile_image_url_to_users.rb diff --git a/app/assets/images/vegas_bars_and_star.png b/app/assets/images/vegas_bars_and_star.png new file mode 100644 index 0000000000000000000000000000000000000000..19723afa3668b5ea7842e480b8803dad44f3cd27 GIT binary patch literal 56122 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 a69u(6*Z+^_>pVsHKTY?(>fNeQY5xQD|4K6e literal 0 HcmV?d00001 diff --git a/app/assets/stylesheets/application.css.scss b/app/assets/stylesheets/application.css.scss index beb327e..e99657f 100644 --- a/app/assets/stylesheets/application.css.scss +++ b/app/assets/stylesheets/application.css.scss @@ -11,8 +11,8 @@ *= require_self */ +@import url(https://fonts.googleapis.com/css?family=Lato:100,200,300,400,700); @import 'colors'; - @import 'compass'; @import "bootstrap_and_overrides"; @@ -26,6 +26,29 @@ body { padding-top: 80px; } body { // background: url(/assets/cork.png) top left; background: $lightGray; + font-family: 'Lato', sans-serif; + font-weight: 300; +} + +h1{ + font-weight: 200; + font-size: 60px; +} + +h2{ + margin-top: 50px; + font-weight: 200; + font-size: 40px; +} + +h3{ + margin-top: 50px; + font-weight: 200; + font-size: 30px; +} + +.red-border{ + border: red solid 1px; } .score{ @@ -78,7 +101,7 @@ i.icon-twitter{ text-align: center; p { - font-size: 10px; + font-size: 12px; color: darken($lightYellow, 90%); img { diff --git a/app/assets/stylesheets/bootstrap_and_overrides.css.scss b/app/assets/stylesheets/bootstrap_and_overrides.css.scss index af09d60..b676b4c 100644 --- a/app/assets/stylesheets/bootstrap_and_overrides.css.scss +++ b/app/assets/stylesheets/bootstrap_and_overrides.css.scss @@ -2,22 +2,47 @@ $linkColor: $vegasRed; +//borders +$baseBorderRadius: 0px; +$borderRadiusLarge: 0px; +$borderRadiusSmall: 0px; +$inputBorderRadius: 0px; + //nav bar $navbarLinkColor: $lightGray; $navbarLinkBackgroundActive: none; +$navbarLinkColorActive: $lightYellow; $navbarBackground: transparentize($vegasBlue, 0.2); $navbarBackgroundHighlight: transparentize($vegasBlue, 0.2); -$dropdownLinkBackgroundHover: $yellowMustard; -$navbarLinkColorHover: white; +$dropdownLinkBackgroundHover: $lightYellow; +$navbarLinkColorHover: $lightYellow; $dropdownLinkColorHover: white; $navbarHeight: 60px; +// $navbarBrandColor: $lightYellow; .nav { li a { font-size: 18px; - // font-weight: 400; text-transform: uppercase; - // margin-top: 3px; + @include transition-duration(500ms); + + } + + ul.dropdown-menu{ + @include border-radius(0px); + } +} + + +.dropdown-menu { + @include border-radius(0px); + + li a{ + @include transition-duration(0s); } } + +.alert{ + margin-top: 20px; +} \ No newline at end of file diff --git a/app/assets/stylesheets/colors.css.scss b/app/assets/stylesheets/colors.css.scss index caa8a6b..2b6bd15 100644 --- a/app/assets/stylesheets/colors.css.scss +++ b/app/assets/stylesheets/colors.css.scss @@ -2,5 +2,5 @@ $yellowMustard: #df9b53; $vegasRed: #db3c21; $vegasBlue: #407fd3; $lightGray: #f9f9f9; -$lightYellow: #fdfcf7; +$lightYellow: #FFCC66; $darkYellow: darken($lightYellow, 50%); diff --git a/app/assets/stylesheets/stories.css.scss b/app/assets/stylesheets/stories.css.scss index f36c375..d4dc65c 100644 --- a/app/assets/stylesheets/stories.css.scss +++ b/app/assets/stylesheets/stories.css.scss @@ -1,8 +1,33 @@ + // .blurb-container{ + // position: absolute; + // right: 20px; + // @include transition-property(background-color); + // @include transition-duration(2s); + + // &:hover{ + // background-color: rgba(0,0,0,0.65); + // @include transition-property(background-color); + // @include transition-duration(2s); + // } + // } + + +.event-date{ + margin-bottom: 150px; + border-left: 10px dashed $lightYellow; + padding-bottom: 20px; + padding-left: 20px; + + h3{ + font-weight: 400; + } +} .story { - margin-bottom: 20px; + // background-color: rgba(249,249,249,0.85); position: relative; + // background: $lightGray; .left-pin { position: absolute; @@ -21,51 +46,47 @@ } .content { - // #gradient > .vertical(darken(@lightYellow, 1%), darken(@lightYellow, 2%)); - box-shadow: 0px 3px 15px rgba(0,0,0,.1); - + margin-top: 30px; + border-top: solid 1px lighten(gray, 40%); font-size: 20px; - line-height: 26px; + line-height: 28px; color: #555; - padding: 25px; + padding-top: 15px; - .vote { - @include border-radius(5px); + .vote_actions{ + border-left: solid 1px lighten(gray, 40%); + min-height: 140px; + } - float: right; - background: $darkYellow; + .vote { + color: gray; padding: 15px; - margin: 0 0 25px 20px; - font-size: 200%; width: 30px; + font-size: 60px; + @include transition-property(background-color color); + @include transition-duration(750ms); + &:hover { + @include transition-property(background-color color); + @include transition-duration(750ms); text-decoration: none; - background: darken($darkYellow, 15%); - } - - i { - color: white; - - &:hover { - color: white; - text-decoration: none; - } + color: green; } } .voted { - background: lighten(gray, 35%); + padding: 15px; + width: 30px; + font-size: 60px; + color: green; + &:hover { text-decoration: none; - background: lighten(gray, 35%); } } @media (max-width: 767px) { .vote { - float: left; - padding: 0 9px 5px 10px; - margin: 10px 10px 0 0; i { font-size: 60%; @@ -79,7 +100,6 @@ } .rank { - text-align: right; color: #777; font-size: 120%; } @@ -124,6 +144,7 @@ .comments { margin-top: 15px; + margin-right: 10px; } .comment-form { diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index 491e571..444a9a4 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -5,6 +5,7 @@ def create params[:comment].merge( from_user_name: current_user.twitter_handle, twitter_handle: current_user.twitter_handle, + twitter_profile_image_url: current_user.twitter_profile_image_url, tweeted_at: Time.now)) @comment.save! diff --git a/app/controllers/info_controller.rb b/app/controllers/info_controller.rb index 830306a..882f5f2 100644 --- a/app/controllers/info_controller.rb +++ b/app/controllers/info_controller.rb @@ -10,4 +10,8 @@ def users def best_of_week @stories = Story.within_past_week.sorted_by_most_votes.limit(25) end + + def about + + end end diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 6612ca6..4487304 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -3,6 +3,7 @@ def create user = User.find_by_uid(auth_hash['uid']) unless user user = User.create( + twitter_profile_image_url: auth_hash.extra.raw_info.profile_image_url, twitter_handle: twitter_handle, uid: auth_hash['uid'], auth_credentials: auth_hash.credentials.token + ':' + auth_hash.credentials.secret) diff --git a/app/controllers/stories_controller.rb b/app/controllers/stories_controller.rb index 7cd1cb6..8715865 100644 --- a/app/controllers/stories_controller.rb +++ b/app/controllers/stories_controller.rb @@ -1,5 +1,5 @@ class StoriesController < ApplicationController - before_filter :ensure_admin, except: :index + before_filter :ensure_admin, only: [:edit, :update] def index @stories = Story.within_past_month.ranked.page(params[:page]).limit(50) diff --git a/app/helpers/bootstrap_flash_helper.rb b/app/helpers/bootstrap_flash_helper.rb new file mode 100644 index 0000000..96efe75 --- /dev/null +++ b/app/helpers/bootstrap_flash_helper.rb @@ -0,0 +1,18 @@ +module BootstrapFlashHelper + + def bootstrap_flash + flash_messages = [] + flash.each do |type, message| + # Skip Devise :timeout and :timedout flags + next if type == :timeout + next if type == :timedout + type = :success if type == :notice + type = :error if type == :alert + text = content_tag(:div, + content_tag(:button, raw("×"), :class => "close", "data-dismiss" => "alert") + + message, :class => "alert fade in alert-#{type}") + flash_messages << text if message + end + flash_messages.join("\n").html_safe + end +end diff --git a/app/models/comment.rb b/app/models/comment.rb index 049d1e0..4f67527 100644 --- a/app/models/comment.rb +++ b/app/models/comment.rb @@ -3,7 +3,7 @@ class Comment < Post # after_create :queue_reply_checker - attr_accessible :post_to_twitter + attr_accessible :post_to_twitter, :twitter_profile_image_url attr_accessor :post_to_twitter private diff --git a/app/models/user.rb b/app/models/user.rb index 5cc6422..6ee6778 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -1,5 +1,5 @@ class User < ActiveRecord::Base - attr_accessible :twitter_handle, :uid, :auth_credentials + attr_accessible :twitter_handle, :uid, :auth_credentials, :twitter_profile_image_url def index end diff --git a/app/views/comments/_comment.html.erb b/app/views/comments/_cold_omment.html.erb similarity index 91% rename from app/views/comments/_comment.html.erb rename to app/views/comments/_cold_omment.html.erb index abae970..da22fa6 100644 --- a/app/views/comments/_comment.html.erb +++ b/app/views/comments/_cold_omment.html.erb @@ -1,11 +1,9 @@
- <%= image_tag(asset_path('pin.png'), class: 'left-pin visible-desktop') %> - <%= image_tag(asset_path('pin.png'), class: 'right-pin visible-desktop') %> - <%= image_tag(asset_path('pin.png'), class: 'center-pin hidden-desktop') %> -
+ +
<%= auto_link(story.content, url_target: '_blank').html_safe %>
-
+
<% if current_user && !current_user.voted_on?(story) %> <%= link_to("".html_safe, "#retweet-modal-#{story.twitter_id}", 'data-toggle' => 'modal', class: 'vote') %> <% elsif current_user && current_user.voted_on?(story) %> diff --git a/app/views/comments/_comment.html.slim b/app/views/comments/_comment.html.slim new file mode 100644 index 0000000..a4e722d --- /dev/null +++ b/app/views/comments/_comment.html.slim @@ -0,0 +1,78 @@ +.story data-id="#{story.id}" data-score="#{story.score}" + .row-fluid + .content + / = image_tag(asset_path('pin.png'), class: 'left-pin visible-desktop') + / = image_tag(asset_path('pin.png'), class: 'right-pin visible-desktop') + / = image_tag(asset_path('pin.png'), class: 'center-pin hidden-desktop') + + .offset1.span8 + = auto_link(story.content, url_target: '_blank').html_safe + + .metadata + a href="= link_from_handle(story.twitter_handle) " target="_blank" + = image_tag(story.twitter_profile_image_url) + + span.handle= link_to(story.twitter_handle, link_from_handle(story.twitter_handle), target: '_blank') + + / .pull-right + / span.comments + / - if story.comments.size == 0 + / = link_to("Start Discussion", story_path(story)) + / - else + / = link_to("#{pluralize(story.comments.size, 'Comment')}", story_path(story)) + + / - if current_user && current_user.admin? + / span.comments + / = link_to("Add Tags", edit_story_path(story), class: 'btn btn-mini') + + span.age + = "#{time_ago_in_words(story.created_at)} ago" + + .visible-phone + .rank= pluralize( story.vote_count, 'Point') + - if current_user && !current_user.voted_on?(story) + = link_to("".html_safe, "#retweet-modal-#{story.twitter_id}", 'data-toggle' => 'modal', class: 'vote') + - elsif current_user && current_user.voted_on?(story) + .voted + i.icon-circle-arrow-up + - else current_user + = link_to("".html_safe, '/auth/twitter', class: 'vote') + + .hidden-phone + .span3.vote_actions + center + .rank= pluralize( story.vote_count, 'Point') + - if current_user && !current_user.voted_on?(story) + = link_to("".html_safe, "#retweet-modal-#{story.twitter_id}", 'data-toggle' => 'modal', class: 'vote') + - elsif current_user && current_user.voted_on?(story) + .voted + i.icon-circle-arrow-up + - else current_user + = link_to("".html_safe, '/auth/twitter', class: 'vote') + + / .score #{story.score.to_f} + + br.clear + +.modal.hide id="#{'retweet-modal-' + story.id.to_s}" + .modal-header + button type="button" class="close" data-dismiss="modal" + | × + h3 Would you like to retweet this as well? + + .modal-body + .story + .content + = auto_link(story.content, url_target: '_blank').html_safe + / .metadata + / a href="#{link_from_handle(story.twitter_handle)}" target="_blank" + / = image_tag(story.twitter_profile_image_url) + / span.handle + / =link_to(story.twitter_handle, link_from_handle(story.twitter_handle), target: '_blank') + / span.age + / = link_to("#{time_ago_in_words(story.tweeted_at)} ago".html_safe, link_from_story(story), target: 'blank') + + .modal-footer + = link_to('Just Vote', story_votes_path(story), 'data-dismiss' => 'modal', class: 'btn', method: 'post', remote: true) + = link_to("Vote & Retweet ".html_safe, story_votes_path(story, retweet: 1), 'data-dismiss' => 'modal', class: 'btn btn-inverse', method: 'post', remote: true) + diff --git a/app/views/info/about.html.slim b/app/views/info/about.html.slim new file mode 100644 index 0000000..cd6f286 --- /dev/null +++ b/app/views/info/about.html.slim @@ -0,0 +1,16 @@ +h1 About + +h3 Why We Did It + +p The #VegasTech Bulletin Board was created during Hack Nights at the Las Vegas Ruby User Group. We built this app as a learning process for members and also thought it would help get the word out about important community events. + +h3 How Does It Work? + +h4 We try to show what's relevant + +p We use the Twitter API to display tweets with the #VegasTech hashtag. If it's retweeted, it will increase the point count. Users can also sign in and vote for a tweet. + +h4 Curators + +p Tweets are tagged by a team of curators. + diff --git a/app/views/info/best_of_week.html.erb b/app/views/info/best_of_week.html.erb deleted file mode 100644 index 172a7dc..0000000 --- a/app/views/info/best_of_week.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -

Most votes within the past week

- -<% @stories.each do |story| %> - <%= render partial: 'stories/story', :locals => { :story => story } %> -<% end %> - diff --git a/app/views/info/best_of_week.html.slim b/app/views/info/best_of_week.html.slim new file mode 100644 index 0000000..9503135 --- /dev/null +++ b/app/views/info/best_of_week.html.slim @@ -0,0 +1,4 @@ +h2 Best of the Week + +- @stories.each do |story| + = render partial: 'stories/story', :locals => { :story => story } \ No newline at end of file diff --git a/app/views/info/recent.html.erb b/app/views/info/recent.html.erb index d07ede2..f342a99 100644 --- a/app/views/info/recent.html.erb +++ b/app/views/info/recent.html.erb @@ -1,4 +1,4 @@ -

Most recent activity

+

Most Recent

<% @stories.each do |story| %> <%= render partial: 'stories/story', :locals => { :story => story } %> diff --git a/app/views/info/users.html.erb b/app/views/info/users.html.erb index 89c56f8..35bc804 100644 --- a/app/views/info/users.html.erb +++ b/app/views/info/users.html.erb @@ -5,8 +5,8 @@ <% @users.each do |user| %>
  • - <%= image_tag "https://api.twitter.com/1/users/profile_image?screen_name=#{ user.twitter_handle.gsub(/^@/, '')}&size=original" %> -

    <%= user.twitter_handle %>

    + <%= image_tag(user.twitter_profile_image_url) %> +

    <%= user.twitter_handle %>

  • <% end %> diff --git a/app/views/layouts/application.html.slim b/app/views/layouts/application.html.slim index 78f267e..e3621d7 100644 --- a/app/views/layouts/application.html.slim +++ b/app/views/layouts/application.html.slim @@ -23,9 +23,9 @@ html body .container .row - .offset1.span10.offset1 - center - h1= link_to('#VegasTech Bulletin Board', root_url) + .span12 + center.hidden-phone + h1= link_to('#VegasTech Bulletin Board'.html_safe, root_url) .navbar.navbar-fixed-top .navbar-inner @@ -35,21 +35,24 @@ html span class="icon-bar" span class="icon-bar" - a class="brand visible-phone" href="/">#VegasTech BB + a class="mobile-brand brand visible-phone" href="/"#VegasTech Bulletin Board .container.nav-collapse ul.nav.pull-right li= link_to "Current", root_url li= link_to "Recent", recent_path li= link_to "Events", events_path - li.dropdown.visible-desktop - = link_to "More Stuff ".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown" - ul.dropdown-menu - li= link_to "Q&A", tag_path('2') - li= link_to "Advice", tag_path('3') - / li= link_to "Photos", photos_path - li= link_to "Best of week", best_of_week_path - li= link_to "Jobs", "http://hirevegastech.com", target: 'new' + - if current_user && current_user.admin? + + li.dropdown.visible-desktop + = link_to "More Stuff ".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown" + ul.dropdown-menu + li= link_to "Q&A", tag_path('2') + li= link_to "Advice", tag_path('3') + / li= link_to "Photos", photos_path + li= link_to "Best of week", best_of_week_path + li= link_to "Jobs", "http://hirevegastech.com", target: 'new' + li= link_to "Whining", tag_path('4') / li.dropdown.visible-desktop / = link_to "Calendars", '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown" @@ -57,21 +60,20 @@ html / li= link_to 'VegasTech.com Events Calendar', 'http://vegastech.com/events/', target: 'new' / li= link_to 'TBAN Events Calendar', 'https://www.tban.com/events/', target: 'new' / li= link_to 'Work In Progress Calendar', 'http://www.workinprogress.lv/event-calendar/', target: 'new' - li= link_to "Whining", tag_path('4') li.dropdown.visible-desktop = link_to "Coworking ".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown" ul.dropdown-menu - li= link_to 'CoBiz Coworking', 'http://cobizcoworking.com/', target: 'new' + li= link_to 'CoBiz', 'http://cobizcoworking.com/', target: 'new' li= link_to 'The InNEVation Center', 'http://innevation.com/', target: 'new' li= link_to 'Work In Progress', 'http://workinprogress.lv/', target: 'new' - li.dropdown.visible-desktop - = link_to("RSS ".html_safe, '#', class: 'dropdown-toggle', 'data-toggle' => 'dropdown') - ul.dropdown-menu - li= link_to('Reaching 5 Points', rss_path(5), target: 'new') - li= link_to('Reaching 10 Points', rss_path(10), target: 'new') - li= link_to('Reaching 20 Points', rss_path(20), target: 'new') + / li.dropdown.visible-desktop + / = link_to("RSS ".html_safe, '#', class: 'dropdown-toggle', 'data-toggle' => 'dropdown') + / ul.dropdown-menu + / li= link_to('Reaching 5 Points', rss_path(5), target: 'new') + / li= link_to('Reaching 10 Points', rss_path(10), target: 'new') + / li= link_to('Reaching 20 Points', rss_path(20), target: 'new') / li.hidden-desktop= link_to 'VegasTech.com Events Calendar', 'http://vegastech.com/events/', target: 'new' / li.hidden-desktop= link_to 'Work In Progress', 'http://workinprogress.lv/events/', target: 'new' @@ -80,7 +82,7 @@ html - if logged_in? li.dropdown.visible-desktop - = link_to " My Account ".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown" + = link_to " Account ".html_safe, '#', :class => 'dropdown-toggle', "data-toggle" => "dropdown" ul.dropdown-menu li= link_to(current_user.twitter_handle, '#') @@ -92,12 +94,8 @@ html .container .content .row - .offset1.span10.offset1 - - unless flash[:notice].blank? - .alert.alert-success.fade.in - a class="close" data-dismiss="alert" href="×" - |× - h3= flash[:notice] + .span12 + = bootstrap_flash - if logged_in? .alert.alert-info.hidden-desktop @@ -113,8 +111,8 @@ html p.logos = link_to(image_tag(asset_path('lvrug_logo.png')), 'http://lvrug.org', target: '_blank') - p © #{Date.today.year} - A Project by #{link_to('The Las Vegas Ruby User Group', 'http://lvrug.org', target: '_blank')} ( #{link_to('@LVRUG', 'http://twitter.com/lvrug', target: '_blank') }). Hosted at the #{link_to('Switch SuperNAP', 'http://www.switchlv.com', target: 'blank')} - + p © 2013 - A Project by #{link_to('The Las Vegas Ruby User Group', 'http://lvrug.org', target: '_blank')} ( #{link_to('@LVRUG', 'http://twitter.com/lvrug', target: '_blank') }). Hosted at the #{link_to('Switch SuperNAP', 'http://www.switchlv.com', target: 'blank')} + p= link_to('About', about_path) / Javascripts / ================================================== diff --git a/app/views/shared/_events_index.html.slim b/app/views/shared/_events_index.html.slim index d8aafa9..27e4549 100644 --- a/app/views/shared/_events_index.html.slim +++ b/app/views/shared/_events_index.html.slim @@ -1,9 +1,15 @@ -h1 Upcoming Events +h2 Upcoming Events - @events_per_day.each do |date, events_for_day| - .date-time-header - h3= l date, format: :day_of_week + .event-date + h3 + i.icon-calendar + | + = l date, format: :day_of_week + .event - events_for_day.each do |event| + = render partial: 'stories/story', :locals => { :story => event } + = "Starts at: #{l event.start_time, format: :just_time}" diff --git a/app/views/shared/_story_index.html.slim b/app/views/shared/_story_index.html.slim index 0415298..b4e5a82 100644 --- a/app/views/shared/_story_index.html.slim +++ b/app/views/shared/_story_index.html.slim @@ -1,5 +1,3 @@ -h2 What's happening in #VegasTech - - @stories.each do |story| = render partial: 'stories/story', :locals => { :story => story } diff --git a/app/views/stories/_form.html.slim b/app/views/stories/_form.html.slim index 756e836..b9a8cb2 100644 --- a/app/views/stories/_form.html.slim +++ b/app/views/stories/_form.html.slim @@ -3,11 +3,14 @@ .form-inputs = f.association :tags, collection: Tag.order('name DESC'), :as => :check_boxes = f.input :start_time, :wrapper => :prepend, label: false do + = content_tag :div, "Start Time", class: "input-append date", id: 'datetimepicker' do - = f.input_field :start_time, as: :string, 'data-format' => "dd/MM/yyyy hh:mm:ss" + = content_tag :span, "Start Time", class: "add-on" do i data-time-icon="icon-time" data-date-icon="icon-calendar" + = f.input_field :start_time, as: :string, 'data-format' => "dd/MM/yyyy hh:mm:ss" + .form-actions = f.submit "Update", class: 'btn' diff --git a/app/views/stories/_story.html.slim b/app/views/stories/_story.html.slim index 7ce74f1..575744e 100644 --- a/app/views/stories/_story.html.slim +++ b/app/views/stories/_story.html.slim @@ -1,38 +1,59 @@ .story data-id="#{story.id}" data-score="#{story.score}" - .row + .row-fluid .content - = image_tag(asset_path('pin.png'), class: 'left-pin visible-desktop') - = image_tag(asset_path('pin.png'), class: 'right-pin visible-desktop') - = image_tag(asset_path('pin.png'), class: 'center-pin hidden-desktop') + / = image_tag(asset_path('pin.png'), class: 'left-pin visible-desktop') + / = image_tag(asset_path('pin.png'), class: 'right-pin visible-desktop') + / = image_tag(asset_path('pin.png'), class: 'center-pin hidden-desktop') - .span7 - = auto_link(story.content, url_target: '_blank').html_safe + .span9 + .tweet-words + = auto_link(story.content, url_target: '_blank').html_safe .metadata + a href="= link_from_handle(story.twitter_handle) " target="_blank" = image_tag(story.twitter_profile_image_url) span.handle= link_to(story.twitter_handle, link_from_handle(story.twitter_handle), target: '_blank') + + .pull-right + span.comments + - if story.comments.size == 0 + = link_to("Start Discussion", story_path(story)) + - else + = link_to("#{pluralize(story.comments.size, 'Comment')}", story_path(story)) + + - if current_user && current_user.admin? + span.comments + = link_to("Add Tags", edit_story_path(story), class: 'btn btn-mini') + span.age = link_to("#{time_ago_in_words(story.tweeted_at)} ago".html_safe, link_from_story(story), target: 'blank') - span.comments - = link_to("#{story.comments.size.to_i} Comments", story_path(story)) - - - if current_user && current_user.admin? - span.comments - = link_to("Add Tags", edit_story_path(story)) - - .span2 - - if current_user && !current_user.voted_on?(story) - = link_to("".html_safe, "#retweet-modal-#{story.twitter_id}", 'data-toggle' => 'modal', class: 'vote') - - elsif current_user && current_user.voted_on?(story) - .vote - i.icon-ok.icon-white - - else current_user - = link_to("".html_safe, '/auth/twitter', class: 'vote') - - .rank #{story.vote_count} points - .score #{story.score.to_f} + .visible-phone + .rank= pluralize( story.vote_count, 'Point') + - if current_user && !current_user.voted_on?(story) + = link_to("".html_safe, "#retweet-modal-#{story.twitter_id}", 'data-toggle' => 'modal', class: 'vote') + - elsif current_user && current_user.voted_on?(story) + .voted + i.icon-circle-arrow-up + - else current_user + = link_to("".html_safe, '/auth/twitter', class: 'vote') + + + + .hidden-phone + .span3.vote_actions + center + .rank= pluralize( story.vote_count, 'Point') + - if current_user && !current_user.voted_on?(story) + = link_to("".html_safe, "#retweet-modal-#{story.twitter_id}", 'data-toggle' => 'modal', class: 'vote') + - elsif current_user && current_user.voted_on?(story) + .voted + i.icon-circle-arrow-up + - else current_user + = link_to("".html_safe, '/auth/twitter', class: 'vote') + + / .score #{story.score.to_f} br.clear diff --git a/app/views/stories/edit.html.erb b/app/views/stories/edit.html.erb deleted file mode 100644 index 206e808..0000000 --- a/app/views/stories/edit.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<%- model_class = @story.class -%> -

    <%=t '.title', :default => t('helpers.titles.edit', :model => model_class.model_name.human, :default => "Edit #{model_class.model_name.human}") %>

    - -<%= render :partial => 'story', :locals => {:story => @story} %> - -<%= render :partial => 'form' %> diff --git a/app/views/stories/edit.html.slim b/app/views/stories/edit.html.slim new file mode 100644 index 0000000..af085c2 --- /dev/null +++ b/app/views/stories/edit.html.slim @@ -0,0 +1,5 @@ +h1 Add Tags + += render :partial => 'story', :locals => {:story => @story} + += render :partial => 'form' diff --git a/app/views/stories/show.html.erb b/app/views/stories/show.html.erb deleted file mode 100644 index 727df05..0000000 --- a/app/views/stories/show.html.erb +++ /dev/null @@ -1,42 +0,0 @@ -<%= render(partial: 'stories/story', locals: {story:@story}) %> - -<% if @comments.count > 0 %> -

    Discussion

    -
    - <% @comments.each do |comment| %> - <%= render(partial: 'comments/comment', locals: {story: comment}) %> - <% end %> -
    -<% end %> - -<% if @comments.empty? && current_user %> -

    There are no comments for this story.

    -

    Start the discussion by submitting a comment below.

    -<% elsif !@comments.empty? && current_user %> -

    Continue the discussion by submitting a comment.

    -<% elsif @comments.empty? && !current_user %> -

    There are no comments for this story.

    -

    Sign in to continue the discussion.

    -<% elsif !@comments.empty? && !current_user %> -

    Sign in to continue the discussion.

    -<% end %> - -<% if current_user %> - <%= form_for([@story, @story.comments.build(post_to_twitter:true)]) do |f| %> -
    -
    - <%= image_tag(@story.twitter_profile_image_url) %> -
    -
    -
    -
    - <%= f.text_area(:content, class: 'span9', rows: '7') %> - <%= f.check_box(:post_to_twitter) %> Reply to <%= @story.twitter_handle %> on Twitter? -
    -
    - - <%= f.submit('Post Your Comment', class: 'btn btn-large btn-primary') %> -
    -
    - <% end %> -<% end %> diff --git a/app/views/stories/show.html.slim b/app/views/stories/show.html.slim new file mode 100644 index 0000000..16e7333 --- /dev/null +++ b/app/views/stories/show.html.slim @@ -0,0 +1,34 @@ += render(partial: 'stories/story', locals: {story:@story}) + +- if @comments.count > 0 + h1 Discussion + .comments + - @comments.each do |comment| + = render(partial: 'comments/comment', locals: {story: comment}) + +- if @comments.empty? && current_user + h3 There are no comments for this story. + | Start the discussion by submitting a comment below. +- elsif !@comments.empty? && current_user + h3 Continue the discussion by adding your thoughts. +- elsif @comments.empty? && !current_user + h3 There are no comments for this story. + p Sign in to continue the discussion. +- elsif !@comments.empty? && !current_user + h3 Sign in to continue the discussion. + +- if current_user + = simple_form_for([@story, @story.comments.build(post_to_twitter:true)]) do |f| + .row.comment-form + .span1 + = image_tag(current_user.twitter_profile_image_url) + + .span8 + .control-group + .controls + = f.input :content, input_html: { class: 'span9', rows: '13' } + = f.input :post_to_twitter, label: false, as: :boolean, inline_label: "Yes, reply to #{@story.twitter_handle} on Twitter, too." + + + = f.submit('Post Your Comment', class: 'btn btn-large btn-primary') + \ No newline at end of file diff --git a/app/views/tags/show.html.slim b/app/views/tags/show.html.slim index 54c9ea9..8f824cb 100644 --- a/app/views/tags/show.html.slim +++ b/app/views/tags/show.html.slim @@ -1,2 +1,4 @@ +h1 = @tag.name + =render 'shared/story_index' diff --git a/app/views/votes/create.js.erb b/app/views/votes/create.js.erb index d3857a8..fc84cec 100644 --- a/app/views/votes/create.js.erb +++ b/app/views/votes/create.js.erb @@ -1,6 +1,6 @@ <% if @error %> <%# TODO %> <% else %> - $('.story[data-id="<%= @post.id %>"] .vote').replaceWith('
    ') + $('.story[data-id="<%= @post.id %>"] .vote').replaceWith('
    ') $('.story[data-id="<%= @post.id %>"] .rank').text('<%= @post.votes_count %> points') <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index ac82967..7bc5605 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -65,5 +65,7 @@ en: short: "%b %e, %G - %l:%M %p %Z" long: "%B %d, %Y %l:%M %p %Z" short_date: "%b %d, %Y" + just_time: "%l:%M %p %Z" + am: "am" pm: "pm" \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index eaf10ec..b5e753a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -32,12 +32,13 @@ resources :sessions, only: [:create, :destroy] - match '/rss/:count', to: 'rss#index', format: 'rss', as: :rss + match '/rss/:count', to: 'rss#index', format: 'rss' match '/auth/:provider/callback', to: 'sessions#create' match '/sign_out', to: 'sessions#destroy' - match '/recent', to: 'info#recent', as: :recent - match '/supporters', to: 'info#users', as: :users - match '/best_of_week/', to: 'info#best_of_week', as: :best_of_week + match '/recent', to: 'info#recent' + match '/about', to: 'info#about' + match '/supporters', to: 'info#users' + match '/best_of_week/', to: 'info#best_of_week' root to: 'stories#index' end diff --git a/db/migrate/20130701035258_add_twitter_profile_image_url_to_users.rb b/db/migrate/20130701035258_add_twitter_profile_image_url_to_users.rb new file mode 100644 index 0000000..3618200 --- /dev/null +++ b/db/migrate/20130701035258_add_twitter_profile_image_url_to_users.rb @@ -0,0 +1,5 @@ +class AddTwitterProfileImageUrlToUsers < ActiveRecord::Migration + def change + add_column :users, :twitter_profile_image_url, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index c0d9dbb..53a5ac5 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended to check this file into your version control system. -ActiveRecord::Schema.define(:version => 20130627235223) do +ActiveRecord::Schema.define(:version => 20130701035258) do create_table "flags", :force => true do |t| t.string "twitter_handle", :null => false @@ -58,9 +58,10 @@ create_table "users", :force => true do |t| t.string "twitter_handle" t.string "uid" - t.datetime "created_at", :null => false - t.datetime "updated_at", :null => false + t.datetime "created_at", :null => false + t.datetime "updated_at", :null => false t.string "auth_credentials" + t.string "twitter_profile_image_url" end add_index "users", ["twitter_handle"], :name => "index_users_on_twitter_handle"