From 6d1c65fd103cc23f1319191846b06782440f6bbd Mon Sep 17 00:00:00 2001 From: Victor Moinard Date: Tue, 19 May 2020 19:14:33 +0200 Subject: [PATCH] publication code source --- db/index.js | 45 + index.js | 3768 +++++++++++++++++ package-lock.json | 932 ++++ package.json | 16 + public/css/accueil.css | 107 + public/css/platoo.css | 1000 +++++ public/images/boards/baghChal.svg | 31 + public/images/boards/baghChalOld.svg | 27 + public/images/boards/dame.svg | 107 + public/images/boards/echec-reverse.svg | 70 + public/images/boards/echec.svg | 70 + public/images/boards/go13.svg | 47 + public/images/boards/go19.svg | 60 + public/images/boards/go9.svg | 34 + public/images/boards/shogi.svg | 30 + public/images/boutons/Btnadd.svg | 76 + public/images/boutons/add.svg | 9 + public/images/boutons/changejeu.svg | 71 + public/images/boutons/chat.svg | 74 + public/images/boutons/couppre.svg | 168 + public/images/boutons/del.svg | 66 + public/images/boutons/delete.svg | 55 + public/images/boutons/edit.svg | 81 + public/images/boutons/erase.svg | 130 + public/images/boutons/fleche.svg | 156 + public/images/boutons/home.svg | 73 + public/images/boutons/info.svg | 108 + public/images/boutons/joueur.svg | 67 + public/images/boutons/modedel.svg | 70 + public/images/boutons/modejeu.svg | 49 + public/images/boutons/raz.svg | 174 + public/images/boutons/turnleft.svg | 173 + public/images/boutons/turnright.svg | 173 + public/images/boutons/turnup.svg | 155 + public/images/boutons/wiki.svg | 108 + public/images/pions/baghChal_chevre.svg | 51 + public/images/pions/baghChal_tigre.svg | 95 + public/images/pions/dame_blanc.svg | 6 + public/images/pions/dame_dame_blanc.svg | 12 + public/images/pions/dame_dame_noir.svg | 12 + public/images/pions/dame_noir.svg | 6 + public/images/pions/echec_cavalier_blanc.svg | 8 + public/images/pions/echec_cavalier_noir.svg | 8 + public/images/pions/echec_dame_blanc.svg | 8 + public/images/pions/echec_dame_noir.svg | 8 + public/images/pions/echec_fou_blanc.svg | 10 + public/images/pions/echec_fou_noir.svg | 10 + public/images/pions/echec_pion_blanc.svg | 8 + public/images/pions/echec_pion_noir.svg | 8 + public/images/pions/echec_roi_blanc.svg | 8 + public/images/pions/echec_roi_noir.svg | 8 + public/images/pions/echec_tour_blanc.svg | 9 + public/images/pions/echec_tour_noir.svg | 9 + public/images/pions/go_blanc.svg | 6 + public/images/pions/go_noir.svg | 6 + public/images/pions/shogi_cavalier_nord.svg | 14 + .../images/pions/shogi_cavalier_or_nord.svg | 12 + public/images/pions/shogi_cavalier_or_sud.svg | 12 + public/images/pions/shogi_cavalier_sud.svg | 12 + .../images/pions/shogi_cheval_dragon_nord.svg | 12 + .../images/pions/shogi_cheval_dragon_sud.svg | 12 + public/images/pions/shogi_dragon_nord.svg | 12 + public/images/pions/shogi_dragon_sud.svg | 12 + public/images/pions/shogi_fou_nord.svg | 14 + public/images/pions/shogi_fou_sud.svg | 12 + .../pions/shogi_general_argent_nord.svg | 14 + .../pions/shogi_general_argent_or_nord.svg | 12 + .../pions/shogi_general_argent_or_sud.svg | 12 + .../images/pions/shogi_general_argent_sud.svg | 12 + public/images/pions/shogi_general_or_nord.svg | 14 + public/images/pions/shogi_general_or_sud.svg | 12 + public/images/pions/shogi_jade_nord.svg | 14 + public/images/pions/shogi_jade_sud.svg | 14 + public/images/pions/shogi_lance_nord.svg | 14 + public/images/pions/shogi_lance_or_nord.svg | 12 + public/images/pions/shogi_lance_or_sud.svg | 12 + public/images/pions/shogi_lance_sud.svg | 12 + public/images/pions/shogi_pion_nord.svg | 14 + public/images/pions/shogi_pion_or_nord.svg | 12 + public/images/pions/shogi_pion_or_sud.svg | 12 + public/images/pions/shogi_pion_sud.svg | 12 + public/images/pions/shogi_roi_nord.svg | 14 + public/images/pions/shogi_roi_sud.svg | 14 + public/images/pions/shogi_tour_nord.svg | 14 + public/images/pions/shogi_tour_sud.svg | 12 + public/js/accueil.js | 11 + public/js/platoo.js | 2330 ++++++++++ views/accueil.ejs | 74 + views/platoo.ejs | 401 ++ 89 files changed, 11874 insertions(+) create mode 100644 db/index.js create mode 100644 index.js create mode 100644 package-lock.json create mode 100755 package.json create mode 100755 public/css/accueil.css create mode 100755 public/css/platoo.css create mode 100755 public/images/boards/baghChal.svg create mode 100755 public/images/boards/baghChalOld.svg create mode 100755 public/images/boards/dame.svg create mode 100755 public/images/boards/echec-reverse.svg create mode 100755 public/images/boards/echec.svg create mode 100755 public/images/boards/go13.svg create mode 100755 public/images/boards/go19.svg create mode 100755 public/images/boards/go9.svg create mode 100755 public/images/boards/shogi.svg create mode 100755 public/images/boutons/Btnadd.svg create mode 100755 public/images/boutons/add.svg create mode 100755 public/images/boutons/changejeu.svg create mode 100755 public/images/boutons/chat.svg create mode 100755 public/images/boutons/couppre.svg create mode 100755 public/images/boutons/del.svg create mode 100755 public/images/boutons/delete.svg create mode 100755 public/images/boutons/edit.svg create mode 100755 public/images/boutons/erase.svg create mode 100755 public/images/boutons/fleche.svg create mode 100755 public/images/boutons/home.svg create mode 100644 public/images/boutons/info.svg create mode 100755 public/images/boutons/joueur.svg create mode 100755 public/images/boutons/modedel.svg create mode 100755 public/images/boutons/modejeu.svg create mode 100755 public/images/boutons/raz.svg create mode 100755 public/images/boutons/turnleft.svg create mode 100755 public/images/boutons/turnright.svg create mode 100755 public/images/boutons/turnup.svg create mode 100755 public/images/boutons/wiki.svg create mode 100755 public/images/pions/baghChal_chevre.svg create mode 100755 public/images/pions/baghChal_tigre.svg create mode 100755 public/images/pions/dame_blanc.svg create mode 100755 public/images/pions/dame_dame_blanc.svg create mode 100755 public/images/pions/dame_dame_noir.svg create mode 100755 public/images/pions/dame_noir.svg create mode 100755 public/images/pions/echec_cavalier_blanc.svg create mode 100755 public/images/pions/echec_cavalier_noir.svg create mode 100755 public/images/pions/echec_dame_blanc.svg create mode 100755 public/images/pions/echec_dame_noir.svg create mode 100755 public/images/pions/echec_fou_blanc.svg create mode 100755 public/images/pions/echec_fou_noir.svg create mode 100755 public/images/pions/echec_pion_blanc.svg create mode 100755 public/images/pions/echec_pion_noir.svg create mode 100755 public/images/pions/echec_roi_blanc.svg create mode 100755 public/images/pions/echec_roi_noir.svg create mode 100755 public/images/pions/echec_tour_blanc.svg create mode 100755 public/images/pions/echec_tour_noir.svg create mode 100755 public/images/pions/go_blanc.svg create mode 100755 public/images/pions/go_noir.svg create mode 100755 public/images/pions/shogi_cavalier_nord.svg create mode 100755 public/images/pions/shogi_cavalier_or_nord.svg create mode 100755 public/images/pions/shogi_cavalier_or_sud.svg create mode 100755 public/images/pions/shogi_cavalier_sud.svg create mode 100755 public/images/pions/shogi_cheval_dragon_nord.svg create mode 100755 public/images/pions/shogi_cheval_dragon_sud.svg create mode 100755 public/images/pions/shogi_dragon_nord.svg create mode 100755 public/images/pions/shogi_dragon_sud.svg create mode 100755 public/images/pions/shogi_fou_nord.svg create mode 100755 public/images/pions/shogi_fou_sud.svg create mode 100755 public/images/pions/shogi_general_argent_nord.svg create mode 100755 public/images/pions/shogi_general_argent_or_nord.svg create mode 100755 public/images/pions/shogi_general_argent_or_sud.svg create mode 100755 public/images/pions/shogi_general_argent_sud.svg create mode 100755 public/images/pions/shogi_general_or_nord.svg create mode 100755 public/images/pions/shogi_general_or_sud.svg create mode 100755 public/images/pions/shogi_jade_nord.svg create mode 100755 public/images/pions/shogi_jade_sud.svg create mode 100755 public/images/pions/shogi_lance_nord.svg create mode 100755 public/images/pions/shogi_lance_or_nord.svg create mode 100755 public/images/pions/shogi_lance_or_sud.svg create mode 100755 public/images/pions/shogi_lance_sud.svg create mode 100755 public/images/pions/shogi_pion_nord.svg create mode 100755 public/images/pions/shogi_pion_or_nord.svg create mode 100755 public/images/pions/shogi_pion_or_sud.svg create mode 100755 public/images/pions/shogi_pion_sud.svg create mode 100755 public/images/pions/shogi_roi_nord.svg create mode 100755 public/images/pions/shogi_roi_sud.svg create mode 100755 public/images/pions/shogi_tour_nord.svg create mode 100755 public/images/pions/shogi_tour_sud.svg create mode 100755 public/js/accueil.js create mode 100755 public/js/platoo.js create mode 100755 views/accueil.ejs create mode 100755 views/platoo.ejs diff --git a/db/index.js b/db/index.js new file mode 100644 index 0000000..2addfe6 --- /dev/null +++ b/db/index.js @@ -0,0 +1,45 @@ +const { Pool } = require('pg') +const pool = new Pool({ + user: 'admin', + host: '127.0.0.1', + database: 'platoo', + password: 'm1y2s3q4l5', + port: 5432, +}) +module.exports = { + query: (text, params, callback) => { + const start = Date.now() + return pool.query(text, params, (err, res) => { + const duration = Date.now() - start + //console.log('executed query', { text, duration, rows: res.rowCount }) + callback(err, res) + }) + }, + connect: function(fun){ + return pool.connect(fun) + }, + getClient: (callback) => { + pool.connect((err, client, done) => { + const query = client.query + // monkey patch the query method to keep track of the last query executed + client.query = (...args) => { + client.lastQuery = args + return query.apply(client, args) + } + // set a timeout of 5 seconds, after which we will log this client's last query + const timeout = setTimeout(() => { + console.error('A client has been checked out for more than 5 seconds!') + console.error(`The last executed query on this client was: ${client.lastQuery}`) + }, 5000) + const release = (err) => { + // call the actual 'done' method, returning this client to the pool + done(err) + // clear our timeout + clearTimeout(timeout) + // set the query method back to its old un-monkey-patched version + client.query = query + } + callback(err, client, release) + }) + } +} diff --git a/index.js b/index.js new file mode 100644 index 0000000..421ed81 --- /dev/null +++ b/index.js @@ -0,0 +1,3768 @@ +//on charge les modules et on initialise les paramètres par défaut +const express = require('express'); +var app = express(); +const server = require('http').Server(app);//https? +const io = require('socket.io')(server); + +const bodyParser = require('body-parser');//changer payant ? +var urlencodedParser = bodyParser.urlencoded({ extended: false, parameterLimit:10 });//changer +const async = require('async'); + +/*const { Pool } = require('pg'); +var connection = new Pool({ + user: 'admin', + host: '127.0.0.1', + database: 'platoo', + password: 'm1y2s3q4l5', + port: 5432, +})*/ + +// notice here I'm requiring my database adapter file +// and not requiring node-postgres directly +const connection = require('./db') + + + +//var sqlinjection = require('sql-injection');//necessaire ? +var pattUrl =/^[0-9A-Za-z_-àéèêîïëù]+$/; +var affTime=/[0-9]{2} [0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}/; +//var HTnoeud =/^(?:[^']|(?:\\'))*(?:(?:[^\\]'(?:[^']|(?:\\'))*){2})*#NOEUDS(?:[^']|(?:\\'))*(?:(?:[^\\]'(?:[^']|(?:\\'))*){2})*$/g +var HTnoeud =/(?<=^([^']|\\')*(('([^']|\\')*){2})*)#NOEUDS(?=([^']|\\')*(('([^']|\\')*){2})*$)/g +/* /^ + (?:[^']|(?=\\)')* + (?: + (?: + (?!\\)' + (?:[^']|(?=\\)')* + ){2} + )* + #NOEUD + (?:[^']|(?=\\)')* + (?: + (?: + (?!\\)' + (?:[^']|(?=\\)')* + ){2} + )* + $/ */ + + /* / + (?<=^ + ([^']|\\')* + ( + ( + ' + ([^']|\\')* + ){2} + )* + ) + #NOEUD + (?= + ([^']|\\')* + ( + ( + ' + ([^']|\\')* + ){2} + )* + $) + /g */ + + +//aync +//ejs + +//icone +//ent +//socketio + +//const pool = new Pool({ +/*const connection = new Pool({ + user: 'admin', + host: '127.0.0.1', + database: 'platoopg', + password: 'm1y2s3q4l5', + port: 5432, +})*/ + + +var NBNOEUD=1024; + +function randomString(length, chars) { + var mask = ''; + if (chars.indexOf('a') > -1) mask += 'abcdefghijklmnopqrstuvwxyz'; + if (chars.indexOf('A') > -1) mask += 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; + if (chars.indexOf('#') > -1) mask += '0123456789'; + if (chars.indexOf('!') > -1) mask += '~`!@#$%^&*()_+-={}[]:";\'<>?,./|\\'; + var result = ''; + for (var i = length; i > 0; --i) result += mask[Math.floor(Math.random() * mask.length)]; + return result; +} + +//intersection of two arrys +//stack overflow +function intersect(a, b) { + var t; + if (b.length > a.length) t = b, b = a, a = t; // indexOf to loop over shorter + return a.filter(function (e) { + return b.indexOf(e) > -1; + }); +} + +//il s'agit d'une nouvelle méthode de socket. les socket ont été remplacé par this +function executeSocket(variables={},needsData=true,errMess='',data={},FUN=function(resIP){}){ + //console.log(data) + if(this.nomPlatoo && typeof this.nomPlatoo==='string'){ + this.nomPlatoo=this.nomPlatoo.substring(0,50); + + if(needsData){ + var n=Object.keys(variables).length; + var k = 0; + var valide = (typeof data ==='object'); + while((valide)&&(k0){ + //results[0].length>0 & results[1].length>0 & results[2].length>0 + FUN(resIP.rows); + }else{ + console.log('erreur de '+errMess+' : bad id_page'); + } + } + }); + + }else{ + console.log(errMess+'.data incorrect dans executeSocket'); + this.emit('refresh'); + } + }else { + this.emit('noname'); + } +} + +function checkValide(variables={},needsData=true,errMess='',data={}){ + if(needsData){ + var n=Object.keys(variables).length; + var k = 0; + var valide = (typeof data ==='object'); + while((valide)&&(k0){ + page_dontexist=false; + } + } + } + callback(null,jeu_ok,page_dontexist); + }); + }, + + function(jeu_ok,page_dontexist,callback){ + if(page_dontexist && valide_jeu){ + const query = { + text:'SELECT nom_jeu FROM platooschem.jeu WHERE nom_jeu = $1;', + values:[req.body.jeu] + }; + connection.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + if(results.rows.length===0){ + jeu_ok=false; + } + callback(null,jeu_ok,page_dontexist); + } + }); + }else if(!page_dontexist){ + res.redirect('/p/'+req.body.url); + callback(false); + }else{ + //texte à afficher sur la page: jeu pas valide + //res.redirect('/accueil'); + callback({stack:'jeu non valide'}); + } + }, + + function(jeu_ok,page_dontexist,callback){ + //si ok: + if(jeu_ok){ + //on crée une page + async.waterfall([ + function(callback2){ + var id_page=0; + var id_jeu=0; + connection.query('SELECT MAX(id_page)+1 AS id FROM platooschem.page;',function(err,results){ + if(err){ + //console.log('ERROR :'+err.stack);//ATT + //err.message=err.stack + callback2(err); + }else{ + if(results.rows.length===0){ + id_page=1; + }else{ + id_page=results.rows[0].id||1;//si null->id=1 + } + callback2(null,id_page,id_jeu); + } + }); + }, + + function(id_page,id_jeu,callback2){ + const query = { + text:'SELECT id_jeu AS id FROM platooschem.jeu WHERE nom_jeu = $1;', + values:[req.body.jeu] + }; + connection.query(query,function(err,results){ + if(err){ + //console.log('ERROR :'+err.stack);//ATT + //err.message=err.stack + callback2(err); + }else{ + id_jeu=results.rows[0].id; + callback2(null,id_page,id_jeu); + } + }); + }, + + //On démarre une transaction, pour que tout soit ajouté d'un coup ou annulé ensemble + + function(id_page,id_jeu,callback2){ + //https://node-postgres.com/features/transactions + connection.connect((err, client, done) => { + + //gere l'erreur et le rollback + const shouldAbort = err => { + if (err) { + console.error('Error in transaction', err.stack) + client.query('ROLLBACK', err => { + // release the client back to the pool + done(); + if (err) { + console.error('Error rolling back client', err.stack) + callback2(err); + } + + }) + } + return !!err + } + + //les instructions: on démarre l transaction + + client.query('BEGIN', err => { + if (shouldAbort(err)) return + //un waterfall pour faire toutes les requêtes + async.waterfall([ + function(callback3){ + const query={ + text:'INSERT INTO platooschem.page (id_page,nom_page,id_jeu_depart,nombre_trashs,creating_date,noeud_courant) SELECT $1,$2,id_jeu,nombre_trashs,CURRENT_TIMESTAMP,1 FROM platooschem.jeu WHERE id_jeu = $3; ', + values:[id_page,req.body.url,id_jeu] + }; + client.query(query,function(err,results){ + if(err){ + callback3(err); + }else{ + //resTot.push(results); + resTot=[results.rows]; + data={id_page:id_page,id_jeu:id_jeu}; + callback3(null,data,resTot); + } + }); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.joueur_on_page (id_page,id_joueur,label_joueur,action_clic_onboard,action_scroll_onboard,clickable_board,click_board_create_type,click_board_move_type,click_board_move_bac) SELECT $1,'+'id_joueur,label_joueur,action_clic_onboard,action_scroll_onboard,clickable_board,click_board_create_type,click_board_move_type,click_board_move_bac FROM platooschem.joueur_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.save_on_page (id_page,noeud_precedent,noeud_suivant,date,type_action,auteur,couleur,id_joueur) SELECT $1,0,1,CURRENT_TIMESTAMP,\'create\',NULL,NULL,1;', + values:[data.id_page] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + + + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.box_on_page (id_page,diese_box_on_page,num_box_on_page,id_pion,noeud_start) SELECT $1,diese_box_on_jeu,num_box_on_jeu,id_pion,1 FROM platooschem.box_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.stop_box_on_page (id_page,num_box_on_page,noeud_stop) SELECT $1,num_box_on_jeu,0 FROM platooschem.box_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.bac_on_page (id_page,diese_bac_on_page,num_bac_on_page,label_bac,noeud_start) SELECT $1,diese_bac_on_jeu,num_bac_on_jeu,label_bac,1 FROM platooschem.bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.stop_bac_on_page (id_page,num_bac_on_page,noeud_stop) SELECT $1,num_bac_on_jeu,0 FROM platooschem.bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.board_on_page (id_page,diese_board_on_page,num_board_on_page,id_board,noeud_start) SELECT $1,diese_board_on_jeu,num_board_on_jeu,id_board,1 FROM platooschem.board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.stop_board_on_page (id_page,num_board_on_page,noeud_stop) SELECT $1,num_board_on_jeu,0 FROM platooschem.board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.pion_on_bac_on_page (id_page,diese_bac_on_page,id_pion,nombre_pions,diese_pion_on_bac_on_page,num_pion_on_bac_on_page,noeud_start) SELECT $1,'+'diese_bac_on_jeu,id_pion,nombre_pions,diese_pion_on_bac_on_jeu,num_pion_on_bac_on_jeu,1 FROM platooschem.pion_on_bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.stop_pion_on_bac_on_page (id_page,diese_bac_on_page,num_pion_on_bac_on_page,noeud_stop) SELECT $1,diese_bac_on_jeu,num_pion_on_bac_on_jeu,0 FROM platooschem.pion_on_bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.pion_on_board_on_page (id_page,diese_board_on_page,id_pion,position_x,position_y,taille,diese_pion_on_board_on_page,num_pion_on_board_on_page,noeud_start) SELECT $1,'+'diese_board_on_jeu,id_pion,position_x,position_y,taille,diese_pion_on_board_on_jeu,num_pion_on_board_on_jeu,1 FROM platooschem.pion_on_board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.stop_pion_on_board_on_page (id_page,diese_board_on_page,num_pion_on_board_on_page,noeud_stop) SELECT $1,'+'diese_board_on_jeu,num_pion_on_board_on_jeu,0 FROM platooschem.pion_on_board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.carac_pions_page (id_page,id_pion,change_pion,diese_bac_on_page,taille) SELECT $1,'+'id_pion,change_pion,diese_bac_on_jeu,taille FROM platooschem.carac_pions_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu] + }; + queryChainedClient(client,query,callback3,data,resTot); + }, + function(data,resTot,callback3){ + const query={ + text:'INSERT INTO platooschem.carac_pions_joueur_on_page (id_page,id_joueur,id_pion,change_pion,diese_bac_on_page,taille) SELECT $1,id_joueur,id_pion,change_pion,diese_bac_on_jeu,taille FROM platooschem.carac_pions_joueur_on_jeu WHERE id_jeu = $2;', + values:[data.id_page,data.id_jeu] + }; + client.query(query,function(err,results){ + if(err){ + callback3(err); + }else{ + //resTot.push(results.rows); + resTot.push(results.rows); + callback3(null,resTot); + } + }); + } + + ],function(err){ + if(shouldAbort(err)){ + return false; + }else{ + client.query('COMMIT', err => { + if (err) { + console.error('Error committing transaction', err.stack); + callback2(err); + }else{ + res.redirect('/p/'+req.body.url); + callback2(null); + } + done(); + }); + } + }); + }); + }); + } + ], + function(err) { + if(err){ + console.log('erreur dans la création de la page : ' + err.stack); + //res.redirect('/accueil'); + callback(err); + }else{ + callback(null); + } + } + ); + + }else{ + //texte à afficher sur la page : jeu n'existe pas + //res.redirect('/accueil'); + callback({stack:'le jeu n existe pas'}); + } + } + + ], + function(err) { + if(err){ + console.log('erreur lors de la demande de connection: ' + err.stack); + res.redirect('/accueil'); + } + } + ); + }else{ + res.redirect('/accueil'); + //message : pas bon formulaire (nom url ou check) + } +}) + +.get('/p/:pageid/',function(req,res){ + //vérifier id -> necesaire ? remplacer " " par _ ? + if(!pattUrl.test(req.params.pageid)){ + res.writeHead(403,{'Content-Type': 'text/plain'}); + res.write('Forbidden characters in URL'); + res.end(); + }else{ + + connection.connect((err, client, done) => { + //gere l'erreur et le rollback + const shouldAbort = err => { + if (err) { + client.query('ROLLBACK', err => { + if (err) { + console.log('erreur de suppression de la page : '+err.stack); + } + // release the client back to the pool + done(); + }) + } + return !!err + } + + async.waterfall([ + + function(callback){ + client.query('BEGIN',function(err){ + if(err){ + callback(err); + }else{ + callback(null); + } + }); + }, + + function(callback){ + const query={ + text:'SELECT id_page,noeud_courant FROM platooschem.page WHERE nom_page =$1;', + values:[req.params.pageid] + }; + client.query(query,function(err,results_1){ + if(err){ + //console.log('erreur sql :'+err.stack); + res.redirect('/accueil');//passer le nom en paramètre? + callback(err); + }else{ + if(results_1.rows.length>1){ + //console.log('plusieurs pages'); + res.redirect('/accueil');//supprimer les pages ? + callback('plusieurs pages'); + }else if(results_1.rows.length==0){ + res.redirect('/accueil');//passer le nom en paramètre? + callback('page absente'); + }else{ + //renvoyer la page à partir de la bdd + //NoeudsBDD(results,errFun=function(res){res.redirect('/accueil')},dataErrFun=res, + var id_page = results_1.rows[0].id_page; + callback(null,id_page); + } + } + }); + }, + + function(id_page,callback){ + const query={ + text:'SELECT nombre_trashs,noeud_courant,creating_date FROM platooschem.page WHERE id_page =$1; ', + values:[id_page] + }; + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results.rows); + results_2=[results.rows]; + callback(null,id_page,results_2); + } + }); + }, + + function(id_page,results_2,callback){ + const query={ + text:'SELECT fa.label_fonction AS action_clic_onboard, '+ + 'fb.label_fonction AS action_scroll_onboard, '+ + 'fc.label_fonction AS clickable_board, '+ + 'pa.nom_pion AS click_board_create_type, '+ + 'pb.nom_pion AS click_board_move_type, '+ + 'click_board_move_bac FROM platooschem.joueur_on_page '+ + 'JOIN platooschem.bdd_fonctions fa ON action_clic_onboard = fa.id_fonction '+ + 'JOIN platooschem.bdd_fonctions fb ON action_scroll_onboard = fb.id_fonction '+ + 'JOIN platooschem.bdd_fonctions fc ON clickable_board = fc.id_fonction '+ + 'JOIN platooschem.pion pa ON click_board_create_type = pa.id_pion '+ + 'JOIN platooschem.pion pb ON click_board_move_type = pb.id_pion '+ + 'WHERE id_joueur = 1 AND id_page =$1; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT pa.nom_pion AS id_pion, pb.nom_pion AS change_pion, pa.svg_pion AS svg_pion, '+ + 'c.diese_bac_on_page,c.taille FROM platooschem.carac_pions_joueur_on_page c '+ + 'JOIN platooschem.pion pa ON c.id_pion = pa.id_pion '+ + 'JOIN platooschem.pion pb ON c.change_pion = pb.id_pion '+ + 'WHERE c.id_joueur = 1 AND c.id_page =$1; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT p.svg_pion,p.nom_pion,b.diese_box_on_page,p.directed,b.num_box_on_page,b.noeud_start,s.nstop noeud_stop FROM platooschem.box_on_page b'+ + ' JOIN platooschem.pion p ON b.id_pion = p.id_pion'+ + ' JOIN (SELECT ARRAY_AGG(noeud_stop) nstop,MAX(num_box_on_page) num,MAX(id_page) id FROM platooschem.stop_box_on_page WHERE id_page =$1 GROUP BY num_box_on_page) AS s'+ + ' ON b.id_page=s.id AND b.num_box_on_page=s.num'+ + ' WHERE b.id_page =$1 ORDER BY b.diese_box_on_page; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT diese_bac_on_page,num_bac_on_page,label_bac,noeud_start,s.nstop noeud_stop FROM platooschem.bac_on_page'+ + ' JOIN (SELECT ARRAY_AGG(noeud_stop) nstop,MAX(num_bac_on_page) num,MAX(id_page) id FROM platooschem.stop_bac_on_page WHERE id_page =$1 GROUP BY num_bac_on_page) AS s'+ + ' ON id_page=s.id AND num_bac_on_page=s.num'+ + ' WHERE id_page =$1 ORDER BY diese_bac_on_page;', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT pp.diese_bac_on_page,p.svg_pion,p.nom_pion,pp.nombre_pions,pp.diese_pion_on_bac_on_page,p.directed,pp.num_pion_on_bac_on_page,pp.noeud_start,s.nstop noeud_stop FROM platooschem.pion_on_bac_on_page pp'+ + ' JOIN platooschem.pion p ON pp.id_pion = p.id_pion'+ + ' JOIN (SELECT ARRAY_AGG(noeud_stop) nstop,MAX(num_pion_on_bac_on_page) num,MAX(diese_bac_on_page) diese,MAX(id_page) id FROM platooschem.stop_pion_on_bac_on_page WHERE id_page =$1 GROUP BY num_pion_on_bac_on_page) AS s'+ + ' ON pp.id_page=s.id AND pp.num_pion_on_bac_on_page=s.num AND pp.diese_bac_on_page=s.diese'+ + ' WHERE pp.id_page = $1 ORDER BY pp.num_pion_on_bac_on_page; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT bp.num_board_on_page,bp.diese_board_on_page,b.svg_board,b.nom_board,bp.noeud_start,s.nstop noeud_stop FROM platooschem.board_on_page bp'+ + ' JOIN platooschem.board b ON bp.id_board = b.id_board'+ + ' JOIN (SELECT ARRAY_AGG(noeud_stop) nstop,MAX(num_board_on_page) num,MAX(id_page) id FROM platooschem.stop_board_on_page WHERE id_page =$1 GROUP BY num_board_on_page) AS s'+ + ' ON bp.id_page=s.id AND bp.num_board_on_page=s.num'+ + ' WHERE bp.id_page = $1 ORDER BY diese_board_on_page; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT pp.diese_board_on_page,pp.diese_pion_on_board_on_page,pp.num_pion_on_board_on_page,p.nom_pion,p.svg_pion,pp.position_x,pp.position_y,pp.taille,p.directed,pp.noeud_start,s.nstop noeud_stop FROM platooschem.pion_on_board_on_page pp'+ + ' JOIN platooschem.pion p ON pp.id_pion = p.id_pion'+ + ' JOIN (SELECT ARRAY_AGG(noeud_stop) nstop,MAX(num_pion_on_board_on_page) num,MAX(diese_board_on_page) diese,MAX(id_page) id FROM platooschem.stop_pion_on_board_on_page WHERE id_page = $1 GROUP BY num_pion_on_board_on_page) AS s'+ + ' ON pp.id_page=s.id AND pp.num_pion_on_board_on_page=s.num AND pp.diese_board_on_page=s.diese'+ + ' WHERE pp.id_page =$1 ORDER BY num_pion_on_board_on_page;', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT id_joueur,label_joueur FROM platooschem.joueur_on_jeu j JOIN platooschem.page p ON j.id_jeu=p.id_jeu_depart WHERE id_page =$1 ORDER BY label_joueur; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT DISTINCT id_board,nom_board FROM platooschem.board ORDER BY nom_board; ', + values:[] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT DISTINCT id_pion,nom_pion FROM platooschem.pion ORDER BY nom_pion; ', + values:[] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT time,message,auteur,couleur,id_message FROM platooschem.chat_on_page WHERE id_page = $1 ORDER BY time DESC; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT j.wiki AS wiki FROM platooschem.page p JOIN platooschem.jeu j ON p.id_jeu_depart=j.id_jeu;', + values:[] + }; + queryChainedClient(client,query,callback,id_page,results_2); + }, + function(id_page,results_2,callback){ + const query={ + text:'SELECT s.noeud_precedent, s.noeud_suivant, s.date, s.auteur, s.couleur, j.label_joueur FROM platooschem.save_on_page s JOIN platooschem.page p ON s.id_page=p.id_page JOIN platooschem.joueur_on_jeu j ON s.id_joueur = j.id_joueur AND p.id_jeu_depart=j.id_jeu WHERE s.id_page =$1;', + values:[id_page] + }; + client.query(query,function(err,results){ + if(err){ + err.message=err.stack; + callback(err); + }else{ + results_2.push(results.rows); + callback(null,results_2); + } + }); + }, + function(results_2,callback){ + client.query('COMMIT',function(err,results){ + if(err){ + err.message=err.stack; + callback(err); + }else{ + callback(null,results_2); + } + }); + } + ], + function(err,results_2){ + if(shouldAbort(err)){ + console.log('Erreur de chargement de la page depuis la BDD : '+err.stack); + res.redirect('/accueil');//passer le nom en paramètre? + }else{ + done(); + var noeuds=[results_2[0][0].noeud_courant]; + var noeuds_suivants=[]; + var noeuds_precedents=[]; + for(var i=0; i< results_2[13].length;i++){ + noeuds_suivants.push(results_2[13][i].noeud_suivant) + noeuds_precedents.push(results_2[13][i].noeud_precedent) + } + var new_noeud=0; + while((noeuds.indexOf(0)==-1) && (noeuds_suivants.indexOf(noeuds[noeuds.length-1])!=-1)){ + new_noeud=noeuds_precedents[noeuds_suivants.indexOf(noeuds[noeuds.length-1])]; + noeuds.push(new_noeud); + } + if(noeuds[noeuds.length-1]==0){ + noeuds.pop(); + } + + var params ={ + objBoxes : [], + objBoards : [], + objBacs : [], + NTrashs : 0, + action_clic_onboardStr : '', + action_scroll_onboardStr : '', + clickable_boardStr : '', + click_board_create_type : 0, + click_board_move_type : 0, + click_board_move_bac : '', + tabPionListe : [], + tabPionChange : [], + tabPionMove : [], + tabPionTaille : [], + tabPionSvg : [], + nomPlatoo : req.params.pageid, + Joueurs : [], + Boxes :[], + Boards : [], + Chat : [], + Save : [], + wiki:''//, + // maxDiesePion : 0, + // maxDieseBoard : 0, + // maxDieseBac : 0, + // maxDieseGroupe : 0, + // maxDieseBox : 0 + } + + params.NTrashs = results_2[0][0].nombre_trashs; + params.noeud_courant = results_2[0][0].noeud_courant; + + params.action_clic_onboardStr = results_2[1][0].action_clic_onboard; + params.action_scroll_onboardStr = results_2[1][0].action_scroll_onboard; + params.clickable_boardStr = results_2[1][0].clickable_board; + params.click_board_create_type = results_2[1][0].click_board_create_type; + if(params.click_board_create_type === null){ + params.click_board_create_type=-1; + } + params.click_board_move_type = results_2[1][0].click_board_move_type; + if(params.click_board_move_type === null){ + params.click_board_move_type=-1; + } + params.click_board_move_bac = results_2[1][0].click_board_move_bac; + + if(params.click_board_move_bac === null){ + params.click_board_move_bac=-1; + } + + params.tabPionListe = []; + params.tabPionChange = []; + params.tabPionMove = []; + params.tabPionTaille = []; + params.tabPionSvg = []; + + for(var i = 0; i < results_2[2].length; i++){ + params.tabPionListe.push(results_2[2][i].id_pion); + if(results_2[2][i].change_pion === null){ + results_2[2][i].change_pion=-1; + } + params.tabPionChange.push(results_2[2][i].change_pion); + if(results_2[2][i].diese_bac_on_page === null){ + results_2[2][i].diese_bac_on_page=-1; + } + params.tabPionMove.push(results_2[2][i].diese_bac_on_page); + params.tabPionTaille.push(results_2[2][i].taille); + params.tabPionSvg.push(results_2[2][i].svg_pion); + } + + params.objBoxes = []; + var display =''; + for(var i = 0; iparams.maxDieseBox){ + // params.maxDieseBox = results_2[3][i].diese_box_on_page; + // } + } + + params.objBacs = []; + var i=0; + var c=0; + while(i=params.objBacs.length){ + n++; + j = 0; + if(n==2){ + cont=false; + } + } + } + + /*var noeuds_stop = results_2[5][i].noeud_stop.split(',').map(function (x) { + return parseInt(x, 10); + });*/ + var noeuds_stop = results_2[5][i].noeud_stop; + + if( (noeuds.indexOf(results_2[5][i].noeud_start)!= -1) && (intersect(noeuds,noeuds_stop).length===0) ){ + display='actif'; + }else{ + display='inactif'; + } + params.objBacs[j].groupes.push({ + nom : results_2[5][i].nom_pion, + svg : results_2[5][i].svg_pion, + N : results_2[5][i].nombre_pions, + diese : results_2[5][i].diese_pion_on_bac_on_page, + num : results_2[5][i].num_pion_on_bac_on_page, + directed : results_2[5][i].directed, + noeud_start : results_2[5][i].noeud_start, + noeud_stop : results_2[5][i].noeud_stop, + display : display + }); + // if(results_2[5][i].diese_pion_on_bac_on_page>params.maxDieseGroupe){ + // params.maxDieseGroupe = results_2[5][i].diese_pion_on_bac_on_page; + // } + + } + + params.objBoards = []; + var i=0; + var c=0; + while(i=params.objBoards.length){ + n++; + j = 0; + if(n==2){ + cont=false; + } + } + } + /*var noeuds_stop = results_2[7][i].noeud_stop.split(',').map(function (x) { + return parseInt(x, 10); + });*/ + var noeuds_stop = results_2[7][i].noeud_stop; + if( (noeuds.indexOf(results_2[7][i].noeud_start)!= -1) && (intersect(noeuds,noeuds_stop).length===0) ){ + display='actif'; + }else{ + display='inactif'; + } + params.objBoards[j].pions.push({ + nom : results_2[7][i].nom_pion, + svg : results_2[7][i].svg_pion, + x : results_2[7][i].position_x, + y : results_2[7][i].position_y, + height: results_2[7][i].taille, + diese : results_2[7][i].diese_pion_on_board_on_page, + num : results_2[7][i].num_pion_on_board_on_page, + directed : results_2[7][i].directed, + noeud_start : results_2[7][i].noeud_start, + noeud_stop : results_2[7][i].noeud_stop, + display : display + }); + } + + for(var i=0;i=new_y){ + y[j]=y[j]+1; + } + } + + //on ajoute le nouveau y + y.push(new_y) + + //nouvel indice + new_y_ind=y.length-1; + + //on corrige l'epaisseur + var noe = results_2[13][i].noeud_precedent; + while(noe>0){ + epaisseur[noeuds_sui.indexOf(noe)]+=1; + noe=params.Save[noeuds_sui.indexOf(noe)].noeud_precedent; + } + + epais=1; + } + + params.Save.push({ + noeud_precedent : results_2[13][i].noeud_precedent, + noeud_suivant : results_2[13][i].noeud_suivant, + date : results_2[13][i].date, + auteur : results_2[13][i].auteur, + couleur : results_2[13][i].couleur, + label_joueur : results_2[13][i].label_joueur, + x:params.Save[noeuds_sui.indexOf(results_2[13][i].noeud_precedent)].x+1, + y:new_y_ind, + ypre:y_pre_ind, + xpre:params.Save[noeuds_sui.indexOf(results_2[13][i].noeud_precedent)].x + }); + noeuds_sui.push(results_2[13][i].noeud_suivant); + noeuds_pre.push(results_2[13][i].noeud_precedent); + epaisseur.push(epais); + } + + params.SaveYmax=Math.max(...y); + + //on cherche xmax et on remplace les indices de y par les vraies valeurs + xmax=0; + for(var i = 0; ixmax){ + xmax=params.Save[i].x + } + params.Save[i].y = y[params.Save[i].y] + params.Save[i].ypre = y[params.Save[i].ypre] + + } + + params.SaveXmax=xmax; + + res.render('platoo.ejs',params); + } + }); + }); + } +}) + +.use(function(req, res, next){ + res.writeHead(404,{'Content-Type': 'text/plain'}); + res.write('Page not found'); + res.end(); +}); + +//gérer les autres erreurs que 404 +//faire une page 404 + + +//on lance le WebSocket + +io.on('connection',function(socket){ + + //on ajoute la méthode executeSocket + socket.executeSocket=executeSocket; + //socket.runModifJeu=runModifJeu; + //socket.runModifJeuWrap=runModifJeuWrap; + + socket.on('newplatoo',function(nomPlatoo){ + //securiser nomPlatoo + if(typeof nomPlatoo==='string' && pattUrl.test(nomPlatoo)){ + nomPlatoo = nomPlatoo.substring(0,50); + if(socket.nomPlatoo){ + socket.leave(socket.nomPlatoo); + } + socket.nomPlatoo=nomPlatoo; + socket.join(nomPlatoo); + }else{ + console.log("nomPlatoo incorrect"); + socket.emit('refresh'); + } + + }); + + + //supprime la page + //ok + socket.on('delete',function(){ + socket.executeSocket(variables={},needsData=false,errMess='delete',data={},FUN=function(resIP){ + connection.connect((err, client, done) => { + //gere l'erreur et le rollback + const shouldAbort = err => { + if (err) { + console.error('erreur de suppression de la page', err.stack); + client.query('ROLLBACK', err => { + if (err) { + console.log('erreur de suppression de la page : '+err.stack); + } + socket.emit('refresh'); + // release the client back to the pool + done(); + }) + } + return !!err + } + + //les instructions: on démarre l transaction + + client.query('BEGIN', err => { + if (shouldAbort(err)) return + + //un waterfall pour faire toutes les requêtes + async.waterfall([ + function(callback){ + const query={ + text:'DELETE FROM platooschem.stop_pion_on_bac_on_page WHERE id_page = $1 ; ', + values:[resIP[0].id_page] + }; + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results); + resTot=[results.rows]; + id_page=resIP[0].id_page; + callback(null,id_page,resTot); + } + }); + }, + + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_pion_on_board_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.pion_on_bac_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.carac_pions_joueur_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.pion_on_board_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.carac_pions_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_bac_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.bac_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_box_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.box_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_board_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.board_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.chat_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.save_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.joueur_on_page WHERE id_page = $1 ; ', + values:[id_page] + }; + queryChainedClient(client,query,callback,id_page,resTot); + }, + function(id_page,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.page WHERE id_page = $1 ; ', + values:[id_page] + }; + + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results.rows); + resTot.push(results.rows); + id_page=id_page; + callback(null,resTot); + } + }); + } + ],function(err,resTot){ + if(shouldAbort(err)){ + //socket.emit('refresh'); + }else{ + client.query('COMMIT', err => { + if (err) { + console.log('erreur de suppression de la page : '+err.stack); + socket.emit('refresh'); + + }else{ + socket.broadcast.to(socket.nomPlatoo).emit('refresh'); + socket.emit('refresh'); + } + done(); + }); + } + }); + }); + }); + }); + }); + + //remise à zéro de la page + //ok + socket.on('raz',function(){ + socket.executeSocket(variables={},needsData=false,errMess='RAZ',data={},FUN=function(resIP){ + connection.connect((err, client, done) => { + //gere l'erreur et le rollback + const shouldAbort = err => { + if (err) { + console.error('erreur de remise à zéro ', err.stack) + client.query('ROLLBACK', err => { + if (err) { + console.log('erreur de remise à zéro : '+err.stack); + //socket.emit('refresh'); + } + socket.emit('refresh'); + // release the client back to the pool + done(); + }) + } + return !!err + } + + //les instructions: on démarre l transaction + + client.query('BEGIN', err => { + if (shouldAbort(err)) return + + //un waterfall pour faire toutes les requêtes + async.waterfall([ + function(callback){ + const query={ + text:'DELETE FROM platooschem.stop_pion_on_bac_on_page WHERE id_page = $1 ; ', + values:[resIP[0].id_page] + }; + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results.rows); + resTot=[results.rows]; + data={id_page:resIP[0].id_page,id_jeu_depart:resIP[0].id_jeu_depart} + callback(null,data,resTot); + } + }); + }, + + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.pion_on_bac_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_pion_on_board_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.pion_on_board_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.carac_pions_joueur_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.carac_pions_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_bac_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.bac_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_box_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.box_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.stop_board_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.board_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.chat_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.save_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'DELETE FROM platooschem.joueur_on_page WHERE id_page = $1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.joueur_on_page (id_page,id_joueur,label_joueur,action_clic_onboard,action_scroll_onboard,clickable_board,click_board_create_type,click_board_move_type,click_board_move_bac) SELECT $1,id_joueur,label_joueur,action_clic_onboard,action_scroll_onboard,clickable_board,click_board_create_type,click_board_move_type,click_board_move_bac FROM platooschem.joueur_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.save_on_page (id_page,noeud_precedent,noeud_suivant,date,type_action,auteur,couleur,id_joueur) SELECT $1,0,1,CURRENT_TIMESTAMP,\'create\',NULL,NULL,1;', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.box_on_page (id_page,diese_box_on_page,num_box_on_page,id_pion,noeud_start) SELECT $1,'+'diese_box_on_jeu,num_box_on_jeu,id_pion,1 FROM platooschem.box_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.stop_box_on_page (id_page,num_box_on_page,noeud_stop) SELECT $1,num_box_on_jeu,0 FROM platooschem.box_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.bac_on_page (id_page,diese_bac_on_page,num_bac_on_page,label_bac,noeud_start) SELECT $1,'+'diese_bac_on_jeu,num_bac_on_jeu,label_bac,1 FROM platooschem.bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.stop_bac_on_page (id_page,num_bac_on_page,noeud_stop) SELECT $1,num_bac_on_jeu,0 FROM platooschem.bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.board_on_page (id_page,diese_board_on_page,num_board_on_page,id_board,noeud_start) SELECT $1,diese_board_on_jeu,num_board_on_jeu,id_board,1 FROM platooschem.board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.stop_board_on_page (id_page,num_board_on_page,noeud_stop) SELECT $1,num_board_on_jeu,0 FROM platooschem.board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.pion_on_bac_on_page (id_page,diese_bac_on_page,id_pion,nombre_pions,diese_pion_on_bac_on_page,num_pion_on_bac_on_page,noeud_start) SELECT $1,'+'diese_bac_on_jeu,id_pion,nombre_pions,diese_pion_on_bac_on_jeu,num_pion_on_bac_on_jeu,1 FROM platooschem.pion_on_bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.stop_pion_on_bac_on_page (id_page,diese_bac_on_page,num_pion_on_bac_on_page,noeud_stop) SELECT $1,diese_bac_on_jeu,num_pion_on_bac_on_jeu,0 FROM platooschem.pion_on_bac_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.pion_on_board_on_page (id_page,diese_board_on_page,id_pion,position_x,position_y,taille,diese_pion_on_board_on_page,num_pion_on_board_on_page,noeud_start) SELECT $1,'+'diese_board_on_jeu,id_pion,position_x,position_y,taille,diese_pion_on_board_on_jeu,num_pion_on_board_on_jeu,1 FROM platooschem.pion_on_board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.stop_pion_on_board_on_page (id_page,diese_board_on_page,num_pion_on_board_on_page,noeud_stop) SELECT $1,diese_board_on_jeu,num_pion_on_board_on_jeu,0 FROM platooschem.pion_on_board_on_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.carac_pions_page (id_page,id_pion,change_pion,diese_bac_on_page,taille) SELECT $1,id_pion,change_pion,diese_bac_on_jeu,taille FROM platooschem.carac_pions_jeu WHERE id_jeu = $2; ', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + function(data,resTot,callback){ + const query={ + text:'INSERT INTO platooschem.carac_pions_joueur_on_page (id_page,id_joueur,id_pion,change_pion,diese_bac_on_page,taille) SELECT $1,id_joueur,id_pion,change_pion,diese_bac_on_jeu,taille FROM platooschem.carac_pions_joueur_on_jeu WHERE id_jeu = $2;', + values:[data.id_page,data.id_jeu_depart] + }; + queryChainedClient(client,query,callback,data,resTot); + }, + + function(id_page,resTot,callback){ + const query={ + text:'UPDATE platooschem.page SET noeud_courant=1 WHERE id_page = $1; ', + values:[data.id_page] + }; + + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results.rows); + resTot.push(results.rows); + id_page=id_page; + callback(null,resTot); + } + }); + } + ],function(err,resTot){ + if(shouldAbort(err)){ + //socket.emit('refresh'); + }else{ + client.query('COMMIT', err => { + if (err) { + console.log('erreur de remise à zéro : '+err.stack); + socket.emit('refresh'); + }else{ + socket.broadcast.to(socket.nomPlatoo).emit('refresh'); + socket.emit('refresh'); + } + done(); + }); + } + }); + }); + }); + }); + }); + + //ok + socket.on('getAction',function(data){ + socket.executeSocket(variables={id_joueur:1},needsData=true,errMess='getAction',data=data,FUN=function(resIP){ + var query ={ + text: 'SELECT fa.label_fonction AS action_clic_onboard, fb.label_fonction AS action_scroll_onboard, fc.label_fonction AS clickable_board, '+ + 'pa.nom_pion AS click_board_create_type, pb.nom_pion AS click_board_move_type, j.click_board_move_bac '+ + 'FROM platooschem.joueur_on_page j JOIN platooschem.pion pa ON j.click_board_create_type=pa.id_pion JOIN platooschem.pion pb ON j.click_board_move_type=pb.id_pion '+ + 'JOIN platooschem.bdd_fonctions fa ON j.action_clic_onboard = fa.id_fonction JOIN platooschem.bdd_fonctions fb ON j.action_scroll_onboard = fb.id_fonction JOIN platooschem.bdd_fonctions fc ON j.clickable_board = fc.id_fonction '+ + 'WHERE id_page = $1 AND id_joueur = $2; ', + values:[resIP[0].id_page,data.id_joueur] + } + connection.query(query,function(err,res2){ + if(err){ + console.log('erreur de getAction : '+err.stack); + socket.emit('refresh'); + }else{ + var action_clic_onboard =res2.rows[0].action_clic_onboard; + var action_scroll_onboard =res2.rows[0].action_scroll_onboard; + var clickable_board =res2.rows[0].clickable_board; + var click_board_create_type =res2.rows[0].click_board_create_type; + var click_board_move_type =res2.rows[0].click_board_move_type; + var click_board_move_bac =res2.rows[0].click_board_move_bac; + + socket.emit('setAction',{ + action_clic_onboard:action_clic_onboard, + action_scroll_onboard:action_scroll_onboard, + clickable_board:clickable_board, + click_board_create_type:click_board_create_type, + click_board_move_type:click_board_move_type, + click_board_move_bac:click_board_move_bac + }); + } + }); + }); + }); + + //ok + socket.on('chatNew',function(data){ + socket.executeSocket(variables={message:'200', + auteur:'20', + couleur:'20'}, + needsData=true,errMess='chat_new',data=data,FUN=function(resIP){ + connection.connect((err, client, done) => { + //gere l'erreur et le rollback + const shouldAbort = err => { + if (err) { + console.log('erreur de chatNew : '+err.stack); + socket.emit('refresh'); + client.query('ROLLBACK', err => { + if (err) { + console.log('erreur de chatNew : '+err.stack); + } + // release the client back to the pool + done(); + }) + } + return !!err + } + + //les instructions: on démarre l transaction + + client.query('BEGIN', err => { + if (shouldAbort(err)) return + + //un waterfall pour faire toutes les requêtes + async.waterfall([ + function(callback){ + const query={ + text:'INSERT INTO platooschem.chat_on_page (id_page,id_message,auteur,message,couleur,time) '+ + 'SELECT $1,CASE WHEN MAX(id_message) IS NULL THEN 1 ELSE MAX(id_message)+1 END,'+ + '$2,$3,$4,CURRENT_TIMESTAMP FROM platooschem.chat_on_page WHERE id_page = $5; ', + values:[resIP[0].id_page,data.auteur,data.message,data.couleur,resIP[0].id_page] + }; + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results.rows); + res2=[results.rows]; + data={ + auteur:data.auteur, + couleur:data.couleur, + message:data.message, + id_page:resIP[0].id_page + } + callback(null,data,res2); + } + }); + }, + + function(id_page,res2,callback){ + const query={ + text:'SELECT id_message,time FROM platooschem.chat_on_page WHERE id_page = $1 ORDER BY id_message DESC LIMIT 1 ; ', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,res2); + }, + + function(id_page,res2,callback){ + const query={ + text:'DELETE FROM platooschem.chat_on_page WHERE id_page = $1 AND time <'+ + '(SELECT c.time FROM (SELECT time FROM platooschem.chat_on_page WHERE id_page = $2 ORDER BY time DESC LIMIT 1 OFFSET 19 ) AS c) ; ', + values:[data.id_page,data.id_page] + }; + + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + res2.push(results.rows); + //resTot=[results.rows]; + callback(null,res2); + } + }); + }, + function(res2,callback){ + client.query('COMMIT',function(err){ + if(shouldAbort(err)) return + callback(null,res2); + }); + } + ],function(err,res2){ + if(shouldAbort(err)){ + //console.log('erreur cat on page'); + //socket.emit('refresh'); + }else if(res2[1].length>0){ + var time = affTime.exec(res2[1][0].time); + socket.emit('chatNew',{ + message:data.message, + id:res2[1][0].id_message, + auteur:data.auteur, + couleur:data.couleur, + time:time + }); + socket.broadcast.to(socket.nomPlatoo).emit('chatNew',{ + message:data.message, + id:res2[1][0].id_message, + auteur:data.auteur, + couleur:data.couleur, + time:time + }); + done(); + }else{ + console.log('erreur cat on page'); + socket.emit('refresh'); + done(); + } + }); + }); + }); + }); + }); + + //ok + socket.on('getTabPion',function(data){ + socket.executeSocket(variables={id_joueur:1},needsData=true,errMess='getTabPion',data=data,FUN=function(resIP){ + const query={ + text:'SELECT pa.nom_pion AS id_pion,pa.svg_pion AS svg_pion,pb.nom_pion AS change_pion,diese_bac_on_page,c.taille'+ + ' AS taille FROM platooschem.carac_pions_joueur_on_page c JOIN platooschem.pion pa ON c.id_pion=pa.id_pion JOIN platooschem.pion pb ON c.change_pion=pb.id_pion WHERE id_page = $1'+ + ' AND id_joueur = $2;', + values:[resIP[0].id_page,data.id_joueur] + } + connection.query(query, + function(err,res2){ + if(err){ + console.log('erreur de getTabPion : '+err.stack); + socket.emit('refresh'); + }else{ + var tabPionListe =[]; + var tabPionChange =[]; + var tabPionMove =[]; + var tabPionTaille=[]; + var tabPionSvg=[]; + for(var i=0;i { + //gere l'erreur et le rollback + const shouldAbort = err => { + if (err) { + console.log('erreur de ModifJeu1 : '+err.stack); + + client.query('ROLLBACK', err => { + if (err) { + console.log('erreur de ModifJeu2 : '+err.stack); + }else{ + //console.log('rollbackok'); + } + socket.emit('refresh'); + // release the client back to the pool + done(); + }) + } + return !!err + } + + //un waterfall pour faire toutes les requêtes + var Array_waterfall = [ + function(callback){ + //les instructions: on démarre l transaction + client.query('BEGIN',function(err,results){ + if(err){ + callback(err); + }else{ + callback(null); + } + }); + }, + function(callback){ + const query={ + text:'SELECT noeud_precedent,noeud_suivant FROM platooschem.save_on_page WHERE id_page = $1;', + values:[resIP[0].id_page] + }; + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + //resTot.push(results.rows); + resNoeuds=[results.rows]; + data={ + auteur:dataTot.auteur, + couleur:dataTot.couleur, + message:dataTot.message, + noeud_courant:dataTot.noeud_courant, + id_joueur:dataTot.id_joueur, + id_page:resIP[0].id_page + } + callback(null,data,resNoeuds); + } + }); + }, + + function(data,resNoeuds,callback){ + const query={ + text:'INSERT INTO platooschem.save_on_page (id_page,noeud_precedent,noeud_suivant,date,type_action,auteur,couleur,id_joueur) SELECT '+ + '$1,$2,CASE WHEN MAX(noeud_suivant) IS NULL THEN 1 ELSE MAX(noeud_suivant)+1 END,CURRENT_TIMESTAMP,\'add_groupe\',$3,'+ + '$4,$5 FROM platooschem.save_on_page WHERE id_page=$1;', + values:[data.id_page,data.noeud_courant,data.auteur,data.couleur,data.id_joueur] + }; + queryChainedClient(client,query,callback,data,resNoeuds); + }, + function(data,resNoeuds,callback){ + const query={ + text:'UPDATE platooschem.page AS p SET noeud_courant = s.new_noeud'+ + ' FROM (SELECT MAX(id_page) id_p,MAX(noeud_suivant) new_noeud FROM platooschem.save_on_page GROUP BY id_page) AS s '+ + ' WHERE p.id_page=s.id_p AND p.id_page = $1;', + values:[data.id_page] + }; + queryChainedClient(client,query,callback,data,resNoeuds); + }, + + function(data,resNoeuds,callback){ + const query={ + text:'SELECT noeud_courant AS new_noeud,CURRENT_TIMESTAMP AS date FROM platooschem.page WHERE id_page=$1;', + values:[data.id_page] + }; + + client.query(query,function(err,results){ + if(err){ + callback(err); + }else{ + resNoeuds.push(results.rows); + callback(null,resNoeuds); + } + }); + }, + function(resNoeuds,callback){ + emit_broad.push({text:'newNoeud',data:{noeud:resNoeuds[3][0].new_noeud,save:{ + noeud_precedent : resIP[0].noeud_courant, + noeud_suivant : resNoeuds[3][0].new_noeud, + date : resNoeuds[3][0].date, + auteur : resIP[0].auteur, + couleur : resIP[0].couleur, + label_joueur : resIP[0].label_joueur, + x:-1, + y:-1, + xpre:-1, + ypre:-1 + }}}); + emit.push({text:'newNoeud',data:{noeud:resNoeuds[3][0].new_noeud,save:{ + noeud_precedent : resIP[0].noeud_courant, + noeud_suivant : resNoeuds[3][0].new_noeud, + date : resNoeuds[3][0].date, + auteur : resIP[0].auteur, + couleur : resIP[0].couleur, + label_joueur : resIP[0].label_joueur, + x:-1, + y:-1, + xpre:-1, + ypre:-1 + + }}}); + //on calcule les noeuds à ajouter + var noeuds=[resIP[0].noeud_courant]; + var noeuds_suivants=[]; + var noeuds_precedents=[]; + for(var i=0; i< resNoeuds[0].length;i++){ + noeuds_suivants.push(resNoeuds[0][i].noeud_suivant) + } + for(var i=0; i< resNoeuds[0].length;i++){ + noeuds_precedents.push(resNoeuds[0][i].noeud_precedent) + } + + while((noeuds.indexOf(0)==-1) && (noeuds_suivants.indexOf(noeuds[noeuds.length-1])!=-1)){ + noeuds.push(noeuds_precedents[noeuds_suivants.indexOf(noeuds[noeuds.length-1])]); + } + //noeuds=noeuds.toString().replace(/,0/,''); + //noeuds=noeuds.toString().replace(/^0,/,''); + const index = noeuds.indexOf(0); + if (index > -1) { + noeuds.splice(index, 1); + } + + /*noeudsObj = { + noeuds:noeuds, + toPostgres:function(value){ + return noeuds.toString() + } + };*/ + resNoeuds.push(noeuds); + callback(null,resNoeuds); + }]; + //on parcours les différentes requetes qui sont englobées dans le mouvement + var Abort = false; + + var emit = []; + var emit_broad = []; + + var requetes_tot= []; + + var nb_requete = 0; + + for(var i=0;i= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=" + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "isarray": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.1.tgz", + "integrity": "sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4=" + }, + "jake": { + "version": "10.6.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.6.1.tgz", + "integrity": "sha512-pHUK3+V0BjOb1XSi95rbBksrMdIqLVC9bJqDnshVyleYsET3H0XAq+3VB2E3notcYvv4wRdRHn13p7vobG+wfQ==", + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + }, + "mime-types": { + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "requires": { + "mime-db": "1.44.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "object-component": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/object-component/-/object-component-0.0.3.tgz", + "integrity": "sha1-8MaapQ78lbhmwYb0AKM3acsvEpE=" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, + "parseqs": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseqs/-/parseqs-0.0.5.tgz", + "integrity": "sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseuri": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/parseuri/-/parseuri-0.0.5.tgz", + "integrity": "sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo=", + "requires": { + "better-assert": "~1.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "pg": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.0.3.tgz", + "integrity": "sha512-fvcNXn4o/iq4jKq15Ix/e58q3jPSmzOp6/8C3CaHoSR/bsxdg+1FXfDRePdtE/zBb3++TytvOrS1hNef3WC/Kg==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "0.1.3", + "pg-pool": "^3.1.1", + "pg-protocol": "^1.2.2", + "pg-types": "^2.1.0", + "pgpass": "1.x", + "semver": "4.3.2" + } + }, + "pg-connection-string": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", + "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.1.1.tgz", + "integrity": "sha512-kYH6S0mcZF1TPg1F9boFee2JlCSm2oqnlR2Mz2Wgn1psQbEBNVeNTJCw2wCK48QsctwvGUzbxLMg/lYV6hL/3A==" + }, + "pg-protocol": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.2.2.tgz", + "integrity": "sha512-r8hGxHOk3ccMjjmhFJ/QOSVW5A+PP84TeRlEwB/cQ9Zu+bvtZg8Z59Cx3AMfVQc9S0Z+EG+HKhicF1W1GN5Eqg==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", + "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", + "requires": { + "split": "^1.0.0" + } + }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" + }, + "postgres-date": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.5.tgz", + "integrity": "sha512-pdau6GRPERdAYUQwkBnGKxEfPyhVZXG/JiS44iZWiNdSOWE09N2lUgN6yshuq6fVSon4Pm0VMXd1srUUkLe9iA==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", + "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + }, + "socket.io": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-2.3.0.tgz", + "integrity": "sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg==", + "requires": { + "debug": "~4.1.0", + "engine.io": "~3.4.0", + "has-binary2": "~1.0.2", + "socket.io-adapter": "~1.1.0", + "socket.io-client": "2.3.0", + "socket.io-parser": "~3.4.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "socket.io-adapter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz", + "integrity": "sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g==" + }, + "socket.io-client": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-2.3.0.tgz", + "integrity": "sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA==", + "requires": { + "backo2": "1.0.2", + "base64-arraybuffer": "0.1.5", + "component-bind": "1.0.0", + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "engine.io-client": "~3.4.0", + "has-binary2": "~1.0.2", + "has-cors": "1.1.0", + "indexof": "0.0.1", + "object-component": "0.0.3", + "parseqs": "0.0.5", + "parseuri": "0.0.5", + "socket.io-parser": "~3.3.0", + "to-array": "0.1.4" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "socket.io-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.3.0.tgz", + "integrity": "sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~3.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + } + } + }, + "socket.io-parser": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-3.4.0.tgz", + "integrity": "sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ==", + "requires": { + "component-emitter": "1.2.1", + "debug": "~4.1.0", + "isarray": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "split": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "requires": { + "through": "2" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "to-array": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/to-array/-/to-array-0.1.4.tgz", + "integrity": "sha1-F+bBH3PdTz10zaek/zI46a2b+JA=" + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "ws": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.2.5.tgz", + "integrity": "sha512-C34cIU4+DB2vMyAbmEKossWq2ZQDr6QEyuuCzWrM9zfw1sGc0mYiJ0UnG9zzNykt49C2Fi34hvr2vssFQRS6EA==" + }, + "xmlhttprequest-ssl": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz", + "integrity": "sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "yeast": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/yeast/-/yeast-0.1.2.tgz", + "integrity": "sha1-AI4G2AlDIMNy28L47XagymyKxBk=" + } + } +} diff --git a/package.json b/package.json new file mode 100755 index 0000000..391da34 --- /dev/null +++ b/package.json @@ -0,0 +1,16 @@ +{ + "name": "platoo", + "version": "1.0.0", + "date": "02/05/2020", + "dependencies": { + "async": "^3.2.0", + "body-parser": "^1.19.0", + "ejs": "^3.1.2", + "express": "^4.17.1", + "pg": "", + "socket.io": "^2.3.0" + }, + "author": "Victor Moinard", + "description": "Un site de jeu de platoo partage en temps reelle", + "license": "GPL-3.0-or-later" +} diff --git a/public/css/accueil.css b/public/css/accueil.css new file mode 100755 index 0000000..31cd109 --- /dev/null +++ b/public/css/accueil.css @@ -0,0 +1,107 @@ +html, button, input +{ + color : rgb(40,50,80); + font-size : 1.1em; +} + +html +{ + display : flex; + background-color : rgb(150,230,150); + flex-direction : column; + align-content : space-between; +} + +header +{ + text-align : center; + margin-bottom : 20px; +} + +section +{ + margin : 20px; + display : flex; + flex-direction : column; + justify-content : space-between; + align-items : center; + +} + +form +{ + width : 75%; + display : flex; + flex-direction : column; + justify-content : space-between; + align-items : flex-start; + border : 3px solid rgb(40,50,80); +} + +label +{ + margin-left : 5px; + margin-right : 5px; +} + +.groupe_form +{ + display : flex; + flex-direction : column; + justify-content : flex-start; + align-items : baseline; + margin : 10px; + padding : 0px; +} + +.ligne_form +{ + display : flex; + flex-direction : row; + justify-content : flex-start; + align-items : baseline; + margin : 0px; + padding : 0px; +} + +.ligne_form label:first-child +{ + margin-left : 0px; + +} + +.err_form +{ + margin : 0px; + padding : 0px; + color : rgb(130,20,20); +} + +.msgerr +{ + margin : 0px; + padding : 0px; +} + +#creer +{ + align-self : center +} + + + +p +{ + text-align : justify; +} + +#presentation +{ + width : 75%; +} + +footer +{ + text-align : center; + margin-top : 30px; +} \ No newline at end of file diff --git a/public/css/platoo.css b/public/css/platoo.css new file mode 100755 index 0000000..f676ca0 --- /dev/null +++ b/public/css/platoo.css @@ -0,0 +1,1000 @@ +/*Généralité*/ + +html, button, input +{ + color : rgb(40,50,80); + font-size : 0.8em; + font-family : Georgia, sans-serif; +} + +input[value=button] +{ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +img +{ + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +*{ + box-sizing:border-box; +} + +html +{ + height : 99%; + margin:0px; +} + + +body +{ + background-color : rgb(230,230,210); + margin: 0px; + height : 100%; +} + + + +./*drag-allowed +{ + display : flex; + align-content : space-between; + justify-content : space-between; + margin:0px; + position:relative; + width: 85%; + height : 100%; +}*/ +/*.menu-chat +{ + display : flex; + flex-direction : column; + align-content : space-between; + width : 15%; + position:fixed; + background-color:rgb(200,250,200); + background-attachment: fixed; + min-width: 150px; +}*/ +/*.spinner +{ + border:none; + background:none; + outline:none; + display:block; + font-size: 35px; + padding:0px; +}*/ + + +/* Boxes */ + + +.boxes +{ + display : flex; + flex-direction : column; + flex-wrap : wrap; + align-content : space-between; + margin-right : 10px; +} + +.box.actif +{ + background-color: rgb(150,150,150); + border-radius: 12px; + max-height: 45px; + max-width:45px; + display: flex; + margin: 3px; + padding: 3px; + justify: space-between; + justify-content: top; +} + +.pion-onbox +{ + max-height: 90%; + margin: 3px; + z-index:1; + max-width : 90%; +} + +/* +.pion-onbox:hover +{ + height: 43px; + margin: 0px; +}*/ + + +/* +.del-box +{ + height: 15px; + margin-right: 0px; +} + +.del-box:hover +{ + height:17px; + margin-right:-2px +}*/ + + +/* Boards */ + +.boards +{ + display : flex; + flex-wrap: wrap; + justify-content:space-between; +} + +.board-content.actif +{ + max-width:100%; + max-height:100%; + margin: 0px; + padding: 0px; + display:flex; + align-items:flex-start; +} + +.board +{ + max-width:calc(100% - 20px); + max-height:100%; + margin:0px; + padding:0px; + position:relative; + overflow:invisible; +} + +.board-svg.actif + { + position:relative; + min-width : 200px; + min-height : 200px; + max-width:100%; + max-height:100%; + top:0px; + left:0px; +} +.pion-onboard.actif +{ + position: absolute; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + z-index:1; + display:block; + /*overflow:scroll;*/ +} + +.board-action +{ + width : 20px; +} + +.bouton-board + { + height:15px; + margin-left:2px; + } + + .bouton-board:hover + { + height:17px; + margin-left:0px; + } + + .fleche:hover + { + height:15px; + margin-left:2px; + } + +/* Bacs */ + +.bacs +{ + display : flex; + flex-direction : column; + align-content : space-between; +} + +.trash +{ + border : 3px solid rgb(130,20,20); + height : 50px; + margin : 10px; + min-width : 90px; + min-height:50px; +} + +.bac +{ + margin : 10px; + margin-top:0px; +} + +.bacBordure +{ + border : 3px solid rgb(40,50,80); + min-height : 50px; + min-width : 90px; + display: flex; + flex-wrap: wrap; +} + + + + +.del-groupe, .edit-groupe, .edit-bac +{ + height:15px; + margin-left:2px; +} + +.del-groupe:hover, .edit-groupe:hover, .edit-bac:hover +{ + height:17px; + margin-left:0px; +} + + +.pion-onbac +{ + height: 35px; + z-index:1; +} +/* +.pion-onbac:hover +{ + height: 38px; + margin-right:-3px; +}*/ + +.groupe-onbac.actif +{ + background-color: rgb(150,150,150); + border-radius: 12px; + height: 40px; + max-width:100%; + display: flex; + align-items: center; + margin: 3px; + padding: 3px; + justify: space-between; + justify-content: center; +} + +.nb-pions-onbac +{ + font-size: 35px; + display: block; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + margin-left: 3px; + margin-top: 23px; +} + +.inputN input +{ + font-size: 35px; + background-color: rgba(0,0,0,0); + border: solid 0px rgb(200,0,0); +} + +.inputLabelBac input +{ + background-color: rgba(0,0,0,0); + border: solid 0px rgb(200,0,0); +} + +.inputN, .inputLabelBac +{ + display:none; +} + +.boutons-groupe +{ + display: flex; + flex-direction : column; + height: 100%; + justify-content: space-between; +} + +/* arbre*/ + +.noeudAutre +{ + fill:black; + r:7px; +} + + +.noeudCourant +{ + fill:rgb(255,0,0); + r:7px; +} + + +.noeudAutre:hover +{ + r:9px; +} + +/* actif inactif*/ + +.inactif +{ + display:none; +} + +/* Barre de choix */ + +.barre-choix +{ + display : flex; + margin-bottom : -3px; + padding: 2px; + justify-content: space-around; + +} + +.bouton-barre +{ + display:none; +} + + +/* Chat */ + +.chat +{ + border : 1px solid rgb(0,0,0); +} + +#formChat +{ + display:block; + height:20px; + margin:3px; + width:100%; +} + +#texte-chat +{ + display : block; + height: calc(100% - 30px); + overflow-y:scroll; +} + +#texteChat +{ + width:90%; +} + +.message-chat +{ + font-size:10px; + margin:0px; + padding:3px; +} + +.head-chat +{ + width:100%; + margin:0px; +} + +.date-chat +{ + font-style:italic; + text-align:right; + float:right; +} + +.auteur-chat +{ + font-weight:bold; + text-align:left; + float:left; +} + +.texte-chat +{ + margin:0px; +} + + + +/* Menu */ + +.menu-rang1 +{ + display : flex; + justify-content: flex-start; + align-items : center; + flex-direction : row; + background-color:rgb(40,50,80); + justify-content:space-between; +} + +.GpeOption +{ + height:95%; + display:flex; + align-content:center; + align-items:center; + border: solid 1px rgb(255,255,255); + border-top:none; + border-bottom:none; +} + +.button-menu +{ + display:flex; + height:100%; + background-color:transparent; + border:none; + -moz-appearance:none; + margin:0px; + cursor:pointer; + align-items:center; +} +.button-menu:hover +{ + background-color : rgb(255,255,255); +} + +.img-menu +{ + display:block; + height:100%; + color:rgb(204,204,204); + font-size:15px; + margin:0px; + font-weight:bold; +} + +.button-menu > p +{ + margin-top:0px; + height:30px; +} + +#Btn-chatmenu > p > span +{ + border:solid 5px rgb(204,204,204); +} + +#Btn-annuler_delete_element +{ + display:none; +} + +/*.menu-rang2 +{ + display:none; +}*/ + +.sous-menu +{ + display:none; + /*display:flex;*/ + border:solid 1px rgb(0,0,0); + z-index:10; + background-color:rgb(255,255,255); + align-items:center; + justify-content:space-around; + padding:5px; + flex-wrap:wrap; + max-width:100%; +} + +#add2>form +{ + display:flex; + flex-direction:column; +} + +#add2>form>* +{ + margin-top:3px; + margin-bottom:3px; +} + +.sous-menu > * +{ + margin:5px; +} + +.sous-menu > input[type=text] +{ + height:20px; +} + +#erase2, #raz2, #delete2, #menuchat2 +{ + flex-direction:row; + justify-content:flex-start; +} + +#add2 +{ + flex-direction:row; + justify-content:space-around; +} + + + +/***************************************************************************************************************************/ + +body +{ + +} + +.barre-choix +{ + display:flex; + flex-wrap:wrap; + position:fixed; + right:0px; + top:50px; + width:200px; + height:48px; + margin-bottom:2px; + background-color:rgb(200,10,80); +} + +.menu-rang1 +{ + height:48px; + width:100%; + position:fixed; + top:0px; + left:0px; + margin-bottom:2px; +} + +img.img-menu +{ + height:48px; + width:48px; +} + +.sous-menu +{ + position:fixed; + top:48px; + left:0px; + min-height:50px; +} + +.chat +{ + position:fixed; + right:0px; + width:150px; + height:calc(100% - 75px); + top:75px; +} + +.arbre +{ + display:none; + position:fixed; + right:0px; + width:150px; + height:calc(100% - 75px); + top:75px; + overflow-y:scroll; + overflow-x:scroll; +} + +.drag +{ + position:relative; + left:0px; + top:50px; + height:calc(100% - 50px); + width:calc(100% - 150px); + display:flex; + flex-direction:row; + align-content : space-between; + justify-content : space-between; +} + +.boxes +{ + /*position:relative;*/ + overflow-y:auto; + /*left:0px;*/ + /*top:0px;*/ + height:100%; + width:70px; +} + + +.bacs +{ + /*right:0px;*/ + overflow-y:auto; + width:200px; + height:100%; + min-width:200px; + /*top:0px;*/ +} + +.boards +{ + /*position:relative;*/ + overflow-y:auto; + /*left:70px;*/ + /*width:calc(100% - 270px);*/ + height:100%; + /*top:0px;*/ +} + +.board-content +{ + max-height:98%; +} + +#BB-arbre, #BB-chat +{ + display:block; +} + +/***************************************************************************************************************************/ +@media (max-width:800px) +{ + .chat + { + display:none; + position:fixed; + right:0px; + width:200px; + height:calc(100% - 100px); + top:100px; + } + .drag + { + width:100%; + } + + .bacs + { + margin-top:50px; + width:200px; + height:calc(100% - 50px); + min-width:200px; + } + + .barre-choix + { + display:flex; + flex-wrap:wrap; + position:fixed; + right:0px; + top:50px; + width:200px; + height:48px; + margin-bottom:2px; + background-color:rgb(200,10,80); + } + + /*#BB-bacs2, #BB-chat2 + { + display:block; + }*/ + + #BB-bacs, #BB-chat, #BB-arbre + { + display:block; + } +} + +/***************************************************************************************************************************/ + +@media (max-width:700px) +{ + .menu-rang1 + { + height:23px; + } + + img.img-menu + { + height:21px; + width:21px; + } + + .sous-menu + { + position:fixed; + top:23px; + left:0px; + min-height:24px; + } + + .chat + { + height:calc(100% - 50px); + top:50px; + } + + .drag + { + top:25px; + height:calc(100% - 25px); + } + + .barre-choix + { + top:25px; + height:23px; + } + + .bacs + { + margin-top:25px; + height:calc(100% - 25px); + } + p.img-menu + { + font-size:10px; + padding-top:5px; + } + +} + +/***************************************************************************************************************************/ + + +@media (max-width:600px) +{ + .boxes + { + display:none; + width:200px; + flex-direction:column; + flex-wrap:wrap; + order:3; + margin-top:50px; + height:calc(100% - 50px); + width:150px; + } + + + .barre-choix + { + width:150px; + } + .bacs + { + width:150px; + min-width:150px; + } + .chat + { + width:150px; + } + + .trash + { + height : 28px; + margin : 7px; + min-width : 50px; + min-height:28px; + } + + .bac + { + margin : 7px; + margin-top:0px; + } + + .bacBordure + { + min-height : 28px; + min-width : 50px; + } + + .del-groupe, .edit-groupe, .edit-bac + { + height:10px; + margin-left:2px; + } + + .del-groupe:hover, .edit-groupe:hover, .edit-bac:hover + { + height:12px; + margin-left:0px; + } + + .pion-onbac + { + height: 20px; + } + + .groupe-onbac + { + border-radius: 8px; + height: 25px; + max-width:100%; + margin: 2px; + padding: 2px; + } + + .nb-pions-onbac + { + font-size: 20px; + margin-left: 2px; + margin-top: 15px; + } + + .inputN input + { + font-size: 20px; + } + + /*#BB-boxes3, #BB-bacs3, #BB-chat3 + { + display:block; + } + #BB-bacs2, #BB-chat2 + { + display:none; + }*/ + #BB-boxes + { + display:block; + } + +} + +/***************************************************************************************************************************/ + + +@media (max-width:400px) +{ + + .box + { + border-radius: 8px; + max-height: 30px; + max-width:30px; + display: flex; + margin: 2px; + padding: 2px; + } + + .barre-choix + { + height:23px; + width:100%; + position:fixed; + top:0px; + left:0px; + margin-bottom:2px; + } + + .drag + { + position:relative; + left:0px; + top:25px; + height:calc(100% - 25px); + width:100%; + flex-direction:column; + justify-content : flex-start; + } + + .boxes + { + /*display:flex;*/ + width:100%; + max-height:75px; + flex-direction:row; + order:0; + margin-top:0px; + display:none; + } + + .bacs + { + width:100%; + max-height:75px; + margin-top:0px; + min-width:0px; + flex-direction:row; + flex-wrap:wrap; + /*display:none;*/ + } + + .bacBordure + { + min-width : 50px; + } + .trash + { + min-width : 50px; + } + + + .boards + { + order:2; + } + + .chat + { + position:fixed; + width:150px; + top:auto; + bottom:0px; + right:0px; + height:200px; + /*display:block;*/ + z-index:30; + background-color: rgb(230,230,210); + } + + .menu-rang1 + { + display:none; + top:25px; + height:auto; + max-height:50px; + flex-wrap:wrap; + margin:0px; + } + + .GpeOption + { + height:23px; + margin-bottom:1px; + margin-top:1px; + border-top: solid 1px rgb(255,255,255); + border-bottom: solid 1px rgb(255,255,255); + } + + .sous-menu + { + top:75px; + } + + /*#BB-menu4, #BB-boxes4, #BB-bacs4, #BB-chat4 + { + display:block; + } + #BB-boxes3, #BB-bacs3, #BB-chat3 + { + display:none; + }*/ + #BB-menu, #BB-chat4 + { + display:block; + } + #BB-chat + { + display:none; + } +} diff --git a/public/images/boards/baghChal.svg b/public/images/boards/baghChal.svg new file mode 100755 index 0000000..dfdc3c8 --- /dev/null +++ b/public/images/boards/baghChal.svg @@ -0,0 +1,31 @@ + + + +Bagh Chal + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/baghChalOld.svg b/public/images/boards/baghChalOld.svg new file mode 100755 index 0000000..3afc51a --- /dev/null +++ b/public/images/boards/baghChalOld.svg @@ -0,0 +1,27 @@ + + + +Bagh Chal + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/dame.svg b/public/images/boards/dame.svg new file mode 100755 index 0000000..88d5067 --- /dev/null +++ b/public/images/boards/dame.svg @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/echec-reverse.svg b/public/images/boards/echec-reverse.svg new file mode 100755 index 0000000..21bb62a --- /dev/null +++ b/public/images/boards/echec-reverse.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/echec.svg b/public/images/boards/echec.svg new file mode 100755 index 0000000..9058181 --- /dev/null +++ b/public/images/boards/echec.svg @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/go13.svg b/public/images/boards/go13.svg new file mode 100755 index 0000000..59e5341 --- /dev/null +++ b/public/images/boards/go13.svg @@ -0,0 +1,47 @@ + + + +go13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/go19.svg b/public/images/boards/go19.svg new file mode 100755 index 0000000..f077816 --- /dev/null +++ b/public/images/boards/go19.svg @@ -0,0 +1,60 @@ + + + +go19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/go9.svg b/public/images/boards/go9.svg new file mode 100755 index 0000000..73a73a1 --- /dev/null +++ b/public/images/boards/go9.svg @@ -0,0 +1,34 @@ + + + +go9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boards/shogi.svg b/public/images/boards/shogi.svg new file mode 100755 index 0000000..24c4799 --- /dev/null +++ b/public/images/boards/shogi.svg @@ -0,0 +1,30 @@ + + + +棋盤 + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boutons/Btnadd.svg b/public/images/boutons/Btnadd.svg new file mode 100755 index 0000000..29308f2 --- /dev/null +++ b/public/images/boutons/Btnadd.svg @@ -0,0 +1,76 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/public/images/boutons/add.svg b/public/images/boutons/add.svg new file mode 100755 index 0000000..80547ea --- /dev/null +++ b/public/images/boutons/add.svg @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/public/images/boutons/changejeu.svg b/public/images/boutons/changejeu.svg new file mode 100755 index 0000000..41e6524 --- /dev/null +++ b/public/images/boutons/changejeu.svg @@ -0,0 +1,71 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/public/images/boutons/chat.svg b/public/images/boutons/chat.svg new file mode 100755 index 0000000..3d5de4a --- /dev/null +++ b/public/images/boutons/chat.svg @@ -0,0 +1,74 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/public/images/boutons/couppre.svg b/public/images/boutons/couppre.svg new file mode 100755 index 0000000..7047ff3 --- /dev/null +++ b/public/images/boutons/couppre.svg @@ -0,0 +1,168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/public/images/boutons/del.svg b/public/images/boutons/del.svg new file mode 100755 index 0000000..f2f013f --- /dev/null +++ b/public/images/boutons/del.svg @@ -0,0 +1,66 @@ + +image/svg+xml + + + + \ No newline at end of file diff --git a/public/images/boutons/delete.svg b/public/images/boutons/delete.svg new file mode 100755 index 0000000..7b0d2c9 --- /dev/null +++ b/public/images/boutons/delete.svg @@ -0,0 +1,55 @@ + + + + + Svg Vector Icons : http://www.onlinewebfonts.com/icon image/svg+xml + + \ No newline at end of file diff --git a/public/images/boutons/edit.svg b/public/images/boutons/edit.svg new file mode 100755 index 0000000..3b4ede9 --- /dev/null +++ b/public/images/boutons/edit.svg @@ -0,0 +1,81 @@ + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/public/images/boutons/erase.svg b/public/images/boutons/erase.svg new file mode 100755 index 0000000..8f68a19 --- /dev/null +++ b/public/images/boutons/erase.svg @@ -0,0 +1,130 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/public/images/boutons/fleche.svg b/public/images/boutons/fleche.svg new file mode 100755 index 0000000..e2da648 --- /dev/null +++ b/public/images/boutons/fleche.svg @@ -0,0 +1,156 @@ + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/public/images/boutons/home.svg b/public/images/boutons/home.svg new file mode 100755 index 0000000..e5e87f2 --- /dev/null +++ b/public/images/boutons/home.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/public/images/boutons/info.svg b/public/images/boutons/info.svg new file mode 100644 index 0000000..1cb2182 --- /dev/null +++ b/public/images/boutons/info.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + i + + diff --git a/public/images/boutons/joueur.svg b/public/images/boutons/joueur.svg new file mode 100755 index 0000000..5cc592e --- /dev/null +++ b/public/images/boutons/joueur.svg @@ -0,0 +1,67 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/public/images/boutons/modedel.svg b/public/images/boutons/modedel.svg new file mode 100755 index 0000000..d9a9e6c --- /dev/null +++ b/public/images/boutons/modedel.svg @@ -0,0 +1,70 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/public/images/boutons/modejeu.svg b/public/images/boutons/modejeu.svg new file mode 100755 index 0000000..d2b6c11 --- /dev/null +++ b/public/images/boutons/modejeu.svg @@ -0,0 +1,49 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/public/images/boutons/raz.svg b/public/images/boutons/raz.svg new file mode 100755 index 0000000..71d00e9 --- /dev/null +++ b/public/images/boutons/raz.svg @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/public/images/boutons/turnleft.svg b/public/images/boutons/turnleft.svg new file mode 100755 index 0000000..4d06c30 --- /dev/null +++ b/public/images/boutons/turnleft.svg @@ -0,0 +1,173 @@ + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/public/images/boutons/turnright.svg b/public/images/boutons/turnright.svg new file mode 100755 index 0000000..53e40db --- /dev/null +++ b/public/images/boutons/turnright.svg @@ -0,0 +1,173 @@ + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/public/images/boutons/turnup.svg b/public/images/boutons/turnup.svg new file mode 100755 index 0000000..8c55c8a --- /dev/null +++ b/public/images/boutons/turnup.svg @@ -0,0 +1,155 @@ + +image/svg+xml + + + + + + \ No newline at end of file diff --git a/public/images/boutons/wiki.svg b/public/images/boutons/wiki.svg new file mode 100755 index 0000000..edcd19d --- /dev/null +++ b/public/images/boutons/wiki.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + W + + diff --git a/public/images/pions/baghChal_chevre.svg b/public/images/pions/baghChal_chevre.svg new file mode 100755 index 0000000..0950724 --- /dev/null +++ b/public/images/pions/baghChal_chevre.svg @@ -0,0 +1,51 @@ + +image/svg+xml + + \ No newline at end of file diff --git a/public/images/pions/baghChal_tigre.svg b/public/images/pions/baghChal_tigre.svg new file mode 100755 index 0000000..bcf8348 --- /dev/null +++ b/public/images/pions/baghChal_tigre.svg @@ -0,0 +1,95 @@ + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/public/images/pions/dame_blanc.svg b/public/images/pions/dame_blanc.svg new file mode 100755 index 0000000..2188010 --- /dev/null +++ b/public/images/pions/dame_blanc.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/public/images/pions/dame_dame_blanc.svg b/public/images/pions/dame_dame_blanc.svg new file mode 100755 index 0000000..c149aa9 --- /dev/null +++ b/public/images/pions/dame_dame_blanc.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/public/images/pions/dame_dame_noir.svg b/public/images/pions/dame_dame_noir.svg new file mode 100755 index 0000000..54ce947 --- /dev/null +++ b/public/images/pions/dame_dame_noir.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/public/images/pions/dame_noir.svg b/public/images/pions/dame_noir.svg new file mode 100755 index 0000000..cd3c9cb --- /dev/null +++ b/public/images/pions/dame_noir.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/public/images/pions/echec_cavalier_blanc.svg b/public/images/pions/echec_cavalier_blanc.svg new file mode 100755 index 0000000..e1c4c7c --- /dev/null +++ b/public/images/pions/echec_cavalier_blanc.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/public/images/pions/echec_cavalier_noir.svg b/public/images/pions/echec_cavalier_noir.svg new file mode 100755 index 0000000..73b94c1 --- /dev/null +++ b/public/images/pions/echec_cavalier_noir.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/public/images/pions/echec_dame_blanc.svg b/public/images/pions/echec_dame_blanc.svg new file mode 100755 index 0000000..ac5f7be --- /dev/null +++ b/public/images/pions/echec_dame_blanc.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/public/images/pions/echec_dame_noir.svg b/public/images/pions/echec_dame_noir.svg new file mode 100755 index 0000000..0904f84 --- /dev/null +++ b/public/images/pions/echec_dame_noir.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/public/images/pions/echec_fou_blanc.svg b/public/images/pions/echec_fou_blanc.svg new file mode 100755 index 0000000..434ab6f --- /dev/null +++ b/public/images/pions/echec_fou_blanc.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/public/images/pions/echec_fou_noir.svg b/public/images/pions/echec_fou_noir.svg new file mode 100755 index 0000000..fef2fa2 --- /dev/null +++ b/public/images/pions/echec_fou_noir.svg @@ -0,0 +1,10 @@ + + + + + + + + diff --git a/public/images/pions/echec_pion_blanc.svg b/public/images/pions/echec_pion_blanc.svg new file mode 100755 index 0000000..50fe5c4 --- /dev/null +++ b/public/images/pions/echec_pion_blanc.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/public/images/pions/echec_pion_noir.svg b/public/images/pions/echec_pion_noir.svg new file mode 100755 index 0000000..7233367 --- /dev/null +++ b/public/images/pions/echec_pion_noir.svg @@ -0,0 +1,8 @@ + + + + + + diff --git a/public/images/pions/echec_roi_blanc.svg b/public/images/pions/echec_roi_blanc.svg new file mode 100755 index 0000000..bb69b8e --- /dev/null +++ b/public/images/pions/echec_roi_blanc.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/public/images/pions/echec_roi_noir.svg b/public/images/pions/echec_roi_noir.svg new file mode 100755 index 0000000..7847fb1 --- /dev/null +++ b/public/images/pions/echec_roi_noir.svg @@ -0,0 +1,8 @@ + + + + + diff --git a/public/images/pions/echec_tour_blanc.svg b/public/images/pions/echec_tour_blanc.svg new file mode 100755 index 0000000..877447c --- /dev/null +++ b/public/images/pions/echec_tour_blanc.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/public/images/pions/echec_tour_noir.svg b/public/images/pions/echec_tour_noir.svg new file mode 100755 index 0000000..3f3e2c1 --- /dev/null +++ b/public/images/pions/echec_tour_noir.svg @@ -0,0 +1,9 @@ + + + + + diff --git a/public/images/pions/go_blanc.svg b/public/images/pions/go_blanc.svg new file mode 100755 index 0000000..c779f4d --- /dev/null +++ b/public/images/pions/go_blanc.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/public/images/pions/go_noir.svg b/public/images/pions/go_noir.svg new file mode 100755 index 0000000..9a157f8 --- /dev/null +++ b/public/images/pions/go_noir.svg @@ -0,0 +1,6 @@ + + + + + diff --git a/public/images/pions/shogi_cavalier_nord.svg b/public/images/pions/shogi_cavalier_nord.svg new file mode 100755 index 0000000..80a1518 --- /dev/null +++ b/public/images/pions/shogi_cavalier_nord.svg @@ -0,0 +1,14 @@ + + + +桂馬 + + + + + + + + + + diff --git a/public/images/pions/shogi_cavalier_or_nord.svg b/public/images/pions/shogi_cavalier_or_nord.svg new file mode 100755 index 0000000..bebe053 --- /dev/null +++ b/public/images/pions/shogi_cavalier_or_nord.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_cavalier_or_sud.svg b/public/images/pions/shogi_cavalier_or_sud.svg new file mode 100755 index 0000000..214a904 --- /dev/null +++ b/public/images/pions/shogi_cavalier_or_sud.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_cavalier_sud.svg b/public/images/pions/shogi_cavalier_sud.svg new file mode 100755 index 0000000..6e0bebd --- /dev/null +++ b/public/images/pions/shogi_cavalier_sud.svg @@ -0,0 +1,12 @@ + + +桂馬 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_cheval_dragon_nord.svg b/public/images/pions/shogi_cheval_dragon_nord.svg new file mode 100755 index 0000000..05ebf9c --- /dev/null +++ b/public/images/pions/shogi_cheval_dragon_nord.svg @@ -0,0 +1,12 @@ + + +龍馬 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_cheval_dragon_sud.svg b/public/images/pions/shogi_cheval_dragon_sud.svg new file mode 100755 index 0000000..ed52fda --- /dev/null +++ b/public/images/pions/shogi_cheval_dragon_sud.svg @@ -0,0 +1,12 @@ + + +龍馬 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_dragon_nord.svg b/public/images/pions/shogi_dragon_nord.svg new file mode 100755 index 0000000..c209938 --- /dev/null +++ b/public/images/pions/shogi_dragon_nord.svg @@ -0,0 +1,12 @@ + + +龍王 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_dragon_sud.svg b/public/images/pions/shogi_dragon_sud.svg new file mode 100755 index 0000000..fe82e61 --- /dev/null +++ b/public/images/pions/shogi_dragon_sud.svg @@ -0,0 +1,12 @@ + + +龍王 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_fou_nord.svg b/public/images/pions/shogi_fou_nord.svg new file mode 100755 index 0000000..2b50a73 --- /dev/null +++ b/public/images/pions/shogi_fou_nord.svg @@ -0,0 +1,14 @@ + + + +角行 + + + + + + + + + + diff --git a/public/images/pions/shogi_fou_sud.svg b/public/images/pions/shogi_fou_sud.svg new file mode 100755 index 0000000..2d69dcb --- /dev/null +++ b/public/images/pions/shogi_fou_sud.svg @@ -0,0 +1,12 @@ + + +角行 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_general_argent_nord.svg b/public/images/pions/shogi_general_argent_nord.svg new file mode 100755 index 0000000..111f233 --- /dev/null +++ b/public/images/pions/shogi_general_argent_nord.svg @@ -0,0 +1,14 @@ + + + +銀將 + + + + + + + + + + diff --git a/public/images/pions/shogi_general_argent_or_nord.svg b/public/images/pions/shogi_general_argent_or_nord.svg new file mode 100755 index 0000000..d2c009d --- /dev/null +++ b/public/images/pions/shogi_general_argent_or_nord.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_general_argent_or_sud.svg b/public/images/pions/shogi_general_argent_or_sud.svg new file mode 100755 index 0000000..2e9ca0b --- /dev/null +++ b/public/images/pions/shogi_general_argent_or_sud.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_general_argent_sud.svg b/public/images/pions/shogi_general_argent_sud.svg new file mode 100755 index 0000000..95f4c28 --- /dev/null +++ b/public/images/pions/shogi_general_argent_sud.svg @@ -0,0 +1,12 @@ + + +銀將 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_general_or_nord.svg b/public/images/pions/shogi_general_or_nord.svg new file mode 100755 index 0000000..ebf55bf --- /dev/null +++ b/public/images/pions/shogi_general_or_nord.svg @@ -0,0 +1,14 @@ + + + +金將 + + + + + + + + + + diff --git a/public/images/pions/shogi_general_or_sud.svg b/public/images/pions/shogi_general_or_sud.svg new file mode 100755 index 0000000..79691a9 --- /dev/null +++ b/public/images/pions/shogi_general_or_sud.svg @@ -0,0 +1,12 @@ + + +金將 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_jade_nord.svg b/public/images/pions/shogi_jade_nord.svg new file mode 100755 index 0000000..ab7a24f --- /dev/null +++ b/public/images/pions/shogi_jade_nord.svg @@ -0,0 +1,14 @@ + + + +玉將 + + + + + + + + + + diff --git a/public/images/pions/shogi_jade_sud.svg b/public/images/pions/shogi_jade_sud.svg new file mode 100755 index 0000000..03e54b6 --- /dev/null +++ b/public/images/pions/shogi_jade_sud.svg @@ -0,0 +1,14 @@ + + + +玉將 + + + + + + + + + + diff --git a/public/images/pions/shogi_lance_nord.svg b/public/images/pions/shogi_lance_nord.svg new file mode 100755 index 0000000..dd34c5e --- /dev/null +++ b/public/images/pions/shogi_lance_nord.svg @@ -0,0 +1,14 @@ + + + +香車 + + + + + + + + + + diff --git a/public/images/pions/shogi_lance_or_nord.svg b/public/images/pions/shogi_lance_or_nord.svg new file mode 100755 index 0000000..d2f9319 --- /dev/null +++ b/public/images/pions/shogi_lance_or_nord.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_lance_or_sud.svg b/public/images/pions/shogi_lance_or_sud.svg new file mode 100755 index 0000000..5922ad9 --- /dev/null +++ b/public/images/pions/shogi_lance_or_sud.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_lance_sud.svg b/public/images/pions/shogi_lance_sud.svg new file mode 100755 index 0000000..ce2fd44 --- /dev/null +++ b/public/images/pions/shogi_lance_sud.svg @@ -0,0 +1,12 @@ + + +香車 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_pion_nord.svg b/public/images/pions/shogi_pion_nord.svg new file mode 100755 index 0000000..31e314e --- /dev/null +++ b/public/images/pions/shogi_pion_nord.svg @@ -0,0 +1,14 @@ + + + +歩兵 + + + + + + + + + + diff --git a/public/images/pions/shogi_pion_or_nord.svg b/public/images/pions/shogi_pion_or_nord.svg new file mode 100755 index 0000000..096d36e --- /dev/null +++ b/public/images/pions/shogi_pion_or_nord.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_pion_or_sud.svg b/public/images/pions/shogi_pion_or_sud.svg new file mode 100755 index 0000000..fce28ff --- /dev/null +++ b/public/images/pions/shogi_pion_or_sud.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_pion_sud.svg b/public/images/pions/shogi_pion_sud.svg new file mode 100755 index 0000000..b5d7d2d --- /dev/null +++ b/public/images/pions/shogi_pion_sud.svg @@ -0,0 +1,12 @@ + + +歩兵 + + + + + + + + + \ No newline at end of file diff --git a/public/images/pions/shogi_roi_nord.svg b/public/images/pions/shogi_roi_nord.svg new file mode 100755 index 0000000..a9c7f9d --- /dev/null +++ b/public/images/pions/shogi_roi_nord.svg @@ -0,0 +1,14 @@ + + + +王將 + + + + + + + + + + diff --git a/public/images/pions/shogi_roi_sud.svg b/public/images/pions/shogi_roi_sud.svg new file mode 100755 index 0000000..7755a49 --- /dev/null +++ b/public/images/pions/shogi_roi_sud.svg @@ -0,0 +1,14 @@ + + + +王將 + + + + + + + + + + diff --git a/public/images/pions/shogi_tour_nord.svg b/public/images/pions/shogi_tour_nord.svg new file mode 100755 index 0000000..c89166c --- /dev/null +++ b/public/images/pions/shogi_tour_nord.svg @@ -0,0 +1,14 @@ + + + +飛車 + + + + + + + + + + diff --git a/public/images/pions/shogi_tour_sud.svg b/public/images/pions/shogi_tour_sud.svg new file mode 100755 index 0000000..2632d06 --- /dev/null +++ b/public/images/pions/shogi_tour_sud.svg @@ -0,0 +1,12 @@ + + +飛車 + + + + + + + + + \ No newline at end of file diff --git a/public/js/accueil.js b/public/js/accueil.js new file mode 100755 index 0000000..315d302 --- /dev/null +++ b/public/js/accueil.js @@ -0,0 +1,11 @@ +$(function(){ + //var socket = io.connect('http://localhost:8080'); + // var socket = io.connect('https://hebergement.deuxfleurs.fr/~victor:3000'); + $('#hasard').on('change',function(e){ + if($(this).is(':checked')){ + $('#url').prop('required',false).prop('disabled',true); + }else{ + $('#url').prop('required',true).prop('disabled',false); + }; + }); +}); diff --git a/public/js/platoo.js b/public/js/platoo.js new file mode 100755 index 0000000..6b0a206 --- /dev/null +++ b/public/js/platoo.js @@ -0,0 +1,2330 @@ +$(function() { + + //intersection of two arrys + //stack overflow + function intersect(a, b) { + var t; + if (b.length > a.length) t = b, b = a, a = t; // indexOf to loop over shorter + return a.filter(function (e) { + return b.indexOf(e) > -1; + }); + } + + + + function tailleBoard(){ + + if($('.board-content').length>1){ + $('.board-content').css('max-width','320px'); + $('.board-content').css('margin-bottom','5px'); + $('.board-content').css('margin-right','5px'); + }else{ + $('.board-content').css('max-width',''); + $('.board-content').css('margin-bottom','0px'); + $('.board-content').css('margin-right','0px'); + } + if($('.board-content').length>2){ + $('.board-content').css('margin-bottom','10px'); + }else{ + $('.board-content').css('margin-bottom','0px'); + } + + $('.board-content').filter('.actif').each(function(){ + $(this).css('height',''); + $(this).css('width',''); + var h = Math.min($(this).height(),parseFloat($(this).css('max-height'))/100*$(this).parent().height()); + var w = Math.min($(this).width(),parseFloat($(this).css('max-width'))/100*$(this).parent().width())-20; + var rap = ($(this).children('.board').children('.board-svg').height())/($(this).children('.board').children('.board-svg').width()); + if(h/w>rap){ + $(this).height(rap*w); + $(this).width(w); + }else if(h/w0){ + $(this).removeClass('inactif').removeClass('actif').addClass('actif'); + }else{ + $(this).removeClass('inactif').removeClass('actif').addClass('inactif'); + } + }); + $('.bac').each(function(){ + if($(this).children('.labelBac').children('span.actif').length>0){ + $(this).removeClass('inactif').removeClass('actif').addClass('actif'); + }else{ + $(this).removeClass('inactif').removeClass('actif').addClass('inactif'); + } + }); + + }); + } + ///////////////////////////// connexion socket.io //////////////////////////////// + + var socket = io.connect('http://localhost:8080'); + socket.emit('newplatoo',nomPlatoo); + + + + + + + ///////////////// Fonctions de modif du html ////////////////////////////////////// + + function Hadd_bac(diese,label,num,noeud){ + if($('.trash','.bacs.actif').length>0){ + $('
'+ + '

'+label+'edit

'+ + '
'+ + ''+ + '
'+ + '
'+ + '
' + ).insertBefore($('.trash','.bacs.actif').first()).children('.bacBordure').droppable(droppableBac); + }else{ + $('
'+ + '

'+label+'edit

'+ + '
'+ + ''+ + '
'+ + '
'+ + '
' + ).appendTo($('.bacs')).children('.bacBordure').droppable(droppableBac); + } + } + + function Hadd_trash(){ + $('
').appendTo($('.bacs')).droppable(droppableTrash); + } + + function Hadd_box(nom,diese,svg,num,noeud){ + $('
pion_'+nom+
+		'
' + ).appendTo('.boxes').children('.pion-onbox').draggable(draggableOnbox); + } + + function Hadd_board(nom,diese,svg,num,noeud){ + $('
'+ + '
board_'+nom+
+		' style=
'+ + '
'+ + 'fleche'+ + 'turn up'+ + 'turn right'+ + 'turn left
' + ).appendTo('.boards').promise().done(function(){ + $('#board-'+diese).children('.board').droppable(droppableBoard).on('click',clickable_board); + $('#board-'+diese).children('.board').children('img').on('load',tailleBoard); + }); + + + } + + function HcreatePionOnboard(type,diese,board,top,left,height,svg,directed,num,noeud){ + // var height=tabPionTaille[tabPionListe.indexOf(type)]; + var pionOnboard = 'pion_'+type+''; + $(pionOnboard).appendTo('#board-'+board+' > .board').draggable(draggableOnboard); + } + + function HcreateGroupeOnbac(type,diese,n,bac,svg,num,noeud){ + var GroupeOnbac ='
pion_'+type+'

'+n+'

'; + GroupeOnbac+='
'; + GroupeOnbac+='
deledit
'; + GroupeOnbac+='
'; + $(GroupeOnbac).appendTo($('#bac-'+bac).children('.bacBordure')).draggable(draggableGroupeOnbac).children('.pion-onbac').draggable(draggableOnbac); + } + + function HremoveElement(id,noeud){ + if(id==='trash'){ + $('.trash').last().remove().promise().done(function(){tailleBoard();}); + }else{ + //$('#'+id).remove().promise().done(function(){tailleBoard();}); + $('#'+id).attr('nstop',$('#'+id).attr('nstop')+','+noeud).removeClass('actif').addClass('inactif').promise().done(function(){tailleBoard();}); + } + //tailleBoard(); + + } + + //function HchangePionOnboard(diese,type,top,left,height,board,svg){ + // $('#pion-'+diese).removeClass($('#pion-'+diese).attr('class').match(/tp\-[^ ]*/).toString()).addClass('tp-'+type).css('top',top+'%').css('left',left+'%').css('max-height',height+'%').detach().appendTo('#board-'+board+' > .board'); + /* $('#pion-'+diese).attr('src','/images/pions/'+svg); + } + + function HmodifyGroup(diese,n,bac){ + $('#groupe-'+diese).children('.nb-pions-onbac').text(n); + if(bac!=$('#groupe-'+diese).parent().parent().diese()){ + $('#groupe-'+diese).detach().appendTo('#bac-'+bac); + } + }*/ + + function Herase(noeud){ + $('.pion-onboard').each(function(){ + var nstop = $(this).attr('nstop').split(','); + for(var i=0;i=noeudAff.length){ + i=0; + j=j+1; + } + } + aff = aff && (noeudAff.indexOf($(this).attr('nstart'))!=-1)*/ + /*if(aff){ + $(this).attr('nstop',$(this).attr('nstop')+','+noeud).removeClass('actif').addClass('inactif'); + }*/ + if( (noeudAff.indexOf(parseInt($(this).attr('nstart')))!= -1) && (intersect(noeudAff,nstop).length===0) ){ + $(this).attr('nstop',$(this).attr('nstop')+','+noeud).removeClass('actif').addClass('inactif'); + } + }) + $('.groupe-onbac').each(function(){ + var nstop = $(this).attr('nstop').split(','); + for(var i=0;i=noeudAff.length){ + i=0; + j=j+1; + } + } + aff = aff && (noeudAff.indexOf($(this).attr('nstart'))!=-1) + if(aff){ + $(this).attr('nstop',$(this).attr('nstop')+','+noeud).removeClass('actif').addClass('inactif'); + }*/ + if( (noeudAff.indexOf(parseInt($(this).attr('nstart')))!= -1) && (intersect(noeudAff,nstop).length===0) ){ + $(this).attr('nstop',$(this).attr('nstop')+','+noeud).removeClass('actif').addClass('inactif'); + } + }) + } + + function Hchat(date,couleur,auteur,message,id){ + heure=/\d{1,2}:\d{2}(?=:)/; + date = heure.exec(date); + R=parseInt(couleur.substr(1,2),16); + G=parseInt(couleur.substr(3,2),16); + B=parseInt(couleur.substr(5,2),16); + if((G+R+B)>382){ + colT="#000000"; + }else{ + colT="#ffffff"; + } + var message = '
'+ + '
'+ + ''+auteur+' :'+ + ''+date+''+ + '
'+ + '
'+ + '

'+message+'

'+ + '
'; + $(message).prependTo($('#texte-chat')); + if($('.message-chat','#texte-chat').length>20){ + $('.message-chat:gt(19)','#texte-chat').remove(); + } + + } + + function HchangeLabelBac(diese,label,oldnum,num,noeud){ + label = label.substring(0,20); + //$('#bac-'+diese).children('.labelBac').children('span').css('display','none'); + $('#bac-'+diese).children('.labelBac').children('span[num="bac-'+oldnum+'"]').removeClass('actif' + ).addClass('inactif').attr('nstop',$('#bac-'+diese).children('.labelBac').children('span[num="bac-'+oldnum+'"]').attr('nstop')+','+noeud) + + $(''+label+'' + ).prependTo('#bac-'+diese).children('.labelBac'); + + //$('#bac-'+diese).children('.labelBac').children('span').text(label); + + $('#bac-'+diese).children('.inputLabelBac').children('input').val(label); + } + + + ////////////////// Fonctions de dtections : envoie les infos au serveur, lance les fonctions de modif du html ////////////////////////////// + + //// liste des actions possibles : + + // cliquer pour nouveau pion ok + // cliquer por dplacer pion groupe->board ok + // cliquer pour deplacer pion board->groupe ok + // c&d pour crer ok + // c&d pour dplacer ok + // c&d pour groupe->board ok + // c&d pour board->groupe ok + + // scroll pour changer ok + + //cliquer pour supprimer un pion ok + //cliquer pour supprimer un groupe ok + + //supprimer un bac ok + //supprimer un box ok + //supprimer un board ok + //supprimer une trash ok + + // bouton erase ok + // bouton menu ok + // bouton chat ok + // bouton delete ok + // bouton annuler delete ok + + + + + function deletePionOnboard(e){ + if($(this).hasClass('noclic')){ + $(this).removeClass('noclic'); + }else{ + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id:$(this).attr('id') + } + }] + }); + + //HremoveElement($(this).attr('id')); + } + } + + + function deleteGroupe(e){ + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id:$(this).parent().parent().attr('id') + } + }] + }); + + //HremoveElement($(this).parent().parent().attr('id')); + } + + function editGroupe(e){ + if(flagN){ + flagN=false; + var val = parseInt($(this).children('input').val()); + if(val>0 && val<1000){ + //HmodifyGroup($(this).parent().diese(),val,$(this).parent().parent().parent().diese()); + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : $(this).parent().diese(), + n : val,bac: $(this).parent().parent().parent().diese(), + type:$(this).parent().tp() + } + }] + }); + $(this).parent().children('.nb-pions-onbac').css('display','block'); + $(this).parent().children('.inputN').css('display','none'); + }else if(val===0){ + $(this).parent().children('.boutons-groupe').children('.del-groupe').trigger('click'); + }else{ + $(this).children('input').val($(this).parent().children('.nb-pions-onbac').text()); + $(this).parent().children('.nb-pions-onbac').css('display','block'); + $(this).css('display','none'); + } + } + return false; + } + + function displayEditGroupe(e){ + flagN=true; + $(this).parent().parent().children('.inputN').children('input').val($(this).parent().parent().children('.nb-pions-onbac').text()); + $(this).parent().parent().children('.nb-pions-onbac').css('display','none'); + $(this).parent().parent().children('.inputN').css('display','block').children('input').focus(); + return false; + } + + function displayEditLabelBac(e){ + flagLabel=true; + $('.bacs').on('focusout','.inputLabelBac input',function(e){$(this).parent().submit();}); + $(this).parent().parent().children('.inputLabelBac').children('input').val(/(?=^[ ]*).*(?=[ ]*$)/.exec($(this).parent().children('span').text())); + $(this).parent().css('display','none'); + $(this).parent().parent().children('.inputLabelBac').css('display','block').children('input').focus(); + return false; + } + + function editLabelBac(e){ + if(flagLabel){ + flagLabel=false; + $('.bacs').off('focusout','.inputLabelBac input',function(e){$(this).parent().submit();}); + var label = $(this).children('input').val().replace(/[ \t\n]*$/,'').replace(/^[ \t\n]*/,'').substring(0,20); + //HchangeLabelBac($(this).parent().diese(),label); + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'changeLabelBac', + data:{ + diese : $(this).parent().diese(), + label : label + } + }] + }); + $(this).parent().children('.labelBac').css('display','block'); + $(this).css('display','none'); + } + return false; + } + + function changePionOnboard(e){ + if($(this).hasClass('noclic')){ + $(this).removeClass('noclic'); + }else{ + var type = tabPionChange[tabPionListe.indexOf($(this).attr('class').match(/tp\-[^ ]*/).toString().substring(3))]; + var svg = tabPionSvg[tabPionListe.indexOf(type)]; + console.log(type) + console.log(tabPionChange) + console.log(tabPionListe) + console.log($(this).attr('class')) + console.log($(this).attr('class').match(/tp\-[^ ]*/).toString().substring(3)) + if(type === null){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else if(type !== -1){ + //var nom = type.substring(3); + //HchangePionOnboard(diese=$(this).diese(),type=type,top=$(this).csstop(),left=$(this).cssleft(),height=$(this).cssheight(),board=$(this).parent().parent().diese(),svg=svg); + var topleft=real2abs($(this).cssleft(),$(this).csstop(),$(this).parent().parent().diese(),$(this).cssheight()); + var top = topleft.top; + var left = topleft.left; + console.log('ee'); + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'changePionOnboard', + data:{ + diese : $(this).diese(), + type:type,top:top,left:left,height:$(this).cssheight(), + board:$(this).parent().parent().diese(),svg:svg + } + }] + }); + } + } + } + + function movePionOnboard(e){ + if($(this).hasClass('noclic')){ + $(this).removeClass('noclic'); + } else{ + var bac = tabPionMove[(tabPionListe.indexOf($(this).tp()))]; + if(bac === null){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else if(bac !== -1){ + var classTpMovable=$(this).tp(); + // socket.emit('movePionOnboard',{indexBoard: $(this).parent().diese(),indexPion : $(this).diese(), indexBac : bac}); + var TpExist=false; + $('.groupe-onbac',$('#bac-'+bac).children('.bacBordure')).each(function(){ + if($(this).tp()==(classTpMovable) && $(this).hasClass('actif')){ + TpExist=true; + } + }); + if(TpExist){ + var diese =$('#bac-'+bac).children('.bacBordure').children('.tp-'+classTpMovable).filter('.actif').diese(); + var n = parseInt($('#bac-'+bac).children('.bacBordure').children('.tp-'+classTpMovable).filter('.actif').children('.nb-pions-onbac').text())+1; + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: bac,type:classTpMovable + } + },{ + action:'removeElement', + data:{ + id:$(this).attr('id') + } + }] + }); + //HmodifyGroup(diese,n,bac); + //HremoveElement($(this).attr('id')); + } else { + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : classTpMovable, n : 1, bac : bac + } + },{ + action:'removeElement', + data:{ + id:$(this).attr('id') + } + }] + }); + //HremoveElement($(this).attr('id')); + + //$(createGroupeOnbac(classTpMovable)).appendTo($('#bac-'+bac)).children('.pion-onbac').draggable(draggableOnbac);//on cre un groupe + } + } + } + } + + function clickableBoardNew(e){ + if($(e.target).hasClass('board-svg')){ + + var height = tabPionTaille[tabPionListe.indexOf(click_board_create_type)]; + + if(height===null|typeof height === 'undefined'){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else{ + var x = e.pageX; + var y = e.pageY; + var pix = height /100 * parseFloat($(this).css("height")); + var l = ( 100 * (x-parseFloat($(this).offset().left)- pix/2) / parseFloat($(this).css("width")) ); + var t = ( 100 * (y-parseFloat($(this).offset().top)- pix/2) / parseFloat($(this).css("height")) ); +// var l = ( 100 * (x-parseFloat($(this).offset().left)- $('img:last-child',this).width()/2) / parseFloat($(this).css("width")) ); +// var t = ( 100 * (y-parseFloat($(this).offset().top)- $('img:last-child',this).height()/2) / parseFloat($(this).css("height")) ); + + // HcreatePionOnboard(type,diese,board,top,left,height) + + // $(creatPionOnboard(click_board_create_type)).appendTo(this); + // $('img:last-child',this).css('left',l); + // $('img:last-child',this).css('top',t); + // $('img:last-child',this).css('z-index',1); + // $('img:last-child',this).draggable(draggableOnboard);//.on('click',action_clic_onboard); + var topleft=real2abs(l,t,$(this).parent().diese(),height); + var top = topleft.top; + var left = topleft.left; + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createPionOnboard', + data:{ + type : click_board_create_type, + board : $(this).parent().diese(),top : top,left : left, height : height + } + }] + }); + } + } + } + + function clickableBoardMove(e){ + if($(e.target).hasClass('board-svg')){ + if($('#bac-'+click_board_move_bac).length == 1){ + if($('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).filter('.actif').length>0){ + + if(parseInt($('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).filter('.actif').children('.nb-pions-onbac').text())>1){ + var diese = $('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).filter('.actif').diese(); + var n = parseInt($('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).filter('.actif').children('.nb-pions-onbac').text())-1; + + + var req1={ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: click_board_move_bac,type:click_board_move_type + } + }; + + + /*socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: click_board_move_bac,type:click_board_move_type + } + }] + }); */ + //HmodifyGroup(diese,n,click_board_move_bac); + } else { + + var req1={ + action:'removeElement', + data:{ + id:$('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).filter('.actif').attr('id') + } + }; + + /*socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id:$('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).filter('.actif').attr('id') + } + }] + }); */ + //HremoveElement($('#bac-'+click_board_move_bac).children('.bacBordure').children('.tp-'+click_board_move_type).attr('id')); + } + var height = tabPionTaille[tabPionListe.indexOf(click_board_move_type)]; + + if(height===null | typeof height === 'undifined'){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else{ + var x = e.pageX; + var y = e.pageY; + var pix = height /100 * parseFloat($(this).css("height")); + var l = ( 100 * (x-parseFloat($(this).offset().left)- pix/2) / parseFloat($(this).css("width")) ); + var t = ( 100 * (y-parseFloat($(this).offset().top)- pix/2) / parseFloat($(this).css("height")) ); + // $('img:last-child',this).css('left',l); + // $('img:last-child',this).css('top',t); + // $('img:last-child',this).css('z-index',1); + // $('img:last-child',this).draggable(draggableOnboard);//.on('click',action_clic_onboard); + var topleft=real2abs(l,t,$(this).parent().diese(),height); + var top = topleft.top; + var left = topleft.left; + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[req1,{ + action:'createPionOnboard', + data:{ + type : click_board_move_type, + board : $(this).parent().diese(),top : top,left : left, height : height + } + }] + }); + } + } + } + } + } + + function rien(){ + return(null); + } + + function movePionOnboardShogi(){ + if($(this).hasClass('noclic')){ + $(this).removeClass('noclic'); + }else{ + + var bac = tabPionMove[(tabPionListe.indexOf($(this).tp()))]; + if(bac === null){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else if(bac !== -1){ + + //le pion change de camp + var type0 = $(this).tp() + type = type0.replace(/_p$/,'').replace(/_nord/,'_zzz').replace(/_sud/,'_nord').replace(/_zzz/,'_sud'); + + var svg = tabPionSvg[tabPionListe.indexOf(type)]; + if(svg === null){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else{ + //HchangePionOnboard(diese=$(this).diese(),type=type,top=$(this).csstop(),left=$(this).cssleft(),height=$(this).cssheight(),board=$(this).parent().parent().diese(),svg=svg); + + var topleft=real2abs($(this).cssleft(),$(this).csstop(),$(this).parent().parent().diese(),$(this).cssheight()); + var top = topleft.top; + var left = topleft.left; + + /*socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'changePionOnboard', + data:{ + diese : $(this).diese(),type:type,top:top,left:left,height:$(this).cssheight(),board:$(this).parent().parent().diese(),svg:svg + } + }] + });*/ + + //on bouge le pion + + //var classTpMovable=$(this).tp(); + // socket.emit('movePionOnboard',{indexBoard: $(this).parent().diese(),indexPion : $(this).diese(), indexBac : bac}); + var TpExist=false; + $('.groupe-onbac',$('#bac-'+bac).children('.bacBordure')).each(function(){ + if($(this).tp()==(type)){ + TpExist=true; + } + }); + if(TpExist){ + var diese =$('#bac-'+bac).children('.bacBordure').children('.tp-'+type).diese(); + var n = parseInt($('#bac-'+bac).children('.bacBordure').children('.tp-'+type).children('.nb-pions-onbac').text())+1; + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: bac,type:type + } + },{ + action:'removeElement', + data:{ + id:$(this).attr('id') + } + }] + }); + //HmodifyGroup(diese,n,bac); + //HremoveElement($(this).attr('id')); + } else { + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : type, n : 1, bac : bac + } + },{ + action:'removeElement', + data:{ + id:$(this).attr('id') + } + }] + }); + //HremoveElement($(this).attr('id')); + } + } + + } + } + } + + function turnupBoard(){ + $(this).parent().parent().children('.board').children('.pion-onboard').each(function(){ + var topleft=real2abs($(this).cssleft(),$(this).csstop(),$(this).parent().parent().diese(),$(this).cssheight()); + $(this).css('top',topleft.top+'%').css('left',topleft.left+'%'); + if(!isNaN($(this).csstransform())){ + $(this).setcsstransform(0); + } + }); + $(this).parent().parent().children('.board').children('.board-svg').setcsstransform(0); + $(this).parent().children('.fleche').setcsstransform(0); + // $(this).parent().parent().children('.board').children('.board-svg').css('transform','rotate(0deg)'); + // $(this).parent().parent().children('.board').children('.board-svg').css('-ms-transform','rotate(0deg)'); + // $(this).parent().parent().children('.board').children('.board-svg').css('-webkit-transform','rotate(0deg)'); + } + + function turnrightBoard(){ + var nRot=$(this).parent().parent().children('.board').children('.board-svg').csstransform(); + nRot=(nRot+1)%4; + + $(this).parent().parent().children('.board').children('.pion-onboard').each(function(){ + var left = 100-$(this).csstop()-$(this).cssheight(); + var top = $(this).cssleft(); + $(this).css('top',top+'%').css('left',left+'%'); + if(!isNaN($(this).csstransform())){ + $(this).setcsstransform(nRot); + } + }); + $(this).parent().parent().children('.board').children('.board-svg').setcsstransform(nRot); + $(this).parent().children('.fleche').setcsstransform(nRot); + } + + function turnleftBoard(){ + var nRot=$(this).parent().parent().children('.board').children('.board-svg').csstransform(); + nRot=(nRot+3)%4; + $(this).parent().parent().children('.board').children('.pion-onboard').each(function(){ + var top = 100-$(this).cssleft()-$(this).cssheight(); + var left = $(this).csstop(); + $(this).css('top',top+'%').css('left',left+'%'); + if(!isNaN($(this).csstransform())){ + $(this).setcsstransform(nRot); + } + }); + $(this).parent().parent().children('.board').children('.board-svg').setcsstransform(nRot); + $(this).parent().children('.fleche').setcsstransform(nRot); + } + + ////////////////////// drag & drop /////////////////////////////// + + var FlagDrop = 0; //drag onbac + + var borderBacWidth = $('.bacBordure').css('border-top-width');//drop onbac + + var border =''; + + var draggableOnboard = { + scroll:true, + appendTo:'.drag', + revert : 'invalid', + containment : '.drag', + revertDuration : 200, + helper:'clone', + zIndex:5, + start : function(e,ui){ + $(this).addClass('noclic'); + $(this).css('display','none'); + }, + stop : function(e,ui){ + $(this).css('display',''); + } + } + + var draggableOnbac = { + scroll:true, + appendTo:'.drag', + revert : 'invalid', + containment : '.drag', + revertDuration : 200, + helper : 'clone', + zIndex:5, + start: function(e,ui){ + var taille = $('.pion-onboard').first().css('height'); + var classTpDraggable=$(ui.helper).attr('class').match(/tp\-[^ ]*/).toString().substring(3); + var taille2 =$('.groupe-onbac').children('.tp-'+classTpDraggable).css('height'); + if(taille !== undefined){ + $(ui.helper).css('height',taille); + }else if (taille2!==undefined){ + $(ui.helper).css('height',taille2); + } + + $('.nb-pions-onbac',$(this).parent()).text(parseInt($('.nb-pions-onbac',$(this).parent()).text())-1); + }, + stop: function(){ + if(FlagDrop===0){ + $('.nb-pions-onbac',$(this).parent()).text(parseInt($('.nb-pions-onbac',$(this).parent()).text())+1); + }else if(parseInt($('.nb-pions-onbac',$(this).parent()).text())>0){ + $('.nb-pions-onbac',$(this).parent()).text(parseInt($('.nb-pions-onbac',$(this).parent()).text())+1); + }else{ + $('.nb-pions-onbac',$(this).parent()).text(parseInt($('.nb-pions-onbac',$(this).parent()).text())+1); + } + FlagDrop = 0; + } + } + + var draggableOnbox = { + scroll:true, + appendTo:'.drag', + revert : 'invalid', + containment : '.drag', + revertDuration : 200, + helper : 'clone', + zIndex : 5, + start: function(e,ui){ + var taille = $('.pion-onboard').first().css('height'); + var classTpDraggable=$(ui.helper).attr('class').match(/tp\-[^ ]*/).toString().substring(3); + var taille2 =$('.box').children('.tp-'+classTpDraggable).css('height'); + if(taille !== undefined){ + $(ui.helper).css('height',taille); + }else if (taille2!==undefined){ + $(ui.helper).css('height',taille2); + } + } + } + + var draggableGroupeOnbac = { + scroll:true, + revert : true, + containment : '.bacs', + revertDuration : 200, + zIndex : 5 + } + + var droppableBoard ={ + accept : '.pion-onboard, .pion-onbac, .pion-onbox', + over : function(e,ui){ + if(!isNaN($(ui.helper).csstransform())){ + $(ui.helper).setcsstransform($(this).children('.board-svg').csstransform()); + } + }, + out : function(e,ui){ + if(!isNaN($(ui.helper).csstransform())){ + $(ui.helper).setcsstransform(0); + } + }, + drop : function(e,ui){ + var l = ( 100 * (parseFloat($(ui.helper).offset().left)-parseFloat($(this).offset().left)) / parseFloat($(this).css("width")) ); + var t = ( 100 * (parseFloat($(ui.helper).offset().top)-parseFloat($(this).offset().top)) / parseFloat($(this).css("height")) ); + //si class draggable= pion-onboard : + if($(ui.draggable).hasClass('pion-onboard')){ + var topleft=real2abs(l,t,$(this).parent().diese(),$(ui.draggable).cssheight()); + var top = topleft.top; + var left = topleft.left; + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'changePionOnboard', + data:{ + diese : $(ui.draggable).diese(), + type:$(ui.draggable).tp(), + top:top, + left:left, + height:$(ui.draggable).cssheight(), + board:$(this).parent().diese(), + svg:$(ui.draggable).attr('src').replace(/^.*images\/pions\//,'') + } + }] + }); + /*HchangePionOnboard( diese=$(ui.draggable).diese(), + type=$(ui.draggable).tp(), + top=t, + left=l, + height=$(ui.draggable).cssheight(), + board=$(this).parent().diese(), + $(ui.draggable).attr('src').replace(/^.*images\/pions\//,'') + );*/ + + // //si le parent est une autre board : on dplace le pion onboard + // if(!$(this).is($(ui.draggable).parent())){ + // //$(ui.draggable).appendTo(this).attr('style',$(ui.helper).attr('style'));//.draggable(draggableOnboard).on('click',action_clic_onboard); + // $(ui.draggable).appendTo(this).css('top',t).css('left',l);//.draggable(draggableOnboard).on('click',action_clic_onboard); + // } else{ + // $(ui.draggable).appendTo(this).css('top',t).css('left',l); + // } + } + //si class draggable= pion-box: + if($(ui.draggable).hasClass('pion-onbox')){ + var classTpDraggable=$(ui.draggable).attr('class').match(/tp\-[^ ]*/).toString().substring(3); + var height = tabPionTaille[tabPionListe.indexOf(classTpDraggable)]; + if(height===null | typeof height === 'undifined'){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else{ + var topleft=real2abs(l,t,$(this).parent().diese(),height); + var top = topleft.top; + var left = topleft.left; + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createPionOnboard', + data:{ + type : classTpDraggable, + board : $(this).parent().diese(),top : top,left : left, height : height + } + }] + }); + } + // //on cre un ouveau pion onboard + // //on deplace le helper en modifiant classe etc + // //$(ui.draggable).clone().addClass('pion-onboard').removeClass('pion-onbox').appendTo(this).css('top',$(ui.helper).offset().top).css('left',$(ui.helper).offset().left).draggable(draggableOnboard);//.on('click',action_clic_onboard); + // var type = $(ui.draggable).attr('class').match(/tp\-[^ ]*/).toString().substring(3); + // $(creatPionOnboard(type)).appendTo(this).css('left',l).css('top',t).draggable(draggableOnboard);//.on('click',action_clic_onboard); + // //$(ui.draggable).clone().addClass('pion-onboard').removeClass('pion-onbox').appendTo(this).css('top',t).css('left',l).css('max-height',).draggable(draggableOnboard);//.on('click',action_clic_onboard); + } + //si class draggable=bion-onbac: + if($(ui.draggable).hasClass('pion-onbac')){ + //on cre un ouveau pion onboard + + //on deplace le helper en modifiant classe etc + FlagDrop = 1; + + //est-ce que le groupe d'origine est vide ? + var pionsRestant = parseInt($('.nb-pions-onbac',$(ui.draggable).parent()).text())>0; + + //type de pion + var type = $(ui.draggable).tp(); + + //taille du pion + var height = tabPionTaille[tabPionListe.indexOf(type)]; + if(height===null | typeof height === 'undifined'){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }else{ + //creation du pion + var topleft=real2abs(l,t,$(this).parent().diese(),height); + var top = topleft.top; + var left = topleft.left; + if(pionsRestant){ + //on actualise le bac + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createPionOnboard', + data:{ + type : type,board : $(this).parent().diese(), + top : top,left : left, height : height + }},{ + action:'modifyGroup', + data:{ + diese:$(ui.draggable).parent().diese(), + type:type, + n:parseInt($('.nb-pions-onbac',$(ui.draggable).parent()).text()),bac:$(ui.draggable).parent().parent().parent().diese() + } + }] + }); + }else{ + //on supprime le bac + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createPionOnboard', + data:{ + type : type,board : $(this).parent().diese(), + top : top,left : left, height : height + }},{ + action:'removeElement', + data:{ + id:$(ui.draggable).parent().attr('id') + } + }] + }); + //HremoveElement($(ui.draggable).parent().attr('id')); + } + } + // $(creatPionOnboard(type)).appendTo(this).css('left',l).css('top',t).draggable(draggableOnboard);//.on('click',action_clic_onboard); + // //$(ui.draggable).clone().appendTo(this).addClass('pion-onboard').removeClass('pion-onbac').css('top',t).css('left',l).draggable(draggableOnboard);//.on('click',action_clic_onboard);; + // //on supprime le groupe s'il n'y a plus de jeton + // if(parseInt($('.nb-pions-onbac',$(ui.draggable).parent()).text())<1){ + // $(ui.draggable).parent().remove(); + // } + } + + } + } + + var droppableBac ={ + accept : '.pion-onboard, .pion-onbac, .pion-onbox, .groupe-onbac', + over : function(e,ui){ + //orderWidth = $(this).css('border-top-width'); + $(this).css('border-width',(Number(/^[0-9.]*/.exec(borderBacWidth))*2.0)+'px'); + }, + out : function(e,ui){ + $(this).css('border-width',borderBacWidth); + // borderWidth = 0; + }, + + drop : function(e,ui){ + + $(this).css('border-width',borderBacWidth); + //borderWidth = 0; + + var classTpDraggable=$(ui.draggable).attr('class').match(/tp\-[^ ]*/).toString().substring(3); + var TpExist=false; + $('.groupe-onbac.actif',this).each(function(){ + if($(this).attr('class').match(/tp\-[^ ]*/).toString().substring(3)==(classTpDraggable)){ + TpExist=true; + } + }); + + if($(ui.draggable).hasClass('groupe-onbac') && ($(this).parent().diese()!=$(ui.draggable).parent().parent().diese())){//ATT pas mme case + if(!$(this).is($(ui.draggable).parent())){ + if(TpExist){ + var diese = $(this).children('.tp-'+classTpDraggable).filter('.actif').diese(); + //on rajoute tous les pions + var n = parseInt($(ui.draggable).children('.nb-pions-onbac').text())+parseInt($(this).children('.tp-'+classTpDraggable).filter('.actif').children('.nb-pions-onbac').text()); + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: $(this).parent().diese(),type:classTpDraggable + } + },{ + action:'removeElement', + data:{ + id:$(ui.draggable).attr('id') + } + }] + }); + //HmodifyGroup(diese,n,$(this).parent().diese()); + //HremoveElement($(ui.draggable).attr('id')); + + // $('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text(parseInt($('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text())+parseInt($('.nb-pions-onbac',$(ui.draggable)).text()));//on rajoute les pions + // $(ui.draggable).remove();//on supprime le pion on-board + } else { + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : classTpDraggable, + n : parseInt($(ui.draggable).children('.nb-pions-onbac').text()), + bac : $(this).parent().diese() + } + },{ + action:'removeElement', + data:{ + id:$(ui.draggable).attr('id') + } + }] + }); + + //HremoveElement($(ui.draggable).attr('id')); + + // $(createGroupeOnbac(classTpDraggable)).appendTo(this).draggable(draggableGroupeOnbac).children('.pion-onbac').draggable(draggableOnbac);//on cre un groupe + // $('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text(parseInt($('.nb-pions-onbac',$(ui.draggable)).text()));//on rajoute les pions + // $(ui.draggable).remove();//on supprime l'ancien groupe + } + } + } else { + + if($(ui.draggable).hasClass('pion-onboard')){ + if(TpExist){ + var diese = $(this).children('.tp-'+classTpDraggable).diese(); + var n = parseInt($(this).children('.tp-'+classTpDraggable).children('.nb-pions-onbac').text())+1; + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: $(this).parent().diese(),type:classTpDraggable + } + },{ + action:'removeElement', + data:{ + id:$(ui.draggable).attr('id') + } + }] + }); + //HmodifyGroup(diese,n,$(this).parent().diese()); + //HremoveElement($(ui.draggable).attr('id')); + } else { + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : classTpDraggable, n : 1, bac : $(this).parent().diese() + } + },{ + action:'removeElement', + data:{ + id:$(ui.draggable).attr('id') + } + }] + }); + //HremoveElement($(ui.draggable).attr('id')); + } + + // if(TpExist){ + // $('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text(parseInt($('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text())+1);//on rajoute un pion + // $(ui.draggable).remove();//on supprime le pion on-board + // } else { + // $(ui.draggable).remove();//on supprime le pion on-board + // } + } + if($(ui.draggable).hasClass('pion-onbac') && ($(this).parent().diese()!=$(ui.draggable).parent().parent().parent().diese())){//ATT pas mme case + if(!$(this).is($(ui.draggable).parent())){ + + FlagDrop = 1; + //est-ce que le groupe d'origine est vide ? + var pionsRestant = parseInt($('.nb-pions-onbac',$(ui.draggable).parent()).text()); + if(pionsRestant>0){ + if(TpExist){ + var diese = $(this).children('.tp-'+classTpDraggable).filter('.actif').diese(); + var n = parseInt($(this).children('.tp-'+classTpDraggable).filter('.actif').children('.nb-pions-onbac').text())+1; + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: $(this).parent().diese(),type:classTpDraggable + } + },{ action:'modifyGroup', + data:{ + diese :$(ui.draggable).parent().diese() ,n : pionsRestant, + bac:$(ui.draggable).parent().parent().parent().diese() ,type:classTpDraggable + } + }] + }); + //socket.emit('removeElement',{id:$(ui.draggable).attr('id')}); + //HmodifyGroup(diese,n,$(this).parent().diese()); + //HremoveElement($(ui.draggable).attr('id')); + } else { + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : classTpDraggable, n : 1, bac : $(this).parent().diese() + } + },{ + action:'modifyGroup', + data:{ + diese :$(ui.draggable).parent().diese() ,n : pionsRestant, + bac:$(ui.draggable).parent().parent().parent().diese() ,type:classTpDraggable + } + }] + }); + //socket.emit('removeElement',{id:$(ui.draggable).attr('id')}); + //HremoveElement($(ui.draggable).attr('id')); + } + }else{ + if(TpExist){ + var diese = $(this).children('.tp-'+classTpDraggable).filter('.actif').diese(); + var n = parseInt($(this).children('.tp-'+classTpDraggable).filter('.actif').children('.nb-pions-onbac').text())+1; + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: $(this).parent().diese(),type:classTpDraggable + } + },{ + action:'removeElement', + data:{id:$(ui.draggable).parent().attr('id')} + }] + }); + //socket.emit('removeElement',{id:$(ui.draggable).attr('id')}); + //HmodifyGroup(diese,n,$(this).parent().diese()); + //HremoveElement($(ui.draggable).attr('id')); + } else { + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : classTpDraggable, n : 1, bac : $(this).parent().diese() + } + },{ + action:'removeElement', + data:{id:$(ui.draggable).parent().attr('id')} + }] + }); + //socket.emit('removeElement',{id:$(ui.draggable).attr('id')}); + //HremoveElement($(ui.draggable).attr('id')); + } + } + + + + // if(TpExist){ + // $('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text(parseInt($('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text())+1);//on rajoute un pion + // } else { + // $(createGroupeOnbac(classTpDraggable)).appendTo(this).draggable(draggableGroupeOnbac).children('.pion-onbac').draggable(draggableOnbac);//on cre un groupe + // } + // if(parseInt($('.nb-pions-onbac',$(ui.draggable).parent()).text())<1){ + // socket.emit('removeElement',{id:$(ui.draggable).parent().attr('id')}); + // HremoveElement($(ui.draggable).parent().attr('id')); + // //$(ui.draggable).parent().remove(); + // } + + } + } + if($(ui.draggable).hasClass('pion-onbox')){ + + if(TpExist){ + var diese = $(this).children('.tp-'+classTpDraggable).filter('.actif').diese(); + var n = parseInt($(this).children('.tp-'+classTpDraggable).filter('.actif').children('.nb-pions-onbac').text())+1; + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'modifyGroup', + data:{ + diese : diese,n : n,bac: $(this).parent().diese(),type:classTpDraggable + } + }] + }); + //HmodifyGroup(diese,n,$(this).parent().diese()); + } else { + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'createGroupeOnbac', + data:{ + type : classTpDraggable, n : 1, bac : $(this).parent().diese() + } + }] + }); + } + // if(TpExist){ + // $('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text(parseInt($('.nb-pions-onbac',$(this).children('.tp-'+classTpDraggable)).text())+1);//on rajoute un pion + // } else { + // $(createGroupeOnbac(classTpDraggable)).appendTo(this).draggable(draggableGroupeOnbac).children('.pion-onbac').draggable(draggableOnbac);//on cre un groupe + // } + } + + } + } + } + + + var droppableTrash ={ + accept : '.pion-onboard, .pion-onbac, .pion-onbox, .groupe-onbac', + over : function(e,ui){ + //borderWidth = $(this).css('border-top-width'); + $(this).css('border-width',(Number(borderBacWidth.substr(0,borderBacWidth.length-3))*2.0)+'px'); + }, + out : function(e,ui){ + $(this).css('border-width',borderBacWidth); + //borderWidth = 0; + }, + + drop : function(e,ui){ + + $(this).css('border-width',borderBacWidth); + //borderWidth = 0; + + //si class draggable=bion-onbac: + if($(ui.draggable).hasClass('pion-onbac')){ + FlagDrop = 1; + if(parseInt($('.nb-pions-onbac',$(ui.draggable).parent()).text())<1){ + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id:$(ui.draggable).parent().attr('id') + } + }] + }); + //HremoveElement($(ui.draggable).parent().attr('id')); + } + }else if($(ui.draggable).hasClass('pion-onbox')){ + + }else{ + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id:$(ui.draggable).attr('id') + } + }] + }); + //HremoveElement($(ui.draggable).attr('id')); + } + // if($(ui.draggable).hasClass('pion-onboard')){ + // $(ui.draggable).remove(); + // } + // if($(ui.draggable).hasClass('groupe-onbac')){ + // $(ui.draggable).remove(); + // } + } + } + + + + + //////////////////////////// Choix de variables /////////////////////////// + + // switch(action_clic_onboardStr){ + // case 'deletePionOnboard' : var action_clic_onboard = deletePionOnboard; break; + // case 'changePionOnboard' : var action_clic_onboard = changePionOnboard; break; + // case 'movePionOnboard' : var action_clic_onboard = movePionOnboard; break;case 'movePionOnboard' : var action_clic_onboard = movePionOnboard; break; + // } + + // switch(action_scroll_onboardStr){ + // case 'deletePionOnboard' : var action_scroll_onboard = deletePionOnboard; break; + // case 'changePionOnboard' : var action_scroll_onboard = changePionOnboard; break; + // case 'movePionOnboard' : var action_scroll_onboard = movePionOnboard; break; + // } + + // switch(clickable_boardStr){ + // case 'clickable_boardNew' : var clickable_board = clickable_boardNew; break; + // case 'clickable_boardMove' : var clickable_board = clickable_boardMove; break; + // } + + var action_clic_onboard = eval(action_clic_onboardStr); + var action_scroll_onboard = eval(action_scroll_onboardStr); + var clickable_board = eval(clickable_boardStr); + + socket.emit('getTabPion',{id_joueur : parseInt($('input[name=player]:checked').attr('value'))}); + socket.emit('getAction',{id_joueur : parseInt($('input[name=player]:checked').attr('value'))}); + + + + //alert(tabPionListe[0]); changer a + + ///////////////////////// boutons du menus //////////////////////////////////// + function hideMenu2(part){ + $(part).css('display','none'); + $('.drag, .chat').off('click.flag'); + initEvents(); + Menu2actif = ''; + } + + function affMenu2(part){ + if(Menu2actif===''){ + $(part).css('display','flex'); + stopEvents(); + $('.drag, .chat').on('click.flag',function(){ + hideMenu2(part); + }); + Menu2actif=part; + }else if(Menu2actif===part){ + hideMenu2(part); + }else{ + $(part).css('display','flex'); + $('.drag, .chat').off('click.flag'); + $(Menu2actif).css('display','none'); + $('.drag, .chat').on('click.flag',function(){ + hideMenu2(part); + }); + Menu2actif=part; + } + + + } + var Menu2actif = ''; + + + + $('#Btn-info').on('click',function(){ + affMenu2('#info2'); + }); + $('#Btn-erase').on('click',function(){ + affMenu2('#erase2'); + }); + $('#conf-erase').on('click',function(){ + //Herase(); + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'erase', + data:{} + }] + }); + hideMenu2('#erase2'); + }); + $('#ann-erase').on('click',function(){ + hideMenu2('#erase2'); + }); + + $('#Btn-delete').on('click',function(){ + affMenu2('#delete2'); + }); + $('#conf-delete').on('click',function(){ + socket.emit('delete',''); + hideMenu2('#delete2'); + }); + $('#ann-delete').on('click',function(){ + hideMenu2('#delete2'); + }); + + $('#Btn-raz').on('click',function(){ + affMenu2('#raz2'); + }); + $('#conf-raz').on('click',function(){ + socket.emit('raz',''); + hideMenu2('#raz2'); + }); + $('#ann-raz').on('click',function(){ + hideMenu2('#raz2'); + }); + + $('#Btn-addmenu').on('click',function(){ + affMenu2('#add2'); + }); + $('#ann-add2').on('click',function(){ + hideMenu2('#add2'); + }); + $('#add_bac').on('click',function(){ + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'add_bac', + data:{ + label:'', + } + }] + }); + }); + $('#add_trash').on('click',function(){ + Hadd_trash(); + socket.emit('add_trash',''); + }); + $('#add_box').on('click',function(e){ + var nom = newBoxType(); + // if (tabPionListe.indexOf('tp-'+nom)===-1){ + // tabPionListe.push('tp-'+nom); + // tabPionChange.push('tp-'+nom); + // tabPionMove.push(0); + // } + //socket.emit('setTabPion',{nom : nom}); + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'add_box', + data:{ + nom : nom, + } + }] + }); + }); + $('#add_board').on('click',function(e){ + var nom = newBoardType(); + + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'add_board', + data:{ + nom : nom, + } + }] + }); + //tailleBoard(); + }); + + $('#Btn-delete_element').on('click',function(e){ + + stopEvents(); + + $('.boards, .bacs, .boxes').on('click.del','.board-content, .box, .bac, .trash',function(e){ + if($(this).hasClass('trash')){ + + socket.emit('remove_trash'); + /*socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id : 'trash', + } + }] + });*/ + //HremoveElement('trash'); + }else{ + socket.emit('ModifJeu',{ + noeud_courant:noeudCourant, + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + id_joueur:parseInt($('input[name=player]:checked').attr('value')), + requetes:[{ + action:'removeElement', + data:{ + id : $(this).attr('id'), + } + }] + }); + //HremoveElement($(this).attr('id')); + } + }); + $('.boards, .bacs, .boxes').on('mouseenter.del','.board-content, .box, .bac, .trash',function(e){ + border = $(this).css('border'); + $(this).css('border','solid 5px rgb(130,20,20)'); + }); + $('.boards, .bacs, .boxes').on('mouseleave.del','.board-content, .box, .bac, .trash',function(e){ + $(this).css('border',border); + border = ''; + }); + + $('#Btn-delete_element').css('display','none'); + $('#Btn-annuler_delete_element').css('display','block'); + }); + + $('#Btn-annuler_delete_element').on('click',function(e){ + $('.boards, .bacs, .boxes').off('.del','.board-content, .box, .bac, .trash'); + initEvents(); + $('#Btn-delete_element').css('display','block'); + $('#Btn-annuler_delete_element').css('display','none'); + }); + + $('#Btn-changerjoueur').on('click',function(){ + affMenu2('#changerjoueur2'); + }); + + $('#ann-changerjoueur2').on('click',function(){ + hideMenu2('#changerjoueur2'); + }); + + $('input[name=player]').on('change',function(e){ + if($(this).is(':checked')){ + socket.emit('getTabPion',{id_joueur : parseInt($(this).attr('value'))}); + socket.emit('getAction',{id_joueur : parseInt($(this).attr('value'))}); + $('#Btn-changerjoueur').children('p').text($(this).next().text()); + } + hideMenu2('#changerjoueur2'); + }); + (function(){ + socket.emit('getTabPion',{id_joueur : parseInt($('input[name=player]:checked').attr('value'))}); + socket.emit('getAction',{id_joueur : parseInt($('input[name=player]:checked').attr('value'))}); + $('#Btn-changerjoueur').children('p').text($('input[name=player]:checked').next().text()); + })(); + + /* $('#envoyerChat').on('click',function(e){ + socket.emit('chatNew',{ + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + message:$('#texteChat').val() + }); + $('#texteChat').val(''); + }); */ + + $('#Btn-chatmenu').on('click',function(){ + if(Menu2actif===''){ + $('#menuchat2').css('display','flex'); + stopEvents(); + $('.drag, .chat').on('click.flag',function(){ + $('#formMenuchat2').trigger('submit'); + }); + Menu2actif='#menuchat2'; + }else if(Menu2actif==='#menuchat2'){ + $('#formMenuchat2').trigger('submit'); + }else{ + $('#menuchat2').css('display','flex'); + $('.drag, .chat').off('click.flag'); + $(Menu2actif).css('display','none'); + $('.drag, .chat').on('click.flag',function(){ + $('#formMenuchat2').trigger('submit'); + }); + Menu2actif='#menuchat2'; + } + }); + $('#formMenuchat2').on('submit',function(e){ + hideMenu2('#menuchat2'); + $('#Btn-chatmenu').children('p').children('span').text($('#auteurChat').val()); + couleur=$('#couleurChat').val(); + R=parseInt(couleur.substr(1,2),16); + G=parseInt(couleur.substr(3,2),16); + B=parseInt(couleur.substr(5,2),16); + if((G+R+B)>382){ + colT="#000000"; + }else{ + colT="#ffffff"; + } + $('#Btn-chatmenu').children('p').children('span').css('background-color',couleur); + $('#Btn-chatmenu').children('p').children('span').css('color',colT); + }); + + (function(){ + $('#Btn-chatmenu').children('p').children('span').text($('#auteurChat').val()); + couleur=$('#couleurChat').val(); + R=parseInt(couleur.substr(1,2),16); + G=parseInt(couleur.substr(3,2),16); + B=parseInt(couleur.substr(5,2),16); + if((G+R+B)>382){ + colT="#000000"; + }else{ + colT="#ffffff"; + } + $('#Btn-chatmenu').children('p').children('span').css('background-color',couleur); + $('#Btn-chatmenu').children('p').children('span').css('color',colT); + })(); + + $('#formChat').on('submit',function(e){ + socket.emit('chatNew',{ + auteur:$('#auteurChat').val(), + couleur:$('#couleurChat').val(), + message:$('#texteChat').val() + }); + $('#texteChat').val(''); + }); + + + //########"" + /* + $('#BB-chat2').on('click',function(){ + $('.bacs').css('display','none'); + $('.chat').css('display','block'); + $('.drag').css('width','calc(100% - 200px)'); + $('.drag').css('justify-content','space-around'); + }); + + $('#BB-bacs2').on('click',function(){ + $('.bacs').css('display',''); + $('.chat').css('display',''); + $('.drag').css('width',''); + $('.drag').css('justify-content',''); + + }); + */ + + $('#BB-bacs').on('click',function(){ + $('#cssJS').text(''); + }); + + $('#BB-arbre').on('click',function(){ + $('#cssJS').text( + '.chat{display:none}'+ + '.arbre{display:block}' + ); + }); + $('#BB-chat').on('click',function(){ + $('#cssJS').text( + '.chat{display:block}'+ + '.arbre{display:none}'+ + '@media (max-width:800px) and (min-width:401px){'+ + '.bacs{display:none;}'+ + '.chat{display:block;}'+ + '.drag{width:calc(100% - 200px);justify-content:space-around;}'+ + '}'+ + '@media (max-width:600px) and (min-width:401px){'+ + '.drag{width:calc(100% - 150px);justify-content:space-between;}'+ + '}' + ); + }); + $('#BB-chat4').on('click',function(){ + if($('#cssJSchat').text()===''){ + $('#cssJSchat').text( + '@media (max-width:400px){'+ + '.chat{display:block;}'+ + '}' + ); + }else{ + $('#cssJSchat').text(''); + } + }); + $('#BB-boxes').on('click',function(){ + $('#cssJS').text( + '@media (max-width:600px){'+ + '.bacs{display:none;}'+ + '.boxes{display:flex;}'+ + '}' + ); + }); + $('#BB-menu').on('click',function(){ + $('#cssJS').text( + '@media (max-width:400px){'+ + '.bacs{display:none;}'+ + '.menu-rang1{display:flex;}'+ + '.drag{top:100px;height:calc(100% - 100px);}'+ + '}' + ); + }); + + $('#Btn-couppre').on('mouseenter',function(){ + afficheNoeud(noeuds_precedents[noeuds_suivants.indexOf(noeudCourant)]); + }); + + $('#Btn-couppre').on('mouseleave',function(){ + afficheNoeud(noeudCourant); + }); + + $('.noeud').on('mouseenter',function(e){afficheNoeud(parseInt($(this).attr('id').replace(/^.*-/,'')));}); + $('.noeud').on('mouseleave',function(e){afficheNoeud(noeudCourant);}); + $('.noeudAutre').on('click',function(){socket.emit('changeNoeud',{noeud:parseInt($(this).attr('id').replace(/^.*-/,''))});}); + /////////////////////////// On lance tous les vnements ////////////////////////////////////////////////// + + function initEvents(){ + $('.boards').on('click.standard','.pion-onboard',action_clic_onboard); + $('.boards').on('mousewheel DOMMouseScroll','.pion-onboard',action_scroll_onboard); + $('.pion-onboard').draggable(draggableOnboard); + $('.pion-onbac').draggable(draggableOnbac); + $('.pion-onbox').draggable(draggableOnbox); + $('.bacBordure').droppable(droppableBac); + $('.board').droppable(droppableBoard); + $('.trash').droppable(droppableTrash); + $('.boards').on('click.standard','.board',clickable_board); + $('.boards').on('click.standard','.bouton-turnup',turnupBoard); + $('.boards').on('click.standard','.bouton-turnright',turnrightBoard); + $('.boards').on('click.standard','.bouton-turnleft',turnleftBoard); + $('.groupe-onbac').draggable(draggableGroupeOnbac); + //$('.boxes').on('click','.del-box',deleteBox); + $('.bacs').on('click.standard','.del-groupe',deleteGroupe); + $('.bacs').on('click.standard','.edit-groupe',displayEditGroupe); + $('.bacs').on('submit','.inputN',editGroupe); + $('.bacs').on('focusout','.inputN input',function(e){$(this).parent().submit();}); + $('.bacs').on('click.standard','.edit-bac',displayEditLabelBac); + $('.bacs').on('submit','.inputLabelBac',editLabelBac); + $('.bacs').on('focusout','.inputLabelBac input',function(e){$(this).parent().submit();}); + } + initEvents(); + + function stopEvents(){ + if($('.pion-onboard').length>0){ + $('.pion-onboard').draggable('destroy'); + $('.boards').off('click.standard','.pion-onboard',action_clic_onboard); + $('.boards').off('click.standard','.pion-onboard',action_scroll_onboard); + } + if($('.pion-onbac').length>0){ + $('.pion-onbac').draggable('destroy'); + $('.bacs').off('click.standard','.del-groupe',deleteGroupe); + $('.bacs').off('click.standard','.edit-groupe',displayEditGroupe); + $('.bacs').off('submit','.inputN',editGroupe); + } + if($('.pion-onbox').length>0){ + $('.pion-onbox').draggable('destroy'); + } + if($('.bac').length>0){ + $('.bacBordure').droppable('destroy'); + } + if($('.board').length>0){ + $('.board').droppable('destroy'); + $('.boards').off('click.standard','.board',clickable_board); + $('.boards').on('click.standard','.bouton-turnup',turnupBoard); + $('.boards').on('click.standard','.bouton-turnright',turnrightBoard); + $('.boards').on('click.standard','.bouton-turnleft',turnleftBoard); + } + if($('.trash').length>0){ + $('.trash').droppable('destroy'); + } + if($('.groupe-onbac').length>0){ + $('.groupe-onbac').draggable('destroy'); + } + //$('.boxes').on('click','.del-box',deleteBox); + $('.bacs').off('click.standard','.del-groupe',deleteGroupe); + } + + + + var flagLabel=false; + var flagN=false; + + + + + ////////////////////////// Recevoir les donnes du serveur ////////////////////////// + + socket.on('noname',function(){ + socket.emit('newplatoo',nomPlatoo); + }); + + socket.on('erase',function(data){ + Herase(data.noeud); + }); + + socket.on('add_bac',function(data){ + Hadd_bac(data.diese,data.label,data.num,data.noeud); + }); + + socket.on('add_trash',function(){ + Hadd_trash(); + }); + + socket.on('add_box',function(data){ + Hadd_box(data.nom,data.diese,data.svg,data.num,data.noeud); + }); + + socket.on('add_board',function(data){ + Hadd_board(data.nom,data.diese,data.svg,data.num,data.noeud) + }); + + socket.on('removeElement',function(data){ + HremoveElement(data.id,data.noeud); + }); + +/* socket.on('changePionOnboard',function(data){ + var topleft = abs2real(data.left,data.top,data.board,data.height); + var left = topleft.left; + var top = topleft.top; + HchangePionOnboard(diese=data.diese,type=data.type,top=top,left=left,height=data.height,board=data.board,svg=data.svg); + });*/ + + socket.on('createGroupeOnbac',function(data){ + HcreateGroupeOnbac(type=data.type,diese=data.diese,n=data.n,bac=data.bac,svg=data.svg,num=data.num,noeud=data.noeud); + }); + + socket.on('createPionOnboard',function(data){ + var topleft = abs2real(data.left,data.top,data.board,data.height); + var left = topleft.left; + var top = topleft.top; + HcreatePionOnboard(data.type,data.diese,data.board,top,left,data.height,data.svg,data.directed,data.num,data.noeud); + }); + + /*socket.on('modifyGroup',function(data){ + console.log('attatta'); + HmodifyGroup(data.diese,data.n,data.bac); + });*/ + + socket.on('getTabPion',function(){ + socket.emit('getTabPion',{id_joueur : joueurActif() }); + }); + + socket.on('setTabPion',function(data){ + tabPionListe=data.tabPionListe; + tabPionChange=data.tabPionChange; + tabPionMove=data.tabPionMove; + tabPionTaille=data.tabPionTaille; + tabPionSvg=data.tabPionSvg; + }); + + socket.on('setAction',function(data){ + + action_clic_onboardStr = data.action_clic_onboard; + action_scroll_onboardStr = data.action_scroll_onboard; + clickable_boardStr = data.clickable_board; + click_board_create_type = data.click_board_create_type; + click_board_move_type = data.click_board_move_type; + click_board_move_bac = data.click_board_move_bac; + // switch(action_clic_onboardStr){ + // case 'deletePionOnboard' : var action_clic_onboard = deletePionOnboard; break; + // case 'changePionOnboard' : var action_clic_onboard = changePionOnboard; break; + // case 'movePionOnboard' : var action_clic_onboard = movePionOnboard; break; + // } + + // switch(action_scroll_onboardStr){ + // case 'deletePionOnboard' : var action_scroll_onboard = deletePionOnboard; break; + // case 'changePionOnboard' : var action_scroll_onboard = changePionOnboard; break; + // case 'movePionOnboard' : var action_scroll_onboard = movePionOnboard; break; + // } + + // switch(clickable_boardStr){ + // case 'clickable_boardNew' : var clickable_board = clickable_boardNew; break; + // case 'clickable_boardMove' : var clickable_board = clickable_boardMove; break; + // } + + var action_clic_onboard = eval(action_clic_onboardStr); + var action_scroll_onboard = eval(action_scroll_onboardStr); + var clickable_board = eval(clickable_boardStr); + }); + + socket.on('changeLabelBac',function(data){ + data.label = data.label.substring(0,20); + HchangeLabelBac(data.diese,data.label,data.oldnum,data.num,data.noeud); + }); + + socket.on('refresh',function(){ + location.reload(); + }); + + socket.on('chatNew',function(data){ + Hchat(data.time,data.couleur,data.auteur,data.message,data.id); + }); + + socket.on('newNoeud',function(data){ + noeudCourant=data.noeud; + + //mise jour de Save + Save.push(data.save); + + + //mise jour de noeuds_precedents,noeuds_suivants + //var noeuds_suivants=[]; + //var noeuds_precedents=[]; + + //for(var i=0; i< Save.length;i++){ + // noeuds_suivants.push(Save[i].noeud_suivant) + // noeuds_precedents.push(Save[i].noeud_precedent) + //} + + noeuds_suivants.push(data.save.noeud_suivant) + noeuds_precedents.push(data.save.noeud_precedent) + + //mise jour des noeuds afficher + noeudAff = [noeudCourant]; + var new_noeud=0; + while((noeudAff.indexOf(0)==-1) && (noeuds_suivants.indexOf(noeudAff[noeudAff.length-1])!=-1)){ + new_noeud=noeuds_precedents[noeuds_suivants.indexOf(noeudAff[noeudAff.length-1])]; + noeudAff.push(new_noeud); + } + if(noeudAff[noeudAff.length-1]==0){ + noeudAff.pop(); + } + + //mise jour des paramtres x, y, xpre, ypre de Save + + var noeuds_sui=[1]; + var noeuds_pre=[0]; + var y=[0]; + var epaisseur=[1]; + //on a dj fait le premier noeud + for(var i = 1; i=new_y){ + y[j]=y[j]+1; + } + } + + //on ajoute le nouveau y + y.push(new_y) + + //nouvel indice + new_y_ind=y.length-1; + + //on corrige l'epaisseur + var noe = Save[i].noeud_precedent + while(noe>0){ + epaisseur[noeuds_sui.indexOf(noe)]+=1; + noe=Save[noeuds_sui.indexOf(noe)].noeud_precedent + } + epais=1; + } + + Save[i].x=Save[noeuds_sui.indexOf(Save[i].noeud_precedent)].x+1 + Save[i].y=new_y_ind + Save[i].ypre=y_pre_ind + Save[i].xpre=Save[noeuds_sui.indexOf(Save[i].noeud_precedent)].x + + noeuds_sui.push(Save[i].noeud_suivant); + noeuds_pre.push(Save[i].noeud_precedent); + epaisseur.push(epais); + } + + SaveYmax=Math.max(...y); + + //on cherche xmax et on remplace les indices de y par les vraies valeurs + xmax=0; + for(var i = 0; ixmax){ + xmax=Save[i].x + } + Save[i].y = y[Save[i].y] + Save[i].ypre = y[Save[i].ypre] + + } + + SaveXmax=xmax; + + //mise jour des noeuds svg : on reconstruit tout l'arbre + var arbre=''; + for(var i=1;i'; + } + for(var i=0;i'; + } + arbre += ''; + + $('#arbre-svg').remove(); + $(arbre).appendTo('.arbre'); + $('.noeud').on('mouseenter',function(e){afficheNoeud(parseInt($(this).attr('id').replace(/^.*-/,'')));}); + $('.noeud').on('mouseleave',function(e){afficheNoeud(noeudCourant);}); + $('.noeud').off('click'); + $('.noeudAutre').on('click',function(){socket.emit('changeNoeud',{noeud:parseInt($(this).attr('id').replace(/^.*-/,''))});}); + }); + + + socket.on('changeNoeud',function(data){ + noeudCourant=data.noeud; + + //mise jour des noeuds afficher + var noeudAff = [noeudCourant]; + var new_noeud=0; + while((noeudAff.indexOf(0)==-1) && (noeuds_suivants.indexOf(noeudAff[noeudAff.length-1])!=-1)){ + new_noeud=noeuds_precedents[noeuds_suivants.indexOf(noeudAff[noeudAff.length-1])]; + noeudAff.push(new_noeud); + } + if(noeudAff[noeudAff.length-1]==0){ + noeudAff.pop(); + } + + //maj le noeud courant + $('.noeud').removeClass('noeudCourant').addClass('noeudAutre'); + $('#noeud-'+noeudCourant).removeClass('noeudAutre').addClass('noeudCourant'); + + }); + + // socket.on('deletePionOnboard',function(data){ + // $('#board-'+data.indexBoard).children('#pion-'+data.indexPion).remove(); + // }); + // socket.on('deleteGroupe',function(data){ + // $('#bac-'+data.indexBac).children('#groupe-'+data.indexPion).remove(); + // }); + + //////////////////////////Arranger la taille du plateau/////////////// + $( window ).on( "load",function(){tailleBoard();}) + $('.board-svg').on( "load",function(){tailleBoard();}) + //$(document).ready(function(){tailleBoard();}); + + + +}); diff --git a/views/accueil.ejs b/views/accueil.ejs new file mode 100755 index 0000000..122dcad --- /dev/null +++ b/views/accueil.ejs @@ -0,0 +1,74 @@ + + + + + + Platoo + + +
+
+

Bienvenue sur Platôo !

+
+
+
+
+

+ Ce site permet de jouer simplement et à distance à de nombreux jeux plateau. Pas besoin d'inscription : retenir le lien de votre Platôo suffit ! Attention : un platôo a une durée de vie de trois mois. Ce site est en construction. +

+
+
+

Créer un nouveau platôo :

+
+
+ + + + Générer un nom au hasard +
+
+ + +
+
+
+
+ + + +
+
+ + + +
+
+
+ +
+
+
+ + + + + + + + + + diff --git a/views/platoo.ejs b/views/platoo.ejs new file mode 100755 index 0000000..744e811 --- /dev/null +++ b/views/platoo.ejs @@ -0,0 +1,401 @@ + + + + + + + Platoo + + + + +
+
+ <% var i =0%> + <% while(i < objBoxes.length){%> + <%var diese=objBoxes[i].diese%> +
+ pion_<%= objBoxes[i].nom %> +
+ <%i=i+1;%> + <%}%> +
+ +
+ <% for(var i = 0; i < objBoards.length; i++){%> + <% var dispBoard = 'inactif';%> + <% var j=0;%> + <%while(j < objBoards[i].boards.length && dispBoard=='inactif'){%> + <%dispBoard = objBoards[i].boards[j].display%> + <% j += 1;%> + <%}%> +
+
+ + <%for(var j = 0; j < objBoards[i].boards.length; j++){%> + board_<%= objBoards[i].boards[j].nom %> + <%}%> + <%for(var j = 0; j < objBoards[i].pions.length; j++){%> + pion_<%=  objBoards[i].pions[j].nom %> + <%}%> +
+
+ fleche + turn up + turn right + turn left +
+
+ <%}%> +
+ + +
+ <% for(var i = 0; i < objBacs.length; i++){%> + <% var dispBac = 'inactif';%> + <% var j=0;%> + <%while(j < objBacs[i].bacs.length && dispBac=='inactif'){%> + <%dispBac = objBacs[i].bacs[j].display%> + <% j += 1;%> + <%}%> +
+

+ <%var defInput="";%> + <%for(var j = 0; j < objBacs[i].bacs.length; j++){%> + <%= objBacs[i].bacs[j].label %> + <%if(objBacs[i].bacs[j].display=="actif"){%> + <%defInput=objBacs[i].bacs[j].label;%> + <%}%> + <%}%> + edit +

+
+ +
+
+ <%for(var j = 0; j +
+ pion_<%= objBacs[i].groupes[j].nom %> +

<%= objBacs[i].groupes[j].N %>

+
+ +
+
+ del + edit +
+
+ <%}%> +
+
+ <%}%> + <% for(var i = 0; i < NTrashs; i++){%> +
+
+ <%}%> +
+
+ + + + + + +
+
+ + +
+
+ <% for(var i=0;i + <% + R=parseInt(Chat[i].couleur.substr(1,2),16); + G=parseInt(Chat[i].couleur.substr(3,2),16); + B=parseInt(Chat[i].couleur.substr(5,2),16); + if((G+R+B)>382){ + colT="#000000"; + }else{ + colT="#ffffff"; + }%> + <%heure=/\d{1,2}:\d{2}(?=:)/; + Chat[i].time = heure.exec(Chat[i].time);%> +
+
+ <%=Chat[i].auteur%> : + <%=Chat[i].time%> +
+
+

+ <%=Chat[i].message%> +
+
+

+
+ <%}%> +
+
+ +
+ + <%for(var i=1;i + + <%}%> + <%for(var i=0;i + <%if(Save[i].noeud_suivant==noeud_courant){%> + <%var classN='noeudCourant';%> + <%}else{%> + <%var classN='noeudAutre';%> + <%}%> + + <%}%> + +
+ + + + + + + + + + + +