/Src/Bowerbird.Website/js/bowerbird/controllers/homeController.js

https://github.com/Bowerbird/bowerbird-web · JavaScript · 240 lines · 203 code · 27 blank · 10 comment · 31 complexity · 0d0055ce9f85b8083cc86f71e70eda6a 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. // HomeController & HomeRouter
  8. // ---------------------------
  9. define(['jquery', 'underscore', 'backbone', 'app', 'collections/sightingcollection', 'collections/postcollection',
  10. 'collections/activitycollection', 'views/homepublicview', 'views/homeprivateview',
  11. 'views/favouritesview', 'views/homegenericview'],
  12. function ($, _, Backbone, app, SightingCollection, PostCollection, ActivityCollection, HomePublicView,
  13. HomePrivateView, FavouritesView, HomeGenericView) {
  14. var HomeRouter = Backbone.Marionette.AppRouter.extend({
  15. appRoutes: {
  16. '': 'showHome',
  17. 'home/sightings*': 'showSightings',
  18. 'home/posts*': 'showPosts',
  19. 'timeline': 'showAllBowerbirdActivity',
  20. 'favourites': 'showFavourites',
  21. 'about': 'showAbout',
  22. 'terms': 'showTerms',
  23. 'privacy': 'showPrivacy'
  24. }
  25. });
  26. var HomeController = {};
  27. var getModel = function (uri, action) {
  28. var deferred = new $.Deferred();
  29. if (app.isPrerenderingView('home')) {
  30. deferred.resolve(app.prerenderedView.data);
  31. } else {
  32. $.ajax({
  33. url: uri,
  34. type: action || 'GET'
  35. }).done(function (data) {
  36. deferred.resolve(data.Model);
  37. });
  38. }
  39. return deferred.promise();
  40. };
  41. // Public API
  42. // ----------
  43. HomeController.showHome = function () {
  44. $.when(getModel('/'))
  45. .done(function (model) {
  46. if (app.content.currentView instanceof HomePrivateView) {
  47. var activityCollection = new ActivityCollection(model.Activities.PagedListItems);
  48. activityCollection.setPageInfo(model.Activities);
  49. app.content.currentView.showActivity(activityCollection);
  50. } else {
  51. var homeView;
  52. var options = {};
  53. if (app.authenticatedUser) {
  54. options = { model: app.authenticatedUser.user };
  55. if (app.isPrerenderingView('home')) {
  56. options['el'] = '.home-private';
  57. }
  58. homeView = new HomePrivateView(options);
  59. } else {
  60. if (app.isPrerenderingView('home')) {
  61. options['el'] = '.home-public';
  62. }
  63. homeView = new HomePublicView(options);
  64. }
  65. app.showContentView('', homeView, 'home', function () {
  66. if (app.authenticatedUser) {
  67. var activityCollection = new ActivityCollection(model.Activities.PagedListItems);
  68. activityCollection.setPageInfo(model.Activities);
  69. homeView.showActivity(activityCollection);
  70. }
  71. });
  72. }
  73. });
  74. };
  75. HomeController.showSightings = function (params) {
  76. $.when(getModel('/home/sightings?view=' + (params && params.view ? params.view : 'thumbnails') + '&sort=' + (params && params.sort ? params.sort : 'newest')))
  77. .done(function (model) {
  78. var sightingCollection = new SightingCollection(model.Sightings.PagedListItems,
  79. {
  80. subId: 'home',
  81. page: model.Query.Page,
  82. pageSize: model.Query.PageSize,
  83. total: model.Sightings.TotalResultCount,
  84. viewType: model.Query.View,
  85. sortBy: model.Query.Sort,
  86. category: model.Query.Category,
  87. needsId: model.Query.NeedsId,
  88. query: model.Query.Query,
  89. field: model.Query.Field,
  90. taxonomy: model.Query.Taxonomy
  91. });
  92. if (app.content.currentView instanceof HomePrivateView) {
  93. app.content.currentView.showSightings(sightingCollection, model.CategorySelectList, model.FieldSelectList);
  94. } else {
  95. var homeView;
  96. if (app.authenticatedUser) {
  97. var options = { model: app.authenticatedUser.user };
  98. if (app.isPrerenderingView('home')) {
  99. options['el'] = '.home-private';
  100. }
  101. homeView = new HomePrivateView(options);
  102. } else {
  103. homeView = new HomePublicView();
  104. }
  105. app.showContentView('', homeView, 'home', function () {
  106. if (app.authenticatedUser) {
  107. homeView.showSightings(sightingCollection, model.CategorySelectList, model.FieldSelectList);
  108. }
  109. });
  110. }
  111. });
  112. };
  113. HomeController.showPosts = function (id, params) {
  114. $.when(getModel('/home/posts?sort=' + (params && params.sort ? params.sort : 'newest')))
  115. .done(function (model) {
  116. var postCollection = new PostCollection(model.Posts.PagedListItems,
  117. {
  118. subId: 'home',
  119. page: model.Query.Page,
  120. pageSize: model.Query.PageSize,
  121. total: model.Posts.TotalResultCount,
  122. viewType: model.Query.View,
  123. sortBy: model.Query.Sort,
  124. query: model.Query.Query,
  125. field: model.Query.Field
  126. });
  127. if (app.content.currentView instanceof HomePrivateView) {
  128. app.content.currentView.showPosts(postCollection, model.FieldSelectList);
  129. } else {
  130. var homeView;
  131. if (app.authenticatedUser) {
  132. var options = { model: app.authenticatedUser.user };
  133. if (app.isPrerenderingView('home')) {
  134. options['el'] = '.home-private';
  135. }
  136. homeView = new HomePrivateView(options);
  137. } else {
  138. homeView = new HomePublicView();
  139. }
  140. app.showContentView('', homeView, 'home', function () {
  141. if (app.authenticatedUser) {
  142. homeView.showPosts(postCollection, model.FieldSelectList);
  143. }
  144. });
  145. }
  146. });
  147. };
  148. HomeController.showAllBowerbirdActivity = function () {
  149. };
  150. HomeController.showFavourites = function (params) {
  151. $.when(getModel('/favourites?view=' + (params && params.view ? params.view : 'thumbnails') + '&sort=' + (params && params.sort ? params.sort : 'newest')))
  152. .done(function (model) {
  153. var sightingCollection = new SightingCollection(model.Sightings.PagedListItems,
  154. {
  155. subId: 'favourites',
  156. page: model.Query.Page,
  157. pageSize: model.Query.PageSize,
  158. total: model.Sightings.TotalResultCount,
  159. viewType: model.Query.View,
  160. sortBy: model.Query.Sort,
  161. category: model.Query.Category,
  162. needsId: model.Query.NeedsId,
  163. query: model.Query.Query,
  164. field: model.Query.Field,
  165. taxonomy: model.Query.Taxonomy
  166. });
  167. var options = {
  168. sightingCollection: sightingCollection,
  169. categorySelectList: model.CategorySelectList,
  170. fieldSelectList: model.FieldSelectList
  171. };
  172. if (app.isPrerenderingView('favourites')) {
  173. options['el'] = '.favourites';
  174. }
  175. var favouritesView = new FavouritesView(options);
  176. app.showContentView('Favourites', favouritesView, 'favourites', function () {
  177. });
  178. });
  179. };
  180. HomeController.showAbout = function () {
  181. var options = {};
  182. if (app.isPrerenderingView('home')) {
  183. options['el'] = '.about';
  184. }
  185. var homeGenericView = new HomeGenericView(options);
  186. app.showContentView('About BowerBird', homeGenericView, 'home', function () {
  187. });
  188. };
  189. HomeController.showPrivacy = function () {
  190. var options = {};
  191. if (app.isPrerenderingView('home')) {
  192. options['el'] = '.privacy';
  193. }
  194. var homeGenericView = new HomeGenericView(options);
  195. app.showContentView('Privacy', homeGenericView, 'home', function () {
  196. });
  197. };
  198. HomeController.showTerms = function () {
  199. var options = {};
  200. if (app.isPrerenderingView('home')) {
  201. options['el'] = '.terms';
  202. }
  203. var homeGenericView = new HomeGenericView(options);
  204. app.showContentView('Terms', homeGenericView, 'home', function () {
  205. });
  206. };
  207. app.addInitializer(function () {
  208. this.homeRouter = new HomeRouter({
  209. controller: HomeController
  210. });
  211. });
  212. return HomeController;
  213. });