Project slug + Update projects sockets structure + Express to angular structure

This commit is contained in:
brunosimon
2016-06-06 21:52:58 +02:00
parent b2c68a7b73
commit e4ccca4fb6
13 changed files with 172 additions and 180 deletions
+10 -10
View File
@@ -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 ] } )
} )
}
+9 -36
View File
@@ -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 } ) )
}
/**
@@ -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 ) =>
@@ -133,13 +124,7 @@ class App
socket.on( 'start_project', ( data ) =>
{
// Create project
project = this.projects.create_project( data.slug )
// 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() )
project = this.projects.create_project( data.name )
console.log( util.inspect( project.folders, { depth: null, colors: true } ) )
} )
@@ -147,50 +132,38 @@ class App
socket.on( 'update_file', ( data ) =>
{
project.update_file( data.path, data.content )
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 } ) )
} )
socket.on( 'create_file', ( data ) =>
{
project.create_file( data.path, data.content )
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 } ) )
} )
socket.on( 'delete_file', ( data ) =>
{
project.delete_file( 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 } ) )
} )
socket.on( 'create_folder', ( data ) =>
{
project.create_folder( data.path, data.content )
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 } ) )
} )
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 )
// } )
}
}
+12 -7
View File
@@ -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
+46 -2
View File
@@ -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
+30 -9
View File
@@ -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
}
}
+1
View File
@@ -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"
}
}
+6 -11
View File
@@ -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;
}
]
);
@@ -10,7 +10,6 @@ angular_module.controller(
$scope.$apply( function()
{
$scope.projects = Object.keys( data.all ).length ? data.all : null;
console.log($scope.projects);
} );
} );
+7 -5
View File
@@ -2,8 +2,7 @@ angular_module.factory(
'project',
[
'$timeout',
'$rootScope',
function( $timeout, $rootScope )
function( $timeout )
{
update_callback = null;
@@ -13,8 +12,9 @@ angular_module.factory(
{
update_callback = callback;
};
var socket = io( 'http://192.168.1.4:3000/site' );
result.connect = function( project_name )
{
var socket = io( 'http://192.168.1.4:3000/project/' + project_name );
socket.on( 'connect', function()
{
@@ -29,7 +29,9 @@ 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-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":{}}}}}};
};
result.data = {"name":"","folders":{}};
return result;
}
+1 -3
View File
@@ -1,9 +1,7 @@
angular_module.factory(
'projects',
[
'$timeout',
'$rootScope',
function( $timeout, $rootScope )
function()
{
update_callback = null;
+4 -50
View File
@@ -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
+2 -2
View File
@@ -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
+2 -2
View File
@@ -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