Advertisement
Guest User

Knockoutjs + Raty

a guest
Feb 25th, 2015
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function($) {
  2.     'use strict'
  3.  
  4.     app.viewModels.reviews = {
  5.  
  6.         /**
  7.          * All reviews.
  8.          *
  9.          * @type ko.observable(Array)
  10.          */
  11.         sourceItems: ko.observableArray([]),
  12.  
  13.         /**
  14.          * Sorting type and order.
  15.          *
  16.          * @type ko.observable(String)
  17.          */
  18.         currentSort: ko.observable(),
  19.  
  20.         /**
  21.          * Whether to who user, critic or all reviews.
  22.          *
  23.          * @type ko.observable(String)
  24.          */
  25.         currentType: ko.observable(),
  26.  
  27.         delete: function(review) {
  28.            var self = app.viewModels.reviews;
  29.  
  30.             app.utils.ajax({
  31.                 url: vars.urls.baseUrl+'/movies/'+vars.titleId+'/reviews/'+review.id,
  32.                 type: 'DELETE',
  33.                 data: ko.toJSON(vars.token),
  34.                 success: function() {
  35.                     self.sourceItems.remove(review);
  36.                 }
  37.             })
  38.         },
  39.  
  40.         /**
  41.          * Send request to server to create a new
  42.          * user review.
  43.          *
  44.          * @return void
  45.          */
  46.         create: function(form) {
  47.             var self = this;
  48.  
  49.             var params = {
  50.                 data: ko.toJSON(app.models.userReview),
  51.                 success: function(response) {
  52.                     var exists = false;
  53.  
  54.                     $.each(self.sourceItems(), function(i,v) {
  55.  
  56.                         //if user has already written a review for this game we'll just replace
  57.                         //it with this one as that's what backend is doing as well
  58.                         if (v.type == 'user' && v.user_id == parseInt(vars.userId)) {
  59.  
  60.                             self.sourceItems()[i] = ko.toJS(app.models.userReview);
  61.                             self.sourceItems.notifySubscribers();
  62.                             exists = true;
  63.                             return false;
  64.                         }
  65.                     });
  66.  
  67.                     if ( ! exists) {
  68.                         self.sourceItems.unshift(ko.toJS(app.models.userReview));
  69.                     }
  70.  
  71.                     $('#review-modal').modal('hide');
  72.                     app.utils.noty(response, 'success');
  73.                 },
  74.                 error: function(jq) {
  75.                     $('.alert').remove();
  76.                     app.utils.appendError(jq);
  77.                 },
  78.                 url: form.action,
  79.             };
  80.  
  81.             app.utils.ajax(params);
  82.         },
  83.     };
  84.  
  85.     /**
  86.      * Filters critic reviews on platform dropdown change,
  87.      * if no reviews found fires an ajax request to query
  88.      * review data provider.
  89.      *
  90.      * @return array
  91.      */
  92.     app.viewModels.reviews.filteredReviews = ko.computed(function() {
  93.         var self = this, filtered;
  94.  
  95.         //filter by user or critic reviews if user select either
  96.         if (self.currentType() === 'all') {
  97.             filtered = self.sourceItems();
  98.         } else {
  99.             filtered = ko.utils.arrayFilter(self.sourceItems(), function(rev) {
  100.                 return rev.type === self.currentType();
  101.             });
  102.         }
  103.  
  104.         //split current sort by camelCase into type and order params
  105.         var sort = self.currentSort().match(/([A-Z]?[^A-Z]*)/g).slice(0,-1);
  106.  
  107.         if (sort.length === 2) {
  108.             filtered.sort(app.utils.sort[sort[0]](sort[1]));
  109.         }
  110.  
  111.         return filtered ? filtered : [];
  112.  
  113.     }, app.viewModels.reviews, {deferEvaluation: true});
  114.  
  115.     /**
  116.      * New review form model.
  117.      *
  118.      * @type Object
  119.      */
  120.     app.models.userReview = {
  121.         author: app.display_name,
  122.         body: ko.observable(),
  123.         story_rev: ko.observable(),
  124.         animation_rev: ko.observable(),
  125.         characters_rev: ko.observable(),
  126.         sound_rev: ko.observable(),
  127.         enjoyment_rev: ko.observable(),
  128.         score: ko.observable(),
  129.         type: 'user',
  130.         _token: vars.token,
  131.         source: 'NA',
  132.         user_id: false,
  133.     };
  134.  
  135. })(jQuery);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement