/Backup/Src/Bowerbird.Website/js/bowerbird/views/projectExploreView.js

https://github.com/Bowerbird/bowerbird-web · JavaScript · 148 lines · 107 code · 33 blank · 8 comment · 9 complexity · 030fe2542ccefc5e30be2e3d3e72e33b 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. // ProjectExploreView
  8. // ------------------
  9. define(['jquery', 'underscore', 'backbone', 'app', 'views/projectlistview', 'views/projectsearchpanelview'],
  10. function ($, _, Backbone, app, ProjectListView, ProjectSearchPanelView) {
  11. var ProjectExploreView = Backbone.Marionette.Layout.extend({
  12. viewType: 'details',
  13. className: 'projects double',
  14. template: 'ProjectExplore',
  15. regions: {
  16. search: '.search',
  17. list: '.list'
  18. },
  19. initialize: function (options) {
  20. _.bindAll(this, 'toggleSearchPanel');
  21. this.projectCollection = options.projectCollection;
  22. this.categorySelectList = options.categorySelectList;
  23. this.fieldSelectList = options.fieldSelectList;
  24. },
  25. serializeData: function () {
  26. return {
  27. Model: {
  28. ShowProjectExploreWelcome: app.authenticatedUser ? _.contains(app.authenticatedUser.callsToAction, 'project-explore-welcome') : false
  29. }
  30. };
  31. },
  32. onShow: function () {
  33. var options = {
  34. collection: this.projectCollection
  35. };
  36. var searchOptions = {
  37. projectCollection: this.projectCollection,
  38. categorySelectList: this.categorySelectList,
  39. fieldSelectList: this.fieldSelectList
  40. };
  41. if (app.isPrerenderingView('projects')) {
  42. options['el'] = '.list > div';
  43. searchOptions['el'] = '.search > div';
  44. }
  45. var projectListView = new ProjectListView(options);
  46. var projectSearchPanelView = new ProjectSearchPanelView(searchOptions);
  47. if (app.isPrerenderingView('projects')) {
  48. this.list.attachView(projectListView);
  49. projectListView.showBootstrappedDetails();
  50. this.search.attachView(projectSearchPanelView);
  51. projectSearchPanelView.showBootstrappedDetails();
  52. } else {
  53. this.list.show(projectListView);
  54. this.search.show(projectSearchPanelView);
  55. }
  56. this._showDetails();
  57. },
  58. showBootstrappedDetails: function () {
  59. this.initializeRegions();
  60. var options = {
  61. collection: this.projectCollection
  62. };
  63. var searchOptions = {
  64. projectCollection: this.projectCollection,
  65. categorySelectList: this.categorySelectList,
  66. fieldSelectList: this.fieldSelectList
  67. };
  68. if (app.isPrerenderingView('projects')) {
  69. options['el'] = '.list > div';
  70. searchOptions['el'] = '.search > div';
  71. }
  72. var projectListView = new ProjectListView(options);
  73. var projectSearchPanelView = new ProjectSearchPanelView(searchOptions);
  74. if (app.isPrerenderingView('projects')) {
  75. this.list.attachView(projectListView);
  76. projectListView.showBootstrappedDetails();
  77. this.search.attachView(projectSearchPanelView);
  78. projectSearchPanelView.showBootstrappedDetails();
  79. } else {
  80. this.list.show(projectListView);
  81. this.search.show(projectSearchPanelView);
  82. }
  83. this._showDetails();
  84. },
  85. _showDetails: function () {
  86. var that = this;
  87. this.list.currentView.on('toggle-search', this.toggleSearchPanel);
  88. if (this.projectCollection.hasSearchCriteria()) {
  89. this.$el.find('.search-bar').slideDown();
  90. }
  91. this.$el.find('.close-call-to-action').on('click', function (e) {
  92. e.preventDefault();
  93. that.$el.find('.call-to-action').slideUp('fast', function () {
  94. that.$el.find('.call-to-action').remove();
  95. });
  96. app.vent.trigger('close-call-to-action', 'user-welcome');
  97. return false;
  98. });
  99. },
  100. toggleSearchPanel: function () {
  101. log('search bar', this.$el.find('.search-bar'));
  102. if (this.$el.find('.search-bar').is(':visible')) {
  103. log('search is visible');
  104. this.$el.find('.search-bar').slideToggle();
  105. } else {
  106. log('search is not visible');
  107. var that = this;
  108. this.$el.find('.search-bar').slideToggle(function () {
  109. that.$el.find('.search-bar #query').focus();
  110. });
  111. }
  112. }
  113. });
  114. return ProjectExploreView;
  115. });