View difference between Paste ID: 823NMiWc and iZr4CFiF
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);