synergy/client/app/js/utils.js (265 lines of code) (raw):
"use strict";
angular.module("synergy.utils", [])
.factory("SynergyUtils", [function () {
var Util = {
};
Util.monthsNames = {
"fullName": ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
"shortName": ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
};
/**
* Returns string date in local form
* @param {String} d string representing UTC date in form of "2014-02-21 00:00:00" UTC or "18 Feb 2014 09:07:40 UTC"
* @param {boolean} shortMonthName true to display February, false to display Feb
* @returns {String}
*/
Util.UTCToLocal = function (d, shortMonthName) {
try {
var _d = new Date();
var _split = d.split(" "); // [2014-02-21, 00:00:00, UTC]
var _yearMonthDay;
var _time;
switch (_split.length) {
case 2:
case 3:
_yearMonthDay = _split[0].split("-");
_yearMonthDay.forEach(function (item, index) {
_yearMonthDay[index] = parseInt(item, 10);
});
_time = _split[1].split(":");
_time.forEach(function (item, index) {
_time[index] = parseInt(item, 10);
});
break;
case 5:
var _m = Util.monthsNames.shortName.indexOf(_split[1]);
if (_m < 0) {
_m = Util.monthsNames.fullName.indexOf(_split[1]);
}
_yearMonthDay = [parseInt(_split[2], 10), _m, parseInt(_split[0], 10)];
_yearMonthDay[1]++;
_split = _split[3].split(":");
_time = [parseInt(_split[0], 10), parseInt(_split[1], 10), parseInt(_split[2], 10)];
break;
default:
return d;
}
_d.setUTCFullYear(_yearMonthDay[0]);
_d.setUTCMonth(_yearMonthDay[1] - 1);
_d.setUTCDate(_yearMonthDay[2]);
_d.setUTCHours(_time[0]);
_d.setUTCMinutes(_time[1]);
_d.setUTCSeconds(_time[2]);
return _d.getDate() + " " + (shortMonthName ? Util.monthsNames.shortName[_d.getMonth()] : Util.monthsNames.fullName[_d.getMonth()]) + " " + _d.getFullYear() + " " + ((_d.getHours() < 10) ? "0" + _d.getHours() : _d.getHours()) + ":" + ((_d.getMinutes() < 10) ? "0" + _d.getMinutes() : _d.getMinutes()) + ":" + ((_d.getSeconds() < 10) ? "0" + _d.getSeconds() : _d.getSeconds());
} catch (e) {
return d;
}
};
Util.UTCToDate = function (d) {
try {
var _d = new Date();
var _split = d.split(" "); // [2014-02-21, 00:00:00, UTC]
var _yearMonthDay;
var _time;
switch (_split.length) {
case 2:
case 3:
_yearMonthDay = _split[0].split("-");
_yearMonthDay.forEach(function (item, index) {
_yearMonthDay[index] = parseInt(item, 10);
});
_time = _split[1].split(":");
_time.forEach(function (item, index) {
_time[index] = parseInt(item, 10);
});
break;
case 5:
var _m = Util.monthsNames.shortName.indexOf(_split[1]);
if(_m < 0){
_m = Util.monthsNames.fullName.indexOf(_split[1]);
}
_yearMonthDay = [parseInt(_split[2], 10), _m , parseInt(_split[0], 10)];
_yearMonthDay[1]++;
_split = _split[3].split(":");
_time = [parseInt(_split[0], 10), parseInt(_split[1], 10), parseInt(_split[2], 10)];
break;
default:
return d;
}
_d.setUTCFullYear(_yearMonthDay[0]);
_d.setUTCMonth(_yearMonthDay[1] - 1);
_d.setUTCDate(_yearMonthDay[2]);
_d.setUTCHours(_time[0]);
_d.setUTCMinutes(_time[1]);
_d.setUTCSeconds(_time[2]);
return _d;
} catch (e) {
return null;
}
};
/**
* Returns string date in local form
* @param {String} d string representing UTC date in form of "2014-02-21 00:00:00" UTC or "18 Feb 2014 09:07:40 UTC"
* @param {boolean} shortMonthName true to display February, false to display Feb
* @returns {String}
*/
Util.UTCToLocalDateTime = function (d, shortMonthName) {
try {
var _d = new Date();
var _split = d.split(" "); // [2014-02-21, 00:00:00, UTC]
var _yearMonthDay;
var _time;
switch (_split.length) {
case 2:
case 3:
_yearMonthDay = _split[0].split("-");
_yearMonthDay.forEach(function (item, index) {
_yearMonthDay[index] = parseInt(item, 10);
});
_time = _split[1].split(":");
_time.forEach(function (item, index) {
_time[index] = parseInt(item, 10);
});
break;
case 5:
var _m = Util.monthsNames.shortName.indexOf(_split[1]);
if(_m < 0){
_m = Util.monthsNames.fullName.indexOf(_split[1]);
}
_yearMonthDay = [parseInt(_split[2], 10), _m , parseInt(_split[0], 10)];
_yearMonthDay[1]++;
_split = _split[3].split(":");
_time = [parseInt(_split[0], 10), parseInt(_split[1], 10), parseInt(_split[2], 10)];
break;
default:
return d;
}
_d.setUTCFullYear(_yearMonthDay[0]);
_d.setUTCMonth(_yearMonthDay[1] - 1);
_d.setUTCDate(_yearMonthDay[2]);
_d.setUTCHours(_time[0]);
_d.setUTCMinutes(_time[1]);
_d.setUTCSeconds(_time[2]);
return _d.getFullYear() + "-" + ((_d.getMonth() + 1 < 10) ? "0" + (_d.getMonth() + 1) : (_d.getMonth() + 1)) + "-" + _d.getDate() + " " + ((_d.getHours() < 10) ? "0" + _d.getHours() : _d.getHours()) + ":" + ((_d.getMinutes() < 10) ? "0" + _d.getMinutes() : _d.getMinutes()) + ":" + ((_d.getSeconds() < 10) ? "0" + _d.getSeconds() : _d.getSeconds());
} catch (e) {
return d;
}
};
/**
* Returns local string date in UTC form
* @param {String} d string representing local date in form of "2014-02-21 00:00:00"
* @returns {String}
*/
Util.localToUTC = function (d) {
try {
var _d = new Date();
var _split = d.split(" "); // [2014-02-21, 00:00:00,]
var _yearMonthDay = _split[0].split("-");
_yearMonthDay.forEach(function (item, index) {
_yearMonthDay[index] = parseInt(item, 10);
});
var _time = _split[1].split(":");
_time.forEach(function (item, index) {
_time[index] = parseInt(item, 10);
});
_d.setFullYear(_yearMonthDay[0]);
_d.setMonth(_yearMonthDay[1] - 1);
_d.setDate(_yearMonthDay[2]);
_d.setHours(_time[0]);
_d.setMinutes(_time[1]);
_d.setSeconds(_time[2]);
return _d.getUTCFullYear() + "-" + (((_d.getUTCMonth() + 1) < 10) ? "0" + (_d.getUTCMonth() + 1) : (_d.getUTCMonth() + 1)) + "-" + ((_d.getUTCDate() < 10) ? "0" + _d.getUTCDate() : _d.getUTCDate()) + " " + ((_d.getUTCHours() < 10) ? "0" + _d.getUTCHours() : _d.getUTCHours()) + ":" + ((_d.getUTCMinutes() < 10) ? "0" + _d.getUTCMinutes() : _d.getUTCMinutes()) + ":" + ((_d.getUTCSeconds() < 10) ? "0" + _d.getUTCSeconds() : _d.getUTCSeconds());
} catch (e) {
return d;
}
};
Util.localToUTCTimestamp = function (d) {
try {
var _d = new Date();
var _split = d.split(" "); // [2014-02-21, 00:00:00,]
var _yearMonthDay = _split[0].split("-");
_yearMonthDay.forEach(function (item, index) {
_yearMonthDay[index] = parseInt(item, 10);
});
var _time = _split[1].split(":");
_time.forEach(function (item, index) {
_time[index] = parseInt(item, 10);
});
_d.setFullYear(_yearMonthDay[0]);
_d.setMonth(_yearMonthDay[1] - 1);
_d.setDate(_yearMonthDay[2]);
_d.setHours(_time[0]);
_d.setMinutes(_time[1]);
_d.setSeconds(_time[2]);
return _d.getTime();
} catch (e) {
return d;
}
};
Util.shallowClone = function (original) {
var _n = {};
for (var i in original) {
if (original.hasOwnProperty(i)) {
_n[i] = original[i];
}
}
return _n;
};
Util.shallowCloneArray = function (originalArray) {
var _n = [];
for (var i = 0,
max = originalArray.length; i < max; i++) {
_n[i] = Util.shallowClone(originalArray[i]);
}
return _n;
};
Util.definedNotNull = function (obj) {
return (typeof obj !== "undefined" && obj !== null);
};
Util.ProgressChart = function (data, colors, labels, canvasId) {
function addLegend(context) {
var topOffset = 20;
var totalOffset = topOffset;
var leftOffset = (dimensions.width * wRation * 1.1) + radius;
context.textAlign = "left";
context.font = "1em Helvetica";
context.fillStyle = "#333";
for (var i = 0, max = data.length; i < max; i++) {
if (labels[i].length > 0 && !isNaN(data[i])) {
context.fillText(data[i] + "% " + labels[i], leftOffset, (dimensions.height / 2 - radius) + totalOffset);
totalOffset += topOffset;
}
}
}
function drawOuterCircle(context) {
var counter = 0;
for (var i = 0; i < data.length; i++) {
if (isNaN(data[i])) {
continue;
}
context.fillStyle = colors[i];
context.beginPath();
context.moveTo(dimensions.width * wRation, dimensions.height / 2);
context.arc(dimensions.width * wRation, dimensions.height / 2, radius, counter, counter + (Math.PI * 2 * (data[i] / 100)), false);
context.fill();
counter += Math.PI * 2 * (data[i] / 100);
}
}
function drawInnerCircle(context) {
context.moveTo(dimensions.width * wRation, dimensions.height / 2);
context.beginPath();
context.arc(dimensions.width * wRation, dimensions.height / 2, radius * 0.7, 0, Math.PI * 2, true);
context.fillStyle = "#ffffff";
context.fill();
}
var canvas = window.document.getElementById(canvasId);
var dimensions = {
width: canvas.width,
height: canvas.height
};
var wRation = 0.25;
var ratio = 0.4;
var radius = ((ratio) * dimensions.width) / 2;
if (canvas.getContext) {
var context = canvas.getContext("2d");
for (var i = 0, max = data.length; i < max; i++) {
data[i] = Math.round(10 * data[i]) / 10;
}
context.clearRect(0, 0, canvas.width, canvas.height);
drawOuterCircle(context);
drawInnerCircle(context);
addLegend(context);
} else {
canvas.style.display = "none";
return;
}
};
Util.versionToNumber = function (version) {
var VER_REG = /(^\d+\.)(.*)/;
var match = version.match(VER_REG);
var _p;
if (match) {
_p = match[2].replace(/\./g, "");
return parseFloat(version.replace(VER_REG, match[1] + _p));
}
return parseFloat(version);
};
return Util;
}]);