From be1e251e6f91229b939eea8660aa8491bff8ec2a Mon Sep 17 00:00:00 2001 From: Thomas FORGIONE Date: Tue, 19 May 2015 10:14:06 +0200 Subject: [PATCH] Added user_id support, reinit OBJLoader to last version, cookie warning --- controllers/prototype/index.js | 21 ++- package.json | 3 +- server.js | 30 +++- sql/backup.pgsql | 3 - static/js/three/OBJLoader.js | 299 +++++++++++++++++++-------------- views/main.jade | 8 +- 6 files changed, 214 insertions(+), 150 deletions(-) diff --git a/controllers/prototype/index.js b/controllers/prototype/index.js index b0c022a..f09e980 100644 --- a/controllers/prototype/index.js +++ b/controllers/prototype/index.js @@ -1,16 +1,16 @@ var pg = require('pg'); var pgc = require('../../private.js'); -var createNewId = function() { - var value; +var createNewId = function(req, callback) { pg.connect(pgc.url, function(err, client, release) { client.query( "INSERT INTO users(name) VALUES('anonymous'); SELECT currval('users_id_seq');", [], function(err, result) { - value = result.rows[0].currval; + req.session.user_id = result.rows[0].currval; + req.session.save(); + callback(); release(); - return value; } ); }); @@ -25,13 +25,16 @@ module.exports.index = function(req, res) { } module.exports.arrows = function(req, res) { - // req.session.user_id = createNewId(); - res.setHeader('Content-Type', 'text/html'); + createNewId(req, function() { - res.locals.cameraStyle = 'arrows'; + res.setHeader('Content-Type', 'text/html'); + + res.locals.cameraStyle = 'arrows'; + + res.render('prototype.jade', res.locals, function(err, result) { + res.send(result); + }); - res.render('prototype.jade', res.locals, function(err, result) { - res.send(result); }); } diff --git a/package.json b/package.json index bae38a2..f9d8556 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,8 @@ "pg": "4.3.0", "body-parser": "1.12.4", "express-session": "1.11.2", - "cookie-parser": "1.3.4" + "cookie-parser": "1.3.4", + "cookie-session": "1.1.0" }, "repository": { "type": "git", diff --git a/server.js b/server.js index 62fcb65..6d80a7f 100644 --- a/server.js +++ b/server.js @@ -8,17 +8,22 @@ var secret = require('./private'); var app = express(); var bodyParser = require('body-parser'); -var session = require('express-session'); +var session = require('cookie-session'); var cookieParser = require('cookie-parser'); var urls = require('./urls'); app.set('view engine', 'jade'); +app.set('trust proxy', 1); -app.use(cookieParser()); +app.use(cookieParser(secret.secret)); app.use(session({ - saveUninitialized: true, - resave: true, - secret: secret.secret + // express-session + // saveUninitialized: true, + // resave: true, + // secret: secret.secret + + // cookie-session + keys: ['key1', 'key2'] })); app.use(bodyParser.text()); @@ -32,13 +37,23 @@ app.use(function(req, res, next) { next(); }); +app.use(function(req, res, next) { + if (req.cookies.alreadyCame) { + res.locals.alertCookie = false; + } else { + res.locals.alertCookie = true; + res.cookie('alreadyCame', true); + } + next(); +}); + // Load controllers require('./lib/boot')(app, { verbose: !module.parent }); app.use('/static', express.static('static')); app.post('/post', function(req, res) { - var user_id = 1; + var user_id = req.session.user_id; var arrow_id = req.body.arrow_id; pg.connect(secret.url, function(err, client, release) { @@ -52,7 +67,7 @@ app.post('/post', function(req, res) { }); res.setHeader('Content-Type', 'text/html'); - res.send("Hello"); + res.send("user_id = " + user_id); }); // When error raised @@ -86,5 +101,4 @@ if ( app.get('env') === 'development' ) { server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'; } -console.log("Starting server on " + server_ip_address + ":" + server_port); app.listen(server_port, server_ip_address); diff --git a/sql/backup.pgsql b/sql/backup.pgsql index 89c17b6..354c123 100644 --- a/sql/backup.pgsql +++ b/sql/backup.pgsql @@ -6,9 +6,6 @@ CREATE TABLE users ( name char(50) ); --- Create dummy user -INSERT INTO users(name) VALUES('Thomas'); - CREATE TABLE arrowclicked( id SERIAL PRIMARY KEY, user_id SERIAL REFERENCES users (id), diff --git a/static/js/three/OBJLoader.js b/static/js/three/OBJLoader.js index d774d64..f66badd 100644 --- a/static/js/three/OBJLoader.js +++ b/static/js/three/OBJLoader.js @@ -22,139 +22,156 @@ THREE.OBJLoader.prototype = { onLoad( scope.parse( text ) ); - } ); + }, onProgress, onError ); }, parse: function ( text ) { - function vector( x, y, z ) { + console.time( 'OBJLoader' ); - return new THREE.Vector3( parseFloat( x ), parseFloat( y ), parseFloat( z ) ); + var object, objects = []; + var geometry, material; + + function parseVertexIndex( value ) { + + var index = parseInt( value ); + + return ( index >= 0 ? index - 1 : index + vertices.length / 3 ) * 3; } - function uv( u, v ) { + function parseNormalIndex( value ) { - return new THREE.Vector2( parseFloat( u ), parseFloat( v ) ); + var index = parseInt( value ); + + return ( index >= 0 ? index - 1 : index + normals.length / 3 ) * 3; } - function face3( a, b, c, normals ) { + function parseUVIndex( value ) { - return new THREE.Face3( a, b, c, normals ); + var index = parseInt( value ); - } - - var object = new THREE.Object3D(); - var geometry, material, mesh; - - function parseVertexIndex( index ) { - - index = parseInt( index ); - - return index >= 0 ? index - 1 : index + vertices.length; + return ( index >= 0 ? index - 1 : index + uvs.length / 2 ) * 2; } - function parseNormalIndex( index ) { + function addVertex( a, b, c ) { - index = parseInt( index ); - - return index >= 0 ? index - 1 : index + normals.length; + geometry.vertices.push( + vertices[ a ], vertices[ a + 1 ], vertices[ a + 2 ], + vertices[ b ], vertices[ b + 1 ], vertices[ b + 2 ], + vertices[ c ], vertices[ c + 1 ], vertices[ c + 2 ] + ); } - function parseUVIndex( index ) { + function addNormal( a, b, c ) { - index = parseInt( index ); - - return index >= 0 ? index - 1 : index + uvs.length; + geometry.normals.push( + normals[ a ], normals[ a + 1 ], normals[ a + 2 ], + normals[ b ], normals[ b + 1 ], normals[ b + 2 ], + normals[ c ], normals[ c + 1 ], normals[ c + 2 ] + ); } - - function add_face( a, b, c, normals_inds ) { - if ( normals_inds === undefined ) { + function addUV( a, b, c ) { - geometry.faces.push( face3( - vertices[ parseVertexIndex( a ) ] - 1, - vertices[ parseVertexIndex( b ) ] - 1, - vertices[ parseVertexIndex( c ) ] - 1 - ) ); + geometry.uvs.push( + uvs[ a ], uvs[ a + 1 ], + uvs[ b ], uvs[ b + 1 ], + uvs[ c ], uvs[ c + 1 ] + ); + + } + + function addFace( a, b, c, d, ua, ub, uc, ud, na, nb, nc, nd ) { + + var ia = parseVertexIndex( a ); + var ib = parseVertexIndex( b ); + var ic = parseVertexIndex( c ); + var id; + + if ( d === undefined ) { + + addVertex( ia, ib, ic ); } else { - geometry.faces.push( face3( - vertices[ parseVertexIndex( a ) ] - 1, - vertices[ parseVertexIndex( b ) ] - 1, - vertices[ parseVertexIndex( c ) ] - 1, - [ - normals[ parseNormalIndex( normals_inds[ 0 ] ) ].clone(), - normals[ parseNormalIndex( normals_inds[ 1 ] ) ].clone(), - normals[ parseNormalIndex( normals_inds[ 2 ] ) ].clone() - ] - ) ); + id = parseVertexIndex( d ); + + addVertex( ia, ib, id ); + addVertex( ib, ic, id ); } - } - - function add_uvs( a, b, c ) { - - geometry.faceVertexUvs[ 0 ].push( [ - uvs[ parseUVIndex( a ) ].clone(), - uvs[ parseUVIndex( b ) ].clone(), - uvs[ parseUVIndex( c ) ].clone() - ] ); + if ( ua !== undefined ) { - } - - function handle_face_line(faces, uvs, normals_inds) { + ia = parseUVIndex( ua ); + ib = parseUVIndex( ub ); + ic = parseUVIndex( uc ); - if ( faces[ 3 ] === undefined ) { - - add_face( faces[ 0 ], faces[ 1 ], faces[ 2 ], normals_inds ); - - if ( uvs !== undefined && uvs.length > 0 ) { + if ( d === undefined ) { - add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 2 ] ); - - } - - } else { - - if ( normals_inds !== undefined && normals_inds.length > 0 ) { - - add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ], [ normals_inds[ 0 ], normals_inds[ 1 ], normals_inds[ 3 ] ] ); - add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ], [ normals_inds[ 1 ], normals_inds[ 2 ], normals_inds[ 3 ] ] ); + addUV( ia, ib, ic ); } else { - add_face( faces[ 0 ], faces[ 1 ], faces[ 3 ] ); - add_face( faces[ 1 ], faces[ 2 ], faces[ 3 ] ); + id = parseUVIndex( ud ); - } - - if ( uvs !== undefined && uvs.length > 0 ) { - - add_uvs( uvs[ 0 ], uvs[ 1 ], uvs[ 3 ] ); - add_uvs( uvs[ 1 ], uvs[ 2 ], uvs[ 3 ] ); + addUV( ia, ib, id ); + addUV( ib, ic, id ); } } - + + if ( na !== undefined ) { + + ia = parseNormalIndex( na ); + ib = parseNormalIndex( nb ); + ic = parseNormalIndex( nc ); + + if ( d === undefined ) { + + addNormal( ia, ib, ic ); + + } else { + + id = parseNormalIndex( nd ); + + addNormal( ia, ib, id ); + addNormal( ib, ic, id ); + + } + + } + } // create mesh if no objects in text if ( /^o /gm.test( text ) === false ) { - geometry = new THREE.Geometry(); - material = new THREE.MeshLambertMaterial(); - mesh = new THREE.Mesh( geometry, material ); - object.add( mesh ); + geometry = { + vertices: [], + normals: [], + uvs: [] + }; + + material = { + name: '' + }; + + object = { + name: '', + geometry: geometry, + material: material + }; + + objects.push( object ); } @@ -164,15 +181,15 @@ THREE.OBJLoader.prototype = { // v float float float - var vertex_pattern = /v( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/; + var vertex_pattern = /v( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/; // vn float float float - var normal_pattern = /vn( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/; + var normal_pattern = /vn( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/; // vt float float - var uv_pattern = /vt( +[\d|\.|\+|\-|e]+)( +[\d|\.|\+|\-|e]+)/; + var uv_pattern = /vt( +[\d|\.|\+|\-|e|E]+)( +[\d|\.|\+|\-|e|E]+)/; // f vertex vertex vertex ... @@ -186,13 +203,11 @@ THREE.OBJLoader.prototype = { var face_pattern3 = /f( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))( +(-?\d+)\/(-?\d+)\/(-?\d+))?/; - // f vertex//normal vertex//normal vertex//normal ... + // f vertex//normal vertex//normal vertex//normal ... var face_pattern4 = /f( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))( +(-?\d+)\/\/(-?\d+))?/ - // fixes - - text = text.replace( /\\\r?\n/g, '' ); // handles line continuations \ + // var lines = text.split( '\n' ); @@ -211,12 +226,10 @@ THREE.OBJLoader.prototype = { // ["v 1.0 2.0 3.0", "1.0", "2.0", "3.0"] - vertices.push( - geometry.vertices.push( - vector( - result[ 1 ], result[ 2 ], result[ 3 ] - ) - ) + vertices.push( + parseFloat( result[ 1 ] ), + parseFloat( result[ 2 ] ), + parseFloat( result[ 3 ] ) ); } else if ( ( result = normal_pattern.exec( line ) ) !== null ) { @@ -224,9 +237,9 @@ THREE.OBJLoader.prototype = { // ["vn 1.0 2.0 3.0", "1.0", "2.0", "3.0"] normals.push( - vector( - result[ 1 ], result[ 2 ], result[ 3 ] - ) + parseFloat( result[ 1 ] ), + parseFloat( result[ 2 ] ), + parseFloat( result[ 3 ] ) ); } else if ( ( result = uv_pattern.exec( line ) ) !== null ) { @@ -234,56 +247,66 @@ THREE.OBJLoader.prototype = { // ["vt 0.1 0.2", "0.1", "0.2"] uvs.push( - uv( - result[ 1 ], result[ 2 ] - ) + parseFloat( result[ 1 ] ), + parseFloat( result[ 2 ] ) ); } else if ( ( result = face_pattern1.exec( line ) ) !== null ) { // ["f 1 2 3", "1", "2", "3", undefined] - handle_face_line( - [ result[ 1 ], result[ 2 ], result[ 3 ], result[ 4 ] ] + addFace( + result[ 1 ], result[ 2 ], result[ 3 ], result[ 4 ] ); } else if ( ( result = face_pattern2.exec( line ) ) !== null ) { // ["f 1/1 2/2 3/3", " 1/1", "1", "1", " 2/2", "2", "2", " 3/3", "3", "3", undefined, undefined, undefined] - - handle_face_line( - [ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces - [ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //uv + + addFace( + result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ], + result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ); } else if ( ( result = face_pattern3.exec( line ) ) !== null ) { // ["f 1/1/1 2/2/2 3/3/3", " 1/1/1", "1", "1", "1", " 2/2/2", "2", "2", "2", " 3/3/3", "3", "3", "3", undefined, undefined, undefined, undefined] - handle_face_line( - [ result[ 2 ], result[ 6 ], result[ 10 ], result[ 14 ] ], //faces - [ result[ 3 ], result[ 7 ], result[ 11 ], result[ 15 ] ], //uv - [ result[ 4 ], result[ 8 ], result[ 12 ], result[ 16 ] ] //normal + addFace( + result[ 2 ], result[ 6 ], result[ 10 ], result[ 14 ], + result[ 3 ], result[ 7 ], result[ 11 ], result[ 15 ], + result[ 4 ], result[ 8 ], result[ 12 ], result[ 16 ] ); } else if ( ( result = face_pattern4.exec( line ) ) !== null ) { // ["f 1//1 2//2 3//3", " 1//1", "1", "1", " 2//2", "2", "2", " 3//3", "3", "3", undefined, undefined, undefined] - handle_face_line( - [ result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ] ], //faces - [ ], //uv - [ result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ] //normal + addFace( + result[ 2 ], result[ 5 ], result[ 8 ], result[ 11 ], + undefined, undefined, undefined, undefined, + result[ 3 ], result[ 6 ], result[ 9 ], result[ 12 ] ); } else if ( /^o /.test( line ) ) { - geometry = new THREE.Geometry(); - material = new THREE.MeshLambertMaterial(); + geometry = { + vertices: [], + normals: [], + uvs: [] + }; - mesh = new THREE.Mesh( geometry, material ); - mesh.name = line.substring( 2 ).trim(); - object.add( mesh ); + material = { + name: '' + }; + + object = { + name: line.substring( 2 ).trim(), + geometry: geometry, + material: material + }; + + objects.push( object ) } else if ( /^g /.test( line ) ) { @@ -311,18 +334,38 @@ THREE.OBJLoader.prototype = { } - var children = object.children; + var container = new THREE.Object3D(); - for ( var i = 0, l = children.length; i < l; i ++ ) { + for ( var i = 0, l = objects.length; i < l; i ++ ) { - var geometry = children[ i ].geometry; + object = objects[ i ]; + geometry = object.geometry; - geometry.computeFaceNormals(); - geometry.computeBoundingSphere(); + var buffergeometry = new THREE.BufferGeometry(); + + buffergeometry.addAttribute( 'position', new THREE.BufferAttribute( new Float32Array( geometry.vertices ), 3 ) ); + + if ( geometry.normals.length > 0 ) { + buffergeometry.addAttribute( 'normal', new THREE.BufferAttribute( new Float32Array( geometry.normals ), 3 ) ); + } + + if ( geometry.uvs.length > 0 ) { + buffergeometry.addAttribute( 'uv', new THREE.BufferAttribute( new Float32Array( geometry.uvs ), 2 ) ); + } + + material = new THREE.MeshLambertMaterial(); + material.name = object.material.name; + + var mesh = new THREE.Mesh( buffergeometry, material ); + mesh.name = object.name; + + container.add( mesh ); } - - return object; + + console.timeEnd( 'OBJLoader' ); + + return container; } diff --git a/views/main.jade b/views/main.jade index ac686f2..6008cf1 100644 --- a/views/main.jade +++ b/views/main.jade @@ -55,8 +55,14 @@ html(lang='fr') span.glyphicon.glyphicon-envelope(aria-hidden=true) span(style={'margin-left':'5px'}) Contact - section#main-section.container + if alertCookie + .alert.alert-warning.alert-dismissible(role="alert", style={'margin-top':'20px'}) + button.close(type="button", data-dismiss="alert", aria-label="Close") + span(aria-hidden="true") + × + Warning : this website use cookies ! + block content script(src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js")