diff --git a/static/js/app/appv2.coffee b/static/js/app/appv2.coffee index 9edc48b..a2973e7 100755 --- a/static/js/app/appv2.coffee +++ b/static/js/app/appv2.coffee @@ -1,7 +1,8 @@ -define ['backbone', 'marionette', 'vent', 'app.lib/router', 'app.lib/panningRegion', 'app.lib/audioController', 'views/header', +define ['backbone', 'marionette', 'vent', + 'app.lib/router', 'app.lib/panningRegion', 'app.lib/realtimeController', 'app.lib/audioController', 'views/header', 'views/sidebar/sidebarView', 'models/mix/mixCollection'], -(Backbone, Marionette, vent, DssRouter, PanningRegion, AudioController, HeaderView, SidebarView, MixCollection) -> +(Backbone, Marionette, vent, DssRouter, PanningRegion, RealtimeController, AudioController, HeaderView, SidebarView, MixCollection) -> Marionette.Region.prototype.open = (view) -> @.$el.hide(); @.$el.html(view.el); @@ -9,7 +10,9 @@ define ['backbone', 'marionette', 'vent', 'app.lib/router', 'app.lib/panningRegi true App = new Marionette.Application(); - App.audioController = new AudioController() + App.audioController = new AudioController(); + App.realtimeController = new RealtimeController(); + App.realtimeController.startSocketIO(); App.vent.on "routing:started", -> console.log "App(vent): routing:started" @@ -36,9 +39,7 @@ define ['backbone', 'marionette', 'vent', 'app.lib/router', 'app.lib/panningRegi App.vent.trigger("routing:started"); App.addInitializer -> - console.log("App: gobbling links"); $(document).on("click", "a[href]:not([data-bypass])", (evt) -> - console.log("App: scarfed link") href = { prop: $(this).prop("href"), attr: $(this).attr("href") }; root = location.protocol + "//" + location.host + (App.root || '/'); if (href.prop.slice(0, root.length) == root) diff --git a/static/js/app/appv2.js b/static/js/app/appv2.js index 68e42fe..64ebb9f 100755 --- a/static/js/app/appv2.js +++ b/static/js/app/appv2.js @@ -1,7 +1,7 @@ // Generated by CoffeeScript 1.3.3 (function() { - define(['backbone', 'marionette', 'vent', 'app.lib/router', 'app.lib/panningRegion', 'app.lib/audioController', 'views/header', 'views/sidebar/sidebarView', 'models/mix/mixCollection'], function(Backbone, Marionette, vent, DssRouter, PanningRegion, AudioController, HeaderView, SidebarView, MixCollection) { + define(['backbone', 'marionette', 'vent', 'app.lib/router', 'app.lib/panningRegion', 'app.lib/realtimeController', 'app.lib/audioController', 'views/header', 'views/sidebar/sidebarView', 'models/mix/mixCollection'], function(Backbone, Marionette, vent, DssRouter, PanningRegion, RealtimeController, AudioController, HeaderView, SidebarView, MixCollection) { var App, sidebarView; Marionette.Region.prototype.open = function(view) { this.$el.hide(); @@ -11,6 +11,8 @@ }; App = new Marionette.Application(); App.audioController = new AudioController(); + App.realtimeController = new RealtimeController(); + App.realtimeController.startSocketIO(); App.vent.on("routing:started", function() { var enablePushState, pushState; console.log("App(vent): routing:started"); @@ -36,10 +38,8 @@ return App.vent.trigger("routing:started"); }); App.addInitializer(function() { - console.log("App: gobbling links"); $(document).on("click", "a[href]:not([data-bypass])", function(evt) { var href, root; - console.log("App: scarfed link"); href = { prop: $(this).prop("href"), attr: $(this).attr("href") diff --git a/static/js/app/dss.bootstrapper.js b/static/js/app/dss.bootstrapper.js index 125a758..61fa6c5 100755 --- a/static/js/app/dss.bootstrapper.js +++ b/static/js/app/dss.bootstrapper.js @@ -20,7 +20,8 @@ requirejs.config({ models: 'app/models', 'app.lib': 'app/lib', moment: 'libs/moment', - toastr: 'libs/toastr' + toastr: 'libs/toastr', + 'socket.io': com.podnoms.settings.SOCKET_IO_JS_URL }, shim: { jquery: { diff --git a/static/js/app/lib/controller.coffee b/static/js/app/lib/controller.coffee index 830a4d3..f7544fd 100755 --- a/static/js/app/lib/controller.coffee +++ b/static/js/app/lib/controller.coffee @@ -1,7 +1,8 @@ define ['app', 'marionette', + 'views/chat/chatView', 'models/mix/mixItem', 'views/mix/mixListView', 'views/mix/mixDetailView', 'views/mix/mixEditView', 'models/user/userItem', 'views/user/userListView', 'views/user/userEditView'], -(App, Marionette, MixItem, MixListView, MixDetailView, MixEditView, UserItem, UserListView, UserEditView)-> +(App, Marionette, ChatView, MixItem, MixListView, MixDetailView, MixEditView, UserItem, UserListView, UserEditView)-> class DssController extends Marionette.Controller home: -> console.log "Controller: home" @@ -51,6 +52,11 @@ define ['app', 'marionette', ) true + showChat: -> + console.log("Controller: showChat") + app = require('app') + app.contentRegion.show(new ChatView()) + showUserList: (type) -> console.log("Controller: showUserList") app = require('app') diff --git a/static/js/app/lib/controller.js b/static/js/app/lib/controller.js index b6fa7b9..174639d 100755 --- a/static/js/app/lib/controller.js +++ b/static/js/app/lib/controller.js @@ -1,17 +1,16 @@ -// Generated by CoffeeScript 1.6.2 +// Generated by CoffeeScript 1.3.3 (function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; - define(['app', 'marionette', 'models/mix/mixItem', 'views/mix/mixListView', 'views/mix/mixDetailView', 'views/mix/mixEditView', 'models/user/userItem', 'views/user/userListView', 'views/user/userEditView'], function(App, Marionette, MixItem, MixListView, MixDetailView, MixEditView, UserItem, UserListView, UserEditView) { - var DssController, _ref; - + define(['app', 'marionette', 'views/chat/chatView', 'models/mix/mixItem', 'views/mix/mixListView', 'views/mix/mixDetailView', 'views/mix/mixEditView', 'models/user/userItem', 'views/user/userListView', 'views/user/userEditView'], function(App, Marionette, ChatView, MixItem, MixListView, MixDetailView, MixEditView, UserItem, UserListView, UserEditView) { + var DssController; DssController = (function(_super) { + __extends(DssController, _super); function DssController() { - _ref = DssController.__super__.constructor.apply(this, arguments); - return _ref; + return DssController.__super__.constructor.apply(this, arguments); } DssController.prototype.home = function() { @@ -22,7 +21,6 @@ DssController.prototype._showMixList = function(options) { var app; - console.log("Controller: _showMixList"); app = require('app'); app.contentRegion.show(new MixListView(options)); @@ -38,7 +36,6 @@ DssController.prototype.showMix = function(slug) { var app, mix; - console.log("Controller: showMix"); app = require('app'); mix = new MixItem({ @@ -57,7 +54,6 @@ DssController.prototype.uploadMix = function() { var app, mix; - console.log("Controller: mixUpload"); app = require('app'); mix = new MixItem({ @@ -74,7 +70,6 @@ DssController.prototype.editMix = function(slug) { var app, mix; - console.log("Controller: mixEdit"); app = require('app'); mix = new MixItem({ @@ -90,9 +85,15 @@ return true; }; + DssController.prototype.showChat = function() { + var app; + console.log("Controller: showChat"); + app = require('app'); + return app.contentRegion.show(new ChatView()); + }; + DssController.prototype.showUserList = function(type) { var app; - console.log("Controller: showUserList"); app = require('app'); return app.contentRegion.show(new UserListView()); @@ -144,7 +145,6 @@ DssController.prototype.editUser = function() { var app, user; - console.log("Controller: editUser"); app = require('app'); user = new UserItem({ diff --git a/static/js/app/lib/realtimeController.coffee b/static/js/app/lib/realtimeController.coffee new file mode 100644 index 0000000..cf6c36b --- /dev/null +++ b/static/js/app/lib/realtimeController.coffee @@ -0,0 +1,15 @@ +define ['socket.io'], +(SocketIO) -> + class RealtimeController + startSocketIO: -> + console.log("RealtimeController: Socket IO starting") + @socket = SocketIO.connect(com.podnoms.settings.REALTIME_HOST) + @socket.on "connect": => + console.log("RealtimeController: Connected") + + sendMessage: (message) -> + console.log("RealtimeController: sendMessage") + @socket. + + RealtimeController + diff --git a/static/js/app/lib/realtimeController.js b/static/js/app/lib/realtimeController.js new file mode 100644 index 0000000..e051537 --- /dev/null +++ b/static/js/app/lib/realtimeController.js @@ -0,0 +1,32 @@ +// Generated by CoffeeScript 1.3.3 +(function() { + + define(['socket.io'], function(SocketIO) { + var RealtimeController; + RealtimeController = (function() { + + function RealtimeController() {} + + RealtimeController.prototype.startSocketIO = function() { + var _this = this; + console.log("RealtimeController: Socket IO starting"); + this.socket = SocketIO.connect(com.podnoms.settings.REALTIME_HOST); + return this.socket.on("news", function(data) { + console.log("RealtimeController: Connected"); + return _this.socket.emit("dss:connected", { + my: "data" + }); + }); + }; + + RealtimeController.prototype.sendMessage = function(message) { + return console.log("RealtimeController: sendMessage"); + }; + + return RealtimeController; + + })(); + return RealtimeController; + }); + +}).call(this); diff --git a/static/js/app/lib/router.coffee b/static/js/app/lib/router.coffee index 9170ae8..d89b2e0 100755 --- a/static/js/app/lib/router.coffee +++ b/static/js/app/lib/router.coffee @@ -12,6 +12,8 @@ define ['marionette', 'app.lib/controller'], "mix/:slug": "showMix" "mix/edit/:slug": "editMix", + "chat": "showChat", + "users": "showUserList" "user/:slug/favourites": "showUserFavourites" "user/:slug/likes": "showUserLikes" diff --git a/static/js/app/lib/router.js b/static/js/app/lib/router.js index 3134049..596ef8a 100755 --- a/static/js/app/lib/router.js +++ b/static/js/app/lib/router.js @@ -1,17 +1,16 @@ -// Generated by CoffeeScript 1.6.2 +// Generated by CoffeeScript 1.3.3 (function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; define(['marionette', 'app.lib/controller'], function(Marionette, Controller) { - var DssRouter, _ref; - + var DssRouter; return DssRouter = (function(_super) { + __extends(DssRouter, _super); function DssRouter() { - _ref = DssRouter.__super__.constructor.apply(this, arguments); - return _ref; + return DssRouter.__super__.constructor.apply(this, arguments); } DssRouter.prototype.controller = new Controller; @@ -24,6 +23,7 @@ "mixes/:type": "showMixList", "mix/:slug": "showMix", "mix/edit/:slug": "editMix", + "chat": "showChat", "users": "showUserList", "user/:slug/favourites": "showUserFavourites", "user/:slug/likes": "showUserLikes", diff --git a/static/js/app/views/activity/activityListView.coffee b/static/js/app/views/activity/activityListView.coffee index d136941..31b1ea8 100755 --- a/static/js/app/views/activity/activityListView.coffee +++ b/static/js/app/views/activity/activityListView.coffee @@ -14,7 +14,6 @@ define ['marionette', 'models/activity/activityCollection', 'views/activity/acti @collection.fetch( success: => console.log "ActivityListView: Collection fetched" - console.log @collection return ) return diff --git a/static/js/app/views/activity/activityListView.js b/static/js/app/views/activity/activityListView.js index cfdeef6..9b79122 100755 --- a/static/js/app/views/activity/activityListView.js +++ b/static/js/app/views/activity/activityListView.js @@ -1,17 +1,16 @@ -// Generated by CoffeeScript 1.6.2 +// Generated by CoffeeScript 1.3.3 (function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; define(['marionette', 'models/activity/activityCollection', 'views/activity/activityItemView', 'text!/tpl/ActivityListView'], function(Marionette, ActivityCollection, ActivityItemView, Template) { - var ActivityListView, _ref; - + var ActivityListView; ActivityListView = (function(_super) { + __extends(ActivityListView, _super); function ActivityListView() { - _ref = ActivityListView.__super__.constructor.apply(this, arguments); - return _ref; + return ActivityListView.__super__.constructor.apply(this, arguments); } ActivityListView.prototype.template = _.template(Template); @@ -26,13 +25,11 @@ ActivityListView.prototype.initialize = function() { var _this = this; - console.log("ActivityListView: initialize"); this.collection = new ActivityCollection; this.collection.fetch({ success: function() { console.log("ActivityListView: Collection fetched"); - console.log(_this.collection); } }); }; diff --git a/static/js/app/views/chat/chatView.coffee b/static/js/app/views/chat/chatView.coffee new file mode 100755 index 0000000..2ec3622 --- /dev/null +++ b/static/js/app/views/chat/chatView.coffee @@ -0,0 +1,18 @@ +define ['marionette', 'app.lib/realtimeController', 'text!/tpl/ChatView'], +(Marionette, RealtimeController, Template) -> + class ChatView extends Marionette.ItemView + controller = new RealtimeController() + template: _.template(Template) + ui: + chatMessage: '#chat-message' + + events: + "click #chat-send": "sendChatMessage" + + sendChatMessage: -> + console.log("ChatView: sendChatMessage") + message = @ui.chatMessage.val() + if message + controller.sendMessage(message) + + ChatView \ No newline at end of file diff --git a/static/js/app/views/chat/chatView.js b/static/js/app/views/chat/chatView.js new file mode 100644 index 0000000..2b8ab9f --- /dev/null +++ b/static/js/app/views/chat/chatView.js @@ -0,0 +1,44 @@ +// Generated by CoffeeScript 1.3.3 +(function() { + var __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + define(['marionette', 'app.lib/realtimeController', 'text!/tpl/ChatView'], function(Marionette, RealtimeController, Template) { + var ChatView; + ChatView = (function(_super) { + var controller; + + __extends(ChatView, _super); + + function ChatView() { + return ChatView.__super__.constructor.apply(this, arguments); + } + + controller = new RealtimeController(); + + ChatView.prototype.template = _.template(Template); + + ChatView.prototype.ui = { + chatMessage: '#chat-message' + }; + + ChatView.prototype.events = { + "click #chat-send": "sendChatMessage" + }; + + ChatView.prototype.sendChatMessage = function() { + var message; + console.log("ChatView: sendChatMessage"); + message = this.ui.chatMessage.val(); + if (message) { + return controller.sendMessage(message); + } + }; + + return ChatView; + + })(Marionette.ItemView); + return ChatView; + }); + +}).call(this); diff --git a/templates/javascript/settings.js b/templates/javascript/settings.js index 47fdf81..84000f5 100755 --- a/templates/javascript/settings.js +++ b/templates/javascript/settings.js @@ -2,9 +2,8 @@ if (!com) var com = {}; if (!com.podnoms) com.podnoms = {}; com.podnoms.settings = { - CHAT_HOST: '{{ CHAT_HOST }}', - REALTIME_HOST: '{{ CHAT_HOST }}', - REALTIME_PORT: '{{ CHAT_HOST }}', + REALTIME_HOST: "{{ REALTIME_HOST }}", + SOCKET_IO_JS_URL: "{{ SOCKET_IO_JS_URL }}", urlRoot: '{{ API_URL }}', liveStreamRoot: 'http://{{ LIVE_STREAM_URL }}:{{ LIVE_STREAM_PORT }}/{{ LIVE_STREAM_MOUNT }}', streamInfoUrl: 'http://{{ LIVE_STREAM_INFO_URL }}', diff --git a/templates/views/ChatView.html b/templates/views/ChatView.html new file mode 100644 index 0000000..33897cb --- /dev/null +++ b/templates/views/ChatView.html @@ -0,0 +1,16 @@ +