cqrs-example-0.9.0: static/js/app/services.js
/*global define:false, EventSource:false */
/*jslint browser: true */
define(['jquery'], function ($) {
"use strict";
var exports = { },
defaultOptions;
// Default AJAX options
defaultOptions = {
running: function () { console.log("Default 'running' callback"); },
error: function () { console.log("Default 'error' callback"); },
success: function () { console.log("Default 'success' callback"); }
};
// Common functionality. In addition to what is supported by jQuery
// we also invoke a running() callback which can, for example,
// trigger a spinner or other feedback mechanism.
function doAjax(type, url, dataIn, optionsIn) {
var options = $.extend({}, defaultOptions, optionsIn || { });
// We're running
options.running(true);
// Go
$.ajax({
url : url,
data : dataIn,
type : type,
success: function (data) {
console.log("Success callback", data);
// No longer running
options.running(false);
// Notify of successful call
options.success(data);
},
error: function (xhr, status) {
console.log("Error callback", status);
// No longer running.
options.running(false);
// Notify of failed call
options.error(status);
}
});
}
// AJAX runner.
function postAjax(url, dataIn, optionsIn) {
doAjax("POST", url, dataIn, optionsIn);
}
// AJAX loader.
function getAjax(url, dataIn, optionsIn) {
doAjax("GET", url, dataIn, optionsIn);
}
// Event source constructor.
exports.onNotification = function (callback) {
var eventSource;
eventSource = new EventSource("/events");
eventSource.onmessage = function (msg) {
var data = JSON.parse(msg.data);
if (callback(data) === false) {
eventSource.close();
}
};
};
// Exported Ajax functionality.
exports.queryTasks = function (options) {
getAjax("/tasks", {}, options);
};
exports.addTask = function (title, options) {
postAjax("/tasks", { "title": title }, options);
};
exports.completeTask = function (taskId) {
postAjax("/tasks/complete", { "id": taskId });
};
exports.reopenTask = function (taskId) {
postAjax("/tasks/reopen", { "id": taskId });
};
exports.archiveCompletedTasks = function () {
postAjax("/tasks/archive-completed", { });
};
// Return our exports
return exports;
});