SHOW:
|
|
- or go back to the newest paste.
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: 'Animezero', |
131 | + | source: 'NA', |
132 | user_id: false, | |
133 | }; | |
134 | ||
135 | })(jQuery); |