mirror of
https://github.com/sstent/alex_app1.git
synced 2025-12-06 08:02:03 +00:00
fixing async for loops properly
This commit is contained in:
51
admin.html
51
admin.html
@@ -15,54 +15,12 @@
|
||||
<link rel="stylesheet" href="/static/stylesheets/smoothness/jquery-ui-1.8.20.custom.css"/>
|
||||
<link rel="stylesheet" href="/static/stylesheets/jui_style.css"/>
|
||||
<link rel="stylesheet" href="/static/stylesheets/style.css"/>
|
||||
<script id="movieTemplate1" type="text/x-jsrender">
|
||||
<h3>{{:Activities.Activity.date}}</h3>
|
||||
<div class="workoutdata">
|
||||
<a href=# class="activitydelete" title="{{:_id}}" >Delete</a>
|
||||
<a href=# class="activityedit" title="{{:_id}}" >Edit</a>
|
||||
{{if Activities.Activity.Lap}}
|
||||
{{for Activities.Activity.Lap}}
|
||||
<p>Workout step {{:#index+1}} -
|
||||
{{if cardio}} Cardio - {{:cardio.name}} - {{:cardio.distance}} x {{:cardio.time}} -- {{:cardio.muscledata}} {{/if}}
|
||||
{{if exercise}} Exercise - {{:exercise.name}} - {{:exercise.sets}} x {{:exercise.reps}} with {{:exercise.weight}} Kg -- {{:exercise.muscledata}}{{/if}}
|
||||
{{if rest}} Recovery Step {{/if}}
|
||||
</p>
|
||||
|
||||
{{/for}}
|
||||
{{/if}}
|
||||
</div>
|
||||
|
||||
</script>
|
||||
<script id="DataTemplate1" type="text/x-jsrender">
|
||||
<h3>{{:Activities.Activity.date}}</h3>
|
||||
<div class="workoutdata">
|
||||
// <h4>{{:Activities.Activity.date}} - {{:Activities.Activity.name}}</h4>
|
||||
<a href=# class="activitydelete" title="{{:_id}}" >Delete</a>
|
||||
<a href=# class="activityedit" title="{{:_id}}" >Edit</a>
|
||||
</div>
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="logo"><H1>BodyREP Demo ADMIN</h1></div>
|
||||
<div id="display">
|
||||
|
||||
<ul>
|
||||
<li style="display: none" class="new-lap ui-state-default removable">
|
||||
<label class="uiindex"></label>
|
||||
<select class="laptype" >
|
||||
<option value="">Select...</option>
|
||||
<option value="Cardio">Cardio</option>
|
||||
<option value="Exercise">Weights</option>
|
||||
</select>
|
||||
<span><a href=# class=delete>delete</a></span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<button type="button" id="addexerciseformopen" value="AddExercise"/>Add New Exercise</button>
|
||||
|
||||
<div id="ExerciseEditor" >
|
||||
@@ -79,20 +37,11 @@
|
||||
</ul>
|
||||
<button type="submit" id="saveexercises" value="Save">Save</button>
|
||||
<button type="button" id="cancelexerciseform" value="Cancel"/>Reset</button>
|
||||
|
||||
</form>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div></body>
|
||||
</html>
|
||||
|
||||
122
app.js
122
app.js
@@ -12,20 +12,15 @@ var db = mongo.db('localhost:27017/test');
|
||||
var testcollection = db.collection('testcollection');
|
||||
var exercisecollection = db.collection('exercisecollection');
|
||||
var util = require('util');
|
||||
//var parser = new xml2js.Parser();
|
||||
var waiting = 0;
|
||||
var waitingj = 0;
|
||||
//var extname;
|
||||
var app = require('http').createServer(function handler(request, response) {
|
||||
var extname;
|
||||
|
||||
|
||||
console.log('request starting...;' + request.url);
|
||||
|
||||
switch(request.url) {
|
||||
|
||||
case '/admin':
|
||||
|
||||
//var filePath = '.' + request.url;
|
||||
//if (filePath == './')
|
||||
filePath = './admin.html';
|
||||
|
||||
extname = path.extname(filePath);
|
||||
@@ -118,107 +113,42 @@ io.sockets.on('connection', function(socket) {
|
||||
///////////////////////////////////////////
|
||||
socket.on('getactivites', function(data) {
|
||||
console.log('getactivities');
|
||||
waiting = 0;
|
||||
waitingj = 0;
|
||||
testcollection.find().toArray(function(err, result) {
|
||||
|
||||
|
||||
if (err) throw err;
|
||||
for (var j in result) {
|
||||
console.log('getactivities' + JSON.stringify(result));
|
||||
var eresult = result;
|
||||
var i;
|
||||
waitingj ++;
|
||||
async.forEach(j, function(item,callback) {
|
||||
console.log('iteration ' + item);
|
||||
console.log('in async' + JSON.stringify(result[item]));
|
||||
result[item]._IDcopy = result[item]._id;
|
||||
async.forEachSeries(result,
|
||||
function(item,callback2) {
|
||||
async.forEachSeries(item.Activities.Activity.Lap,
|
||||
function(itemx,callback3){
|
||||
exercisecollection.findById(itemx.selection, function(err, exresult) {
|
||||
if (err) throw err;
|
||||
itemx.exercisename = exresult.exercise.name;
|
||||
itemx.exercisemuscledata = exresult.exercise.muscledata;
|
||||
itemx.exerciseclass = exresult.exercise.type;
|
||||
callback3();
|
||||
});
|
||||
}, function(err){
|
||||
|
||||
// if any of the saves produced an error, err would equal that error
|
||||
callback2();
|
||||
});
|
||||
|
||||
|
||||
for(i in result[j].Activities.Activity.Lap) {
|
||||
//////////////
|
||||
waiting ++;
|
||||
getbyidall(eresult,result[j].Activities.Activity.Lap[i].selection,i,j);
|
||||
////////////////////
|
||||
console.log('below_i = ' + i);
|
||||
//console.log('DATA = ' + JSON.stringify(callback));
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
////////////////////////////////////////
|
||||
function deiteratej() {
|
||||
if (!waiting) {
|
||||
waitingj --;
|
||||
}
|
||||
}
|
||||
function completeall(result) {
|
||||
if (!waiting) {
|
||||
console.log('done');
|
||||
}, function(err){
|
||||
socket.emit('populateactivities', result);
|
||||
}
|
||||
}
|
||||
function complete(result) {
|
||||
if (!waiting) {
|
||||
console.log('done');
|
||||
socket.emit('populateactivitybyid', result);
|
||||
}
|
||||
}
|
||||
function getbyidall (result,docid,iteration,iterationtop){
|
||||
exercisecollection.findById(docid, function(err, exresult) {
|
||||
if (err) throw err;
|
||||
waiting --;
|
||||
console.log('waiting = ' + waiting);
|
||||
console.log('inside_j = ' + iterationtop);
|
||||
console.log('inside_i = ' + iteration);
|
||||
result[iterationtop].Activities.Activity.Lap[iteration].exercisename = exresult.exercise.name;
|
||||
result[iterationtop].Activities.Activity.Lap[iteration].exercisemuscledata = exresult.exercise.muscledata;
|
||||
result[iterationtop].Activities.Activity.Lap[iteration].exerciseclass = exresult.exercise.type;
|
||||
deiteratej();
|
||||
completeall(result);
|
||||
|
||||
});
|
||||
}
|
||||
function getbyid (result,docid,iteration){
|
||||
exercisecollection.findById(docid, function(err, exresult) {
|
||||
if (err) throw err;
|
||||
waiting --;
|
||||
console.log('waiting = ' + waiting);
|
||||
console.log('inside_i = ' + iteration);
|
||||
result.Activities.Activity.Lap[iteration].exercisename = exresult.exercise.name;
|
||||
result.Activities.Activity.Lap[iteration].exercisemuscledata = exresult.exercise.muscledata;
|
||||
result.Activities.Activity.Lap[iteration].exerciseclass = exresult.exercise.type;
|
||||
complete(result);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
///////////////////////////////////////
|
||||
socket.on('getactivitybyid', function(id) {
|
||||
waiting = 0;
|
||||
testcollection.findById(id, function(err, result) {
|
||||
if (err) throw err;
|
||||
//console.log('Activity result = ' + JSON.stringify(result));
|
||||
//var unpackedresult = JSON.parse(result);
|
||||
var eresult = result;
|
||||
|
||||
var i;
|
||||
for(i in result.Activities.Activity.Lap) {
|
||||
//console.log('Activity parse result = ' + JSON.stringify(item.val1));
|
||||
console.log('above_i = ' + i);
|
||||
///////////////
|
||||
waiting ++;
|
||||
getbyid(eresult,result.Activities.Activity.Lap[i].selection,i);
|
||||
|
||||
////////////////////
|
||||
console.log('below_i = ' + i);
|
||||
//console.log('DATA = ' + JSON.stringify(callback));
|
||||
}
|
||||
|
||||
|
||||
async.forEachSeries(item.Activities.Activity.Lap,
|
||||
function(itemx,callback3){
|
||||
exercisecollection.findById(itemx.selection, function(err, exresult) {
|
||||
if (err) throw err;
|
||||
itemx.exercisename = exresult.exercise.name;
|
||||
itemx.exercisemuscledata = exresult.exercise.muscledata;
|
||||
itemx.exerciseclass = exresult.exercise.type;
|
||||
callback3();
|
||||
});
|
||||
}, function(err){callback2();});
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
<script id="DataTemplate1" type="text/x-jsrender">
|
||||
<h3>{{:Activities.Activity.date}}</h3>
|
||||
<div class="workoutdata">
|
||||
// <h4>{{:Activities.Activity.date}} - {{:Activities.Activity.name}}</h4>
|
||||
<a href=# class="activitydelete" title="{{:_id}}" >Delete</a>
|
||||
<a href=# class="activityedit" title="{{:_id}}" >Edit</a>
|
||||
</div>
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
$(document).ready(function() {
|
||||
//makes buttons buttons
|
||||
$("button").button();
|
||||
var socket = io.connect();
|
||||
socket.emit('getexercises', 'please');
|
||||
|
||||
|
||||
$("#ExerciseEditorForm").dialog({ autoOpen: false });
|
||||
@@ -24,51 +26,17 @@ $(document).ready(function() {
|
||||
$('span.EditExerciseID').removeAttr('docid');
|
||||
var newElem = $('<li><label>Name</label><input type="text" name="exercise.name" value=""></li>');
|
||||
newElem.append('<li><label>exercise.type</label><select name="exercise.type" ><option value="">Select...</option><option value="Cardio">Cardio</option><option value="Exercise">Weights</option></select></li>');
|
||||
// newElem.append('<li><label>exercise.type</label><input type="text" name="exercise.type" value=""></li>');
|
||||
newElem.append('<li><label>Muscle Data Array</label><input type="text" name="exercise.muscledata" value=""></li>');
|
||||
$(newElem).appendTo('#editexercise');
|
||||
$("#ExerciseEditorForm").dialog("open");
|
||||
});
|
||||
|
||||
|
||||
//makes datepickers
|
||||
// $( "#datepicker" ).datepicker();
|
||||
// $('#Activity').find('input.datepicker').datepicker();
|
||||
// $('#Activity').find('input.datepicker').datepicker('setDate', new Date());
|
||||
|
||||
var socket = io.connect();
|
||||
//exercise_autocompletedata = "unset";
|
||||
//bike_autocompletedata = "unset";
|
||||
|
||||
//socket.emit('getactivites', 'please');
|
||||
socket.emit('getexercises', 'please');
|
||||
//socket.emit('getexerciselist', 'cardio');
|
||||
//socket.emit('getexerciselist', 'weights');
|
||||
|
||||
// socket.on('populateactivities', function(json) {
|
||||
// console.log('#poulate recieved');
|
||||
// var content = "";
|
||||
// $(".workoutdata").hide();
|
||||
// $('#ActivityList').empty();
|
||||
// $( "#ActivityList" ).html(
|
||||
// $( "#movieTemplate1" ).render( json )
|
||||
// );
|
||||
// $(".ui-accordion-content").css("display", "block");
|
||||
// // $("#ActivityList").accordion('destroy').accordion({
|
||||
// // header: 'h3',
|
||||
// // active: false,
|
||||
// // collapsible: true
|
||||
// // });
|
||||
// });
|
||||
//poulate activity by id
|
||||
|
||||
|
||||
socket.on('populateexercisebyid', function(array) {
|
||||
// clear it first
|
||||
$('ul#editexercise li').remove();
|
||||
$('span.EditExerciseID').removeAttr('docid');
|
||||
|
||||
//set document id
|
||||
$('span.EditExerciseID').attr('docid',array._id);
|
||||
console.log('name= ' + array.exercise.name);
|
||||
console.log('class= ' + array.exercise.type);
|
||||
@@ -82,7 +50,6 @@ $(document).ready(function() {
|
||||
socket.on('populateexercises', function(json) {
|
||||
var content = "";
|
||||
$('ul#exercises li').remove();
|
||||
///// for loop
|
||||
var array = json;
|
||||
exercise_autocompletedata = array;
|
||||
$.each(json, function(index, array) {
|
||||
@@ -91,49 +58,6 @@ $(document).ready(function() {
|
||||
;
|
||||
});
|
||||
|
||||
// //THe Sortable Stuff
|
||||
// $("#sortable").sortable({
|
||||
// placeholder: "ui-state-highlight",
|
||||
// revert: true,
|
||||
// stop: function(event, ui) {
|
||||
// $('#sortable').trigger('sortupdate');
|
||||
// }
|
||||
|
||||
// });
|
||||
|
||||
// $("#sortable").bind('sortupdate', function(event, ui) {
|
||||
// $('#sortable li').each(function(){
|
||||
// var itemindex= $(this).index();
|
||||
// $(this).children('label.uiindex').html('Exercise '+ itemindex );
|
||||
// $(this).find('input, select').not('.laptype').each(function(){
|
||||
// var newname = $(this).attr('name').replace(/\[[0-9]*\]/,'[' + itemindex + ']');
|
||||
// $(this).attr("name",newname);
|
||||
// });
|
||||
// $(this).find('input.exertags').autocomplete({source: exercise_autocompletedata});
|
||||
// });
|
||||
// });
|
||||
|
||||
|
||||
// $("#sortableexercises").bind('sortupdate', function(event, ui) {
|
||||
// $('#sortableexercises li').each(function(){
|
||||
// var itemindex= $(this).index();
|
||||
// $(this).find('input, select').each(function(){
|
||||
// var newname = $(this).attr('name').replace(/\[[0-9]*\]/,'[' + itemindex + ']');
|
||||
// $(this).attr("name",newname);
|
||||
// });
|
||||
// });
|
||||
// });
|
||||
|
||||
// $('#ActivityList').delegate('a.activitydelete', 'click', function() {
|
||||
// socket.emit('delactivity', $(this).attr('title'));
|
||||
// return false;
|
||||
// });
|
||||
|
||||
// $('#ActivityList').delegate('a.activityedit', 'click', function() {
|
||||
// socket.emit('getactivitybyid', $(this).attr('title'));
|
||||
// $("#Activity").dialog("open");
|
||||
// return false;
|
||||
// });
|
||||
|
||||
$('#exercises').delegate('a.exercisedelete', 'click', function() {
|
||||
console.log("exercisedelete_click");
|
||||
@@ -150,46 +74,6 @@ $(document).ready(function() {
|
||||
|
||||
|
||||
|
||||
// $('ul').on('click', '.delete',function() {
|
||||
// $(this).closest('li').remove();
|
||||
// $('#sortable').trigger('sortupdate');
|
||||
// });
|
||||
|
||||
//adds selectable element
|
||||
// $("button").click(function() {
|
||||
// var addtype = $(this).attr('value');
|
||||
// var newElem = $('.new-' + addtype).clone(true).attr('style', 'display: block');
|
||||
// $(newElem).removeClass("new-" + addtype);
|
||||
// $(newElem).children('input').attr('disabled',false);
|
||||
// $(newElem).appendTo('#sortable');
|
||||
// $(newElem).sortable( "refresh" );
|
||||
|
||||
|
||||
// //$('#sortable').trigger('sortupdate');
|
||||
// //$('#sortableexercises').trigger('sortupdate');
|
||||
// });
|
||||
|
||||
// $("button.AddExercise").click(function() {
|
||||
// $( "ul#sortableexercises" ).append('<li class=ui-state-default><input type="text" name="exercise[].name" hint="Name" placeholder="Exercise Name"><input type="text" name="exercise[].class" placeholder="cardio or weights"><input class="addexercisemusclearray" type="text" name="exercise[].muscledata" hint="Muscle Array" placeholder="Muscle Array"><a href=# class=delete>delete</a></li>')
|
||||
// $('#sortableexercises').trigger('sortupdate');
|
||||
// });
|
||||
|
||||
|
||||
// $('#save').click(function() {
|
||||
// var docid =$(this).closest('span').attr('docid');
|
||||
// var selector= "#myForm"
|
||||
// var formDataAll = $(selector).toObject({mode: 'all'});
|
||||
// socket.emit('addactivity', formDataAll[0], docid);
|
||||
// $('ul#sortable li').remove('.removable');
|
||||
// $('#Activity').find('input').attr('value','');
|
||||
// $('span.ActivityID').removeAttr('docid');
|
||||
// $('#Activity').find('input.datepicker').datepicker();
|
||||
// $('#Activity').find('input.datepicker').datepicker('setDate', new Date());
|
||||
// socket.emit('getactivites', 'please');
|
||||
// socket.emit('getexercises', 'please');
|
||||
// return false;
|
||||
|
||||
// });
|
||||
|
||||
$('#saveexercises').click(function() {
|
||||
console.log("saving exercise");
|
||||
@@ -202,30 +86,15 @@ $(document).ready(function() {
|
||||
$('#editexercise li').children('select').attr('value','');
|
||||
$('span.EditExerciseID').removeAttr('docid');
|
||||
socket.emit('getexercises', 'please');
|
||||
//$('ul#newexercises').find('input').attr('value','');
|
||||
//$('ul#newexercises').find('select').attr('selected','');
|
||||
//socket.emit('getactivites', 'please');
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
// $('#cancelform').click(function() {
|
||||
// $('ul#sortable li').remove('.removable');
|
||||
// $('span.ActivityID').removeAttr('docid');
|
||||
// $('#Activity').find('input').attr('value','');
|
||||
// $('#Activity').find('input.datepicker').datepicker();
|
||||
// $('#Activity').find('input.datepicker').datepicker('setDate', new Date());
|
||||
// socket.emit('getactivites', 'please');
|
||||
// socket.emit('getexercises', 'please');
|
||||
// return false;
|
||||
// });
|
||||
|
||||
$('#cancelexerciseform').click(function(){
|
||||
//$('ul#editexercise li').remove();
|
||||
$('#editexercise li').children('input').attr('value','');
|
||||
$('span.EditExerciseID').removeAttr('docid');
|
||||
socket.emit('getexercises', 'please');
|
||||
//return false;
|
||||
return false;
|
||||
});
|
||||
|
||||
//document closing
|
||||
|
||||
Reference in New Issue
Block a user