Update structure + Add projects page
This commit is contained in:
+44
-32
@@ -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' ) )
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -111,27 +111,43 @@ class App
|
||||
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.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 ) =>
|
||||
{
|
||||
// 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 } ) )
|
||||
} )
|
||||
@@ -139,8 +155,7 @@ class App
|
||||
socket.on( 'create_file', ( data ) =>
|
||||
{
|
||||
project.create_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 } ) )
|
||||
} )
|
||||
@@ -148,8 +163,7 @@ class App
|
||||
socket.on( 'delete_file', ( data ) =>
|
||||
{
|
||||
project.delete_file( data.path )
|
||||
|
||||
this.sockets.site.emit( 'update_project', project )
|
||||
project.socket.emit( 'update_project', project )
|
||||
|
||||
console.log( util.inspect( project, { depth: null, colors: true } ) )
|
||||
} )
|
||||
@@ -157,8 +171,7 @@ class App
|
||||
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 )
|
||||
// } )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,7 +3,12 @@ var express = require( 'express' ),
|
||||
|
||||
router.get( '/', function( request, response )
|
||||
{
|
||||
response.render( 'index/index.jade', {} );
|
||||
response.render( 'pages/index/projects.jade', {} );
|
||||
} );
|
||||
|
||||
router.get( /project\/[a-z]([a-z0-9_-])?/, function( request, response )
|
||||
{
|
||||
response.render( 'pages/index/project.jade', {} );
|
||||
} );
|
||||
|
||||
module.exports = router;
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
]
|
||||
);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
]
|
||||
);
|
||||
@@ -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
|
||||
}
|
||||
]
|
||||
);
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
]
|
||||
);
|
||||
@@ -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>
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
footer
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user