diff --git a/bower.json b/bower.json index 944715eb..dda1408f 100644 --- a/bower.json +++ b/bower.json @@ -7,7 +7,8 @@ "requirejs": "~2.1.10", "se7en-bootstrap-3": "git@ghe.amb.ca.local:stf/se7en-bootstrap-3.git", "socket.io-client": "~0.9.16", - "oboe": "~1.12.2" + "oboe": "~1.12.2", + "lodash": "~2.4.1" }, "private": true } diff --git a/lib/roles/app.js b/lib/roles/app.js index ca3249e2..caea5d8a 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -92,6 +92,13 @@ module.exports = function(options) { res.render('index') }) + app.get('/api/v1/user', function(req, res) { + res.json({ + success: true + , user: req.session.jwt + }) + }) + app.get('/api/v1/devices', function(req, res) { dbapi.loadDevices() .then(function(cursor) { diff --git a/res/app/scripts/controllers/DeviceListCtrl.js b/res/app/scripts/controllers/DeviceListCtrl.js index 37992632..0f02ca76 100644 --- a/res/app/scripts/controllers/DeviceListCtrl.js +++ b/res/app/scripts/controllers/DeviceListCtrl.js @@ -1,12 +1,11 @@ define(['./module', 'oboe'], function(mod, oboe) { - mod.controller('DeviceListCtrl', ['$scope', function($scope) { - $scope.devices = [] + function DeviceListCtrl($scope, deviceService) { + $scope.devices = deviceService.devices + } - oboe('/api/v1/devices') - .node('$devices[*]', function(devicesLoadedSoFar) { - $scope.$apply(function() { - $scope.devices = devicesLoadedSoFar - }) - }) - }]) + mod.controller('DeviceListCtrl' + , [ '$scope' + , 'deviceService' + , DeviceListCtrl + ]) }) diff --git a/res/app/scripts/main.js b/res/app/scripts/main.js index 0a0c17fb..ca27bf92 100644 --- a/res/app/scripts/main.js +++ b/res/app/scripts/main.js @@ -4,6 +4,7 @@ require.config({ , 'angular-route': '../lib/angular-route/angular-route' , 'socket.io': '../lib/socket.io-client/dist/socket.io' , 'oboe': '../lib/oboe/dist/oboe-browser' + , 'lodash': '../lib/lodash/dist/lodash' } , shim: { 'angular': { diff --git a/res/app/scripts/services/deviceService.js b/res/app/scripts/services/deviceService.js new file mode 100644 index 00000000..308655c1 --- /dev/null +++ b/res/app/scripts/services/deviceService.js @@ -0,0 +1,21 @@ +define(['./module', 'oboe'], function(mod, oboe) { + function DevicesServiceFactory($rootScope, socketService) { + var deviceService = { + devices: [] + } + + oboe('/api/v1/devices') + .node('devices[*]', function(device) { + deviceService.devices.push(device) + $rootScope.$digest() + }) + + return deviceService + } + + mod.factory('deviceService' + , [ '$rootScope' + , 'socketService' + , DevicesServiceFactory + ]) +}) diff --git a/res/app/scripts/services/devices.js b/res/app/scripts/services/devices.js deleted file mode 100644 index 2f0ab86a..00000000 --- a/res/app/scripts/services/devices.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['./module'], function(mod) { - mod.factory('devices', ['io', function(io) { - return {} - }]) -}) diff --git a/res/app/scripts/services/groupService.js b/res/app/scripts/services/groupService.js new file mode 100644 index 00000000..d4786753 --- /dev/null +++ b/res/app/scripts/services/groupService.js @@ -0,0 +1,33 @@ +define(['./module', 'lodash'], function(mod, _) { + function GroupServiceFactory($rootScope, socket) { + var groupService = { + members: [] + } + + socket.on('group.join', function(data) { + groupService.members.push(data.serial) + $rootScope.$digest() + }) + + socket.on('group.left', function(data) { + _.pull(groupService.members, data.serial) + $rootScope.$digest() + }) + + groupService.invite = function(requirements) { + socket.emit('group.invite', requirements) + } + + groupService.kick = function(requirements) { + socket.emit('group.kick', requirements) + } + + return groupService + } + + mod.factory('groupService' + , [ '$rootScope' + , 'socket' + , GroupServiceFactory + ]) +}) diff --git a/res/app/scripts/services/index.js b/res/app/scripts/services/index.js index 1d90a898..4b4d3633 100644 --- a/res/app/scripts/services/index.js +++ b/res/app/scripts/services/index.js @@ -1,6 +1,8 @@ define([ - './io' - , './devices' + './socketService' + , './deviceService' + , './groupService' + , './userService' ] , function() { } diff --git a/res/app/scripts/services/io.js b/res/app/scripts/services/io.js deleted file mode 100644 index c88138b1..00000000 --- a/res/app/scripts/services/io.js +++ /dev/null @@ -1,5 +0,0 @@ -define(['./module', 'socket.io'], function(mod, io) { - mod.factory('io', [function() { - return io.connect() - }]) -}) diff --git a/res/app/scripts/services/socketService.js b/res/app/scripts/services/socketService.js new file mode 100644 index 00000000..a92fc7c4 --- /dev/null +++ b/res/app/scripts/services/socketService.js @@ -0,0 +1,8 @@ +define(['./module', 'socket.io'], function(mod, io) { + function SocketServiceFactory() { + var socketService = io.connect() + return socketService + } + + mod.factory('socketService', [SocketServiceFactory]) +}) diff --git a/res/app/scripts/services/userService.js b/res/app/scripts/services/userService.js new file mode 100644 index 00000000..f4cd0cbc --- /dev/null +++ b/res/app/scripts/services/userService.js @@ -0,0 +1,16 @@ +define(['./module'], function(mod) { + function UserServiceFactory($http) { + var userService = { + info: {} + } + + $http.get('/api/v1/user') + .success(function(data) { + userService.info = data.user + }) + + return userService + } + + mod.factory('userService', ['$http', UserServiceFactory]) +}) diff --git a/res/app/views/partials/deviceList.jade b/res/app/views/partials/deviceList.jade index 613b743f..06a27b43 100644 --- a/res/app/views/partials/deviceList.jade +++ b/res/app/views/partials/deviceList.jade @@ -3,3 +3,5 @@ h1 Devices ul li(ng-repeat='device in devices track by device.serial') span {{ device.serial }} + button(ng-click="invite(device)") invite + button(ng-click="kick(device)") kick