helpers-utils
Version:
Utility methods commonly used for writing helper libraries.
399 lines (340 loc) • 11 kB
JavaScript
(function(globals) {
var define, requireModule;
(function() {
var registry = {}, seen = {};
define = function(name, deps, callback) {
registry[name] = { deps: deps, callback: callback };
};
requireModule = function(name) {
if (seen[name]) { return seen[name]; }
seen[name] = {};
var mod = registry[name];
if (!mod) {
throw new Error("Module '" + name + "' not found.");
}
var deps = mod.deps,
callback = mod.callback,
reified = [],
exports;
for (var i=0, l=deps.length; i<l; i++) {
if (deps[i] === 'exports') {
reified.push(exports = {});
} else {
reified.push(requireModule(deps[i]));
}
}
var value = callback.apply(this, reified);
return seen[name] = exports || value;
};
})();
define("helpers-utils/dates",
["exports"],
function(__exports__) {
"use strict";
var Dates = {};
Dates.padNumber = function (num, count, padCharacter) {
if (typeof padCharacter === 'undefined') {
padCharacter = '0';
}
var lenDiff = count - String(num).length;
var padding = '';
if (lenDiff > 0) {
while (lenDiff--) {
padding += padCharacter;
}
}
return padding + num;
};
Dates.dayOfYear = function (date) {
var oneJan = new Date(date.getFullYear(), 0, 1);
return Math.ceil((date - oneJan) / 86400000);
};
Dates.weekOfYear = function (date) {
var oneJan = new Date(date.getFullYear(), 0, 1);
return Math.ceil((((date - oneJan) / 86400000) + oneJan.getDay() + 1) / 7);
};
Dates.isoWeekOfYear = function (date) {
var target = new Date(date.valueOf());
var dayNr = (date.getDay() + 6) % 7;
target.setDate(target.getDate() - dayNr + 3);
var jan4 = new Date(target.getFullYear(), 0, 4);
var dayDiff = (target - jan4) / 86400000;
return 1 + Math.ceil(dayDiff / 7);
};
Dates.tweleveHour = function (date) {
if (date.getHours() > 12) {
return date.getHours() - 12;
} else {
return date.getHours();
}
};
Dates.timeZoneOffset = function (date) {
var hoursDiff = -date.getTimezoneOffset() / 60;
var result = Dates.padNumber(Math.abs(hoursDiff), 4);
return (hoursDiff > 0 ? '+' : '-') + result;
};
Dates.format = function (date, format) {
return format.replace(Dates.formats, function (match, p) {
switch (p) {
case 'a':
return Dates.abbreviatedWeekdays[date.getDay()];
case 'A':
return Dates.fullWeekdays[date.getDay()];
case 'b':
return Dates.abbreviatedMonths[date.getMonth()];
case 'B':
return Dates.fullMonths[date.getMonth()];
case 'c':
return date.toLocaleString();
case 'C':
return Math.round(date.getFullYear() / 100);
case 'd':
return Dates.padNumber(date.getDate(), 2);
case 'D':
return Dates.format(date, '%m/%d/%y');
case 'e':
return Dates.padNumber(date.getDate(), 2, ' ');
case 'F':
return Dates.format(date, '%Y-%m-%d');
case 'h':
return Dates.format(date, '%b');
case 'H':
return Dates.padNumber(date.getHours(), 2);
case 'I':
return Dates.padNumber(Dates.tweleveHour(date), 2);
case 'j':
return Dates.padNumber(Dates.dayOfYear(date), 3);
case 'k':
return Dates.padNumber(date.getHours(), 2, ' ');
case 'l':
return Dates.padNumber(Dates.tweleveHour(date), 2, ' ');
case 'L':
return Dates.padNumber(date.getMilliseconds(), 3);
case 'm':
return Dates.padNumber(date.getMonth() + 1, 2);
case 'M':
return Dates.padNumber(date.getMinutes(), 2);
case 'n':
return '\n';
case 'p':
if (date.getHours() > 11) {
return 'PM';
} else {
return 'AM';
}
break;
case 'P':
return Dates.format(date, '%p').toLowerCase();
case 'r':
return Dates.format(date, '%I:%M:%S %p');
case 'R':
return Dates.format(date, '%H:%M');
case 's':
return date.getTime() / 1000;
case 'S':
return Dates.padNumber(date.getSeconds(), 2);
case 't':
return '\t';
case 'T':
return Dates.format(date, '%H:%M:%S');
case 'u':
if (date.getDay() === 0) {
return 7;
} else {
return date.getDay();
}
break;
case 'U':
return Dates.padNumber(Dates.weekOfYear(date), 2);
case 'v':
return Dates.format(date, '%e-%b-%Y');
case 'V':
return Dates.padNumber(Dates.isoWeekOfYear(date), 2);
case 'W':
return Dates.padNumber(Dates.weekOfYear(date), 2);
case 'w':
return Dates.padNumber(date.getDay(), 2);
case 'x':
return date.toLocaleDateString();
case 'X':
return date.toLocaleTimeString();
case 'y':
return String(date.getFullYear()).substring(2);
case 'Y':
return date.getFullYear();
case 'z':
return Dates.timeZoneOffset(date);
default:
return match;
}
});
};
Dates.formats = /%(a|A|b|B|c|C|d|D|e|F|h|H|I|j|k|l|L|m|M|n|p|P|r|R|s|S|t|T|u|U|v|V|W|w|x|X|y|Y|z)/g;
Dates.abbreviatedWeekdays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat'];
Dates.fullWeekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
Dates.abbreviatedMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
Dates.fullMonths = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
__exports__.Dates = Dates;
});
define("helpers-utils/html",
["exports"],
function(__exports__) {
"use strict";
// The module to be exported.
var Html = {};
/**
* Remove extra newlines from HTML, respect indentation
* @param {String} html
* @return {String}
*/
Html.condense = function(str) {
return str.replace(/(\n|\r){2,}/g, '\n');
};
/**
* Add a single newline above code comments in HTML
* @param {[type]} html
* @return {[type]}
*/
Html.padcomments = function(str) {
return str.replace(/(\s*<!--)/g, '\n$1');
};
/**
* Parse HTML attributes from options hash
* @param {[type]} hash [description]
* @return {[type]} [description]
*/
Html.parseAttributes = function (hash) {
return Object.keys(hash).map(function (key) {
return "" + key + "=\"" + hash[key] + "\"";
}).join(' ');
};
__exports__.Html = Html;
});
define("helpers-utils/library",
["exports"],
function(__exports__) {
"use strict";
var Library = {};
Library.helpers = {};
Library.Config = {
partialsPath: '',
precompiledTemplates: true
};
Library.addHelper = function (name, helper) {
return Library.helpers[name] = helper;
};
Library.registerHelpers = function (localHandlebars) {
if (localHandlebars) {
Library.Handlebars = localHandlebars;
} else {
if (typeof window !== 'undefined' && window !== null) {
if (window.Ember != null) {
Library.Handlebars = window.Ember.Handlebars;
} else {
Library.Handlebars = window.Handlebars;
}
} else if (typeof module !== 'undefined' && module !== null) {
Library.Handlebars = require('handlebars');
}
}
Library.registerHelper = function (name, helper) {
if ((typeof window !== 'undefined' && window !== null) && window.Ember) {
return Library.Handlebars.helper(name, helper);
} else {
return Library.Handlebars.registerHelper(name, helper);
}
};
var results = [];
for (var name in Library.helpers) {
var helper = Library.helpers[name];
results.push(Library.registerHelper(name, helper));
}
return results;
};
__exports__.Library = Library;
});
define("helpers-utils/utils",
["helpers-utils/library","exports"],
function(__dependency1__, __exports__) {
"use strict";
var Library = __dependency1__.Library;
var Utils = {};
Utils.expects = function(config, spec) {
for(var k in spec) {
if (typeof config[k] === 'undefined') {
config[k] = spec[k];
}
}
};
Utils.isHandlebarsSpecific = function (value) {
return (value && (value.fn != null)) || (value && (value.hash != null));
};
Utils.isUndefined = function (value) {
return (value === void 0 || value === null) || Utils.isHandlebarsSpecific(value);
};
Utils.safeString = function (str) {
return new Library.Handlebars.SafeString(str);
};
Utils.trim = function (str) {
var re = /^[\s\xA0]+|[\s\xA0]+$/g;
var trim = /\S/.test("\xA0") ? re : /^\s+|\s+$/g;
return str.toString().replace(trim, '');
};
Utils.isFunc = function (value) {
return typeof value === 'function';
};
Utils.isString = function (value) {
return typeof value === 'string';
};
Utils.result = function (value) {
if (Utils.isFunc(value)) {
return value();
} else {
return value;
}
};
Utils.err = function (msg) {
return new Error(msg);
};
Utils._indexOf = [].indexOf || function (item) {
for (var i = 0, l = this.length; i < l; i++) {
if (i in this && this[i] === item) {return i;}
}
return -1;
};
Utils.compare = function(val) {
val = val || function (a, b) {
if (a.index >= b.index) {
return 1;
} else {
return -1;
}
};
};
Utils.eachProperty = function(context, options) {
var ret = "";
for (var prop in context) {
ret = ret + options.fn({
property: prop,
value: context[prop]
});
}
return ret;
};
__exports__.Utils = Utils;
});
define("helpers-utils",
["helpers-utils/library","helpers-utils/utils","helpers-utils/dates","helpers-utils/html","exports"],
function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __exports__) {
"use strict";
var Library = __dependency1__.Library;
var Utils = __dependency2__.Utils;
var Dates = __dependency3__.Dates;
var Html = __dependency4__.Html;
__exports__.Library = Library;
__exports__.Utils = Utils;
__exports__.Dates = Dates;
__exports__.Html = Html;
});
window.helpersUtils = requireModule("helpers-utils");
})(window);