Files
DemoApp/public/javascripts/scripts.js
2013-02-14 08:18:17 -05:00

361 lines
14 KiB
JavaScript

$(document).ready(function() {
//makes buttons buttons
$("button").button();
console.log('document ready');
//makes datepickers
$( ".datepicker" ).datepicker();
//$('#newworkout').find('input.datepicker').datepicker();
$('.datepicker').datepicker('setDate', new Date());
//$('.datepicker').datepicker("hide");
//jsut everything work better
$.ajax({async:false});
jQuery.extend({
getValues: function(url) {
var result = null;
$.ajax({
url: url,
type: 'get',
dataType: 'json',
async: false,
success: function(data) {
result = data;
}
});
return result;
}
});
originalExerciselist = $.getValues("/api/exerciselist");
//*[@id="F_x5F_Pectorals"]
// $('div#SVG1').empty().load("/images/BlankBody.svg", function(){
// console.log('svg loaded');
// });
// $('div#SVG1').svg({
// loadURL: '/images/BlankBody.svg', // External document to load
// onLoad: null, // Callback once loaded
// settings: {width: '10cm', height: '5cm'}, // Additional settings for SVG element
// initPath: ''});
$('span.SVGBODY').empty().load("/images/BlankBody.svg", function(){
//$("button").button();
});
var colors = "0f0 0ff f60 f0f 00f f00".split(' '), i=0;
$(document).on('click', '.SVGBODYFilter g',(function() {
console.log('click ' + this.id);
$(this).children('path').css("fill",'#'+colors[i++%colors.length] +'');
})
);
$("button#addExercise").click(function() {
console.log("click!");
var newElem = $('<li class=ui-state-default ><label for="element">elements[0][exerciseID]<br /></label><input name="elements[][exerciseID]" class="element"><button type="button" class="addSet">Add Set</button><button type="button" class="delete">Delete Exercise</button><ul class="sets"></ul></li>');
$(newElem).appendTo('ul#exercises');
$("button").button();
$( "ul#exercises" ).sortable( "refresh" );
$('#newworkout').trigger('sortupdate');
});
$(document).on('click', '.addSet',(function() {
var newElem = $('<li class="set"><label for="element" name="elements[0][splits][0][reps]">elements[0][splits][0][reps]<br /></label><input name="elements[0][splits][0][reps]" class="element"><label for="element" name="elements[0][splits][0][weight]"><br />elements[0][splits][0][weight]<br /></label><input name="elements[0][splits][0][weight]" class="element"><button type="button" class="delete">Delete Set</button></li>');
$(this).siblings('ul.sets').append(newElem);
$("button").button();
$("ul.sets").sortable({
items: "> li",
cancel: ':input, button' ,
placeholder: "ui-state-highlight",
revert: true,
start: function(e, ui){
ui.placeholder.height(ui.item.height());
},
stop: function(event, ui) {
$('#newworkout').trigger('sortupdate');
}
});
$( "#exercises" ).sortable( "refresh" );
$( ".sets" ).sortable( "refresh" );
$('#newworkout').trigger('sortupdate');
}));
$(document).on('click', '.delete',function() {
$(this).closest('li').remove();
$('#newworkout').trigger('sortupdate');
});
$("#newworkout").bind('sortupdate', function(event, ui) {
$('#exercises > li').each(function(){
var itemindex= $(this).index();
// var newname = $(this).find('input, select').attr('name').replace(/elements\[[0-9]*\]/,'elements[' + itemindex + ']');
$(this).find('input, select').each(function() {
var newname = $(this).attr('name').replace(/elements\[[0-9]*\]/,'elements[' + itemindex + ']');
$(this).attr('name', newname);
});
// $(this).find('label').each(function() {
// var value = $(this).attr('href');
// console.log ('value -' + value);
// $(this).attr('href', value.replace(/elements\[[0-9]*\]/,'elements[' + itemindex + ']'));
// //var newname = $(this).html.replace(/elements\[[0-9]*\]/,'elements[' + itemindex + ']');
// //$(this).html(newname);
// });
$(this).find('ul li').each(function(){
var itemindex2= $(this).index();
$(this).children('input').each(function(){
var newname2 = $(this).attr('name').replace(/\[splits\]\[[0-9]*\]/,'[splits][' + itemindex2 + ']');
newname2 = newname2.replace(/elements\[[0-9]*\]/,'elements[' + itemindex + ']');
$(this).attr('name', newname2);
});
$(this).children('label').each(function(){
//var newname2 = $(this).attr('name').replace(/\[splits\]\[[0-9]*\]/,'[splits][' + itemindex2 + ']');
//newname2 = newname2.replace(/elements\[[0-9]*\]/,'elements[' + itemindex + ']');
var newname2 = 'Set '+ (itemindex2 + 1 ) + '';
$(this).html(newname2);
});
//Only show delete if more than 1 set
if ( $(this).siblings('.set').length > 0 ) {
$(this).children('.delete').show();
} else {
$(this).children('.delete').hide();
}
});
});
//return false;
});
$("#Leftpane").delegate("button.recent-link", "click",function () {
var id = $(this).attr('value');
$('div#Rightpane').empty().load("/workouts/"+ id + "/recent/", function(){
$("button").button();
$('span.SVGBODY').empty().load("/images/BlankBody.svg", function(){
//$("button").button();
});
});
$('div#Leftpane').empty().load("/users/"+ id + "/sidebar", function(){
$("button").button();
});
});
$("#Leftpane").delegate("button.newex-link", "click",function () {
var id = $(this).attr('value');
$('div#Rightpane').empty().load(id);
$('div#Leftpane').empty().load("/workouts/filters", function(){
$('span.SVGBODYFilter').empty().load("/images/BlankBody.svg", function(){
//$("button").button();
});
PopulateExerciseList(originalExerciselist);
$("ul#exercises").sortable({
items: "> li",
cancel: ':input, button' ,
placeholder: "ui-state-highlight",
revert: true,
start: function(e, ui){
ui.placeholder.height(ui.item.height());
},
stop: function(event, ui) {
$('#newworkout').trigger('sortupdate');
}
});
});
$("button").button();
});
$("#top").delegate("button.home-link", "click",function() {
//$("#top").delegate("button.home-link", "click",function () {
// window.location = this.id;
var id = $(this).attr('value');
$('div#Rightpane').empty().load("/workouts/"+ id + "/recent/", function(){
$("button").button();
console.log('here');
$('span.SVGBODY').empty().load("/images/BlankBody.svg", function(){
//$("button").button();
});
});
$('div#Leftpane').empty().load("/users/"+ id + "/sidebar", function(){
$("button").button();
});
});
$("#Rightpane").delegate("a", "click",function() {
console.log("yup yup" + $(this).attr('href'));
var id = $(this).attr('href');
$('div#Rightpane').empty().load(id , function(){
$("button").button();
});
// Stop regular handling of "click" in IE (and some others)
return false;
});
$("#Leftpane").delegate("button.map-link", "click",function () {
var id = $(this).attr('value');
$('div#Rightpane').empty().load(id);
$("button").button();
});
$(document).on('click', '.addthisExercise',(function() {
// $("button.addthisExercise").click(function() {
console.log("This exercise name li" + JSON.stringify($(this).closest('li').data()));
var newElem = $('<li class=ui-state-default ><label for="element">Name</label><input name="exercisename" class="element" value="' + $(this).closest('li').data('name') + '"><input name="elements[][exerciseID]" class="hiddenelement" value="' + $(this).closest('li').data('exid') + '"><input name="elements[][Modifier]" class="element" value="' + $(this).closest('li').data('musclearrayMod') + '"><button type="button" class="addSet">Add Set</button><button type="button" class="delete">Delete Exercise</button><ul class="sets"><li class="set"><label for="element" name="elements[0][splits][0][reps]">elements[0][splits][0][reps]<br /></label><input name="elements[0][splits][0][reps]" class="element"><label for="element" name="elements[0][splits][0][weight]"><br />elements[0][splits][0][weight]<br /></label><input name="elements[0][splits][0][weight]" class="element"><button type="button" class="delete">Delete Set</button></li></ul></li>');
$(newElem).data('musclearray', $(this).closest('li').data('musclearray'));
$(newElem).data('musclearrayMod', $(this).closest('li').data('musclearrayMod'));
$(newElem).appendTo('ul#exercises');
$( ".hiddenelement" ).hide();
$("button").button();
$( "ul#exercises" ).sortable( "refresh" );
$( "ul#sets" ).sortable( "refresh" );
$('#newworkout').trigger('sortupdate');
})
);
//filteredExerciseArray = filterarray(originalExerciselist);
//PopulateExerciseList(arr);
$(document).on('click', '.filter', function(){
filterarray();
});
$(document).on('keyup', '#searchbox', function(){
filterarray();
});
function filterarray(){
console.time('Filter');
var searchstring = $("#searchbox").val();
var keyREGEX= "";
if(jQuery.trim(searchstring).length > 0)
{
keyREGEX += '('+ searchstring +')';
}
if ($(".filter:checked").length > 0)
{
// any one is checked
var len = $('.filter').length;
$(".filter").each(function(index, element) {
if ($(this).is (':checked'))
{
// Do stuff
keyREGEX += '('+ $(this).val() +')';
}
});
//keyREGEX += "'";
keyREGEX = keyREGEX.replace(/\)\(/g, ")|(");
}
console.log("Regex= " + keyREGEX);
//filteredExerciseArray = filterarray(originalExerciselist, keyREGEX);
//PopulateExerciseList(filteredExerciseArray);
$("#exerciselist li").each(function(){
//var keywordarray = $(this).data('keywords');
var keyworddata = $(this).data('keywords').toString();
if(jQuery.trim(searchstring).length > 0) {
if ( ($(this).text().search(new RegExp(keyREGEX,'i')) > -1) && (keyworddata.search(new RegExp(keyREGEX,'ig')) > -1) ) {
console.log("search" + $(this).text() + " " + keyREGEX);
$(this).show();
console.log('thisshow1 ' + $(this).text() + ' ' + keyworddata.search(new RegExp(keyREGEX,'ig')) );
} else {
console.log('thishide1 ' + $(this).text() + ' ' + keyworddata.search(new RegExp(keyREGEX,'ig')));
$(this).hide();
}
}
else if (keyworddata.search(new RegExp(keyREGEX,'ig')) > -1)
{
console.log('thisshow ' + $(this).text() + ' ' + keyworddata + ' ' + keyworddata.search(new RegExp(keyREGEX,'ig')));
$(this).show();
}
else {
console.log('thishide ' + $(this).text() + ' ' + keyworddata + ' ' + keyworddata.search(new RegExp(keyREGEX,'ig')));
$(this).hide();
}
});
console.timeEnd('Filter');
}
/////////////////////////////////
// Pseudocode for 1RM calcs
// for each exercise in workout
// get H1RM for exercise
// C1RMsum = 0
// for each set in exercise
// calculate C1RM and store in array
// find highest C1RM in array
// if C1RM > H1RM then
// H1RM = C1RM
// set comment to "yay"
// for each value in array
// set[index] = value/H1RM
// C1RMsum += value/H1RM
// Done
// assume sum sumarray * each in musclearray
////// Make below standalone funtion "updateExerciselistDIV"
function PopulateExerciseList(exerciselist) {
console.time('PopulateExList');
var newExerciselist = $('<div></div>');
$.each(exerciselist, function (i, item) {
//console.log("Exercisename = " + item.name);
var newElem = $('<li>'+item.name + ' - ' + item.description + '<button type="button" class="addthisExercise">+</li>');
$(newElem).data('name', item.name);
$(newElem).data('exid', item._id);
$(newElem).data('musclearray', item.musclearray);
$(newElem).data('keywords', item.keywords);
//$(newElem).data('musclearrayMod', item.musclearrayMod);
$(newElem).data('datafields', item.datafields);
newExerciselist.append(newElem);
});
console.log("newexlist outside= " + newExerciselist);
$('#exerciselist').empty();
$(newExerciselist).appendTo('#exerciselist');
$("button").button();
console.timeEnd('PopulateExList');
}
});