Code coverage report for core/time_period.js

Statements: 33.33% (21 / 63)      Branches: 2.7% (1 / 37)      Functions: 36.36% (4 / 11)      Lines: 33.33% (21 / 63)      Ignored: none     

All files » core/ » time_period.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 1011   1 1 7         1 7         1 1 7 7 7 7       1 1                                           1                       1                                               1 1                   1   1   1    
(function () {

	"use strict";

	var attrs = ["years", "months", "days", "hours", "minutes", "seconds", "milliseconds"];

	var gFn = function (attr) {

		return function () {

			return this[attr];

		};

	};

	

	var sFn = function (attr) {

		return function (val) {

			this[attr] = val;

			return this;

		};

	};

	var addSetFuncs = function (context, attrs) {

		for (var i = 0; i < attrs.length ; i++) {

			var $a = attrs[i], $b = $a.slice(0, 1).toUpperCase() + $a.slice(1);

			context.prototype[$a] = 0;

			context.prototype["get" + $b] = gFn($a);

			context.prototype["set" + $b] = sFn($a);

		}

	};

 

	var setMonthsAndYears = function (orient, d1, d2, context) {

		function inc() {

			d1.addMonths(-orient);

			context.months++;

			if (context.months === 12) {

				context.years++;

				context.months = 0;

			}

		}

		if (orient === +1) {

			while (d1 > d2) {

				inc();

			}

		} else {

			while (d1 < d2) {

				inc();

			}

		}

		context.months--;

		context.months *= orient;

		context.years *= orient;

	};

 

	var adjustForDST = function(orient, startDate, endDate) {

		var hasDSTMismatch = (false === (startDate.isDaylightSavingTime() === endDate.isDaylightSavingTime()));

		if (hasDSTMismatch && orient === 1) {

			startDate.addHours(-1);

		} else if (hasDSTMismatch) {

			startDate.addHours(1);

		}

	};

	/**

	 * TimePeriod(startDate, endDate);

	 * TimePeriod(years, months, days, hours, minutes, seconds, milliseconds);

	 */

	var TimePeriod = function (years, months, days, hours, minutes, seconds, milliseconds) {

		if (arguments.length === 7) {

			this.set(years, months, days, hours, minutes, seconds, milliseconds);

		} else if (arguments.length === 2 && arguments[0] instanceof Date && arguments[1] instanceof Date) {

			var startDate = arguments[0].clone();

			var endDate = arguments[1].clone();

			var orient = (startDate > endDate) ? +1 : -1;

			this.dates = {

				start: arguments[0].clone(),

				end: arguments[1].clone()

			};

 

			setMonthsAndYears(orient, startDate, endDate, this);

			adjustForDST(orient, startDate, endDate);

			// // TODO - adjust for DST

			var diff = endDate - startDate;

			if (diff !== 0) {

				var ts = new TimeSpan(diff);

				this.set(this.years, this.months, ts.getDays(), ts.getHours(), ts.getMinutes(), ts.getSeconds(), ts.getMilliseconds());

			}

		}

		return this;

	};

	// create all the set functions.

	addSetFuncs(TimePeriod, attrs);

	TimePeriod.prototype.set = function (years, months, days, hours, minutes, seconds, milliseconds){

		this.setYears(years || this.getYears());

		this.setMonths(months || this.getMonths());

		this.setDays(days || this.getDays());

		this.setHours(hours || this.getHours());

		this.setMinutes(minutes || this.getMinutes());

		this.setSeconds(seconds || this.getSeconds());

		this.setMilliseconds(milliseconds || this.getMilliseconds());

	};

 

	Date.TimePeriod = TimePeriod;

 

	Eif (typeof window !== "undefined") {

		// keeping API compatible for v1.x 

		window.TimePeriod = TimePeriod;

	}

}());