diff --git a/app/controllers/people_controller.rb b/app/controllers/people_controller.rb index 0277fa88f3489fe762b8896337b1c6b139a094c9..173f133b8bd6f1190cabe792ea67524943569797 100644 --- a/app/controllers/people_controller.rb +++ b/app/controllers/people_controller.rb @@ -158,7 +158,7 @@ class PeopleController < ApplicationController def aspect_membership_dropdown @person = Person.find(params[:person_id]) @contact = current_user.contact_for(@person) || Contact.new - render :partial => 'aspect_memberships/aspect_dropdown', :locals => {:contact => @contact, :person => @person, :hang => 'left'} + render :partial => 'aspect_membership_dropdown', :locals => {:contact => @contact, :person => @person, :hang => 'left'} end private diff --git a/app/helpers/aspect_global_helper.rb b/app/helpers/aspect_global_helper.rb index 0545d60f1dde0d046f7ae23ccfd3cc8292e3b01e..9b38b7a09c2efba19b5d26de7d759a7a64924f1e 100644 --- a/app/helpers/aspect_global_helper.rb +++ b/app/helpers/aspect_global_helper.rb @@ -65,8 +65,17 @@ module AspectGlobalHelper end end - def aspect_dropdown_list_item(aspect, contact, person) - checked = (contact.persisted? && contact.in_aspect?(aspect)) + def aspect_membership_dropdown(contact, person, hang, aspect=nil) + selected_aspects = all_aspects.select{|aspect| contact.in_aspect?(aspect) } + + render "shared/aspect_dropdown", + :selected_aspects => selected_aspects, + :person => person, + :hang => hang, + :dropdown_class => "aspect_membership" + end + + def aspect_dropdown_list_item(aspect, checked) klass = checked ? "selected" : "" str = <<LISTITEM @@ -76,4 +85,8 @@ module AspectGlobalHelper LISTITEM str.html_safe end + + def dropdown_may_create_new_aspect + @aspect == :profile || @aspect == :tag || @aspect == :search || @aspect == :notification + end end diff --git a/app/views/aspect_memberships/_aspect_dropdown.html.haml b/app/views/aspect_memberships/_aspect_dropdown.html.haml deleted file mode 100644 index fc90b4174fb65cbd11672eb629af0f0b40287590..0000000000000000000000000000000000000000 --- a/app/views/aspect_memberships/_aspect_dropdown.html.haml +++ /dev/null @@ -1,21 +0,0 @@ --# Copyright (c) 2011, Diaspora Inc. This file is --# licensed under the Affero General Public License version 3 or later. See --# the COPYRIGHT file. - -.dropdown{:class => "hang_#{hang} #{extra_class if defined?(extra_class)}"} - .button.toggle{:class => ("in_aspects" if contact.aspects.size > 0)} - - if contact.aspects.size == 1 - = contact.aspects.first.name - - else - = t('.toggle', :count => contact.aspects.size) - ▼ - - .wrapper - %ul.dropdown_list{:unSelectable => 'on', 'data-person_id' => ((person.id) if person), 'data-service_uid' => (service_uid if defined?(service_uid))} - - for aspect in all_aspects - = aspect_dropdown_list_item(aspect, contact, person) - - - if @aspect && (@aspect == :profile || @aspect == :getting_started || @aspect == :tag || @aspect == :search || @aspect == :notification) - %li.newItem - .add_aspect - = link_to t('contacts.index.add_a_new_aspect'), new_aspect_path(:person_id => person.id), :rel => 'facebox', :class => 'new_aspect' diff --git a/app/views/aspect_memberships/_aspect_dropdown_list_item.haml b/app/views/aspect_memberships/_aspect_dropdown_list_item.haml deleted file mode 100644 index d7508aa0cd097306860ceb7f249c51015f0d83a0..0000000000000000000000000000000000000000 --- a/app/views/aspect_memberships/_aspect_dropdown_list_item.haml +++ /dev/null @@ -1,6 +0,0 @@ --# Copyright (c) 2011, Diaspora Inc. This file is --# licensed under the Affero General Public License version 3 or later. See --# the COPYRIGHT file. - -= aspect_dropdown_list_item(aspect, contact, person) - diff --git a/app/views/aspects/_aspect_stream.haml b/app/views/aspects/_aspect_stream.haml index c727f32fca1d612b821b979cb8793aa558880fa2..b086f312745203f7b4b8a24ad28d344cfe1a77f7 100644 --- a/app/views/aspects/_aspect_stream.haml +++ b/app/views/aspects/_aspect_stream.haml @@ -16,7 +16,7 @@ - else = @aspects.to_sentence -= render 'shared/publisher', :aspect => aspect, :aspect_ids => aspect_ids += render 'shared/publisher', :selected_aspects => @aspects, :aspect_ids => aspect_ids, :aspect => @aspect - if posts.length == 0 = render 'aspects/no_posts_message' diff --git a/app/views/aspects/create.js.erb b/app/views/aspects/create.js.erb index 30473247350558d42235d8fd4ea4ab977ac2528c..1b3b6d42893093b043bc8e6b249dea371e2396fc 100644 --- a/app/views/aspects/create.js.erb +++ b/app/views/aspects/create.js.erb @@ -3,7 +3,7 @@ // the COPYRIGHT file. var dropdown = $("ul.dropdown_list[data-person_id=<%= @person.id %>]") -$('.newItem', dropdown).before("<%= escape_javascript( render('aspect_memberships/aspect_dropdown_list_item', :aspect => @aspect, :person => @person, :contact => @contact)) %>"); +$('.newItem', dropdown).before("<%= escape_javascript( aspect_dropdown_list_item(@aspect, @contact.aspects.include?(@aspect))) %>"); ContactEdit.updateNumber(dropdown, "<%= @person.id %>", <%= @contact.aspects.size %>); $.facebox.close(); diff --git a/app/views/aspects/index.mobile.haml b/app/views/aspects/index.mobile.haml index caea84c34945419675dc8ca8520917da79ce3246..e7e22f20a0ddb4b25115ff1313c1034391d0530f 100644 --- a/app/views/aspects/index.mobile.haml +++ b/app/views/aspects/index.mobile.haml @@ -17,4 +17,4 @@ %a.more-link.paginate{:href => next_page_path} %h2= t("more") - content_for :subpages do - = render 'shared/publisher', :aspect_ids => @aspect_ids + = render 'shared/publisher', :aspect_ids => @aspect_ids, :selected_aspects => @aspects, :aspect => @aspect diff --git a/app/views/contacts/sharing.haml b/app/views/contacts/sharing.haml index 8e687f3618600add822495b9851e35bce1d04be4..3ef702ece7a416caf191e6df3b0716fd27541e73 100644 --- a/app/views/contacts/sharing.haml +++ b/app/views/contacts/sharing.haml @@ -23,7 +23,7 @@ = contact.person.diaspora_handle .right - = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => contact.person, :hang => 'right' + = aspect_membership_dropdown(contact, contact.person, 'right') %br %div{:style => "text-align:right;"} diff --git a/app/views/notifications/index.html.haml b/app/views/notifications/index.html.haml index cc02bb16ace8da225ad90fd2e257826abe9d823f..88a098ab2999c19d98693bed5b0408745dc4d3d8 100644 --- a/app/views/notifications/index.html.haml +++ b/app/views/notifications/index.html.haml @@ -24,7 +24,7 @@ .stream_element{:data=>{:guid => note.id}, :class => "#{note.unread ? 'unread' : ''}"} - if note.type == "Notifications::StartedSharing" && contact = current_user.contact_for(note[:target]) .right - = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => note[:target], :hang => 'left' + = aspect_membership_dropdown(contact, note[:target], 'left') %span.from = notification_message_for(note) diff --git a/app/views/people/_aspect_membership_dropdown.haml b/app/views/people/_aspect_membership_dropdown.haml new file mode 100644 index 0000000000000000000000000000000000000000..778ca85bfb16b83a1367800f7d075f39d1a70133 --- /dev/null +++ b/app/views/people/_aspect_membership_dropdown.haml @@ -0,0 +1 @@ += aspect_membership_dropdown(@contact, @person, 'left') diff --git a/app/views/people/_relationship_action.haml b/app/views/people/_relationship_action.haml index 9f70f9981c67981cdef285bca15cde28dc8eb0e4..98119128c08a183da6b1ccff33e2136577599b93 100644 --- a/app/views/people/_relationship_action.haml +++ b/app/views/people/_relationship_action.haml @@ -1,6 +1,6 @@ - unless person == current_user.person - contact = current_user.contacts.find_by_person_id(person.id) - contact ||= Contact.new(:person => person) - = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => person, :hang => 'left' + = aspect_membership_dropdown(contact, person, 'left') -else = t('people.person.thats_you') diff --git a/app/views/people/_sub_header.html.haml b/app/views/people/_sub_header.html.haml index 4d376461f9ff76ffdf4e791c594b3a800880057d..fd9b705472e1db2e81bbf3aba86e8ee28604c3c9 100644 --- a/app/views/people/_sub_header.html.haml +++ b/app/views/people/_sub_header.html.haml @@ -1,7 +1,7 @@ #author_info .right - if user_signed_in? && current_user.person != person - = render 'aspect_memberships/aspect_dropdown', :contact => contact, :person => person, :hang => 'left' + = aspect_membership_dropdown(contact, person, 'left') - elsif user_signed_in? && current_user.person == person = link_to t('people.profile_sidebar.edit_my_profile'), edit_profile_path, :class => 'button creation' diff --git a/app/views/services/_remote_friend.html.haml b/app/views/services/_remote_friend.html.haml index 09d5fce2fbe5031394f1e6fc0f5a4992e6457ef4..db4a668c04dec1921cac4383686cab17b87975bb 100644 --- a/app/views/services/_remote_friend.html.haml +++ b/app/views/services/_remote_friend.html.haml @@ -4,9 +4,9 @@ - if friend.already_invited? = link_to t('.resend'), service_inviter_path(:uid => friend.uid, :provider => 'facebook', :invitation_id => friend.invitation_id) - elsif friend.on_diaspora? - = render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left' + = render 'shared/aspect_dropdown', :selected_aspects => contact_proxy(friend).aspects, :person => friend.person, :hang => 'left' - else - = render 'aspect_memberships/aspect_dropdown', :contact => contact_proxy(friend), :person => friend.person, :hang => 'left', :extra_class => 'inviter', :service_uid => friend.uid + = render 'shared/aspect_dropdown', :selected_aspects => contact_proxy(friend).aspects, :person => friend.person, :hang => 'left', :dropdown_class => 'inviter', :service_uid => friend.uid - if friend.on_diaspora? = person_image_link(friend.person, :size => :thumb_small) diff --git a/app/views/shared/_aspect_dropdown.html.haml b/app/views/shared/_aspect_dropdown.html.haml new file mode 100644 index 0000000000000000000000000000000000000000..33c9ae81108d5a9be816f12bd7532f499a902683 --- /dev/null +++ b/app/views/shared/_aspect_dropdown.html.haml @@ -0,0 +1,21 @@ +-# Copyright (c) 2011, Diaspora Inc. This file is +-# licensed under the Affero General Public License version 3 or later. See +-# the COPYRIGHT file. + +.dropdown{:class => ["hang_#{hang}", defined?(dropdown_class) && dropdown_class]} + .button.toggle{:class => ("in_aspects" if selected_aspects.size > 0)} + - if selected_aspects.size == 1 + = selected_aspects.first.name + - else + = t('.toggle', :count => selected_aspects.size) + ▼ + + .wrapper + %ul.dropdown_list{:unSelectable => 'on', 'data-person_id' => (person.id if defined?(person) && person), 'data-service_uid' => (service_uid if defined?(service_uid))} + - for aspect in all_aspects + = aspect_dropdown_list_item(aspect, selected_aspects.include?(aspect) ) + + - if (dropdown_may_create_new_aspect && defined?(person) && person) + %li.newItem + .add_aspect + = link_to t('contacts.index.add_a_new_aspect'), new_aspect_path(:person_id => person.id), :rel => 'facebox' diff --git a/app/views/shared/_publisher.html.haml b/app/views/shared/_publisher.html.haml index d899c3d02a64d83ac969991682323652c11eba38..3b534281a64ff6677e146c31f78f543ff7055ec4 100644 --- a/app/views/shared/_publisher.html.haml +++ b/app/views/shared/_publisher.html.haml @@ -29,12 +29,6 @@ = hidden_field_tag 'aspect_ids[]', aspect_id.to_s .options_and_submit - - if aspect == :profile - .mention_helper - .badges - %i= t('.publishing_to') - = aspect_badges(aspects_with_person, :link => false) - .public_toggle %span#publisher_service_icons = t("shared.publisher.click_to_share_with") @@ -45,6 +39,7 @@ - for service in current_user.services = image_tag "social_media_logos/#{service.provider}-16x16.png", :title => service.provider.titleize, :class => "service_icon dim", :id =>"#{service.provider}", :maxchar => "#{service.class::MAX_CHARACTERS}" = link_to (image_tag "icons/monotone_wrench_settings.png"), "#question_mark_pane", :class => 'question_mark', :rel => 'facebox', :title => t('shared.public_explain.manage') + = render "shared/aspect_dropdown", :selected_aspects => selected_aspects, :hang => 'left' = status.submit t('.share'), :disable_with => t('.posting'), :class => 'button creation', :tabindex => 2 .facebox_content diff --git a/app/views/status_messages/bookmarklet.html.haml b/app/views/status_messages/bookmarklet.html.haml index 134d01303c74455c1d6d897b0a6f220fd22a846f..3854a9255ff4102df79a6b92dbf32f5a09b6fa76 100644 --- a/app/views/status_messages/bookmarklet.html.haml +++ b/app/views/status_messages/bookmarklet.html.haml @@ -10,7 +10,7 @@ :javascript Diaspora.widgets.i18n.loadLocale(#{get_javascript_strings_for(current_user.language).to_json}, "#{current_user.language}"); - $(document).ready(function() + $(document).ready(function() { Publisher.open(); $("#publisher").bind('ajax:success', function(){ @@ -24,7 +24,7 @@ if ("#{params[:notes]}".length > 0){ contents = contents + " - #{params[:notes]}"; } - + $("#publisher #status_message_fake_text").val(contents); $("#publisher #status_message_text").val(contents); $('input.button')[0].removeAttribute('disabled'); @@ -34,5 +34,5 @@ .span-15.last %h4 =t('bookmarklet.post_something') - = render :partial => 'shared/publisher', :locals => { :aspect => :profile, :aspects_with_person => @aspects, :aspect_ids => @aspect_ids} + = render :partial => 'shared/publisher', :locals => { :aspect => :profile, :selected_aspects => @aspects, :aspect_ids => @aspect_ids } diff --git a/app/views/status_messages/new.haml b/app/views/status_messages/new.haml index acc8b16772c3e1355a4c4a1be290cd45cd8a2c51..003073df18bb0ee841c83ed6af077cf7b82b86d9 100644 --- a/app/views/status_messages/new.haml +++ b/app/views/status_messages/new.haml @@ -6,7 +6,7 @@ = javascript_include_tag "publisher.js" :javascript - $(document).ready(function() + $(document).ready(function() { var person = {name: '#{@person.name}', handle: '#{@person.diaspora_handle}' }; Publisher.autocompletion.onSelect($("#status_message_fake_text"),person,'#{@person.name}'); @@ -21,5 +21,5 @@ %h3 = t('.mentioning', :person => @person.name) - = render :partial => 'shared/publisher', :locals => { :aspect => @aspect, :aspect_ids => @aspect_ids, :aspects_with_person => @aspects_with_person, :person => @person} + = render :partial => 'shared/publisher', :locals => { :aspect => @aspect, :aspect_ids => @aspect_ids, :selected_aspects => @aspects_with_person, :person => @person} diff --git a/config/assets.yml b/config/assets.yml index f45144dbf85c84f58d44f8cce27c1047717fa316..62a75ae4bbdaa6ca42216251499d5f61df93b204 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -42,6 +42,7 @@ javascripts: - public/javascripts/stream.js - public/javascripts/content-updater.js - public/javascripts/search.js + - public/javascripts/aspects-dropdown.js - public/javascripts/contact-edit.js - public/javascripts/contact-list.js - public/javascripts/aspect-sorting.js diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index 93efc0d8ba4eb11980c43d99fefea39018ea4266..700fb2585aa3f9321f98d213bed1717118d3322d 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -180,14 +180,6 @@ en: success: "Successfully removed person from aspect" failure: "Failed to remove person from aspect" no_membership: "Could not find the selected person in that aspect" - aspect_dropdown: - add_to_aspect: "Add to aspect" - toggle: - zero: "Add to aspect" - one: "In %{count} aspect" - few: "In %{count} aspects" - many: "In %{count} aspects" - other: "In %{count} aspects" bookmarklet: heading: "Bookmarklet" @@ -653,6 +645,14 @@ en: not_on_diaspora: "Not yet on Diaspora" shared: + aspect_dropdown: + add_to_aspect: "Add to aspect" + toggle: + zero: "Add to aspect" + one: "In %{count} aspect" + few: "In %{count} aspects" + many: "In %{count} aspects" + other: "In %{count} aspects" publisher: posting: "Posting..." share: "Share" diff --git a/features/posts.feature b/features/posts.feature index 95a6436eb63d50c12fd33498bca6c0354240a9d0..b95cea3cbae7dca3e406980d84b9a2b2f5b97f6b 100644 --- a/features/posts.feature +++ b/features/posts.feature @@ -154,7 +154,8 @@ Feature: posting And I click "Mention" button And I expand the publisher in the modal window And I append "I am eating a yogurt" to the publisher - And I follow "DidntPostTo" within "#publisher" in the modal window + And I press the aspect dropdown in the modal window + And I toggle the aspect "DidntPostTo" in the modal window And I press "Share" in the modal window And I am on the aspects page And I follow "<aspect>" within "#aspect_nav" diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb index 08b99dd746b9f2f7c4978b3d62de2712e8097f91..594ffc2f6dcb8c7c7e5f0be26dca5f09978e9727 100644 --- a/features/step_definitions/custom_web_steps.rb +++ b/features/step_definitions/custom_web_steps.rb @@ -11,6 +11,15 @@ And /^I expand the publisher$/ do ') end +When /^I press the aspect dropdown$/ do + find('.dropdown .button').click +end + +And /^I toggle the aspect "([^"]*)"$/ do |aspect_name| + aspect = @me.aspects.where(:name => aspect_name).first + find("li[data-aspect_id='#{aspect.id}']").click +end + Then /^the publisher should be collapsed$/ do find("#publisher")["class"].should include("closed") end diff --git a/public/javascripts/aspects-dropdown.js b/public/javascripts/aspects-dropdown.js new file mode 100644 index 0000000000000000000000000000000000000000..5aed7eeb9c5ef0adf5ffbaecb4797548829db6e5 --- /dev/null +++ b/public/javascripts/aspects-dropdown.js @@ -0,0 +1,33 @@ +// Copyright (c) 2011, Diaspora Inc. This file is +// licensed under the Affero General Public License version 3 or later. See +// the COPYRIGHT file. + +var AspectsDropdown = { + updateNumber: function(dropdown, personId, number, inAspectClass){ + var button = dropdown.parents(".dropdown").children('.button.toggle'), + replacement; + + if (number == 0) { + button.removeClass(inAspectClass); + replacement = Diaspora.widgets.i18n.t("aspect_dropdown.toggle.zero"); + }else if (number == 1) { + button.addClass(inAspectClass); + replacement = dropdown.find(".selected").first().text(); + }else if (number < 3) { + replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.few', { count: number.toString()}) + }else if (number > 3) { + replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.many', { count: number.toString()}) + }else { + //the above one are a tautology, but I want to have them here once for once we figure out a neat way i18n them + replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.other', { count: number.toString()}) + } + + button.html(replacement + ' â–¼'); + }, + + toggleCheckbox: + function(check){ + check.parent('li').toggleClass('selected'); + }, +}; + diff --git a/public/javascripts/contact-edit.js b/public/javascripts/contact-edit.js index 76795ba3d1e364aaea1457d5c71082464fa96383..9480257aabcd156c1b0aeeb71d50ecb13a399aaa 100644 --- a/public/javascripts/contact-edit.js +++ b/public/javascripts/contact-edit.js @@ -4,7 +4,8 @@ var ContactEdit = { init: function(){ - $('.dropdown .dropdown_list > li').live('click', function(evt){ + $.extend(ContactEdit, AspectsDropdown); + $('.dropdown.aspect_membership .dropdown_list > li').live('click', function(evt){ ContactEdit.processClick($(this), evt); }); }, @@ -44,33 +45,11 @@ var ContactEdit = { "_method": (selected) ? "DELETE" : "POST" }, function(aspectMembership) { li.removeClass('loading') - li.toggleClass("selected"); - ContactEdit.updateNumber(li.closest(".dropdown_list"), li.parent().data("person_id"), aspectMembership.aspect_ids.length); + ContactEdit.toggleCheckbox(checkbox); + ContactEdit.updateNumber(li.closest(".dropdown_list"), li.parent().data("person_id"), aspectMembership.aspect_ids.length, 'in_aspect'); Diaspora.widgets.publish("aspectDropdown/updated", [li.parent().data("person_id"), li.parents(".dropdown").parent(".right").html()]); }); }, - - updateNumber: function(dropdown, personId, number){ - var button = dropdown.parents(".dropdown").children('.button.toggle'), - replacement; - - if (number == 0) { - button.removeClass("in_aspects"); - replacement = Diaspora.widgets.i18n.t("aspect_dropdown.toggle.zero"); - }else if (number == 1) { - button.addClass("in_aspects"); - replacement = dropdown.find(".selected").first().text(); - }else if (number < 3) { - replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.few', { count: number.toString()}) - }else if (number > 3) { - replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.many', { count: number.toString()}) - }else { - //the above one are a tautology, but I want to have them here once for once we figure out a neat way i18n them - replacement = Diaspora.widgets.i18n.t('aspect_dropdown.toggle.other', { count: number.toString()}) - } - - button.html(replacement + ' â–¼'); - }, }; $(document).ready(function(){ diff --git a/public/javascripts/publisher.js b/public/javascripts/publisher.js index 77950f6e2636317f725239a9a6547fb97723a400..d3265c2eca6efbf110352c47c24dba8283b14bff 100644 --- a/public/javascripts/publisher.js +++ b/public/javascripts/publisher.js @@ -315,6 +315,12 @@ var Publisher = { '<input id="services_" name="services[]" type="hidden" value="'+provider+'">'); } }, + selectedAspectIds: function() { + var aspects = $('#publisher [name="aspect_ids[]"]'); + var aspectIds = []; + aspects.each(function() { aspectIds.push( parseInt($(this).attr('value'))); }); + return aspectIds; + }, toggleAspectIds: function(aspectId) { var hidden_field = $('#publisher [name="aspect_ids[]"][value="'+aspectId+'"]'); if(hidden_field.length > 0){ @@ -338,18 +344,25 @@ var Publisher = { $('#status_message_fake_text').charCount({allowed: min, warning: min/10 }); } }, - bindAspectToggles: function() { - $('#publisher .aspect_badge').bind("click", function(){ - var unremovedAspects = $(this).parent().children('.aspect_badge').length - $(this).parent().children(".aspect_badge.removed").length; - if(!$(this).hasClass('removed') && ( unremovedAspects == 1 )){ - alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect')); - }else{ - Publisher.toggleAspectIds($(this).children('a').attr('data-guid')); - $(this).toggleClass("removed"); - } + $('#publisher .dropdown .dropdown_list li').bind("click", function(evt){ + var li = $(this), + button = li.find('.button'), + checkbox = li.find('img.check'); + if(button.hasClass('disabled')) { return; } + + AspectsDropdown.toggleCheckbox(checkbox); + AspectsDropdown.updateNumber(li.closest(".dropdown_list"), null, li.parent().find('li.selected').length, ''); + + Publisher.toggleAspectIds(li.attr('data-aspect_id')); }); }, + beforeSubmit: function(){ + if($("#publisher .content_creation form #aspect_ids_").length == 0){ + alert(Diaspora.widgets.i18n.t('publisher.at_least_one_aspect')); + return false; + } + }, onSubmit: function(data, json, xhr){ $("#photodropzone").find('li').remove(); $("#publisher textarea").removeClass("with_attachments").css('paddingBottom', ''); @@ -363,7 +376,21 @@ var Publisher = { } }, onSuccess: function(data, json, xhr){ - ContentUpdater.addPostToStream(json.html); + var isPostVisible = false; + var postedTo = Publisher.selectedAspectIds(); + $.each(AspectFilters.selectedGUIDS, function(index, value){ + if(postedTo.indexOf(parseInt(value))>-1) + isPostVisible = true; + }); + + if(isPostVisible) + ContentUpdater.addPostToStream(json.html); + else + Diaspora.widgets.flashes.render({ + success: true, + message: Diaspora.widgets.i18n.t('successfully_posted_message_to_an_aspects_that_is_not_visible') + }); + //collapse publisher Publisher.close(); Publisher.clear(); @@ -371,6 +398,7 @@ var Publisher = { Stream.setUpAudioLinks(); }, bindAjax: function(){ + Publisher.form().bind('submit', Publisher.beforeSubmit); Publisher.form().bind('ajax:loading', Publisher.onSubmit); Publisher.form().bind('ajax:failure', Publisher.onFailure); Publisher.form().bind('ajax:success', Publisher.onSuccess); diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 9fcb6b13b85626a5e5b1239727c08ec40c3bb5b8..78026adb135ae70afc5c8d399f96e23f36273401 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -765,8 +765,12 @@ a.paginate, #infscr-loading &:hover :border 1px solid #1C6D99 -#main_stream .pagination - :display none +#main_stream + :position relative + :z-index 0 + + .pagination + :display none .request_buttons :position absolute @@ -866,7 +870,7 @@ label #publisher - :z-index 0 + :z-index 1 :color #999 :position relative :margin @@ -930,6 +934,9 @@ label .public_toggle :text :align right + .dropdown + :text + :align left #publisher_service_icons :position relative @@ -945,6 +952,7 @@ label :position relative :top -2px + .content_creation :margin :top 1em