Commit 3c9e860f authored by Alfredo Sumaran's avatar Alfredo Sumaran

Provide defaults and make sure we everything is container into a parent element

parent 85e672b1
...@@ -12,4 +12,7 @@ class @User ...@@ -12,4 +12,7 @@ class @User
e.preventDefault() e.preventDefault()
initTabs: -> initTabs: ->
new UserTabs(@opts) new UserTabs(
parentEl: '.user-profile'
action: @opts.action
)
...@@ -52,8 +52,15 @@ ...@@ -52,8 +52,15 @@
class @UserTabs class @UserTabs
actions: ['activity', 'groups', 'contributed', 'projects'], actions: ['activity', 'groups', 'contributed', 'projects'],
defaultAction: 'activity', defaultAction: 'activity',
constructor: (opts) ->
{
@action = 'activity'
@parentEl = $(document)
} = opts
# Make jQuery object if selector is provided
@parentEl = $(@parentEl) if typeof @parentEl is 'string'
constructor: (@opts = {}) ->
# Store the `location` object, allowing for easier stubbing in tests # Store the `location` object, allowing for easier stubbing in tests
@_location = location @_location = location
@loaded = {} @loaded = {}
...@@ -61,19 +68,18 @@ class @UserTabs ...@@ -61,19 +68,18 @@ class @UserTabs
@bindEvents() @bindEvents()
@tabStateInit() @tabStateInit()
action = @opts.action currAction = @defaultAction if @action is 'show'
action = @defaultAction if action == 'show'
# Set active tab # Set active tab
source = $(".#{action}-tab a").attr('href') source = $(".#{currAction}-tab a").attr('href')
@activateTab(action) @activateTab(currAction)
bindEvents: -> bindEvents: ->
# Turn off existing event listeners # Turn off existing event listeners
$(document).off 'shown.bs.tab', '.nav-links a[data-toggle="tab"]' @parentEl.off 'shown.bs.tab', '.nav-links a[data-toggle="tab"]'
# Set event listeners # Set event listeners
$(document).on 'shown.bs.tab', '.nav-links a[data-toggle="tab"]', @tabShown @parentEl.on 'shown.bs.tab', '.nav-links a[data-toggle="tab"]', @tabShown
tabStateInit: -> tabStateInit: ->
for action in @actions for action in @actions
...@@ -88,7 +94,7 @@ class @UserTabs ...@@ -88,7 +94,7 @@ class @UserTabs
@setCurrentAction(action) @setCurrentAction(action)
activateTab: (action) -> activateTab: (action) ->
$(".nav-links .#{action}-tab a").tab('show') @parentEl.find(".nav-links .#{action}-tab a").tab('show')
setTab: (source, action) -> setTab: (source, action) ->
return if @loaded[action] is true return if @loaded[action] is true
...@@ -108,20 +114,20 @@ class @UserTabs ...@@ -108,20 +114,20 @@ class @UserTabs
url: "#{source}.json" url: "#{source}.json"
success: (data) => success: (data) =>
tabSelector = 'div#' + action tabSelector = 'div#' + action
document.querySelector(tabSelector).innerHTML = data.html @parentEl.find(tabSelector).html(data.html)
@loaded[action] = true @loaded[action] = true
loadActivities: (source) -> loadActivities: (source) ->
return if @loaded['activity'] is true return if @loaded['activity'] is true
$calendarWrap = $('.user-calendar') $calendarWrap = @parentEl.find('.user-calendar')
$calendarWrap.load($calendarWrap.data('href')) $calendarWrap.load($calendarWrap.data('href'))
new Activities() new Activities()
@loaded['activity'] = true @loaded['activity'] = true
toggleLoading: (status) -> toggleLoading: (status) ->
$('.loading-status .loading').toggle(status) @parentEl.find('.loading-status .loading').toggle(status)
setCurrentAction: (action) -> setCurrentAction: (action) ->
# Remove possible actions from URL # Remove possible actions from URL
......
...@@ -8,105 +8,106 @@ ...@@ -8,105 +8,106 @@
= render 'shared/show_aside' = render 'shared/show_aside'
.cover-block .user-profile
.cover-controls .cover-block
- if @user == current_user .cover-controls
= link_to profile_path, class: 'btn btn-gray' do - if @user == current_user
= icon('pencil') = link_to profile_path, class: 'btn btn-gray' do
- elsif current_user = icon('pencil')
%span.report-abuse - elsif current_user
- if @user.abuse_report %span.report-abuse
%button.btn.btn-danger{ title: 'Already reported for abuse', - if @user.abuse_report
data: { toggle: 'tooltip', placement: 'left', container: 'body' }} %button.btn.btn-danger{ title: 'Already reported for abuse',
= icon('exclamation-circle') data: { toggle: 'tooltip', placement: 'left', container: 'body' }}
- else = icon('exclamation-circle')
= link_to new_abuse_report_path(user_id: @user.id, ref_url: request.referrer), class: 'btn btn-gray', - else
title: 'Report abuse', data: {toggle: 'tooltip', placement: 'left', container: 'body'} do = link_to new_abuse_report_path(user_id: @user.id, ref_url: request.referrer), class: 'btn btn-gray',
= icon('exclamation-circle') title: 'Report abuse', data: {toggle: 'tooltip', placement: 'left', container: 'body'} do
- if current_user = icon('exclamation-circle')
  - if current_user
= link_to user_path(@user, :atom, { private_token: current_user.private_token }), class: 'btn btn-gray' do  
= icon('rss') = link_to user_path(@user, :atom, { private_token: current_user.private_token }), class: 'btn btn-gray' do
= icon('rss')
.avatar-holder
= link_to avatar_icon(@user, 400), target: '_blank' do .avatar-holder
= image_tag avatar_icon(@user, 90), class: "avatar s90", alt: '' = link_to avatar_icon(@user, 400), target: '_blank' do
.cover-title = image_tag avatar_icon(@user, 90), class: "avatar s90", alt: ''
= @user.name .cover-title
= @user.name
.cover-desc
%span.middle-dot-divider
@#{@user.username}
%span.middle-dot-divider
Member since #{@user.created_at.to_s(:medium)}
- if @user.bio.present?
.cover-desc
%p.profile-user-bio
= @user.bio
.cover-desc
- unless @user.public_email.blank?
.profile-link-holder.middle-dot-divider
= link_to @user.public_email, "mailto:#{@user.public_email}"
- unless @user.skype.blank?
.profile-link-holder.middle-dot-divider
= link_to "skype:#{@user.skype}", title: "Skype" do
= icon('skype')
- unless @user.linkedin.blank?
.profile-link-holder.middle-dot-divider
= link_to "https://www.linkedin.com/in/#{@user.linkedin}", title: "LinkedIn" do
= icon('linkedin-square')
- unless @user.twitter.blank?
.profile-link-holder.middle-dot-divider
= link_to "https://twitter.com/#{@user.twitter}", title: "Twitter" do
= icon('twitter-square')
- unless @user.website_url.blank?
.profile-link-holder.middle-dot-divider
= link_to @user.short_website_url, @user.full_website_url
- unless @user.location.blank?
.profile-link-holder.middle-dot-divider
= icon('map-marker')
= @user.location
%ul.nav-links.center
%li.activity-tab
= link_to user_calendar_activities_path, data: {target: 'div#activity', action: 'activity', toggle: 'tab'} do
Activity
%li.groups-tab
= link_to user_groups_path, data: {target: 'div#groups', action: 'groups', toggle: 'tab'} do
Groups
%li.contributed-tab
= link_to user_contributed_projects_path, data: {target: 'div#contributed', action: 'contributed', toggle: 'tab'} do
Contributed projects
%li.projects-tab
= link_to user_projects_path, data: {target: 'div#projects', action: 'projects', toggle: 'tab'} do
Personal projects
%div{ class: container_class }
.tab-content
#activity.tab-pane
.gray-content-block.white.second-block
%div{ class: container_class }
.user-calendar{data: {href: user_calendar_path}}
%h4.center.light
%i.fa.fa-spinner.fa-spin
.user-calendar-activities
.content_list{ data: {href: user_path} }
= spinner
#groups.tab-pane
- # This tab is always loaded via AJAX
#contributed.contributed-projects.tab-pane .cover-desc
- # This tab is always loaded via AJAX %span.middle-dot-divider
@#{@user.username}
%span.middle-dot-divider
Member since #{@user.created_at.to_s(:medium)}
#projects.tab-pane - if @user.bio.present?
- # This tab is always loaded via AJAX .cover-desc
%p.profile-user-bio
= @user.bio
.loading-status .cover-desc
= spinner - unless @user.public_email.blank?
.profile-link-holder.middle-dot-divider
= link_to @user.public_email, "mailto:#{@user.public_email}"
- unless @user.skype.blank?
.profile-link-holder.middle-dot-divider
= link_to "skype:#{@user.skype}", title: "Skype" do
= icon('skype')
- unless @user.linkedin.blank?
.profile-link-holder.middle-dot-divider
= link_to "https://www.linkedin.com/in/#{@user.linkedin}", title: "LinkedIn" do
= icon('linkedin-square')
- unless @user.twitter.blank?
.profile-link-holder.middle-dot-divider
= link_to "https://twitter.com/#{@user.twitter}", title: "Twitter" do
= icon('twitter-square')
- unless @user.website_url.blank?
.profile-link-holder.middle-dot-divider
= link_to @user.short_website_url, @user.full_website_url
- unless @user.location.blank?
.profile-link-holder.middle-dot-divider
= icon('map-marker')
= @user.location
%ul.nav-links.center.user-profile-nav
%li.activity-tab
= link_to user_calendar_activities_path, data: {target: 'div#activity', action: 'activity', toggle: 'tab'} do
Activity
%li.groups-tab
= link_to user_groups_path, data: {target: 'div#groups', action: 'groups', toggle: 'tab'} do
Groups
%li.contributed-tab
= link_to user_contributed_projects_path, data: {target: 'div#contributed', action: 'contributed', toggle: 'tab'} do
Contributed projects
%li.projects-tab
= link_to user_projects_path, data: {target: 'div#projects', action: 'projects', toggle: 'tab'} do
Personal projects
%div{ class: container_class }
.tab-content
#activity.tab-pane
.gray-content-block.white.second-block
%div{ class: container_class }
.user-calendar{data: {href: user_calendar_path}}
%h4.center.light
%i.fa.fa-spinner.fa-spin
.user-calendar-activities
.content_list{ data: {href: user_path} }
= spinner
#groups.tab-pane
- # This tab is always loaded via AJAX
#contributed.contributed-projects.tab-pane
- # This tab is always loaded via AJAX
#projects.tab-pane
- # This tab is always loaded via AJAX
.loading-status
= spinner
:javascript :javascript
var userProfile; var userProfile;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment