/src/public/js/homepage.js

https://bitbucket.org/adi2412/givetocollege-adi · JavaScript · 132 lines · 115 code · 17 blank · 0 comment · 13 complexity · bb903e377f892862da1e65f1e498fca0 MD5 · raw file

  1. $(function ($, _, Backbone) {
  2. "use strict";
  3. var User = Backbone.Model.extend({
  4. idAttribute: "_id",
  5. url: function() {
  6. return '/user/info/' + this.get('id');
  7. },
  8. defaults: {
  9. email: '',
  10. first: '',
  11. last: '',
  12. dob: '',
  13. mailing_address: {
  14. street1: '',
  15. street2: '',
  16. city: '',
  17. state: '',
  18. zip: '',
  19. },
  20. user_roles: [],
  21. },
  22. });
  23. User = new User({ id: GiveToCollege.userId });
  24. var UserAchievement = Backbone.Model.extend();
  25. var UserCampaign = Backbone.Model.extend();
  26. var UserAchievementList = Backbone.Collection.extend({
  27. model: UserAchievement,
  28. url: function() {
  29. return '/user/achievements';
  30. }
  31. });
  32. UserAchievementList = new UserAchievementList({});
  33. var UserCampaignList = Backbone.Collection.extend({
  34. model: UserCampaign,
  35. url: function() {
  36. return '/user/campaigns';
  37. }
  38. });
  39. UserCampaignList = new UserCampaignList({});
  40. var HomepageView = Backbone.View.extend({
  41. tagName: 'div',
  42. $el_userinfo: $('#sidebar-userinfo'),
  43. $el_badges: $('#sidebar-badges-content'),
  44. $el_campaigns: $('#campaigns'),
  45. $el_achievement_showcase: $('#achievement-showcase'),
  46. $el_achievements: $('#achievements'),
  47. userinfo_template: _.template($('#userinfo-template').html()),
  48. userbadge_template: _.template($('#userbadge-template').html()),
  49. campaign_template: _.template($('#campaign-template').html()),
  50. achievement_showcase_template: _.template($('#achievement-showcase-template').html()),
  51. achievement_template: _.template($('#achievement-template').html()),
  52. initialize: function () {
  53. User.bind('change', this.renderUserInfo, this);
  54. UserAchievementList.bind('reset', this.renderUserBadges, this);
  55. UserAchievementList.bind('reset', this.renderAchievements, this);
  56. UserCampaignList.bind('reset', this.renderCampaigns, this);
  57. User.fetch();
  58. UserCampaignList.fetch();
  59. UserAchievementList.fetch();
  60. },
  61. renderUserInfo: function() {
  62. var user = User.toJSON();
  63. this.$el_userinfo.html(this.userinfo_template(user));
  64. },
  65. renderUserBadges: function() {
  66. this.$el_badges.empty();
  67. var achievements = UserAchievementList
  68. .filter(function(x) { return x.dateCompleted; })
  69. .map(function(x) { return x.toJSON(); });
  70. if (achievements.length == 0) {
  71. this.$el_badges.html('None');
  72. } else {
  73. _.each(achievements, function(achievement) {
  74. if (achievement.badge) {
  75. this.$el_badges.append(this.userbadge_template(achievement));
  76. }
  77. }, this);
  78. }
  79. },
  80. renderCampaigns: function() {
  81. this.$el_campaigns.empty();
  82. var campaigns = UserCampaignList
  83. .map(function(x) { return x.toJSON(); });
  84. if (campaigns.length == 0) {
  85. this.$el_campaigns.html('You have nothing to do!');
  86. } else {
  87. var $row = null;
  88. _.each(campaigns, function(campaign, index) {
  89. if (index % 4 == 0) {
  90. this.$el_campaigns.append('<div class="row-fluid">');
  91. $row = $(this.$el_campaigns.children('.row-fluid')).last();
  92. }
  93. $row.append(this.campaign_template(campaign));
  94. }, this);
  95. }
  96. },
  97. renderAchievements: function() {
  98. this.$el_achievements.empty();
  99. var achievements = UserAchievementList
  100. .filter(function(x) { return x.get('achievement').shouldShow && !x.get('dateCompleted') })
  101. .map(function(x) { return x.toJSON(); })
  102. .sort(function(a, b) { return b.progress - a.progress; })
  103. .slice(0, 6);
  104. if (achievements.length == 0) {
  105. this.$el_achievement_showcase.html('You have no achievements!');
  106. } else {
  107. this.$el_achievement_showcase.append(this.achievement_showcase_template(achievements[0]));
  108. _.each(achievements.slice(1), function(achievement, index) {
  109. this.$el_achievements.append(this.achievement_template(achievement));
  110. }, this);
  111. }
  112. }
  113. });
  114. HomepageView = new HomepageView();
  115. }(jQuery, _, Backbone));