From e4ccca4fb61a7d5205b0bfd817d3faaae689a6eb Mon Sep 17 00:00:00 2001 From: brunosimon Date: Mon, 6 Jun 2016 21:52:58 +0200 Subject: [PATCH] Project slug + Update projects sockets structure + Express to angular structure --- app/app.class.js | 20 ++-- site/app.class.js | 109 +++++++----------- site/controllers/index.js | 19 +-- site/models/project.class.js | 48 +++++++- site/models/projects.class.js | 39 +++++-- site/package.json | 1 + site/public/javascript/controllers/project.js | 17 +-- .../public/javascript/controllers/projects.js | 1 - site/public/javascript/services/project.js | 32 ++--- site/public/javascript/services/projects.js | 4 +- site/views/pages/index/project.jade | 54 +-------- site/views/pages/index/projects.jade | 4 +- site/views/partials/header.jade | 4 +- 13 files changed, 172 insertions(+), 180 deletions(-) diff --git a/app/app.class.js b/app/app.class.js index f612c86..0b218d5 100644 --- a/app/app.class.js +++ b/app/app.class.js @@ -53,21 +53,21 @@ class App // Set up this.arguments = process.argv.slice( 2 ) - // Missing project slug + // Missing project name if( this.arguments.length === 0 ) { // Stop process - console.log( 'Missing arguments: first argument should be the projet slug'.red ) + console.log( 'Missing arguments: first argument should be the projet name'.red ) process.exit() } - // Wrong project slug - if( !this.arguments[ 0 ].match( /^[a-z_-][a-z0-9_-]+$/ ) ) - { - // Stop process - console.log( 'Wrong arguments: projet slug'.red ) - process.exit() - } + // // Wrong project name + // if( !this.arguments[ 0 ].match( /^[a-z_-][a-z0-9_-]+$/ ) ) + // { + // // Stop process + // console.log( 'Wrong arguments: projet name'.red ) + // process.exit() + // } } /** @@ -83,7 +83,7 @@ class App this.socket.on( 'connect', () => { console.log( 'connected'.green ) - this.socket.emit( 'start_project', { slug: this.arguments[ 0 ] } ) + this.socket.emit( 'start_project', { name: this.arguments[ 0 ] } ) } ) } diff --git a/site/app.class.js b/site/app.class.js index c0c2dff..80f6a51 100644 --- a/site/app.class.js +++ b/site/app.class.js @@ -22,10 +22,10 @@ class App constructor( _options ) { this.set_options( _options ) - this.set_models() this.set_express() this.set_server() this.set_socket() + this.set_models() } /** @@ -34,7 +34,7 @@ class App set_models() { // Set up - this.projects = new Projects() + this.projects = new Projects( { socket: this.sockets.main } ) // Tests var project = this.projects.create_project( 'dummy' ) @@ -46,7 +46,7 @@ class App 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 } ) ) + // console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) } /** @@ -93,12 +93,12 @@ class App // Start this.server.listen( this.options.port, () => { - // URL - let url = 'http://' + ip.address() + ':' + this.options.port + // URL + let url = 'http://' + ip.address() + ':' + this.options.port - console.log( colors.green( '---------------------------' ) ) - console.log( 'server'.green.bold + ' - ' + 'started'.cyan ) - console.log( 'server'.green.bold + ' - ' + url.cyan ) + console.log( colors.green( '---------------------------' ) ) + console.log( 'server'.green.bold + ' - ' + 'started'.cyan ) + console.log( 'server'.green.bold + ' - ' + url.cyan ) } ) } @@ -111,15 +111,6 @@ class App 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' ) - - // Projects connection event - this.sockets.projects.on( 'connection', ( socket ) => - { - console.log( 'socket projects'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) - - socket.emit( 'update_projects', this.projects.describe() ) - } ); // App connection event this.sockets.app.on( 'connection', ( socket ) => @@ -127,70 +118,52 @@ class App // Set up let project = null - console.log( 'socket app'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) + console.log( 'socket app'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) - // Start project - socket.on( 'start_project', ( data ) => - { - // Create project - project = this.projects.create_project( data.slug ) + // Start project + socket.on( 'start_project', ( data ) => + { + // Create project + project = this.projects.create_project( data.name ) - // Create socket with specific namespace - project.socket = this.sockets.main.of( '/project/' + project.name ) + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) + } ) - // Emit to projects socket - this.sockets.projects.emit( 'update_projects', this.projects.describe() ) + socket.on( 'update_file', ( data ) => + { + project.update_file( data.path, data.content ) - console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) - } ) + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) + } ) - socket.on( 'update_file', ( data ) => - { - project.update_file( data.path, data.content ) - project.socket.emit( 'update_project', project ) + socket.on( 'create_file', ( data ) => + { + project.create_file( data.path, data.content ) - console.log( util.inspect( project, { depth: null, colors: true } ) ) - } ) + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) + } ) - socket.on( 'create_file', ( data ) => - { - project.create_file( data.path, data.content ) - project.socket.emit( 'update_project', project ) + socket.on( 'delete_file', ( data ) => + { + project.delete_file( data.path ) - console.log( util.inspect( project, { depth: null, colors: true } ) ) - } ) + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) + } ) - socket.on( 'delete_file', ( data ) => - { - project.delete_file( data.path ) - project.socket.emit( 'update_project', project ) + socket.on( 'create_folder', ( data ) => + { + project.create_folder( data.path, data.content ) - console.log( util.inspect( project, { depth: null, colors: true } ) ) - } ) + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) + } ) - socket.on( 'create_folder', ( data ) => - { - project.create_folder( data.path, data.content ) - project.socket.emit( 'update_project', project ) + socket.on( 'delete_folder', ( data ) => + { + project.delete_folder( data.path ) - console.log( util.inspect( project, { depth: null, colors: true } ) ) - } ) - - socket.on( 'delete_folder', ( data ) => - { - project.delete_folder( data.path ) - project.socket.emit( 'update_project', project ) - - console.log( util.inspect( project, { depth: null, colors: true } ) ) - } ) + console.log( util.inspect( project.folders, { depth: null, colors: true } ) ) + } ) } ) - - // this.sockets.projects.on( 'connection', ( socket ) => - // { - // console.log( 'socket site'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) - - // socket.emit( 'update_project', project ) - // } ) } } diff --git a/site/controllers/index.js b/site/controllers/index.js index 5167d97..513b7ba 100644 --- a/site/controllers/index.js +++ b/site/controllers/index.js @@ -1,14 +1,19 @@ var express = require( 'express' ), - router = express.Router(); + router = express.Router() router.get( '/', function( request, response ) { - response.render( 'pages/index/projects.jade', {} ); -} ); + response.render( 'pages/index/projects.jade', {} ) +} ) -router.get( /project\/[a-z]([a-z0-9_-])?/, function( request, response ) +router.get( /project\/(.+)/, function( request, response ) { - response.render( 'pages/index/project.jade', {} ); -} ); + response.render( + 'pages/index/project.jade', + { + project_slug: request.params['0'] + } + ) +} ) -module.exports = router; +module.exports = router diff --git a/site/models/project.class.js b/site/models/project.class.js index 94b4039..d92ceb2 100644 --- a/site/models/project.class.js +++ b/site/models/project.class.js @@ -3,13 +3,15 @@ // Dependencies let paths = require( '../utils/paths.class.js' ), util = require( 'util' ), + slug = require( 'slug' ), File = require( './file.class.js' ) class Project { - constructor( name ) + constructor( options ) { - this.name = name + this.name = options.name + this.slug = slug( this.name ) this.folders = { '.': { @@ -18,6 +20,23 @@ class Project folders: {} } } + + this.set_socket( options.socket ) + } + + set_socket( socket ) + { + // Set up + this.original_socket = socket + this.socket = this.original_socket.of( '/project/' + this.slug ) + + // Connection event + this.socket.on( 'connection', ( socket ) => + { + console.log( 'socket projects'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) + + this.socket.emit( 'update_project', this.describe() ) + } ); } create_file( _path, _content ) @@ -44,6 +63,9 @@ class Project if( _content ) file.create_version( _content ) + // Emit + this.socket.emit( 'update_project', this.describe() ) + return file } @@ -94,6 +116,9 @@ class Project // Create version file.create_version( _content ) + + // Emit + this.socket.emit( 'update_project', this.describe() ) } delete_file( _path ) @@ -112,8 +137,12 @@ class Project // File found if( file ) { + // Delete file file.destructor() delete folder.files[ parsed_path.base ] + + // Emit + this.socket.emit( 'update_project', this.describe() ) } } } @@ -144,6 +173,9 @@ class Project folder = _folder } + // Emit + this.socket.emit( 'update_project', this.describe() ) + return folder } @@ -216,8 +248,20 @@ class Project delete_folder( folder ) + // Emit + this.socket.emit( 'update_project', this.describe() ) + return true } + + describe() + { + let result = {} + result.name = this.name + result.folders = this.folders + + return result + } } module.exports = Project diff --git a/site/models/projects.class.js b/site/models/projects.class.js index edf2084..71fa2b9 100644 --- a/site/models/projects.class.js +++ b/site/models/projects.class.js @@ -4,27 +4,47 @@ let Project = require( './project.class.js' ) class Projects { - constructor() + constructor( options ) { this.all = {} + + this.set_socket( options.socket ) + } + + set_socket( socket ) + { + // Set up + this.original_socket = socket + this.socket = this.original_socket.of( '/projects' ) + + // Connection event + this.socket.on( 'connection', ( socket ) => + { + console.log( 'socket projects'.green.bold + ' - ' + 'connect'.cyan + ' - ' + socket.id.cyan ) + + this.socket.emit( 'update_projects', this.describe() ) + } ); } create_project( _name ) { // Create project - let project = new Project( _name ) + let project = new Project( { name: _name, socket: this.original_socket } ) // Save - this.all[ project.name ] = project + this.all[ project.slug ] = project + + // Emit + this.socket.emit( 'update_projects', this.describe() ) // Return return project } - get_project_by_name( _name ) + get_project_by_slug( _slug ) { // Find project - let project = this.all[ _name ] + let project = this.all[ _slug ] // Found if( project ) @@ -39,12 +59,13 @@ class Projects let result = {} result.all = {} - for( let _name in this.all ) + for( let _slug in this.all ) { - let _project = this.all[ _name ] + let _project = this.all[ _slug ] - result.all[ _name ] = { - name : _project.name + result.all[ _slug ] = { + slug: _project.slug, + name: _project.name } } diff --git a/site/package.json b/site/package.json index 740f053..5d2f183 100644 --- a/site/package.json +++ b/site/package.json @@ -23,6 +23,7 @@ "helmet": "^2.1.0", "ip": "^1.1.3", "jade": "^1.11.0", + "slug": "^0.9.1", "socket.io": "^1.4.6" } } diff --git a/site/public/javascript/controllers/project.js b/site/public/javascript/controllers/project.js index 7158658..eb31a21 100644 --- a/site/public/javascript/controllers/project.js +++ b/site/public/javascript/controllers/project.js @@ -5,16 +5,6 @@ angular_module.controller( '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 ); @@ -25,6 +15,11 @@ angular_module.controller( console.log( file ); }; + $scope.init = function( project_slug ) + { + project.connect( project_slug ); + }; + project.on_update( function( data ) { $scope.$apply( function() @@ -33,7 +28,7 @@ angular_module.controller( } ); } ); - this.project = project.data; + $scope.project = project.data; } ] ); diff --git a/site/public/javascript/controllers/projects.js b/site/public/javascript/controllers/projects.js index ef1172b..dca9844 100644 --- a/site/public/javascript/controllers/projects.js +++ b/site/public/javascript/controllers/projects.js @@ -10,7 +10,6 @@ angular_module.controller( $scope.$apply( function() { $scope.projects = Object.keys( data.all ).length ? data.all : null; - console.log($scope.projects); } ); } ); diff --git a/site/public/javascript/services/project.js b/site/public/javascript/services/project.js index ed14177..adea9e9 100644 --- a/site/public/javascript/services/project.js +++ b/site/public/javascript/services/project.js @@ -2,8 +2,7 @@ angular_module.factory( 'project', [ '$timeout', - '$rootScope', - function( $timeout, $rootScope ) + function( $timeout ) { update_callback = null; @@ -13,23 +12,26 @@ angular_module.factory( { update_callback = callback; }; - - var socket = io( 'http://192.168.1.4:3000/site' ); - - socket.on( 'connect', function() + result.connect = function( project_name ) { - console.log('connected'); - } ); + var socket = io( 'http://192.168.1.4:3000/project/' + project_name ); - socket.on( 'update_project', function( data ) - { - result.data = data; + socket.on( 'connect', function() + { + console.log('connected'); + } ); - if( typeof update_callback === 'function' ) - update_callback.apply( this, [ data ] ); - } ); + socket.on( 'update_project', function( data ) + { + result.data = data; - 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":{}}}}}}; + if( typeof update_callback === 'function' ) + update_callback.apply( this, [ data ] ); + } ); + + }; + + result.data = {"name":"","folders":{}}; return result; } diff --git a/site/public/javascript/services/projects.js b/site/public/javascript/services/projects.js index 378c69d..158b62d 100644 --- a/site/public/javascript/services/projects.js +++ b/site/public/javascript/services/projects.js @@ -1,9 +1,7 @@ angular_module.factory( 'projects', [ - '$timeout', - '$rootScope', - function( $timeout, $rootScope ) + function() { update_callback = null; diff --git a/site/views/pages/index/project.jade b/site/views/pages/index/project.jade index df343c1..76e5719 100644 --- a/site/views/pages/index/project.jade +++ b/site/views/pages/index/project.jade @@ -8,63 +8,16 @@ script(type="text/ng-template",id="folder_template.html") li(ng-repeat="file in folder.files",ng-click="file_click(file)") | {{file.name}} -section(ng-controller="ProjectController as controller") +section(ng-controller="ProjectController as controller",ng-init="init('" + project_slug + "')") header.main-header h1 | Code Spectat aside header.aside-header - | {{ controller.project.name }} + | {{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 + li(ng-repeat="folder in project.folders",ng-include="'folder_template.html'") section.file section.historic a.version(href="#") @@ -86,4 +39,5 @@ section(ng-controller="ProjectController as controller") pre | <html> + include ../../partials/footer.jade diff --git a/site/views/pages/index/projects.jade b/site/views/pages/index/projects.jade index 200c5d7..63742fe 100644 --- a/site/views/pages/index/projects.jade +++ b/site/views/pages/index/projects.jade @@ -4,7 +4,7 @@ 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}} + a(href="/project/{{project.slug}}") + | {{project.name}} include ../../partials/footer.jade diff --git a/site/views/partials/header.jade b/site/views/partials/header.jade index 0e3fd3b..0a1b5c9 100644 --- a/site/views/partials/header.jade +++ b/site/views/partials/header.jade @@ -7,8 +7,8 @@ html(ng-app="application") 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/controllers/projects.js") script(src="/javascript/services/project.js") + script(src="/javascript/services/projects.js") body