* create a handlebars view for the profile header
* unblock the user via ajax
This commit is contained in:
parent
fba3092c61
commit
0092c9c483
9 changed files with 100 additions and 8 deletions
|
|
@ -35,5 +35,17 @@ app.models.Person = Backbone.Model.extend({
|
||||||
// return the jqXHR with Promise interface
|
// return the jqXHR with Promise interface
|
||||||
return block.save()
|
return block.save()
|
||||||
.done(function() { app.events.trigger('person:block:'+self.id); });
|
.done(function() { app.events.trigger('person:block:'+self.id); });
|
||||||
|
},
|
||||||
|
|
||||||
|
unblock: function() {
|
||||||
|
var self = this;
|
||||||
|
if( !this.get('block') ) {
|
||||||
|
var def = $.Deferred();
|
||||||
|
return def.reject();
|
||||||
|
}
|
||||||
|
|
||||||
|
var block = new app.models.Block({id: this.get('block').id});
|
||||||
|
return block.destroy()
|
||||||
|
.done(function() { app.events.trigger('person:unblock:'+self.id); });
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -2,11 +2,13 @@
|
||||||
// TODO: update the aspect_membership dropdown, too, every time we render the view...
|
// TODO: update the aspect_membership dropdown, too, every time we render the view...
|
||||||
app.pages.Profile = app.views.Base.extend({
|
app.pages.Profile = app.views.Base.extend({
|
||||||
events: {
|
events: {
|
||||||
'click #block_user_button': 'blockPerson'
|
'click #block_user_button': 'blockPerson',
|
||||||
|
'click #unblock_user_button': 'unblockPerson'
|
||||||
},
|
},
|
||||||
|
|
||||||
subviews: {
|
subviews: {
|
||||||
'#profile .badge': 'sidebarView'
|
'#profile .badge': 'sidebarView',
|
||||||
|
'.stream_container': 'streamView'
|
||||||
},
|
},
|
||||||
|
|
||||||
tooltipSelector: '.profile_button div, .sharing_message_container',
|
tooltipSelector: '.profile_button div, .sharing_message_container',
|
||||||
|
|
@ -20,6 +22,7 @@ app.pages.Profile = app.views.Base.extend({
|
||||||
// bind to global events
|
// bind to global events
|
||||||
var id = this.model.get('id');
|
var id = this.model.get('id');
|
||||||
app.events.on('person:block:'+id, this.reload, this);
|
app.events.on('person:block:'+id, this.reload, this);
|
||||||
|
app.events.on('person:unblock:'+id, this.reload, this);
|
||||||
app.events.on('aspect_membership:update', this.reload, this);
|
app.events.on('aspect_membership:update', this.reload, this);
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
@ -27,6 +30,10 @@ app.pages.Profile = app.views.Base.extend({
|
||||||
return new app.views.ProfileSidebar({model: this.model});
|
return new app.views.ProfileSidebar({model: this.model});
|
||||||
},
|
},
|
||||||
|
|
||||||
|
streamView: function() {
|
||||||
|
return new app.views.ProfileStream({model: this.model});
|
||||||
|
},
|
||||||
|
|
||||||
blockPerson: function(evt) {
|
blockPerson: function(evt) {
|
||||||
if( !confirm(Diaspora.I18n.t('ignore_user')) ) return;
|
if( !confirm(Diaspora.I18n.t('ignore_user')) ) return;
|
||||||
|
|
||||||
|
|
@ -41,6 +48,17 @@ app.pages.Profile = app.views.Base.extend({
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
unblockPerson: function(evt) {
|
||||||
|
var block = this.model.unblock();
|
||||||
|
block.fail(function() {
|
||||||
|
Diaspora.page.flashMessages.render({
|
||||||
|
success: false,
|
||||||
|
notice: Diaspora.I18.t('unblock_failed')
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
|
||||||
reload: function() {
|
reload: function() {
|
||||||
this.model.fetch();
|
this.model.fetch();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
10
app/assets/javascripts/app/views/profile_stream_view.js
Normal file
10
app/assets/javascripts/app/views/profile_stream_view.js
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
app.views.ProfileStream = app.views.Base.extend({
|
||||||
|
templateName: 'profile_stream',
|
||||||
|
|
||||||
|
presenter: function() {
|
||||||
|
return _.extend({}, this.defaultPresenter(), {
|
||||||
|
is_blocked: this.model.isBlocked()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
{{#if is_receiving}}
|
{{#if is_receiving}}
|
||||||
<div class="profile_button">
|
<div class="profile_button">
|
||||||
<a href="" rel="facebox">
|
<a href="TODO" rel="facebox">
|
||||||
<div id="mention_button" class="icons-mention" title="{{t 'people.mention'}}" data-placement="bottom"></div>
|
<div id="mention_button" class="icons-mention" title="{{t 'people.mention'}}" data-placement="bottom"></div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
|
|
||||||
{{#if is_mutual}}
|
{{#if is_mutual}}
|
||||||
<div class="profile_button">
|
<div class="profile_button">
|
||||||
<a href="" rel="facebox">
|
<a href="TODO" rel="facebox">
|
||||||
<div id="message_button" class="icons-message" title="{{t 'people.message'}}" data-placement="bottom"></div>
|
<div id="message_button" class="icons-message" title="{{t 'people.message'}}" data-placement="bottom"></div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
22
app/assets/templates/profile_stream_tpl.jst.hbs
Normal file
22
app/assets/templates/profile_stream_tpl.jst.hbs
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
<div id="author_info">
|
||||||
|
<div class="right">
|
||||||
|
{{#if loggedIn}}
|
||||||
|
{{#if is_own_profile}}
|
||||||
|
{{!-- can't block myself, so don't check it here --}}
|
||||||
|
<a href="TODO" class="button creation">{{t 'people.edit_my_profile'}}</a>
|
||||||
|
{{/if}}
|
||||||
|
{{#if is_blocked}}
|
||||||
|
<a href="#" id="unblock_user_button" class="button">{{t 'people.stop_ignoring'}}</a>
|
||||||
|
{{else}}
|
||||||
|
<div class="placeholder aspect_membership_dropdown"></div>
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2>{{name}}</h2>
|
||||||
|
<span class="diaspora_handle">{{diaspora_id}}</span>
|
||||||
|
|
||||||
|
<div class="description">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
6
app/presenters/block_presenter.rb
Normal file
6
app/presenters/block_presenter.rb
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
|
||||||
|
class BlockPresenter < BasePresenter
|
||||||
|
def base_hash
|
||||||
|
{ id: id }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -10,6 +10,7 @@ class PersonPresenter < BasePresenter
|
||||||
def full_hash
|
def full_hash
|
||||||
base_hash.merge({
|
base_hash.merge({
|
||||||
relationship: relationship,
|
relationship: relationship,
|
||||||
|
block: is_blocked? ? BlockPresenter.new(current_user_person_block).base_hash : false,
|
||||||
is_own_profile: own_profile?
|
is_own_profile: own_profile?
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
@ -45,12 +46,11 @@ class PersonPresenter < BasePresenter
|
||||||
def relationship
|
def relationship
|
||||||
contact = current_user.contact_for(@presentable)
|
contact = current_user.contact_for(@presentable)
|
||||||
|
|
||||||
is_blocked = current_user.blocks.where(person_id: id).limit(1).any?
|
|
||||||
is_mutual = contact ? contact.mutual? : false
|
is_mutual = contact ? contact.mutual? : false
|
||||||
is_sharing = contact ? contact.sharing? : false
|
is_sharing = contact ? contact.sharing? : false
|
||||||
is_receiving = contact ? contact.receiving? : false
|
is_receiving = contact ? contact.receiving? : false
|
||||||
|
|
||||||
if is_blocked then :blocked
|
if is_blocked? then :blocked
|
||||||
elsif is_mutual then :mutual
|
elsif is_mutual then :mutual
|
||||||
elsif is_sharing then :sharing
|
elsif is_sharing then :sharing
|
||||||
elsif is_receiving then :receiving
|
elsif is_receiving then :receiving
|
||||||
|
|
@ -59,6 +59,16 @@ class PersonPresenter < BasePresenter
|
||||||
end
|
end
|
||||||
|
|
||||||
def person_is_following_current_user
|
def person_is_following_current_user
|
||||||
@presentable.shares_with(@current_user)
|
@presentable.shares_with(current_user)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def current_user_person_block
|
||||||
|
@block ||= current_user.blocks.where(person_id: id).limit(1).first
|
||||||
|
end
|
||||||
|
|
||||||
|
def is_blocked?
|
||||||
|
current_user_person_block.present?
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,18 @@
|
||||||
%h3#aspect_stream_header.stream_title
|
%h3#aspect_stream_header.stream_title
|
||||||
= stream.title
|
= stream.title
|
||||||
|
|
||||||
= render 'publisher/publisher', :selected_aspects => stream.aspects, :aspect_ids => stream.aspect_ids, :aspect => stream.aspect
|
- aspects = current_user.aspects
|
||||||
|
- aspect = aspects.first
|
||||||
|
- aspect_ids = aspects.map { |a| a.id }
|
||||||
|
- if stream
|
||||||
|
- aspects = stream.aspects
|
||||||
|
- aspect = stream.aspect
|
||||||
|
- aspect_ids = stream.aspect_ids
|
||||||
|
|
||||||
|
= render 'publisher/publisher',
|
||||||
|
selected_aspects: aspects,
|
||||||
|
aspect_ids: aspect_ids,
|
||||||
|
aspect: aspect
|
||||||
= render 'aspects/no_posts_message'
|
= render 'aspects/no_posts_message'
|
||||||
|
|
||||||
#gs-shim{:title => popover_with_close_html("3. #{t('.stay_updated')}"), 'data-content' => t('.stay_updated_explanation')}
|
#gs-shim{:title => popover_with_close_html("3. #{t('.stay_updated')}"), 'data-content' => t('.stay_updated_explanation')}
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,7 @@ en:
|
||||||
exists: "The report already exists"
|
exists: "The report already exists"
|
||||||
ignore_user: "Ignore this user?"
|
ignore_user: "Ignore this user?"
|
||||||
ignore_failed: "Unable to ignore this user"
|
ignore_failed: "Unable to ignore this user"
|
||||||
|
unblock_failed: "Unblocking this user has failed"
|
||||||
and: "and"
|
and: "and"
|
||||||
comma: ","
|
comma: ","
|
||||||
edit: "Edit"
|
edit: "Edit"
|
||||||
|
|
@ -117,6 +118,8 @@ en:
|
||||||
not_found: "and no one was found..."
|
not_found: "and no one was found..."
|
||||||
mention: "Mention"
|
mention: "Mention"
|
||||||
message: "Message"
|
message: "Message"
|
||||||
|
edit_my_profile: "Edit my profile"
|
||||||
|
stop_ignoring: "Stop ignoring"
|
||||||
helper:
|
helper:
|
||||||
is_sharing: "<%= name %> is sharing with you"
|
is_sharing: "<%= name %> is sharing with you"
|
||||||
is_not_sharing: "<%= name %> is not sharing with you"
|
is_not_sharing: "<%= name %> is not sharing with you"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue