201 lines
5.4 KiB
JavaScript
201 lines
5.4 KiB
JavaScript
(function() { 'use strict';
|
|
|
|
if (typeof angular !== 'undefined') {
|
|
|
|
var root = this;
|
|
var $ = root.jQuery;
|
|
var controllers = {};
|
|
var app = root.app;
|
|
|
|
// App definition.
|
|
app.config(function($routeProvider) {
|
|
|
|
// Routes.
|
|
$routeProvider.when('/account/', {
|
|
templateUrl: '/static/js/src/modules/partials/profile.html',
|
|
controller: controllers.ProfileController
|
|
});
|
|
$routeProvider.when('/account/blogging/', {
|
|
templateUrl: '/static/js/src/modules/partials/blogging.html',
|
|
controller: controllers.BloggingController
|
|
});
|
|
$routeProvider.when('/account/editor/', {
|
|
templateUrl: '/static/js/src/modules/partials/editor.html',
|
|
controller: controllers.EditorController
|
|
});
|
|
|
|
$routeProvider.otherwise({
|
|
'redirectTo': function(routeParams, locationPath) {
|
|
window.location = locationPath;
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
// Services.
|
|
app.factory('AccountStorage', function($http) {
|
|
return {
|
|
cancelSubscription: function() {
|
|
|
|
var promise = $http({
|
|
method: 'GET',
|
|
url: '/account/cancel-subscription/',
|
|
headers: {
|
|
'Authorization': 'ApiKey ' + window.user + ':' + window.api_key
|
|
}
|
|
});
|
|
|
|
return promise;
|
|
},
|
|
getAccount: function() {
|
|
|
|
var promise = $http({
|
|
method: 'GET',
|
|
url: '/api/private/profile/' + window.user_profile_id + '/',
|
|
headers: {
|
|
'Authorization': 'ApiKey ' + window.user + ':' + window.api_key
|
|
}
|
|
});
|
|
|
|
return promise;
|
|
},
|
|
saveAccount: function(user, fields) {
|
|
|
|
var promise = $http({
|
|
method: 'PUT',
|
|
url: '/api/private/profile/' + window.user_profile_id + '/',
|
|
headers: {
|
|
'Authorization': 'ApiKey ' + window.user + ':' + window.api_key
|
|
},
|
|
data: function() {
|
|
var userData = {};
|
|
|
|
for (var i = 0; i < fields.length; i++) {
|
|
userData[fields[i]] = user[fields[i]];
|
|
}
|
|
|
|
return userData;
|
|
}()
|
|
});
|
|
|
|
return promise;
|
|
}
|
|
};
|
|
});
|
|
|
|
// Controllers.
|
|
controllers.BloggingController = function($scope) {
|
|
$scope.fields = [
|
|
'blog_title',
|
|
'blog_theme',
|
|
'blog_domain',
|
|
];
|
|
$scope.section = 'Blogging';
|
|
|
|
$scope.blogThemeOptions = [
|
|
{ id: 'D', label: 'Default' },
|
|
{ id: 'A', label: 'Pro Adams' }
|
|
];
|
|
|
|
};
|
|
controllers.EditorController = function($scope) {
|
|
$scope.fields = ['default_editor', 'editor_theme'];
|
|
$scope.section = 'Editor';
|
|
|
|
$scope.editorOptions = [
|
|
{ id: 'C', label: 'CodeMirror' },
|
|
{ id: 'T', label: 'Textarea' }
|
|
];
|
|
$scope.editorThemeOptions = [
|
|
{ id: 'default', label: 'Default' },
|
|
{ id: 'ambiance', label: 'Ambiance' },
|
|
{ id: 'blackboard', label: 'Blackboard' },
|
|
{ id: 'cobalt', label: 'Cobalt' },
|
|
{ id: 'eclipse', label: 'Eclipse' },
|
|
{ id: 'elegant', label: 'Elegant' },
|
|
{ id: 'erlang-dark', label: 'Erlang Dark' },
|
|
{ id: 'lesser-dark', label: 'Lesser Dark' },
|
|
{ id: 'monokai', label: 'Monokai' },
|
|
{ id: 'neat', label: 'Neat' },
|
|
{ id: 'night', label: 'Night' },
|
|
{ id: 'rubyblue', label: 'Ruby Blue' },
|
|
{ id: 'solarized dark', label: 'Solarized Dark' },
|
|
{ id: 'solarized light', label: 'Solarized Light' },
|
|
{ id: 'twilight', label: 'Twilight' },
|
|
{ id: 'vibrant-ink', label: 'Vibrant Ink' },
|
|
{ id: 'xq-dark', label: 'XQ Dark' }
|
|
];
|
|
|
|
};
|
|
controllers.AccountController = function($scope, $route, AccountStorage) {
|
|
$scope.errors = [];
|
|
$scope.saveButtonText = 'Save';
|
|
$scope.route = $route;
|
|
|
|
AccountStorage.getAccount().then(function(response) {
|
|
$scope.user = response.data;
|
|
});
|
|
|
|
$scope.saveFields = function(fields) {
|
|
$scope.saveButtonText = 'Saving…';
|
|
|
|
AccountStorage.saveAccount($scope.user, fields).then(function onSuccess(response) {
|
|
|
|
// Save the new user object.
|
|
$scope.user = response.data;
|
|
|
|
// Signal that we have a successful response.
|
|
$scope.success = true;
|
|
|
|
// Success message.
|
|
$scope.message = $scope.route.current.scope.section + ' settings saved.';
|
|
|
|
// Reset the save button text.
|
|
$scope.saveButtonText = 'Save';
|
|
|
|
// Clear out any marked errors.
|
|
$scope.errors = [];
|
|
|
|
// Remove the success message after a while.
|
|
setTimeout(function() {
|
|
$scope.success = null;
|
|
$scope.message = '';
|
|
|
|
// We have to apply since we're outside of the scope context.
|
|
$scope.$apply();
|
|
|
|
}, 3000);
|
|
|
|
}, function onError(response) {
|
|
|
|
// Signal that we have an error.
|
|
$scope.success = false;
|
|
|
|
// Reset the save button text.
|
|
$scope.saveButtonText = 'Save';
|
|
|
|
// If we have a response, then it's probably a validation error.
|
|
if (response) {
|
|
|
|
// Set the errors on the scope.
|
|
$scope.errors = response.data.profile;
|
|
$scope.message = 'Only spaces, letters, numbers, underscores, dashes, periods, forward slashes, and "at sign" are valid.';
|
|
|
|
} else {
|
|
$scope.message = 'There was an error saving your settings.';
|
|
}
|
|
|
|
});
|
|
};
|
|
};
|
|
controllers.ProfileController = function($scope) {
|
|
$scope.section = 'Profile';
|
|
};
|
|
|
|
// Assign the controllers.
|
|
app.controller(controllers);
|
|
|
|
}
|
|
|
|
}).call(this);
|