president/public/js/manager/timelineprinter.js

161 lines
4.5 KiB
JavaScript
Executable File

var appPosition = [];
function timelinePrinter(appts,sort,offset) {
appPosition = [];
var pseudonymLoader = [];
var scope = localStorage.getItem('scope');
var canvas = document.getElementById('timeline');
$('#timeline').show();
canvas.width = $(window).width();
var temp_height = (canvas.height * .13) + clothesLineHeight;
$.each(appts,function(i,v) {
if (!v.list) { return true; }
temp_height = (temp_height + (numeral(28)).value());
});
if (temp_height > $(window).height()) {
$('#timeline').height(temp_height);
canvas.height = temp_height;
}
else {
canvas.height = $(window).height();
$('#timeline').height(canvas.height);
}
ctx = canvas.getContext('2d');
ctx.strokeStyle = 'black';
ctx.clearRect(0,clothesLineHeight,canvas.width,canvas.height);
ctx.fill();
ctx.beginPath();
headerPrinter(ctx,appts,'Timeline');
ctx.save('init');
ctx.strokeStyle = 'yellow';
ctx.lineWidth = 5;
ctx.moveTo(canvas.width / 2, 80);
ctx.lineTo(canvas.width /2, canvas.height);
ctx.fill();
ctx.stroke();
ctx.restore('init');
ctx.moveTo(0, 80);
ctx.lineWidth = 3;
var placement_number = 3;
var textPrinter = [];
var appts_length = appts.length;
$.each(appts, function(i,v) {
if ( i.match(/^__/) ) { return true; }
if ( !v.setting ) { return true; }
ctx.strokeStyle = 'black';
ctx.fillStyle = v.setting.colour || 'black';
if (!v.list) { return true; }
var ln = v.list.length;
ctx.moveTo(0, canvas.height * .8);
var appt_store = [];
$.each(appts, function(appt_n,appt) {
var appt_check = $.grep(appt_store, function(n,i) { return n.formatted_name == appt.formatted_name })
if (appt_check.length == 0 && appt[scope + '_occurrences'] > 0) {
appt_store.push(appt);
}
});
var total_store_size = appt_store.length;
for (var n = 0; n < ln; n++) {
placement_number++;
ctx.beginPath();
var l = v.list[n];
if (l.length == 0 ) { return true; }
var occurrence = (n / ln) / canvas.height;
ctx.font = "400 20px Arial";
var position = (canvas.width/2) * l[scope + '_percent'];
var verticalPosition = (placement_number * 28) + clothesLineHeight;
if (v['placement_number']) {
verticalPosition = v['placement_number'];
placement_number--;
}
ctx.arc(position, verticalPosition, 10, 0, (Math.PI*2), true);
appPosition.push([position - 40, verticalPosition - 10, position + 10, verticalPosition + 10, v]);
ctx.fillStyle = 'black';
if (l['total'] || l['amount']) {
ctx.font = "400 14px Arial";
var fillText = l['total'] ? '$' + l['total'] : '$' + l['amount'];
ctx.fillText(fillText, position + 40, ( verticalPosition + 14 ));
ctx.font = "400 20px Arial";
}
appPosition.push([position , verticalPosition - 26, position + ctx.measureText(l['formatted_name']).width, verticalPosition +10, v]);
ctx.fill();
ctx.stroke();
ctx.strokeStyle = v.setting.colour || 'black';
ctx.arc(position, verticalPosition, 9, 0, (Math.PI*2), true);
var now = Date.now();
if (clothesLinePos['moving'] + 300 < now) {
pseudoGenerator(appts,l['type'],position - 20, verticalPosition - 10);
}
if (l[scope + '_start_percent']) {
ctx.save('to the beginning');
var startPosition = (canvas.width/2) * l[scope + '_start_percent'];
if (l[scope + '_start_percent'] < 0) {
appPosition.push([startPosition - 40, verticalPosition - 10, position + 10, verticalPosition + 10, v]);
}
else {
appPosition.push([position - 40, verticalPosition - 10, startPosition + 10, verticalPosition + 10, v]);
}
ctx.lineWidth = 10;
ctx.lineTo(startPosition, verticalPosition);
ctx.strokeStyle = v.setting.colour || 'black';
ctx.stroke();
ctx.lineWidth = 2;
ctx.lineTo(startPosition, verticalPosition);
ctx.arc(startPosition + 7, verticalPosition, 7, 0, (Math.PI*2), true);
ctx.stroke();
ctx.restore('to the beginning');
}
if(!v['placement_number']) {
var fillText = l['formatted_name'];
textPrinter.push({ text: fillText, x: position + 25, y: verticalPosition });
}
v['placement_number'] = verticalPosition;
ctx.stroke();
ctx.closePath()
}
ctx.moveTo(0, canvas.height * .2);
ctx.stroke();
});
$.each(textPrinter, function(i,v) {
ctx.fillText(v.text, v.x, v.y);
});
ctx.stroke();
}
function pseudoGenerator(appts,type,x,y) {
var pseudonym = $.grep(appts['__specs']['pseudonyms'], function(n, i){ // just use arr
return n['name'] == type;
});
if (pseudonym.length > 0) {
var img = new Image;
img.onload = function(){
ctx.drawImage(img,x,y, 30, 30);
};
img.src = pseudonym[0]['icon'];
}
}