diff --git a/site/app.class.js b/site/app.class.js index 9990865..c0c2dff 100644 --- a/site/app.class.js +++ b/site/app.class.js @@ -37,15 +37,15 @@ class App this.projects = new Projects() // Tests - // var project = this.projects.create_project( 'test' ) - // project.create_folder( './toto' ) - // project.get_folder( './toto//tutu/tete', true ) - // project.create_file( './coucou/coco.txt', 'content 0' ) - // project.create_file( './test-1.txt', 'content 1' ) - // project.update_file( './toto/tata/lorem.txt', 'content 2' ) - // project.update_file( './toto/tata/ipsum.txt', 'content 3' ) - // project.delete_folder( './toto/tutu', true ) - // project.delete_file( './toto/tata/ipsum.txt' ) + var project = this.projects.create_project( 'dummy' ) + project.create_folder( './toto' ) + project.get_folder( './toto//tutu/tete', true ) + project.create_file( './coucou/coco.txt', 'content 0' ) + project.create_file( './test-1.txt', 'content 1' ) + project.update_file( './toto/tata/lorem.txt', 'content 2' ) + project.update_file( './toto/tata/ipsum.txt', 'content 3' ) + project.delete_folder( './toto/tutu', true ) + project.delete_file( './toto/tata/ipsum.txt' ) // console.log( util.inspect( project, { depth: null, colors: true } ) ) } @@ -74,12 +74,12 @@ class App // Set up this.express = express() this.express.use( helmet() ) - this.express.set( 'view engine', 'jade' ); - this.express.set( 'views', path.join( __dirname, 'views' ) ); - this.express.use( express.static( path.join( __dirname, 'public' ) ) ); + this.express.set( 'view engine', 'jade' ) + this.express.set( 'views', path.join( __dirname, 'views' ) ) + this.express.use( express.static( path.join( __dirname, 'public' ) ) ) // Controllers - this.express.use( '/codes', require( './controllers/index.js' ) ) + this.express.use( '/', require( './controllers/index.js' ) ) } /** @@ -108,57 +108,70 @@ class App set_socket() { // Set up - this.sockets = {} - this.sockets.main = socket_io.listen( this.server ) - this.sockets.app = this.sockets.main.of( '/app' ) - this.sockets.site = this.sockets.main.of( '/site' ) + this.sockets = {} + this.sockets.main = socket_io.listen( this.server ) + this.sockets.app = this.sockets.main.of( '/app' ) + this.sockets.projects = this.sockets.main.of( '/projects' ) - let project = null + // Projects connection event + this.sockets.projects.on( 'connection', ( socket ) => + { + console.log( 'socket projects'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) - // Connection event + socket.emit( 'update_projects', this.projects.describe() ) + } ); + + // App connection event this.sockets.app.on( 'connection', ( socket ) => { + // Set up + let project = null + console.log( 'socket app'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) + // Start project socket.on( 'start_project', ( data ) => { - project = this.projects.create_project( data.slug ) + // Create project + project = this.projects.create_project( data.slug ) - console.log( util.inspect( project, { depth: null, colors: true } ) ) + // Create socket with specific namespace + project.socket = this.sockets.main.of( '/project/' + project.name ) + + // Emit to projects socket + this.sockets.projects.emit( 'update_projects', this.projects.describe() ) + + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) } ) socket.on( 'update_file', ( data ) => { project.update_file( data.path, data.content ) - - this.sockets.site.emit( 'update_project', project ) + project.socket.emit( 'update_project', project ) console.log( util.inspect( project, { depth: null, colors: true } ) ) } ) socket.on( 'create_file', ( data ) => { - project.create_file( data.path, data.content ) + project.create_file( data.path, data.content ) + project.socket.emit( 'update_project', project ) - this.sockets.site.emit( 'update_project', project ) - - console.log( util.inspect( project, { depth: null, colors: true } ) ) + console.log( util.inspect( project, { depth: null, colors: true } ) ) } ) socket.on( 'delete_file', ( data ) => { - project.delete_file( data.path ) + project.delete_file( data.path ) + project.socket.emit( 'update_project', project ) - this.sockets.site.emit( 'update_project', project ) - - console.log( util.inspect( project, { depth: null, colors: true } ) ) + console.log( util.inspect( project, { depth: null, colors: true } ) ) } ) socket.on( 'create_folder', ( data ) => { project.create_folder( data.path, data.content ) - - this.sockets.site.emit( 'update_project', project ) + project.socket.emit( 'update_project', project ) console.log( util.inspect( project, { depth: null, colors: true } ) ) } ) @@ -166,19 +179,18 @@ class App socket.on( 'delete_folder', ( data ) => { project.delete_folder( data.path ) - - this.sockets.site.emit( 'update_project', project ) + project.socket.emit( 'update_project', project ) console.log( util.inspect( project, { depth: null, colors: true } ) ) } ) } ) - this.sockets.site.on( 'connection', ( socket ) => - { - console.log( 'socket site'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) + // this.sockets.projects.on( 'connection', ( socket ) => + // { + // console.log( 'socket site'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) - socket.emit( 'update_project', project ) - } ) + // socket.emit( 'update_project', project ) + // } ) } } diff --git a/site/controllers/index.js b/site/controllers/index.js index a326a04..5167d97 100644 --- a/site/controllers/index.js +++ b/site/controllers/index.js @@ -3,7 +3,12 @@ var express = require( 'express' ), router.get( '/', function( request, response ) { - response.render( 'index/index.jade', {} ); + response.render( 'pages/index/projects.jade', {} ); } ); -module.exports = router; \ No newline at end of file +router.get( /project\/[a-z]([a-z0-9_-])?/, function( request, response ) +{ + response.render( 'pages/index/project.jade', {} ); +} ); + +module.exports = router; diff --git a/site/models/projects.class.js b/site/models/projects.class.js index 9301daf..edf2084 100644 --- a/site/models/projects.class.js +++ b/site/models/projects.class.js @@ -9,22 +9,22 @@ class Projects this.all = {} } - create_project( _slug ) + create_project( _name ) { // Create project - let project = new Project( _slug ) + let project = new Project( _name ) // Save - this.all[ project.slug ] = project + this.all[ project.name ] = project // Return return project } - get_project_by_slug( _slug ) + get_project_by_name( _name ) { // Find project - let project = this.all[ _slug ] + let project = this.all[ _name ] // Found if( project ) @@ -33,6 +33,23 @@ class Projects // Not found return false } + + describe() + { + let result = {} + result.all = {} + + for( let _name in this.all ) + { + let _project = this.all[ _name ] + + result.all[ _name ] = { + name : _project.name + } + } + + return result + } } -module.exports = Projects \ No newline at end of file +module.exports = Projects diff --git a/site/public/javascript/application/application.js b/site/public/javascript/application/application.js index df47abd..2b482e9 100644 --- a/site/public/javascript/application/application.js +++ b/site/public/javascript/application/application.js @@ -1,23 +1 @@ var angular_module = angular.module( 'application', [] ); - -angular_module.controller( - 'ApplicationController', - [ - '$scope', - 'project', - function( $scope, project ) - { - var that = this; - - project.on_update( function( data ) - { - $scope.$apply( function() - { - that.project = data; - } ); - } ); - - this.project = project.data; - } - ] -); diff --git a/site/public/javascript/controllers/project.js b/site/public/javascript/controllers/project.js new file mode 100644 index 0000000..7158658 --- /dev/null +++ b/site/public/javascript/controllers/project.js @@ -0,0 +1,39 @@ +angular_module.controller( + 'ProjectController', + [ + '$scope', + 'project', + function( $scope, project ) + { + update_callback = null; + + // Result + var result = {}; + result.data = {}; + result.on_update = function( callback ) + { + update_callback = callback; + }; + + $scope.folder_click = function( folder ) + { + console.log( folder ); + }; + + $scope.file_click = function( file ) + { + console.log( file ); + }; + + project.on_update( function( data ) + { + $scope.$apply( function() + { + $scope.project = data; + } ); + } ); + + this.project = project.data; + } + ] +); diff --git a/site/public/javascript/controllers/projects.js b/site/public/javascript/controllers/projects.js new file mode 100644 index 0000000..ef1172b --- /dev/null +++ b/site/public/javascript/controllers/projects.js @@ -0,0 +1,20 @@ +angular_module.controller( + 'ProjectsController', + [ + '$scope', + 'projects', + function( $scope, projects ) + { + projects.on_update( function( data ) + { + $scope.$apply( function() + { + $scope.projects = Object.keys( data.all ).length ? data.all : null; + console.log($scope.projects); + } ); + } ); + + $scope.projects = projects.data.all + } + ] +); diff --git a/site/public/javascript/services/project.js b/site/public/javascript/services/project.js index 7ae8922..ed14177 100644 --- a/site/public/javascript/services/project.js +++ b/site/public/javascript/services/project.js @@ -29,7 +29,7 @@ angular_module.factory( update_callback.apply( this, [ data ] ); } ); - result.data = {"name":"pwet","folders":{".":{"name":".","files":{"test-1.txt":{"name":"test-1.txt","versions":[{"date":"2016-06-03T21:16:35.574Z","content":"dsfsdf\n\naaaa\n\ndsfsdf\n\nbbbb\n\ndsfsdf\nsodifja\n","diff":false}]},"test-2.txt":{"name":"test-2.txt","versions":[{"date":"2016-06-03T21:16:38.667Z","content":"kqsdqsdjn\niudfgdfg\n\nqsdiuhqsdiuqhsd\n","diff":false}]}},"folders":{}},"folder-2":{"name":"folder-2","files":{"hey.txt":{"name":"hey.txt","versions":[{"date":"2016-06-03T21:16:32.742Z","content":"qdsqsdsq\n","diff":false}]}},"folders":{}}}}; + result.data = {"name":"pwet","folders":{".":{"name":".","files":{"test-1.txt":{"name":"test-1.txt","versions":[{"date":"2016-06-04T23:26:45.759Z","content":"dsfsdf\n\naaaa\n\ndsfsdf\n\nbbbbiuhsdfiuhsdfdsf\n\n\ndsfsdf\nsodifja\n","diff":false}]}},"folders":{"folder-2":{"name":"folder-2","files":{"hey.txt":{"name":"hey.txt","versions":[{"date":"2016-06-04T23:26:41.642Z","content":"qdsqsdsq\n","diff":false}]}},"folders":{}},"folder-1":{"name":"folder-1","files":{"test-4.txt":{"name":"test-4.txt","versions":[{"date":"2016-06-04T23:26:46.571Z","content":"sdnufoisdf\n","diff":false}]}},"folders":{}}}}}}; return result; } diff --git a/site/public/javascript/services/projects.js b/site/public/javascript/services/projects.js new file mode 100644 index 0000000..378c69d --- /dev/null +++ b/site/public/javascript/services/projects.js @@ -0,0 +1,33 @@ +angular_module.factory( + 'projects', + [ + '$timeout', + '$rootScope', + function( $timeout, $rootScope ) + { + update_callback = null; + + // Result + var result = {}; + result.data = {}; + result.on_update = function( callback ) + { + update_callback = callback; + }; + + // Socket + var socket = io( 'http://192.168.1.4:3000/projects' ); + + socket.on( 'update_projects', function( data ) + { + result.data = data; + + if( typeof update_callback === 'function' ) + update_callback.apply( this, [ data ] ); + } ); + + // Return + return result; + } + ] +); diff --git a/site/views/index/index.jade b/site/views/index/index.jade deleted file mode 100644 index 0ea3f08..0000000 --- a/site/views/index/index.jade +++ /dev/null @@ -1,95 +0,0 @@ -html(ng-app="application",ng-controller="ApplicationController as controller") - head - title - | Code Spectat - script(src="/socket.io/socket.io.js") - script(src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js") - script(src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js") - script(src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-resource.js") - script(src="/javascript/application/application.js") - script(src="/javascript/services/project.js") - body - - script(type="text/ng-template",id="tree_item_renderer.html") - | {{data.name}} - ul - li(ng-repeat="data in data.folders",ng-include="'tree_item_renderer.html'") - li(ng-repeat="file in data.files") - | {{file.name}} - - header.main-header - h1 - | Code Spectat - aside - header.aside-header - | {{ controller.project.name }} - nav.aside-nav - ul - li(ng-repeat="data in controller.project.folders",ng-include="'tree_item_renderer.html'") - - //- ul - //- li - //- a(href="#") - //- | folder-1 - //- ul - //- li - //- a(href="#") - //- | folder-1-1 - //- li - //- a(href="#") - //- | folder-1-2 - //- li - //- a(href="#") - //- | file-1-1 - //- li - //- a(href="#") - //- | file-1-2 - //- li - //- a(href="#") - //- | folder-2 - //- ul - //- li - //- a(href="#") - //- | folder-2-1 - //- ul - //- li - //- a(href="#") - //- | folder-2-1-1 - //- li - //- a(href="#") - //- | file-2-1-1 - //- li - //- a(href="#") - //- | file-2-1-2 - //- li - //- a(href="#") - //- | file-2-1-3 - //- li - //- a(href="#") - //- | file-2-1 - //- li - //- a(href="#") - //- | file-2-2 - //- li - //- a(href="#") - //- | file-2-3 - section.file - section.historic - a.version(href="#") - div.date - | 14:23:14 - div.differences - | Différences - a.version(href="#") - div.date - | 14:24:01 - div.differences - | Différences - a.version(href="#") - div.date - | 14:27:42 - div.differences - | Différences - section.code - pre - | <html> diff --git a/site/views/pages/index/project.jade b/site/views/pages/index/project.jade new file mode 100644 index 0000000..df343c1 --- /dev/null +++ b/site/views/pages/index/project.jade @@ -0,0 +1,89 @@ +include ../../partials/header.jade + +script(type="text/ng-template",id="folder_template.html") + span(ng-click="folder_click(folder)") + | {{folder.name}} + ul + li(ng-repeat="folder in folder.folders",ng-include="'folder_template.html'") + li(ng-repeat="file in folder.files",ng-click="file_click(file)") + | {{file.name}} + +section(ng-controller="ProjectController as controller") + header.main-header + h1 + | Code Spectat + aside + header.aside-header + | {{ controller.project.name }} + nav.aside-nav + ul + li(ng-repeat="folder in controller.project.folders",ng-include="'folder_template.html'") + + //- ul + //- li + //- a(href="#") + //- | folder-1 + //- ul + //- li + //- a(href="#") + //- | folder-1-1 + //- li + //- a(href="#") + //- | folder-1-2 + //- li + //- a(href="#") + //- | file-1-1 + //- li + //- a(href="#") + //- | file-1-2 + //- li + //- a(href="#") + //- | folder-2 + //- ul + //- li + //- a(href="#") + //- | folder-2-1 + //- ul + //- li + //- a(href="#") + //- | folder-2-1-1 + //- li + //- a(href="#") + //- | file-2-1-1 + //- li + //- a(href="#") + //- | file-2-1-2 + //- li + //- a(href="#") + //- | file-2-1-3 + //- li + //- a(href="#") + //- | file-2-1 + //- li + //- a(href="#") + //- | file-2-2 + //- li + //- a(href="#") + //- | file-2-3 + section.file + section.historic + a.version(href="#") + div.date + | 14:23:14 + div.differences + | Différences + a.version(href="#") + div.date + | 14:24:01 + div.differences + | Différences + a.version(href="#") + div.date + | 14:27:42 + div.differences + | Différences + section.code + pre + | <html> + +include ../../partials/footer.jade diff --git a/site/views/pages/index/projects.jade b/site/views/pages/index/projects.jade new file mode 100644 index 0000000..200c5d7 --- /dev/null +++ b/site/views/pages/index/projects.jade @@ -0,0 +1,10 @@ +include ../../partials/header.jade + +section(ng-controller="ProjectsController as controller") + div(ng-hide="projects") + | No project + div(ng-repeat="project in projects") + a(href="/project/{{project.name}}") + {{project.name}} + +include ../../partials/footer.jade diff --git a/site/views/partials/footer.jade b/site/views/partials/footer.jade new file mode 100644 index 0000000..64a0a69 --- /dev/null +++ b/site/views/partials/footer.jade @@ -0,0 +1 @@ +footer diff --git a/site/views/partials/header.jade b/site/views/partials/header.jade new file mode 100644 index 0000000..0e3fd3b --- /dev/null +++ b/site/views/partials/header.jade @@ -0,0 +1,14 @@ +html(ng-app="application") + head + title + | Code Spectat + script(src="/socket.io/socket.io.js") + script(src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular.min.js") + script(src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-route.js") + script(src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.6/angular-resource.js") + script(src="/javascript/application/application.js") + script(src="/javascript/controllers/projects.js") + script(src="/javascript/controllers/project.js") + script(src="/javascript/services/projects.js") + script(src="/javascript/services/project.js") + body