lang_edx.js 2.31 KB
Newer Older
asadiqbal committed
1
var Language = (function() {
2 3 4 5 6 7 8 9 10
    'use strict';
    var settings_language_selector,
        self = null;
    return {
        init: function() {
            settings_language_selector = $('#settings-language-value');
            self = this;
            this.listenForLanguagePreferenceChange();
        },
11 12 13 14 15

            /**
             * Listener on changing language from selector.
             * Send an ajax request to save user language preferences.
             */
16 17 18 19 20 21 22 23
        listenForLanguagePreferenceChange: function() {
            settings_language_selector.change(function(event) {
                var language = this.value,
                    url = $('.url-endpoint').val(),
                    is_user_authenticated = JSON.parse($('.url-endpoint').data('user-is-authenticated'));
                event.preventDefault();
                self.submitAjaxRequest(language, url, function() {
                    if (is_user_authenticated) {
asadiqbal committed
24 25
                            // User language preference has been set successfully
                            // Now submit the form in success callback.
26 27 28 29
                        $('#language-settings-form').submit();
                    } else {
                        self.refresh();
                    }
30
                });
31 32
            });
        },
33 34

            /**
asadiqbal committed
35 36
             * Send an ajax request to set user language preferences.
             */
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
        submitAjaxRequest: function(language, url, callback) {
            $.ajax({
                type: 'PATCH',
                data: JSON.stringify({'pref-lang': language}),
                url: url,
                dataType: 'json',
                contentType: 'application/merge-patch+json',
                notifyOnError: false,
                beforeSend: function(xhr) {
                    xhr.setRequestHeader('X-CSRFToken', $.cookie('csrftoken'));
                }
            }).done(function() {
                callback();
            }).fail(function() {
                self.refresh();
            });
        },
asadiqbal committed
54 55

            /**
56 57
             * refresh the page.
             */
58
        refresh: function() {
asadiqbal committed
59
                // reloading the page so we can get the latest state of released languages from model
60 61
            location.reload();
        }
62

63 64 65
    };
})();
$(document).ready(function() {
66 67 68
    'use strict';
    Language.init();
});