(this || window).doc = (function() { "use strict"; var docProto = { /** * Create a proper JavaScript array from an array-like object * * @param {object} arrayLike * @return {array} */ toArray: function(arrayLike) { return [].slice.call(arrayLike); }, /** * Search for an HTML element by css selector * * @param {string} sel - The css selector * @param {Element} [context] - An optional parent element to search from * @return {Element} */ qs: function(sel, context) { context = context || document; return context.querySelector(sel); }, /** * Get an array of HTML elements by css selector * * @param {string} sel - The css selector * @param {Element} [context] - An optional parent element to search from * @return {Element[]} */ qsa: function(sel, context) { context = context || document; return this.toArray(context.querySelectorAll(sel)); }, /** * Get an HTML element by its id attribute * * @param {string} id * @param {Element} [context] - An optional parent element to search from * @return {Element} */ getById: function(id, context) { context = context || document; return context.getElementById(id); }, /** * Get an array of HTML elements by their tag (element) name * * @param {string} tagName * @param {Element} [context] - An optional parent element to search from * @return {Element[]} */ getByTag: function(tagName, context) { context = context || document; return this.toArray(context.getElementsByTagName(tagName)); }, /** * Get an array of HTML elements searching by a class * * @param {string} className * @param {Element} [context] - An optional parent element to search from * @return {Element[]} */ getByClass: function(className, context) { context = context || document; return this.toArray(context.getElementsByClassName(className)); }, /** * Do multiple string replacements with a mapping array * * @param {string} str - The string to modify * @param {string[][]} replacements - map [search, replacement] * @return {string} */ replaceMultiple: function(str, replacements) { var output = str; replacements.forEach(function(pair) { output = output.replace(pair[0], pair[1]); }); return output; } }; return Object.create(docProto); }());