var Language = (function() { 'use strict'; var settings_language_selector, self = null; return { init: function() { settings_language_selector = $('#settings-language-value'); self = this; this.listenForLanguagePreferenceChange(); }, /** * Listener on changing language from selector. * Send an ajax request to save user language preferences. */ 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) { // User language preference has been set successfully // Now submit the form in success callback. $('#language-settings-form').submit(); } else { self.refresh(); } }); }); }, /** * Send an ajax request to set user language preferences. */ 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(); }); }, /** * refresh the page. */ refresh: function () { // reloading the page so we can get the latest state of released languages from model location.reload(); } }; })(); $(document).ready(function () { 'use strict'; Language.init(); });