From 83a7d703cbabd6e514a6d8a948b39325b59e9f58 Mon Sep 17 00:00:00 2001 From: Matěj Cepl Date: Fri, 28 Jan 2011 02:04:52 +0100 Subject: bzpage.js mostly done Also: * created libbugzilla.js for putting aside most RPCed functions * utils.js and color.js moved to data * tons and tons of restructing to make things work via RPC --- lib/util.js | 244 ------------------------------------------------------------ 1 file changed, 244 deletions(-) delete mode 100644 lib/util.js (limited to 'lib/util.js') diff --git a/lib/util.js b/lib/util.js deleted file mode 100644 index 4612b66..0000000 --- a/lib/util.js +++ /dev/null @@ -1,244 +0,0 @@ -/*global exports: false, require: false, console: false, Cc: false, Ci: false */ -/*jslint onevar: false */ -// Released under the MIT/X11 license -// http://www.opensource.org/licenses/mit-license.php -"use strict"; -// ============================================================== -var Cc = require("chrome").Cc; -var Ci = require("chrome").Ci; -var urlMod = require("url"); - -/** - * Function for the management of the prototypal inheritace - * David Flanagan, Javascript: The Definitve Guide, - * IV. edition, O'Reilly, 2006, p. 168 - * - * @param superobject - * @return new object, it needs new prototype.constructor - * - *
- * function Father(x) {
- *    this.family = x;
- * }
- *
- * function Son(x,w) {
- *    Father.call(this,x);
- *    this.wife = w;
- * }
- * Son.prototype = heir(Father);
- * Son.prototype.constructor = Son;
- * 
- */ -exports.heir = function heir(p) { - function F() {}; - F.prototype = p.prototype; - return new F(); -}; - -/** - * get parameters of URL as an object (name, value) - */ -var getParamsFromURL = exports.getParamsFromURL = function getParamsFromURL (url, base) { - if (!url || (url.toString().length === 0)) { - throw new Error("Missing URL value!"); - } - - if (!(url instanceof urlMod.URL)) { - url = new urlMod.URL(url.toString(), base); - } - - var paramsArr = url.path.split("?"); - if (paramsArr.length === 1) { - return {}; - } - - // get convert URL parameters to an Object - var params = {}, s = []; - paramsArr[1].split('&').forEach(function(par) { - s = par.split('='); - params[s[0]] = s[1]; - }); - return params; -}; - -/** - * parse XML object out of string working around various bugs in Gecko implementation - * see https://developer.mozilla.org/en/E4X for more information - * - * @param inStr String with unparsed XML string - * @return XML object - */ -exports.parseXMLfromString = function parseXMLfromString (inStuff) { - // if (typeof inStuff !== 'string') In future we should recognize this.response - // and get just .text property out of it. TODO - var respStr = inStuff.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551 - return new XML(respStr); -}; - -/** - * Get a bug no from URL ... fails with aliases - * It should theoretically belong to bzpage.js, but we don't have - * unit tests there yet, so keeping here. - * - * @param url String with URL to be analyzed - * @return String with the bug ID (hopefully number, but not for aliases) - */ -exports.getBugNo = function getBugNo(url) { - var params = getParamsFromURL(url); - if (params && params.id) { - return params.id; - } -}; - -/** - * format date to be in ISO format (just day part) - * - * @param date - * @return string with the formatted date - */ -exports.getISODate = function getISODate(dateStr) { - function pad(n) { - return n < 10 ? '0' + n : n; - } - var date = new Date(dateStr); - return date.getFullYear() + '-' + pad(date.getMonth() + 1) + '-' + - pad(date.getDate()); -}; - -/** - * Check whether an item is member of the list. Idea is just to make long if - * commands slightly more readable. - * - * @param mbr string to be searched in the list - * @param list list - * @return position of the string in the list, or -1 if none found. - */ -var isInList = exports.isInList = function isInList(mbr, list) { - if (!list) { - return false; - } - return (list.indexOf(mbr) !== -1); -}; - -/** - * Make sure value returned is Array - * - * @param Array/String - * @return Array - * - * If something else than Array or String is passed to the function - * the result will be untouched actual argument of the call. - */ -var valToArray = exports.valToArray = function valToArray(val) { - var isArr = val && - val.constructor && - val.constructor.name === "Array"; - return isArr ? val : [val]; -}; - -/** - * Merges two comma separated string as a list and returns new string - * - * @param str String with old values - * @param value String/Array with other values - * @return String with merged lists - */ -exports.addCSVValue = function addCSVValue(str, value) { - var parts = (str.trim().length > 0 ? str.split(/[,\s]+/) : []); - if (!value) { - return str; - } - if (!isInList(value, parts)) { - var newValue = valToArray(value); - parts = parts.concat(newValue); - } - // this is necessary to get comma-space separated string even when - // value is an array already - parts = parts.join(",").split(","); - return parts.join(", "); -}; - -/** - * Treats comma separated string as a list and removes one item from it - * - * @param str String treated as a list - * @param value String with the value to be removed from str - * @return String with the resulting list comma separated - */ -exports.removeCSVValue = function removeCSVValue(str, value) { - str = str.trim(); - var parts = str ? str.split(/[,\s]+/) : []; - var valueArr = value instanceof Array ? value : value.split(/[,\s]+/); - parts = parts.filter(function (e, i, a) { - return (!isInList(e, valueArr)); - }); - return parts.join(", "); -}; - -/** - * select element of the array where regexp in the first element matches second - * parameter of this function - * - * @param list Array with regexps and return values - * @param chosingMark String by which the element of array is to be matched - * @return Object chosen element - */ -var filterByRegexp = exports.filterByRegexp = - function filterByRegexp(list, chosingMark) { - var chosenPair = []; - if (list.length > 0) { - chosenPair = list.filter(function (pair) { - return new RegExp(pair.regexp, "i").test(chosingMark); - }); - } - if (chosenPair.length > 0) { - return chosenPair[0].addr; - } else { - return ""; - } -}; - -/** - * remove elements from the page based on their IDs - * - * @param doc Document object - * @param target String/Array with ID(s) - * @param remove Boolean indicating whether the node should be - * actually removed or just hidden. - * @return none - * TODO remove parameter could be replaced by function which would - * do actual activity. - */ -exports.killNodes = function killNodes(doc, target, remove) { - target = target.trim(); - var targetArr = target instanceof Array ? target : target.split(/[,\s]+/); - targetArr.forEach(function(x) { - if (remove) { - var targetNode = doc.getElementById(x); - targetNode.parentNode.removeChild(targetNode); - } else { - x.style.display = "none"; - } - }); -}; - -exports.getObjectKeys = function getObjectKeys(obj) { - var keys = []; - for (var key in obj) { - if (obj.hasOwnProperty(key)) { - keys.push(key); - } - } - return keys; -}; - -exports.removeDuplicates = function removeDuplicates (arr) { - for (var i = 0; i < arr.length; i++) { - for (var j = i + 1; j < arr.length; j++) { - if (arr[i] == arr[j]) { - arr.splice (j, 1); - } - } - } - return arr; -}; -- cgit