/Src/Bowerbird.Website/js/bowerbird/views/userDetailsView.js

https://github.com/Bowerbird/bowerbird-web · JavaScript · 202 lines · 148 code · 45 blank · 9 comment · 16 complexity · ac4a27710a50ce07c14969a09b8dab88 MD5 · raw file

  1. /// <reference path="../../libs/log.js" />
  2. /// <reference path="../../libs/require/require.js" />
  3. /// <reference path="../../libs/jquery/jquery-1.7.2.js" />
  4. /// <reference path="../../libs/underscore/underscore.js" />
  5. /// <reference path="../../libs/backbone/backbone.js" />
  6. /// <reference path="../../libs/backbone.marionette/backbone.marionette.js" />
  7. // UserDetailsView
  8. // ---------------
  9. define(['jquery', 'underscore', 'backbone', 'app', 'views/activitylistview', 'views/sightinglistview', 'views/useraboutview', 'views/sightingsearchpanelview'],
  10. function ($, _, Backbone, app, ActivityListView, SightingListView, UserAboutView, SightingSearchPanelView) {
  11. var UserDetailsView = Backbone.Marionette.Layout.extend({
  12. viewType: 'detail',
  13. className: 'user double',
  14. template: 'User',
  15. regions: {
  16. summary: '.summary',
  17. search: '.search',
  18. list: '.list'
  19. },
  20. events: {
  21. 'click .activities-tab-button': 'showActivityTabSelection',
  22. 'click .sightings-tab-button': 'showSightingsTabSelection',
  23. 'click .about-tab-button': 'showAboutTabSelection'
  24. },
  25. activeTab: '',
  26. initialize: function () {
  27. _.bindAll(this, 'toggleSearchPanel');
  28. },
  29. serializeData: function () {
  30. return {
  31. Model: {
  32. User: this.model.toJSON(),
  33. //IsMember: _.any(app.authenticatedUser.memberships, function (membership) { return membership.GroupId === this.model.id; }, this),
  34. SightingCountDescription: this.model.get('SightingCount') === 1 ? 'Sighting' : 'Sightings',
  35. ProjectCountDescription: this.model.get('ProjectCount') === 1 ? 'Project' : 'Projects',
  36. OrganisationCountDescription: this.model.get('OrganisationCount') === 1 ? 'Organisation' : 'Organisations'
  37. }
  38. };
  39. },
  40. onShow: function () {
  41. this._showDetails();
  42. },
  43. showBootstrappedDetails: function () {
  44. this.initializeRegions();
  45. this._showDetails();
  46. },
  47. _showDetails: function () {
  48. },
  49. showActivityTabSelection: function (e) {
  50. e.preventDefault();
  51. this.showTabSelection('activities', $(e.currentTarget).attr('href'));
  52. },
  53. showSightingsTabSelection: function (e) {
  54. e.preventDefault();
  55. this.showTabSelection('sightings', $(e.currentTarget).attr('href'));
  56. },
  57. showAboutTabSelection: function (e) {
  58. e.preventDefault();
  59. this.showTabSelection('about', $(e.currentTarget).attr('href'));
  60. },
  61. showTabSelection: function (tab, url) {
  62. if (this.activeTab === tab) {
  63. return;
  64. }
  65. this.switchTabHighlight(tab);
  66. this.list.currentView.showLoading();
  67. Backbone.history.navigate(url, { trigger: true });
  68. },
  69. showActivity: function (activityCollection) {
  70. this.switchTabHighlight('activities');
  71. var options = {
  72. model: this.model,
  73. collection: activityCollection
  74. };
  75. if (app.isPrerenderingView('users')) {
  76. options['el'] = '.list > div';
  77. }
  78. var activityListView = new ActivityListView(options);
  79. if (app.isPrerenderingView('users')) {
  80. this.list.attachView(activityListView);
  81. activityListView.showBootstrappedDetails();
  82. } else {
  83. this.list.show(activityListView);
  84. }
  85. },
  86. showSightings: function (sightingCollection, categorySelectList, fieldSelectList) {
  87. this.switchTabHighlight('sightings');
  88. var options = {
  89. model: this.model,
  90. collection: sightingCollection
  91. };
  92. var searchOptions = {
  93. sightingCollection: sightingCollection,
  94. categorySelectList: categorySelectList,
  95. fieldSelectList: fieldSelectList
  96. };
  97. if (app.isPrerenderingView('users')) {
  98. options['el'] = '.list > div';
  99. searchOptions['el'] = '.search > div';
  100. }
  101. var sightingListView = new SightingListView(options);
  102. var sightingSearchPanelView = new SightingSearchPanelView(searchOptions);
  103. if (app.isPrerenderingView('users')) {
  104. this.list.attachView(sightingListView);
  105. sightingListView.showBootstrappedDetails();
  106. this.search.attachView(sightingSearchPanelView);
  107. sightingSearchPanelView.showBootstrappedDetails();
  108. } else {
  109. this.list.show(sightingListView);
  110. this.search.show(sightingSearchPanelView);
  111. }
  112. sightingListView.on('toggle-search', this.toggleSearchPanel);
  113. if (sightingCollection.hasSearchCriteria()) {
  114. this.$el.find('.search-bar').slideDown();
  115. }
  116. },
  117. showAbout: function (activityTimeseries) {
  118. this.switchTabHighlight('about');
  119. var options = {
  120. model: this.model
  121. };
  122. if (app.isPrerenderingView('users')) {
  123. options['el'] = '.list > div';
  124. }
  125. options.activityTimeseries = activityTimeseries;
  126. var userAboutView = new UserAboutView(options);
  127. if (app.isPrerenderingView('users')) {
  128. this.list.attachView(userAboutView);
  129. userAboutView.showBootstrappedDetails();
  130. } else {
  131. this.list.show(userAboutView);
  132. }
  133. },
  134. switchTabHighlight: function (tab) {
  135. this.activeTab = tab;
  136. this.$el.find('.tab-button').removeClass('selected');
  137. this.$el.find('.' + tab + '-tab-button').addClass('selected');
  138. if ((tab === 'activities' || tab === 'about') && this.search.currentView) {
  139. this.search.currentView.$el.hide();
  140. }
  141. },
  142. toggleSearchPanel: function () {
  143. log('search bar', this.$el.find('.search-bar'));
  144. if (this.$el.find('.search-bar').is(':visible')) {
  145. log('search is visible');
  146. this.$el.find('.search-bar').slideToggle();
  147. } else {
  148. log('search is not visible');
  149. var that = this;
  150. this.$el.find('.search-bar').slideToggle(function () {
  151. that.$el.find('.search-bar #query').focus();
  152. });
  153. }
  154. }
  155. });
  156. return UserDetailsView;
  157. });