Shuo/lib/models.js

132 lines
2.3 KiB
JavaScript
Raw Normal View History

2014-04-19 21:40:36 +00:00
var _ = require("lodash");
2014-03-24 16:47:14 +00:00
var Backbone = require("backbone");
2014-03-06 18:02:43 +00:00
2014-03-24 15:47:29 +00:00
var id = 1;
2014-03-07 21:24:02 +00:00
var models =
module.exports =
{};
2014-03-24 16:47:14 +00:00
models.User = Backbone.Model.extend({
2014-03-07 21:24:02 +00:00
defaults: {
2014-03-15 15:51:21 +00:00
mode: "",
2014-03-24 15:47:29 +00:00
name: "",
2014-03-07 21:24:02 +00:00
}
});
2014-03-06 15:11:25 +00:00
2014-03-24 16:47:14 +00:00
models.Users = Backbone.Collection.extend({
2014-03-12 15:09:37 +00:00
model: models.User,
2014-04-06 15:46:42 +00:00
sort: function() {
2014-03-16 16:19:53 +00:00
this.models = _.sortBy(
this.models,
function(user) {
return user.get("name").toLowerCase();
}
);
2014-04-19 21:40:36 +00:00
this.trigger("sort", {}, this);
2014-03-12 15:09:37 +00:00
}
2014-03-09 21:22:37 +00:00
});
2014-03-24 16:47:14 +00:00
models.Message = Backbone.Model.extend({
2014-03-07 21:24:02 +00:00
defaults: {
2014-04-20 22:12:07 +00:00
type: "",
time: "",
from: "-!-",
text: "",
2014-03-12 15:09:37 +00:00
},
initialize: function() {
2014-04-19 21:40:36 +00:00
this.set("time", require("moment")().format("HH:mm"));
2014-03-07 21:24:02 +00:00
}
});
2014-03-06 18:02:43 +00:00
2014-03-24 16:47:14 +00:00
models.Messages = Backbone.Collection.extend({
2014-03-09 21:22:37 +00:00
model: models.Message
});
2014-03-24 16:47:14 +00:00
models.Channel = Backbone.Model.extend({
2014-03-07 21:24:02 +00:00
defaults: {
2014-03-06 22:36:56 +00:00
type: "channel",
2014-03-24 16:47:14 +00:00
name: "",
},
2014-03-07 21:24:02 +00:00
initialize: function() {
2014-04-19 21:40:36 +00:00
var users = new models.Users;
2014-03-29 23:59:28 +00:00
users.on("all", function(action, data) {
2014-03-24 15:47:29 +00:00
this.trigger("user", {
2014-04-19 21:40:36 +00:00
action: action,
2014-03-16 16:19:53 +00:00
target: this.get("id"),
2014-03-29 23:59:28 +00:00
data: users,
2014-04-19 21:40:36 +00:00
});
}, this);
var messages = new models.Messages;
messages.on("all", function(action, data) {
this.trigger("message", {
2014-03-24 16:47:14 +00:00
action: action,
2014-04-19 21:40:36 +00:00
target: this.get("id"),
data: data,
2014-03-16 16:19:53 +00:00
});
}, this);
2014-04-19 21:40:36 +00:00
this.set({
id: id++,
users: users,
messages: messages,
});
2014-03-07 21:24:02 +00:00
}
});
2014-03-06 15:11:25 +00:00
2014-03-24 16:47:14 +00:00
models.Channels = Backbone.Collection.extend({
2014-03-07 21:24:02 +00:00
model: models.Channel
});
2014-03-06 15:11:25 +00:00
2014-03-24 16:47:14 +00:00
models.Network = Backbone.Model.extend({
2014-03-07 21:24:02 +00:00
defaults: {
2014-04-19 21:40:36 +00:00
host: "",
2014-03-29 23:59:28 +00:00
client: null,
2014-03-07 21:24:02 +00:00
},
initialize: function() {
this.set({
2014-03-24 16:47:14 +00:00
id: id++,
channels: new models.Channels,
2014-03-07 21:24:02 +00:00
});
2014-04-19 21:40:36 +00:00
2014-03-17 16:24:32 +00:00
this.get("channels").on("all", function(action, data) {
2014-03-29 15:36:12 +00:00
if (action == "message"
|| action == "user") {
return this.trigger(action, data);
}
2014-03-24 16:47:14 +00:00
this.trigger("channel", {
2014-04-19 21:40:36 +00:00
action: action,
2014-03-24 16:47:14 +00:00
target: this.get("id"),
data: data,
});
2014-03-13 12:44:54 +00:00
}, this);
2014-04-19 21:40:36 +00:00
this.get("channels").add({
2014-03-09 23:14:22 +00:00
type: "network",
name: this.get("host")
2014-03-24 16:47:14 +00:00
});
2014-03-29 23:59:28 +00:00
},
toJSON: function() {
return _.omit(this.attributes, "client");
2014-03-07 21:24:02 +00:00
}
});
2014-03-07 03:18:53 +00:00
2014-03-24 16:47:14 +00:00
models.Networks = Backbone.Collection.extend({
2014-03-07 21:24:02 +00:00
model: models.Network,
initialize: function() {
2014-03-24 16:47:14 +00:00
this.add({host: "Status"});
2014-03-09 19:27:44 +00:00
},
2014-03-09 21:22:37 +00:00
find: function(id) {
2014-03-30 03:12:29 +00:00
var i = this.models.length;
while (i--) {
var find = this.models[i].get("channels").findWhere({id: id});
2014-03-09 19:27:44 +00:00
if (find) {
2014-03-09 21:22:37 +00:00
return {
2014-03-30 03:12:29 +00:00
network: this.models[i],
2014-03-09 21:22:37 +00:00
channel: find
};
2014-03-09 19:27:44 +00:00
}
}
2014-03-07 21:24:02 +00:00
}
});