packages feed

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;
});