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

https://github.com/Bowerbird/bowerbird-web · JavaScript · 124 lines · 87 code · 27 blank · 10 comment · 14 complexity · f1a76d267e44374989b2bd404c2311b6 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/icanhaz/icanhaz.js" />
  7. /// <reference path="../../libs/backbone.marionette/backbone.marionette.js" />
  8. // ActivityItemView
  9. // ----------------
  10. // Shows an individual stream item
  11. define(['jquery', 'underscore', 'backbone', 'ich', 'app', 'models/sighting', 'models/sightingnote', 'models/identification', 'models/post', 'views/sightingdetailsview', 'views/sightingnotedetailsview', 'views/identificationdetailsview', 'views/postdetailsview', 'moment', 'timeago', 'tipsy'],
  12. function ($, _, Backbone, ich, app, Sighting, SightingNote, Identification, Post, SightingDetailsView, SightingNoteDetailsView, IdentificationDetailsView, PostDetailsView, moment) {
  13. var ActivityItemView = Backbone.Marionette.Layout.extend({
  14. tagName: 'li',
  15. className: 'activity-item',
  16. template: 'ActivityItem',
  17. events: {
  18. 'click .view-button': 'showItem',
  19. 'click .edit-observation-button': 'showItem'
  20. },
  21. regions: {
  22. details: '.details',
  23. summarySighting: '.sighting-summary-details'
  24. },
  25. initialize: function (options) {
  26. _.bindAll(this, 'refresh');
  27. },
  28. onRender: function () {
  29. var detailsView = null;
  30. var sightingSummaryView = null;
  31. if (this.model.get('Type') === "sightingadded") {
  32. detailsView = new SightingDetailsView({ className: 'observation-details', template: 'SightingFullDetails', model: new Sighting(this.model.get('ObservationAdded').Observation), isObservationActviityItem: true });
  33. }
  34. if (this.model.get('Type') === "sightingnoteadded") {
  35. sightingSummaryView = new SightingDetailsView({ template: 'SightingSummaryDetails', model: new Sighting(this.model.get('SightingNoteAdded').Sighting) });
  36. detailsView = new SightingNoteDetailsView({ model: new SightingNote(this.model.get('SightingNoteAdded').SightingNote), sighting: new Sighting(this.model.get('SightingNoteAdded').Sighting) });
  37. }
  38. if (this.model.get('Type') === "identificationadded") {
  39. sightingSummaryView = new SightingDetailsView({ template: 'SightingSummaryDetails', model: new Sighting(this.model.get('IdentificationAdded').Sighting) });
  40. detailsView = new IdentificationDetailsView({ model: new Identification(this.model.get('IdentificationAdded').Identification), sighting: new Sighting(this.model.get('IdentificationAdded').Sighting) });
  41. }
  42. if (this.model.get('Type') === "postadded") {
  43. detailsView = new PostDetailsView({ model: new Post(this.model.get('PostAdded').Post), template: 'PostFullDetails' });
  44. }
  45. this.details.show(detailsView);
  46. if (sightingSummaryView) {
  47. this.summarySighting.show(sightingSummaryView);
  48. }
  49. this._showDetails();
  50. },
  51. showBootstrappedDetails: function () {
  52. this.initializeRegions();
  53. var detailsView = null;
  54. var sightingSummaryView = null;
  55. if (this.model.get('Type') === "sightingadded") {
  56. detailsView = new SightingDetailsView({ className: 'observation-details', template: 'SightingFullDetails', el: this.$el.find('.observation-details'), model: new Sighting(this.model.get('ObservationAdded').Observation) });
  57. }
  58. if (this.model.get('Type') === "sightingnoteadded") {
  59. sightingSummaryView = new SightingDetailsView({ el: this.$el.find('.sighting-summary-details'), template: 'SightingSummaryDetails', model: new Sighting(this.model.get('SightingNoteAdded').Sighting) });
  60. detailsView = new SightingNoteDetailsView({ el: this.$el.find('.sighting-note-details'), model: new SightingNote(this.model.get('SightingNoteAdded').SightingNote), sighting: new Sighting(this.model.get('SightingNoteAdded').Sighting) });
  61. }
  62. if (this.model.get('Type') === "identificationadded") {
  63. sightingSummaryView = new SightingDetailsView({ el: this.$el.find('.sighting-summary-details'), template: 'SightingSummaryDetails', model: new Sighting(this.model.get('IdentificationAdded').Sighting) });
  64. detailsView = new IdentificationDetailsView({ el: this.$el.find('.identification-details'), model: new Identification(this.model.get('IdentificationAdded').Identification), sighting: new Sighting(this.model.get('IdentificationAdded').Sighting) });
  65. }
  66. if (this.model.get('Type') === "postadded") {
  67. detailsView = new PostDetailsView({ el: this.$el.find('.post-details'), model: new Post(this.model.get('PostAdded').Post) });
  68. }
  69. this.details.attachView(detailsView);
  70. detailsView.showBootstrappedDetails();
  71. if (sightingSummaryView) {
  72. this.summarySighting.attachView(sightingSummaryView);
  73. sightingSummaryView.showBootstrappedDetails();
  74. }
  75. this._showDetails();
  76. },
  77. _showDetails: function () {
  78. this.$el.find('.time-description').text(moment(this.model.get('CreatedDateTime')).format('D MMMM YYYY h:mma'));
  79. this.$el.find('.time-description').timeago();
  80. this.$el.find('.actions a').tipsy({ gravity: 's', html: true });
  81. },
  82. refresh: function () {
  83. if (this.details.currentView && this.details.currentView.refresh) {
  84. this.details.currentView.refresh();
  85. }
  86. if (this.summarySighting.currentView && this.summarySighting.currentView.refresh) {
  87. this.summarySighting.currentView.refresh();
  88. }
  89. },
  90. showItem: function (e) {
  91. e.preventDefault();
  92. this.$el.find('.actions a').tipsy.revalidate();
  93. Backbone.history.navigate($(e.currentTarget).attr('href'), { trigger: true });
  94. }
  95. });
  96. return ActivityItemView;
  97. });