132 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
var Test = {};
 | 
						|
 | 
						|
$(document).ready(function() {
 | 
						|
 | 
						|
    Test.U = Backbone.Model.extend({
 | 
						|
        url: '/ts_api/users',
 | 
						|
 | 
						|
        initialize: function() {
 | 
						|
            this.timelines = {};
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    Test.E = Backbone.Model.extend({
 | 
						|
        url: '/ts_api/entries/jdbernard/work'
 | 
						|
    });
 | 
						|
 | 
						|
    Test.UView = Backbone.View.extend({
 | 
						|
 | 
						|
        el: $("#user"),
 | 
						|
        model: Test.U,
 | 
						|
 | 
						|
        initialize: function() {
 | 
						|
            _.bindAll(this, 'render');
 | 
						|
            this.model.bind('change', this.render);
 | 
						|
            this.model.view = this;
 | 
						|
        },
 | 
						|
 | 
						|
        render: function() {
 | 
						|
            this.$('.fullname').text(this.model.get('name'));
 | 
						|
            this.$('.username').text(this.model.get('id'));
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    Test.EList = Backbone.Collection.extend({
 | 
						|
        model: Test.E,
 | 
						|
 | 
						|
        url: '/ts_api/entries/jdbernard/work',
 | 
						|
 | 
						|
        initalize: function(models, options) {
 | 
						|
            this.user = options.user;
 | 
						|
        },
 | 
						|
 | 
						|
        comparator: function(entry) {
 | 
						|
            return entry.get('timestamp');
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    Test.EView = Backbone.View.extend({
 | 
						|
 | 
						|
        model: Test.E,
 | 
						|
 | 
						|
        initialize: function() {
 | 
						|
            _.bindAll(this, 'render');
 | 
						|
            this.model.bind('change', this.render);
 | 
						|
            this.model.view = this;
 | 
						|
        },
 | 
						|
 | 
						|
        render: function() {
 | 
						|
            $(this.el).html("<span class='entry-id'>" + this.model.get('id') + "<span class='mark'>" + this.model.get('mark') + "</span>");
 | 
						|
            return this;
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    Test.EListView = Backbone.View.extend({
 | 
						|
        el: $("#entry-list"),
 | 
						|
        initialize: function() {
 | 
						|
            _.bindAll(this, 'render', 'refresh', 'addOne');
 | 
						|
 | 
						|
            this.collection.bind('add', this.addOne);
 | 
						|
            this.collection.bind('refresh', this.refresh);
 | 
						|
        },
 | 
						|
 | 
						|
        addOne: function(entry) {
 | 
						|
            var view = new Test.EView({model: entry});
 | 
						|
            $(this.el).append(view.render().el);
 | 
						|
        },
 | 
						|
 | 
						|
        refresh: function() {
 | 
						|
            $(this.el).empty();
 | 
						|
            var thisRef = this;
 | 
						|
            this.collection.each(function(entry) {thisRef.addOne(entry)});
 | 
						|
        }
 | 
						|
    });
 | 
						|
 | 
						|
    Test.currentUser = new Test.U;
 | 
						|
    Test.userView = new Test.UView({model: Test.currentUser});
 | 
						|
 | 
						|
    // wire the login dialog using jQuery UI
 | 
						|
    $("#login-dialog").dialog({
 | 
						|
        autoOpen: false,
 | 
						|
        height: 400,
 | 
						|
        width: 400,
 | 
						|
        modal: true,
 | 
						|
        buttons: { Login: function(){login()} }
 | 
						|
    });
 | 
						|
 | 
						|
    $('#login-dialog').dialog('open');
 | 
						|
 | 
						|
});
 | 
						|
 | 
						|
function login() {
 | 
						|
    // lookup the login dialog elements
 | 
						|
    var name = $("#login-name");
 | 
						|
    var pwd = $("#login-password");
 | 
						|
 | 
						|
    // call the API via AJAX
 | 
						|
    $.ajax({
 | 
						|
        url: "/ts_api/login",
 | 
						|
        processData: false,
 | 
						|
        data: JSON.stringify({username: name.val(), password: pwd.val()}),
 | 
						|
        type: "POST",
 | 
						|
 | 
						|
        error: function(jqXHR, textStatus, error) {
 | 
						|
            // assuming bad credentials (possible server error or bad request,
 | 
						|
            // we should check that, FIXME
 | 
						|
            var tips = $(".validate-tips");
 | 
						|
            tips.text("Incorrect username/password combination.");
 | 
						|
            tips.addClass("ui-state-error");
 | 
						|
            tips.slideDown();
 | 
						|
        },
 | 
						|
 | 
						|
        success: function(data, textStatus, jqXHR) {
 | 
						|
            $("#login-dialog").dialog('close');
 | 
						|
            Test.currentUser.set({id: name.val()}, {silent: true});
 | 
						|
            Test.currentUser.fetch();
 | 
						|
 | 
						|
            Test.currentEntryList = Test.currentUser.timelines['work'] = new Test.EList([], {user: Test.currentUser});
 | 
						|
            new Test.EListView({collection: Test.currentEntryList});
 | 
						|
            Test.currentEntryList.fetch();
 | 
						|
        }});
 | 
						|
}
 |