aboutsummaryrefslogtreecommitdiffstats
path: root/lib/puvodni
diff options
context:
space:
mode:
authorMatěj Cepl <mcepl@redhat.com>2010-06-11 21:49:43 +0200
committerMatěj Cepl <mcepl@redhat.com>2010-06-11 21:49:43 +0200
commite8d6c71ee96a96230aadd5504e3f312774896920 (patch)
tree7ef6382a0dca5614fb0852ebc3cf95e801918ceb /lib/puvodni
parentf87bad6c212acaa4d33052eb53d01431dda3e103 (diff)
downloadbugzilla-triage-e8d6c71ee96a96230aadd5504e3f312774896920.tar.gz
More cleanup to make a simple reproducer
Diffstat (limited to 'lib/puvodni')
-rw-r--r--lib/puvodni/color.js236
-rw-r--r--lib/puvodni/old-main.js106
-rw-r--r--lib/puvodni/xmlrpc.js168
3 files changed, 510 insertions, 0 deletions
diff --git a/lib/puvodni/color.js b/lib/puvodni/color.js
new file mode 100644
index 0000000..2da2fa7
--- /dev/null
+++ b/lib/puvodni/color.js
@@ -0,0 +1,236 @@
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+// ============================================================================
+// Color management methods
+// originally from
+// http://www.mjijackson.com/2008/02\
+// /rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
+var Color = exports.Color = function Color(r, g, b) {
+ this.Luminosity = 0.85;
+ this.Desaturated = 0.4;
+
+ if (r instanceof Array) {
+ this.r = r[0];
+ this.g = r[1];
+ this.b = r[2];
+ } else {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+ }
+}
+
+Color.prototype.update = function(r, g, b) {
+ this.r = r;
+ this.g = g;
+ this.b = b;
+};
+
+Color.prototype.hs = function(nStr) {
+ if (Number(nStr) === 0) {
+ return "00";
+ } else if (nStr.length < 2) {
+ return "0" + nStr;
+ } else {
+ return nStr;
+ }
+};
+
+Color.prototype.toString = function() {
+ let rH = Number(this.r.toFixed()).toString(16);
+ let gH = Number(this.g.toFixed()).toString(16);
+ let bH = Number(this.b.toFixed()).toString(16);
+ return "#" + this.hs(rH) + this.hs(gH) + this.hs(bH);
+};
+
+/**
+ * Converts an RGB color value to HSL. Conversion formula adapted from
+ * http://en.wikipedia.org/wiki/HSL_color_space. Assumes r, g, and b are
+ * contained in the set [0, 255] and returns h, s, and l in the set [0, 1].4343
+ *
+ * @param Number r The red color value
+ * @param Number g The green color value
+ * @param Number b The blue color value
+ * @return Array The HSL representation
+ */
+Color.prototype.hsl = function() {
+ let r = this.r / 255;
+ let g = this.g / 255;
+ let b = this.b / 255;
+ let max = Math.max(r, g, b), min = Math.min(r, g, b);
+ let h, s, l = (max + min) / 2;
+
+ if (max === min) {
+ h = s = 0; // achromatic
+ } else {
+ let d = max - min;
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
+ switch (max) {
+ case r:
+ h = (g - b) / d + (g < b ? 6 : 0);
+ break;
+ case g:
+ h = (b - r) / d + 2;
+ break;
+ case b:
+ h = (r - g) / d + 4;
+ break;
+ }
+ h /= 6;
+ }
+
+ return [ h, s, l ];
+};
+
+/**
+ * Converts an HSL color value to RGB. Conversion formula adapted from
+ * http://en.wikipedia.org/wiki/HSL_color_space. Assumes h, s, and l are
+ * contained in the set [0, 1] and returns r, g, and b in the set [0, 255].
+ *
+ * @param Number h The hue
+ * @param Number s The saturation
+ * @param Number l The lightness
+ * @return Array The RGB representation
+ */
+Color.prototype.hslToRgb = function(h, s, l) {
+ function hue2rgb(p, q, t) {
+ if (t < 0) {
+ t += 1;
+ }
+ if (t > 1) {
+ t -= 1;
+ }
+ if (t < 1 / 6) {
+ return p + (q - p) * 6 * t;
+ }
+ if (t < 1 / 2) {
+ return q;
+ }
+ if (t < 2 / 3) {
+ return p + (q - p) * (2 / 3 - t) * 6;
+ }
+ return p;
+ }
+
+ let r, g, b;
+
+ if (s === 0) {
+ r = g = b = l; // achromatic
+ } else {
+ let q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+ let p = 2 * l - q;
+ r = hue2rgb(p, q, h + 1 / 3);
+ g = hue2rgb(p, q, h);
+ b = hue2rgb(p, q, h - 1 / 3);
+ }
+
+ return [ r * 255, g * 255, b * 255 ];
+};
+
+/**
+ * Converts an RGB color value to HSV. Conversion formula adapted from
+ * http://en.wikipedia.org/wiki/HSV_color_space. Assumes r, g, and b are
+ * contained in the set [0, 255] and returns h, s, and v in the set [0, 1].
+ *
+ * @param Number r The red color value
+ * @param Number g The green color value
+ * @param Number b The blue color value
+ * @return Array The HSV representation
+ */
+Color.prototype.hsv = function() {
+ let r = this.r / 255;
+ let g = this.g / 255;
+ let b = this.b / 255;
+ let max = Math.max(r, g, b), min = Math.min(r, g, b);
+ let h, s, v = max;
+
+ let d = max - min;
+ s = max === 0 ? 0 : d / max;
+
+ if (max === min) {
+ h = 0; // achromatic
+ } else {
+ switch (max) {
+ case r:
+ h = (g - b) / d + (g < b ? 6 : 0);
+ break;
+ case g:
+ h = (b - r) / d + 2;
+ break;
+ case b:
+ h = (r - g) / d + 4;
+ break;
+ }
+ h /= 6;
+ }
+
+ return [ h, s, v ];
+};
+
+/**
+ * Converts an HSV color value to RGB. Conversion formula adapted from
+ * http://en.wikipedia.org/wiki/HSV_color_space. Assumes h, s, and v are
+ * contained in the set [0, 1] and returns r, g, and b in the set [0, 255].
+ *
+ * @param Number h The hue
+ * @param Number s The saturation
+ * @param Number v The value
+ * @return Array The RGB representation
+ */
+Color.prototype.hsvToRgb = function(h, s, v) {
+ let r, g, b;
+
+ let i = Math.floor(h * 6);
+ let f = h * 6 - i;
+ let p = v * (1 - s);
+ let q = v * (1 - f * s);
+ let t = v * (1 - (1 - f) * s);
+
+ switch (i % 6) {
+ case 0:
+ r = v;
+ g = t;
+ b = p;
+ break;
+ case 1:
+ r = q;
+ g = v;
+ b = p;
+ break;
+ case 2:
+ r = p;
+ g = v;
+ b = t;
+ break;
+ case 3:
+ r = p;
+ g = q;
+ b = v;
+ break;
+ case 4:
+ r = t;
+ g = p;
+ b = v;
+ break;
+ case 5:
+ r = v;
+ g = p;
+ b = q;
+ break;
+ }
+
+ return [ r * 255, g * 255, b * 255 ];
+};
+
+/**
+ * Provide
+ */
+Color.prototype.lightColor = function() {
+ let hslArray = this.hsl();
+ let h = Number(hslArray[0]);
+ let s = Number(hslArray[1]) * this.Desaturated;
+ let l = this.Luminosity;
+ let desA = this.hslToRgb(h, s, l);
+ return new Color(desA[0], desA[1], desA[2]);
+};
diff --git a/lib/puvodni/old-main.js b/lib/puvodni/old-main.js
new file mode 100644
index 0000000..db81448
--- /dev/null
+++ b/lib/puvodni/old-main.js
@@ -0,0 +1,106 @@
+/*jslint onevar: false, browser: true, evil: true, laxbreak: true, undef: true, nomen: true, eqeqeq: true, bitwise: true, maxerr: 1000, immed: false, white: false, plusplus: false, regexp: false, undef: false */
+/*global jetpack */
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+//
+// Links to read through
+// http://ehsanakhgari.org/blog/2010-01-07/bugzilla-tweaks-enhanced
+// http://hg.mozilla.org/users/ehsan.akhgari_gmail.com/extensions/file/tip/bugzillatweaks
+// http://hg.mozilla.org/users/ehsan.akhgari_gmail.com/extensions/file/ecfa0f028b81/bugzillatweaks/lib/main.js
+// http://hg.mozilla.org/users/avarma_mozilla.com/atul-packages/file/42ac1e99a107/packages\
+// /facebook-acquaintances/lib/main.js#l11
+// http://ehsanakhgari.org/blog/2010-05-31/my-experience-jetpack-sdk#comment-1253
+//
+"use strict";
+var util = require("util");
+var logger = require("logger");
+var file = require("file");
+var myStorage = require("simple-storage").storage;
+
+var TriagedDistro = 13;
+var NumberOfFrames = 7;
+var XMLRPCurl = "https://bugzilla.redhat.com/xmlrpc.cgi";
+
+let config = {};
+config.matches = [
+ "https://bugzilla.redhat.com/show_bug.cgi",
+ "https://bugzilla.mozilla.org/show_bug.cgi"
+];
+
+
+// ==============================================================
+// https://wiki.mozilla.org/Labs/Jetpack/JEP/24
+var manifest = {
+ settings : [
+ {
+ name : "BZpassword",
+ type : "password",
+ label : "Bugzilla password"
+ },
+ {
+ name : "JSONURL",
+ type : "text",
+ label : "Configuration file URL",
+ "default" : "http://mcepl.fedorapeople.org/scripts/BugZappers_data.json"
+ },
+ {
+ name : "enabledPacks",
+ type : "text",
+ label : "comment packs which should be enabled",
+ "default" : ""
+ }
+ ]
+};
+jetpack.future.import("storage.settings");
+
+// /////////////////////////////////////////////////////////////////////////////
+function isOurPage(window) {
+ if ("window" in window) {
+ window = window.window;
+ }
+
+ if (window.location.protocol == "https:") {
+ // like ["name1": "url1", "name2":"url2"]
+ // FIXME the real name of bugzillaPageModLocation array
+ for (var loc in bugzillaPageModLocation) {
+ if (bugzillaPageModLocation[loc].test(window.location.href)) {
+ return true;
+ }
+ }
+ }
+ // we haven't found a conforming bugzilla
+ return false;
+}
+
+
+function initialize() {
+
+}
+
+util.loadJSON(jetpack.storage.settings.JSONURL, function(parsedData) {
+ config.gJSONData = parsedData;
+
+ // Get card translation table
+ let keys = "";
+ for (let key in config.gJSONData) {
+ keys += key + " ";
+ }
+ if ("PCIIDsURL" in config.gJSONData.configData) {
+ util.loadJSON(config.gJSONData.configData.PCIIDsURL, function(response) {
+ config.PCI_ID_Array = response;
+ });
+ }
+
+ config.logger = new logger.Logger(myStorage.logs,
+ config.gJSONData.constantData.bugzillalabelAbbreviations);
+
+ let callback = function(doc) {
+ if (config.gJSONData.configData.objectStyle = "RH") {
+ let curPage = new RHBugzillaPage(doc);
+ } else if (config.gJSONData.configData.objectStyle = "MoFo") {
+ let curPage = new MozillaBugzilla(doc);
+ }
+ };
+
+ jetpack.pageMods.add(callback, config);
+}, this);
diff --git a/lib/puvodni/xmlrpc.js b/lib/puvodni/xmlrpc.js
new file mode 100644
index 0000000..69bb77e
--- /dev/null
+++ b/lib/puvodni/xmlrpc.js
@@ -0,0 +1,168 @@
+// Released under the MIT/X11 license
+// http://www.opensource.org/licenses/mit-license.php
+"use strict";
+/*
+ *
+ * xmlrpc.js beta version 1 Tool for creating XML-RPC formatted requests in
+ * JavaScript
+ *
+ * Copyright 2001 Scott Andrew LePera scott@scottandrew.com
+ * http://www.scottandrew.com/xml-rpc
+ *
+ * License: You are granted the right to use and/or redistribute this code only
+ * if this license and the copyright notice are included and you accept that no
+ * warranty of any kind is made or implied by the author.
+ *
+ */
+
+var XMLRPCMessage = exports.XMLRPCMessage = function XMLRPCMessage(methodname) {
+ this.method = methodname || "system.listMethods";
+ this.params = [];
+ return this;
+}
+
+XMLRPCMessage.prototype.setMethod = function(methodName) {
+ if (!methodName) return;
+ this.method = methodName;
+};
+
+XMLRPCMessage.prototype.addParameter = function(data) {
+ if (arguments.length == 0) return;
+ this.params[this.params.length] = data;
+};
+
+XMLRPCMessage.prototype.xml = function() {
+
+ let method = this.method;
+
+ // assemble the XML message header
+ let xml = "";
+
+ xml += "<?xml version=\"1.0\"?>\n";
+ xml += "<methodCall>\n";
+ xml += "<methodName>" + method + "</methodName>\n";
+ xml += "<params>\n";
+
+ // do individual parameters
+ for ( let i = 0; i < this.params.length; i++) {
+ let data = this.params[i];
+ xml += "<param>\n";
+ xml += "<value>"
+ + this.getParamXML(this.dataTypeOf(data),
+ data) + "</value>\n";
+ xml += "</param>\n";
+ }
+
+ xml += "</params>\n";
+ xml += "</methodCall>";
+
+ return xml; // for now
+};
+
+XMLRPCMessage.prototype.dataTypeOf = function(o) {
+ // identifies the data type
+ let type = typeof (o);
+ type = type.toLowerCase();
+ switch (type) {
+ case "number":
+ if (Math.round(o) == o)
+ type = "i4";
+ else
+ type = "double";
+ break;
+ case "object":
+ let con = o.constructor;
+ if (con == Date)
+ type = "date";
+ else if (con == Array)
+ type = "array";
+ else
+ type = "struct";
+ break;
+ }
+ return type;
+};
+
+XMLRPCMessage.prototype.doValueXML = function(type, data) {
+ let xml = "<" + type + ">" + data + "</" + type + ">";
+ return xml;
+};
+
+XMLRPCMessage.prototype.doBooleanXML = function(data) {
+ let value = (data == true) ? 1 : 0;
+ let xml = "<boolean>" + value + "</boolean>";
+ return xml;
+};
+
+XMLRPCMessage.prototype.doDateXML = function(data) {
+ let leadingZero = function (n) {
+ // pads a single number with a leading zero. Heh.
+ if (n.length == 1)
+ n = "0" + n;
+ return n;
+ };
+ let dateToISO8601 = function(date) {
+ // wow I hate working with the Date object
+ let year = new String(date.getYear());
+ let month = this.leadingZero(new String(date.getMonth()));
+ let day = this.leadingZero(new String(date.getDate()));
+ let time = this.leadingZero(new String(date.getHours())) + ":"
+ + this.leadingZero(new String(date.getMinutes())) + ":"
+ + this.leadingZero(new String(date.getSeconds()));
+
+ let converted = year + month + day + "T" + time;
+ return converted;
+ };
+
+ let xml = "<dateTime.iso8601>";
+ xml += dateToISO8601(data);
+ xml += "</dateTime.iso8601>";
+ return xml;
+};
+
+XMLRPCMessage.prototype.doArrayXML = function(data) {
+ let xml = "<array><data>\n";
+ for ( let i = 0; i < data.length; i++) {
+ xml += "<value>"
+ + this.getParamXML(this.dataTypeOf(data[i]),
+ data[i]) + "</value>\n";
+ }
+ xml += "</data></array>\n";
+ return xml;
+};
+
+XMLRPCMessage.prototype.doStructXML = function(data) {
+ let xml = "<struct>\n";
+ for ( let i in data) {
+ xml += "<member>\n";
+ xml += "<name>" + i + "</name>\n";
+ xml += "<value>"
+ + this.getParamXML(this.dataTypeOf(data[i]),
+ data[i]) + "</value>\n";
+ xml += "</member>\n";
+ }
+ xml += "</struct>\n";
+ return xml;
+};
+
+XMLRPCMessage.prototype.getParamXML = function(type, data) {
+ let xml;
+ switch (type) {
+ case "date":
+ xml = this.doDateXML(data);
+ break;
+ case "array":
+ xml = this.doArrayXML(data);
+ break;
+ case "struct":
+ xml = this.doStructXML(data);
+ break;
+ case "boolean":
+ xml = this.doBooleanXML(data);
+ break;
+ default:
+ xml = this.doValueXML(type, data);
+ break;
+ }
+ return xml;
+};