+/**
+ * Pours the data in template string.
+ * @param {Object} datObject The data object to be filled in template string.
+ * @return {string} The new string created from template string and filled
+ * with the given data.
+ */
+String.prototype.supplant = function(datObject) {
+ return this.replace(/{([^{}]*)}/g,
+ function(match, firstSubMatch) {
+ var replace = datObject[firstSubMatch];
+ return (typeof replace === 'string' || typeof replace === 'number') ?
+ replace : match;
+ });
+};
+
+/**
+ * Queries the DOM.
+ * @param {string} selector Selector to execute.
+ * @param {HTMLElement=} context HTMLElement to query (optional).
+ * @return {Array.<HTMLElement>} Array of matched elements (non-live).
+ */
+function $(selector, context) {
+ if (!(context && context instanceof HTMLElement)) {
+ context = document;
+ }
+ return Array.prototype.slice.call(context.querySelectorAll(selector));
+}
+