Merge pull request #6309 from AugierLe42e/left-navbar-polishing

Left and right navbar polishing
This commit is contained in:
Steffen van Bergerem 2015-08-23 11:26:37 +02:00
commit eddfa7cb5c
22 changed files with 288 additions and 245 deletions

View file

@ -47,6 +47,7 @@ With the port to Bootstrap 3, app/views/terms/default.haml has a new structure.
* Remove unused header icons and an unused favicon [#6283](https://github.com/diaspora/diaspora/pull/6283) * Remove unused header icons and an unused favicon [#6283](https://github.com/diaspora/diaspora/pull/6283)
* Replace mobile icons for post interactions with Entypo icons [#6291](https://github.com/diaspora/diaspora/pull/6291) * Replace mobile icons for post interactions with Entypo icons [#6291](https://github.com/diaspora/diaspora/pull/6291)
* Replace jquery.autocomplete with typeahead.js [#6293](https://github.com/diaspora/diaspora/pull/6293) * Replace jquery.autocomplete with typeahead.js [#6293](https://github.com/diaspora/diaspora/pull/6293)
* Redesign sidebars on stream pages [#6309](https://github.com/diaspora/diaspora/pull/6309)
## Bug fixes ## Bug fixes
* Destroy Participation when removing interactions with a post [#5852](https://github.com/diaspora/diaspora/pull/5852) * Destroy Participation when removing interactions with a post [#5852](https://github.com/diaspora/diaspora/pull/5852)

View file

@ -8,7 +8,7 @@ app.views.Aspect = app.views.Base.extend({
className: 'hoverable', className: 'hoverable',
events: { events: {
"click .entypo-check+a": "toggleAspect" "click .aspect-item": "toggleAspect"
}, },
toggleAspect: function(evt) { toggleAspect: function(evt) {

View file

@ -31,7 +31,7 @@ app.views.AspectsList = app.views.Base.extend({
}, },
appendAspect: function(aspect) { appendAspect: function(aspect) {
$("#aspects_list > *:last").before(new app.views.Aspect({ $("#aspects_list > .hoverable:last").before(new app.views.Aspect({
model: aspect, attributes: {'data-aspect_id': aspect.get('id')} model: aspect, attributes: {'data-aspect_id': aspect.get('id')}
}).render().el); }).render().el);
}, },

View file

@ -1,10 +1,10 @@
// @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later // @license magnet:?xt=urn:btih:0b31508aeb0634b347b8270c7bee4d411b5d4109&dn=agpl-3.0.txt AGPL-v3-or-Later
app.views.Sidebar = app.views.Base.extend({ app.views.Sidebar = app.views.Base.extend({
el: '.rightBar', el: ".rightbar",
events: { events: {
'click input#invite_code': 'selectInputText' "click input#invite_code": "selectInputText"
}, },
selectInputText: function(event) { selectInputText: function(event) {

View file

@ -9,7 +9,7 @@ app.views.TagFollowing = app.views.Base.extend({
tagName: "li", tagName: "li",
events : { events : {
"click .delete_tag_following": "destroyModel" "click .delete-tag-following": "destroyModel"
}, },
initialize : function(){ initialize : function(){

View file

@ -81,11 +81,11 @@
@import 'post-content'; @import 'post-content';
/* right bar */ /* right bar */
@import 'sidebar'; @import 'navbar_right';
/* contacts */ /* contacts */
@import 'contacts'; @import 'contacts';
@import 'leftnavbar'; @import 'navbar_left';
/* code */ /* code */
@import 'new_styles/code'; @import 'new_styles/code';

View file

@ -24,7 +24,7 @@ body {
} }
} }
#leftNavBar .hoverable:hover { background-color: $main-color-essence; } #left-navbar .hoverable:hover { background-color: $main-color-essence; }
.poll_form .progress .bar { background-color: $main-color-dark; } .poll_form .progress .bar { background-color: $main-color-dark; }

View file

@ -25,6 +25,10 @@ $red: #A80000;
$blue: #3F8FBA; $blue: #3F8FBA;
$dark-blue: darken(#0984C8,10%); $dark-blue: darken(#0984C8,10%);
$sidebars-background: #f0f0f0;
$sidebars-sub-background: darken($sidebars-background, 12%);
$left-navbar-drawer-background: darken($sidebars-background, 6%);
/* colors : http://www.colourlovers.com/palette/2134203/Awezome_in_argyle */ /* colors : http://www.colourlovers.com/palette/2134203/Awezome_in_argyle */
$cyan : rgb(8,204,249); $cyan : rgb(8,204,249);
$yellow : rgb(242,244,9); $yellow : rgb(242,244,9);

View file

@ -1,127 +0,0 @@
#leftNavBar {
a {
color: $link-grey;
font-weight: bold;
text-decoration: none;
}
ul {
margin: 0px;
padding: 0px;
list-style: none;
}
.selected { color: $black; }
.selected a { color: $black; }
.hoverable {
display: block;
margin-right: 6px;
padding: 4px;
&:hover { background-color: $background-blue; }
}
.selectable {
display: block;
margin-left: 21px;
overflow: hidden;
text-overflow: ellipsis;
}
#home_user_badge {
border-bottom: 1px dashed $border-grey;
margin-bottom: 10px;
min-height: 50px;
padding-bottom: 20px;
padding-left: 4px;
.avatar {
float: left;
height: 50px;
width: 50px;
}
h4 {
margin-left: 60px;
padding-top: 15px;
overflow: hidden;
text-overflow: ellipsis;
a { color: $black; }
}
}
#stream_selection {
& > li {
margin-bottom: 5px;
}
}
#aspects_list, #tags_list {
.hoverable > .action {
visibility: hidden;
margin: 0 3px;
}
.hoverable:hover > .action {
visibility: visible;
}
}
#aspects_list {
.entypo-check {
float: left;
visibility: hidden;
&.selected { visibility: visible; }
}
.selected + a {
color: #333333;
}
}
#tags_list {
.delete_tag_following {
font-size: 20px;
line-height: 15px;
}
#new_tag_following {
margin-left: 20px;
margin-top: 5px;
}
/* ---- override app/stylesheets/vendor/autoSuggest.css ---- */
.as-original{ width: 100%; }
.tag_input {
line-height: $font-size-base;
vertical-align: top;
width: 100%;
}
.as-result {
margin-top: -1px;
margin-left: 1px;
}
.as-list {
em {
background-color: #aabbcc;
color: black;
padding: 0px;
}
color: black;
position: static; /* override absolute */
margin: 0px;
border-radius: 0px 0px 3px 3px;
box-shadow: 0px 1px 1px #666;
}
.as-result-item.active {
color: black;
text-shadow: none;
background-color: $background-blue;
border-color: $background-blue;
}
/* ---- end override app/stylesheets/vendor/autoSuggest.css ---- */
}
}

View file

@ -0,0 +1,140 @@
/* Fixed backgrounds are a common practice to avoid height issues */
#left-navbar-fixed-sub-background {
background: $sidebars-sub-background;
position: fixed;
height: 100%;
}
#left-navbar-fixed-background {
background: $sidebars-background;
border-right: 1px solid $light-grey;
position: fixed;
height: 100%;
}
#left-navbar {
background: $sidebars-background;
border-right: 1px solid $light-grey;
a {
color: $link-grey;
font-weight: bold;
text-decoration: none;
outline: 0;
}
ul {
margin: 0;
padding: 0;
list-style: none;
&#stream_selection {
margin: 0px -15px; /* -15px overrides Bootstrap's default gutter width */
}
}
.selected, .selected a { color: $black; }
.hoverable {
display: block;
&.selected a, &.selected a:hover,
.followed-tags-sidebar a.hoverable.selected {
color: white;
background: #666;
}
}
a.hoverable, li.hoverable {
padding: 10px 20px;
display: block;
font-weight: normal;
color: $link-grey;
border-bottom: 1px solid #ddd;
&:hover, &:hover a,
&:hover .entypo-check{
background-color: $blue;
color: $white;
}
&:not(:hover) [class^="entypo"] { visibility: hidden; }
.entypo-check.selected { visibility: visible; }
}
#aspects_list, #tags_list {
background: $left-navbar-drawer-background;
li { padding: 0; }
.selectable {
display: block;
overflow: hidden;
text-overflow: ellipsis;
padding: 10px 20px 10px 40px;
}
.action.modify_aspect, .action.delete-tag-following {
position: relative;
bottom: 30px;
right: 20px;
}
}
#home_user_badge {
min-height: 90px;
padding: 20px;
margin: 0 -15px;
.avatar {
float: left;
height: 50px;
width: 50px;
}
h4 {
margin: 0 0 0 60px;
overflow: hidden;
text-overflow: ellipsis;
line-height: 25px;
a {
color: $black;
font-weight: normal;
}
}
}
#tags_list {
#new_tag_following {
padding: 10px 20px 10px 30px;
}
/* ---- override app/stylesheets/vendor/autoSuggest.css ---- */
.as-original{ width: 100%; }
.tag_input {
line-height: $font-size-base;
vertical-align: top;
width: 100%;
}
.as-result {
margin-top: -1px;
margin-left: 1px;
}
.as-list {
em {
background-color: #aabbcc;
color: black;
padding: 0px;
}
color: black;
position: static; /* override absolute */
margin: 0px;
border-radius: 0px 0px 3px 3px;
box-shadow: 0px 1px 1px #666;
}
.as-result-item.active {
color: black;
text-shadow: none;
background-color: $background-blue;
border-color: $background-blue;
}
/* ---- end override app/stylesheets/vendor/autoSuggest.css ---- */
}
}

View file

@ -1,21 +1,39 @@
.rightBar { #right-sidebar-fixed-background {
height: 100%;
border-left: 1px solid $light-grey;
background: $sidebars-background;
position: fixed;
right: 0;
}
#right-sidebar-fixed-sub-background {
height: 100%;
background: $sidebars-sub-background;
position: fixed;
right: 0;
}
.right-sidebar-padder {
max-width: 400px;
}
.rightbar {
padding-top: 20px; padding-top: 20px;
border-left: 1px solid $light-grey;
background: $sidebars-background;
.section { .section {
margin-bottom: 20px; margin-bottom: 20px;
> .title { > .title {
border-bottom: 1px solid $border-grey; border-bottom: 1px solid $border-grey;
padding-bottom: 2px; padding-bottom: 5px;
&.no_icon { padding-left: 8px; } &.no_icon { padding-left: 8px; }
h5 { h5 {
color: $text-dark-grey; color: $text-dark-grey;
font-weight: bold; font-weight: normal;
font-size: $font-size-base; font-size: $font-size-base;
margin: 0; margin: 0;
&.title-header { margin-left: 5px; }
} }
} }
@ -23,7 +41,7 @@
color: $text-grey; color: $text-grey;
font-size: $font-size-small; font-size: $font-size-small;
line-height: 18px; line-height: 18px;
padding: 5px; padding: 10px 0;
p, ul { margin: 0; } p, ul { margin: 0; }
@ -69,3 +87,9 @@
} }
} }
} }
@media screen and (min-width: 1200px) {
#right-sidebar-fixed-background {
margin-right: 8.33333%; /* Only for LARGE screens, same as lg-offset-1 class, BS3 does not provide right side offsetting */
}
}

View file

@ -59,7 +59,7 @@ footer ul#footer_nav {
right: auto; right: auto;
} }
.rightBar .right { .rightbar .right {
margin-right: 70px; margin-right: 70px;
} }

View file

@ -1,5 +1,4 @@
.stream_container { .stream_container {
border-left: 1px solid $border-grey;
padding-left: 10px; padding-left: 10px;
padding-top: 20px; padding-top: 20px;
margin-left: -10px; margin-left: -10px;

View file

@ -1,9 +1,11 @@
<a href="/aspects/query" class="selectable aspect-item" data-guid="{{id}}">
{{#if selected}}
<i class="entypo-check selected"></i>
{{else}}
<div class="entypo-check"></div>
{{/if}}
{{name}}
</a>
<a href="/contacts?a_id={{id}}" class="action modify_aspect pull-right"> <a href="/contacts?a_id={{id}}" class="action modify_aspect pull-right">
<i class="entypo-pencil"></i> <i class="entypo-pencil"></i>
</a> </a>
{{#if selected}}
<i class="entypo-check selected"></i>
{{else}}
<div class="entypo-check"></div>
{{/if}}
<a href="/aspects/query" class="selectable" data-guid="{{id}}"> {{name}} </a>

View file

@ -7,5 +7,5 @@
<a href="#" class="selectable new_aspect" data-toggle="modal" data-target="#newAspectModal"> <a href="#" class="selectable new_aspect" data-toggle="modal" data-target="#newAspectModal">
{{ t "aspect_navigation.add_an_aspect" }} {{ t "aspect_navigation.add_an_aspect" }}
</a> </a>
<div id="newAspectContainer"></div>
</li> </li>
<div id="newAspectContainer"></div>

View file

@ -1,4 +1,6 @@
<a href="#" id="unfollow_{{name}}" rel="nofollow" class="action delete_tag_following pull-right" title="{{t "delete"}}">&times;</a>
<a href="/tags/{{name}}" class="selectable"> <a href="/tags/{{name}}" class="selectable">
#{{ name }} #{{ name }}
</a> </a>
<a href="#" id="unfollow_{{name}}" rel="nofollow" class="action delete-tag-following pull-right" title="{{t "delete"}}">
<i class="entypo-cross"></i>
</a>

View file

@ -2,30 +2,28 @@
-# licensed under the Affero General Public License version 3 or later. See -# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file. -# the COPYRIGHT file.
.right-sidebar-padder
- if AppConfig.settings.invitations.open? - if AppConfig.settings.invitations.open?
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-plus
= t('shared.invitations.invite_your_friends') = t('shared.invitations.invite_your_friends')
.content .content
= render "shared/invitations" = render "shared/invitations"
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-users
= t('aspects.index.new_here.title') = t('aspects.index.new_here.title')
.content .content
!= t('aspects.index.new_here.follow', link: link_to("#"+t('shared.publisher.new_user_prefill.newhere'), tag_path(name: t('shared.publisher.new_user_prefill.newhere')))) != t('aspects.index.new_here.follow', link: link_to("#"+t('shared.publisher.new_user_prefill.newhere'), tag_path(name: t('shared.publisher.new_user_prefill.newhere'))))
%br %br
= link_to(t('aspects.index.new_here.learn_more'), "http://wiki.diasporafoundation.org/Welcoming_Committee") = link_to(t('aspects.index.new_here.learn_more'), "http://wiki.diasporafoundation.org/Welcoming_Committee")
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-circled-help
= t('aspects.index.help.need_help') = t('aspects.index.help.need_help')
.content .content
%p %p
@ -45,11 +43,10 @@
:tutorial => link_to(t('aspects.index.help.tutorial_link_text'), "https://diasporafoundation.org/tutorials", :target => '_blank'), :tutorial => link_to(t('aspects.index.help.tutorial_link_text'), "https://diasporafoundation.org/tutorials", :target => '_blank'),
:wiki => link_to('Wiki','http://wiki.diasporafoundation.org', :target => '_blank'), :target => '_blank') :wiki => link_to('Wiki','http://wiki.diasporafoundation.org', :target => '_blank'), :target => '_blank')
- unless AppConfig.configured_services.blank? || all_services_connected? - unless AppConfig.configured_services.blank? || all_services_connected?
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-cog
= t('aspects.index.services.heading') = t('aspects.index.services.heading')
.content .content
%div %div
@ -61,30 +58,27 @@
- unless current_user.services.any?{|x| x.provider == service} - unless current_user.services.any?{|x| x.provider == service}
= link_to(content_tag(:div, nil, :class => "social_media_logos-#{service.to_s.downcase}-24x24", :title => service.to_s.titleize), "/auth/#{service}") = link_to(content_tag(:div, nil, :class => "social_media_logos-#{service.to_s.downcase}-24x24", :title => service.to_s.titleize), "/auth/#{service}")
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-bookmark
= t('bookmarklet.heading') = t('bookmarklet.heading')
.content .content
!= t('bookmarklet.explanation', :link => link_to(t('bookmarklet.post_something'), bookmarklet_code)) != t('bookmarklet.explanation', :link => link_to(t('bookmarklet.post_something'), bookmarklet_code))
- if AppConfig.settings.paypal_donations.enable? || AppConfig.bitcoin_donation_address - if AppConfig.settings.paypal_donations.enable? || AppConfig.bitcoin_donation_address
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-heart
= t('aspects.index.donate') = t('aspects.index.donate')
.content .content
%p %p
= t('aspects.index.keep_pod_running', :pod => AppConfig.pod_uri.host) = t('aspects.index.keep_pod_running', :pod => AppConfig.pod_uri.host)
= render 'shared/donatepod' = render 'shared/donatepod'
- if AppConfig.admins.podmin_email.present? - if AppConfig.admins.podmin_email.present?
.section .section
.title .title
%h5.title-header %h5.title-header
%i.entypo-mail
= t('aspects.index.help.any_problem') = t('aspects.index.help.any_problem')
.content .content
%p %p
@ -92,7 +86,7 @@
%p %p
= link_to t('aspects.index.help.mail_podmin'), "mailto:#{AppConfig.admins.podmin_email}", :class => "button" = link_to t('aspects.index.help.mail_podmin'), "mailto:#{AppConfig.admins.podmin_email}", :class => "button"
.section .section
.title .title
.content .content
%ul %ul

View file

@ -22,7 +22,9 @@
%div.container-fluid %div.container-fluid
.row .row
.col-md-offset-1.col-md-2#leftNavBar #left-navbar-fixed-sub-background.col-lg-1.visible-lg
#left-navbar-fixed-background.col-lg-offset-1.col-lg-2.col-md-3.hidden-sm.hidden-xs
#left-navbar.col-lg-offset-1.col-lg-2.col-md-3
#home_user_badge #home_user_badge
= owner_image_link = owner_image_link
%h4 %h4
@ -37,16 +39,18 @@
= link_to t("streams.mentions.title"), mentioned_stream_path, rel: "backbone", class: "hoverable" = link_to t("streams.mentions.title"), mentioned_stream_path, rel: "backbone", class: "hoverable"
%li.all_aspects %li.all_aspects
= render "aspects/aspect_listings", stream: @stream = render "aspects/aspect_listings", stream: @stream
%li %li.followed-tags-sidebar
= render "tags/followed_tags_listings" = render "tags/followed_tags_listings"
.col-md-6 .col-md-6
#aspect_stream_container.stream_container #aspect_stream_container.stream_container
= render 'aspects/aspect_stream', stream: @stream = render 'aspects/aspect_stream', stream: @stream
.col-md-2.rightBar #right-sidebar-fixed-sub-background.col-lg-3.visible-lg
#right-sidebar-fixed-background.col-md-3.col-lg-2.hidden-sm.hidden-xs
.col-md-3.col-lg-2.hidden-xs.hidden-sm.rightbar
#selected_aspect_contacts.section #selected_aspect_contacts.section
.title.no_icon .title
%h5.stream_title %h5.stream_title
= @stream.title = @stream.title
.content .content

View file

@ -42,10 +42,10 @@ When /^I click on "([^"]*)" aspect edit icon$/ do |aspect_name|
end end
When /^I select only "([^"]*)" aspect$/ do |aspect_name| When /^I select only "([^"]*)" aspect$/ do |aspect_name|
click_link 'My aspects' click_link "My aspects"
within('#aspects_list') do within("#aspects_list") do
click_link 'Deselect all' all(".selected").each {|node| node.find(:xpath, "..").click }
current_scope.should have_no_css '.selected' expect(current_scope).to have_no_css ".selected"
end end
step %Q(I select "#{aspect_name}" aspect as well) step %Q(I select "#{aspect_name}" aspect as well)
end end

View file

@ -1,8 +1,8 @@
When(/^I unfollow the "(.*?)" tag$/) do |tag| When(/^I unfollow the "(.*?)" tag$/) do |tag|
within("#tags_list") do within("#tags_list") do
li = find('li', text: tag) li = find("li", text: tag)
li.hover li.hover
li.find('.delete_tag_following').click li.find(".delete-tag-following").click
end end
step 'I confirm the alert' step "I confirm the alert"
end end

View file

@ -10,7 +10,7 @@ describe("app.views.Aspect", function(){
}); });
it("should show the aspect selected", function(){ it("should show the aspect selected", function(){
expect(this.view.$el.children(".entypo-check").hasClass("selected")).toBeTruthy(); expect(this.view.$el.find(".entypo-check").hasClass("selected")).toBeTruthy();
}); });
it('should show the name of the aspect', function(){ it('should show the name of the aspect', function(){

View file

@ -18,13 +18,13 @@ describe("app.views.AspectsList", function(){
this.view.render(); this.view.render();
}); });
it('should show the corresponding aspects selected', function(){ it("should show the corresponding aspects selected", function(){
expect(this.view.$('.selected').length).toBe(1); expect(this.view.$(".selected").length).toBe(1);
expect(this.view.$('.selected + a.selectable').text()).toMatch('Work'); expect(this.view.$(".selected").parent().text()).toMatch("Work");
}); });
it("should show all the aspects", function(){ it("should show all the aspects", function(){
var aspectSelectors = this.view.$(".entypo-check + a.selectable"); var aspectSelectors = this.view.$(".entypo-check").parent();
expect(aspectSelectors.length).toBe(3); expect(aspectSelectors.length).toBe(3);
expect(aspectSelectors[0].text).toMatch("Work"); expect(aspectSelectors[0].text).toMatch("Work");
expect(aspectSelectors[1].text).toMatch("Friends"); expect(aspectSelectors[1].text).toMatch("Friends");