summaryrefslogtreecommitdiff
path: root/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain
diff options
context:
space:
mode:
Diffstat (limited to 'helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain')
-rw-r--r--helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_finder.js465
-rw-r--r--helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_regex.js49
-rw-r--r--helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/link_types.js42
-rw-r--r--helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/pagemod_finder.js291
-rw-r--r--helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/worker_finder.js35
5 files changed, 882 insertions, 0 deletions
diff --git a/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_finder.js b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_finder.js
new file mode 100644
index 0000000..cbdfb39
--- /dev/null
+++ b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_finder.js
@@ -0,0 +1,465 @@
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2011, 2012, 2014 Loic J. Duros
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+var contactFinder = {
+
+ // initial full list of links
+ // on a page.
+ pageLinks:null,
+
+ // arrays of links.
+ certainLinks: null,
+ probableLinks: null,
+ uncertainLinks: null,
+
+ // if not page worker,
+ // then allow to trigger a page worker.
+ isPageWorker: false,
+
+ // keep track of links already visited.
+ visitedLinks: {},
+
+ // keep track of the hostname of the original page.
+ originalHostname: null,
+
+ init: function (isPageWorker) {
+
+ if (isPageWorker) {
+
+ this.isPageWorker = true;
+ console.debug('visiting', document.location.href);
+ }
+
+ this.convertStringToRegexp();
+
+ },
+
+ /**
+ * searchForContactLink Main interface method to call from outside
+ * the object.
+ */
+ searchForContactLink: function (originalUrl) {
+
+ // find hostname of original page.
+ this.originalHostname = this.getHostname(originalUrl);
+
+ // initialize arrays of links to keep.
+ this.certainLinks = [];
+ this.probableLinks = [];
+ this.uncertainLinks = [];
+
+ // select all a tags.
+ this.pageLinks = $('a').get();
+
+ this.searchForUSPhoneNumber($('body').text());
+
+ // run through list of links.
+ this.processLinks();
+ },
+
+ /**
+ * loopThroughLanguages
+ * Select strings for all languages.
+ */
+ loopThroughLanguages: function (callback) {
+ var le;
+
+ for (var language in contactStr) {
+ for (var degree in contactStr[language]) {
+ le = contactStr[language][degree].length;
+ callback(degree, contactStr[language][degree], le);
+ }
+ }
+
+ },
+
+ /**
+ * convertStringToRegexp
+ *
+ */
+ convertStringToRegexp: function () {
+
+ var regexpList, i, le;
+
+ this.loopThroughLanguages(function (degreeName, arr, le) {
+
+ for (i = 0; i < le; i++) {
+ arr[i] = new RegExp(arr[i], 'i');
+ }
+
+ });
+
+ },
+
+ /**
+ * processLinks
+ *
+ * Run through the list of links in a page
+ * and call the method that checks the regexs
+ * for each of them.
+ *
+ */
+ processLinks: function () {
+
+ var start = Date.now();
+ var currentLink;
+
+ while (this.pageLinks.length) {
+
+ currentLink = this.pageLinks.pop();
+
+ if (currentLink !== undefined) {
+
+ this.matchContact(currentLink);
+
+ }
+
+ var end = Date.now();
+
+ if (this.pageLinks.length) {
+
+ if ((end - start) > 8) {
+
+ setTimeout(this.processLinks.bind(this), 100);
+ return;
+
+ }
+
+ }
+
+ else if (this.isPageWorker) {
+
+ self.postMessage({event: 'destroy'});
+ return;
+
+ }
+
+
+ }
+
+
+
+
+ },
+
+ /**
+ * searchForUSPhoneNumber
+ *
+ */
+ searchForUSPhoneNumber: function (str) {
+ var phoneMatch, phone;
+ var regClutter = /[\(\)\-\. ]+/gm;
+
+ while ((phoneMatch = usaPhoneNumber.exec(str)) !== null) {
+
+ phone = $.trim(phoneMatch).replace(regClutter, '-').replace(/^\-/, '');
+ phone = phone.replace(/[^0-9]$/, '');
+
+ self.postMessage(
+ { event: linkTypes.PHONE_NUMBER_FOUND,
+ contact: {
+ 'label': phone,
+ 'link': 'javascript:void("' + phone + '")' }
+ }
+ );
+ }
+ },
+
+ /**
+ * searchForSocialMedia
+ *
+ * Match a Twitter or identi.ca url.
+ *
+ */
+ searchForSocialMedia: function (link) {
+
+ var elem = $(link),
+ eventType;
+
+ var text = this.notEmptyOrUri(link);
+
+ if (reTwitter.test(elem.attr('href'))) {
+ eventType = linkTypes.TWITTER_LINK_FOUND;
+ }
+
+ else if (reIdentiCa.test(elem.attr('href'))) {
+ eventType = linkTypes.IDENTICA_LINK_FOUND;
+ }
+
+ if (eventType) {
+ self.postMessage(
+ { event: eventType,
+ contact: {
+ 'label': text,
+ 'link': elem.attr('href')}
+ }
+ );
+ return true;
+ }
+
+ return false;
+ },
+
+ /**
+ * notEmptyOrUri
+ *
+ * If link has text, use it, if not,
+ * then return uri.
+ *
+ */
+ notEmptyOrUri: function (link) {
+
+ var elem = $(link);
+
+ if (/([^\s]*)]/.test(elem.text())) {
+ // contains something else than just space.
+ // It is valid.
+ return elem.text();
+
+ } else {
+
+ return link.href;
+
+ }
+
+ },
+
+ /**
+ * searchForContactEmail
+ *
+ * Sends a particular message if a matching email
+ * is found.
+ *
+ */
+ searchForContactEmail: function (link) {
+
+ var elem = $(link),
+ eventType;
+
+ if (reEmail.test(elem.attr('href'))) {
+ console.debug('found an email address', elem.attr('href'));
+ if (this.isSameHostname(elem.attr('href'))) {
+ // this is a good email with same hostname, priceless!
+ eventType = linkTypes.CERTAIN_EMAIL_ADDRESS_FOUND;
+ } else {
+ // not the same hostname... we'll keep it just in case.
+ eventType = linkTypes.UNCERTAIN_EMAIL_ADDRESS_FOUND;
+ }
+
+ } else if (reAnyEmail.test(elem.attr('href'))) {
+
+ if (this.isSameHostname(elem.attr('href'))) {
+ eventType = linkTypes.UNCERTAIN_EMAIL_ADDRESS_FOUND;
+ }
+
+ }
+ if (eventType) {
+ // we found an email address.
+ // send message with whatever event type was found.
+ self.postMessage({event: eventType,
+ contact: {
+ 'label': elem.attr('href').replace('mailto:', ''),
+ 'link': elem.attr('href')}
+ });
+ return true;
+
+ }
+ else {
+ // not an email address.
+ return false;
+ }
+
+ },
+
+ /**
+ * matchContact
+ *
+ * Loop through the regexp and try to find a match.
+ *
+ */
+ matchContact: function (currentLink) {
+
+ // search for an email address.
+ if (this.searchForContactEmail(currentLink)) {
+ return true;
+ }
+ if (this.searchForSocialMedia(currentLink)) {
+ return true;
+ }
+
+ // check all contact link strings.
+ this.matchContactLink(currentLink);
+
+ // this link is worth nothing.
+ //return false;
+
+ },
+
+ /**
+ * matchContactLink
+ *
+ * loop through regexp for a contact link.
+ * And send a message to trigger a page worker
+ * if not currently a page worker.
+ *
+ */
+ matchContactLink: function (currentLink) {
+
+ var that = this;
+
+ this.loopThroughLanguages(
+ function (degreeName, arr, le) {
+
+ var text, j, href;
+
+ for (j = 0; j < le; j++) {
+
+ text = $(currentLink).text();
+ href = currentLink.href;
+
+ if (arr[j].test(text)) {
+
+ if (degreeName === 'certain') {
+
+ self.postMessage(
+ { event: linkTypes.CERTAIN_LINK_FOUND,
+ contact: {
+ 'label': text,
+ 'link': href}
+ }
+ );
+
+ if (!that.isPageWorker) {
+ that.complaintSearch(linkTypes.CERTAIN_LINK_FOUND, href);
+ }
+
+
+ } else if (degreeName === 'probable'){
+
+ self.postMessage(
+ { event: linkTypes.PROBABLE_LINK_FOUND,
+ contact: {
+ 'label': text,
+ 'link': href}
+ }
+ );
+
+ if (!that.isPageWorker) {
+ that.complaintSearch(linkTypes.PROBABLE_LINK_FOUND, href);
+ }
+
+ } else if (degreeName === 'uncertain') {
+
+ self.postMessage(
+ { event: linkTypes.UNCERTAIN_LINK_FOUND,
+ contact: {
+ 'label': text,
+ 'link': href}
+ }
+ );
+
+
+ if (!that.isPageWorker) {
+ that.complaintSearch(linkTypes.UNCERTAIN_LINK_FOUND, href);
+ }
+ }
+ }
+
+ }
+ });
+
+ },
+
+ /**
+ * complaintSearch
+ * returns to ui_info a link to open.
+ */
+ complaintSearch: function (linkType, link) {
+
+ console.debug('the complaint search url is', link);
+
+ if (!this.isEmailLink(link)) {
+
+ // we don't want to "visit" mailto links.
+ self.postMessage({event: 'complaintSearch',
+ urlSearch: {'type': linkType, 'linkValue': link}
+ });
+
+ }
+ },
+
+ /**
+ * getHostname
+ * small regex taken from
+ * http://beardscratchers.com/journal/using-javascript-to-get-the-hostname-of-a-url
+ * to extract hostname from url.
+ * do not consider www as subdomain.
+ *
+ */
+ getHostname: function (str) {
+
+ // remove www, but not other kind of subdomains (which most likely
+ // may not be the same site than the domain itself.)
+ str = this.removeWWW(str);
+ var urlHostname = /^(?:f|ht)tp(?:s)?\:\/\/([^\/]+)/im;
+ var emailHostname = /^mailto:[A-Z0-9\.\_\+\-]+\@([A-Z0-9\.\-]+\.[A-Z]{2,6})$/im;
+ var match1 = urlHostname.exec(str);
+ var match2 = emailHostname.exec(str);
+
+ if (match1) {
+ return match1[1];
+ }
+ else if (match2) {
+ return match2[1];
+ }
+
+ // no match.
+ return false;
+
+ },
+
+ /**
+ * isSameHostname
+ *
+ * Checks a link has the same hostname than the original url.
+ *
+ */
+ isSameHostname: function (url) {
+
+ return this.getHostname(url) === this.originalHostname;
+
+ },
+
+ /**
+ * remove www from hostname.
+ */
+ removeWWW: function (str) {
+
+ return str.replace("www.", "", 'i');
+
+ },
+
+ isEmailLink: function (str) {
+
+ return /^mailto:/i.test(str);
+
+ }
+
+};
diff --git a/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_regex.js b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_regex.js
new file mode 100644
index 0000000..e797b5e
--- /dev/null
+++ b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/contact_regex.js
@@ -0,0 +1,49 @@
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2011, 2012 Loic J. Duros
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+// email address regexp
+var reEmail = /^mailto\:(admin|feedback|webmaster|info|contact|support|comments|team|help)\@[a-z0-9.\-]+\.[a-z]{2,4}$/i;
+
+var reAnyEmail = /^mailto\:.*?\@[a-z0-9\.\-]+\.[a-z]{2,4}$/i;
+
+// twitter address regexp
+var reTwitter = /twitter\.com\/(\!?#\/)?[a-z0-9]*/i;
+
+// identi.ca address regexp
+var reIdentiCa = /identi\.ca\/(?!notice\/)[a-z0-9]*/i;
+
+/**
+ * contactSearchStrings
+ * Contains arrays of strings classified by language
+ * and by degree of certainty.
+ */
+var contactStr = {
+ 'english': {
+ 'certain': ['^[\s]*Contact Us[\s]*$', '^[\s]*Email Us[\s]*$', '^[\s]*Contact[\s]*$', '^[\s]*Feedback[\s]*$', '^[\s]*Web.?site Feedback[\s]*$'],
+ 'probable': ['^[\s]Contact', '^[\s]*Email'],
+ 'uncertain': ['^[\s]*About Us', '^[\s]*About', 'Who we are', 'Who I am', 'Company Info', 'Customer Service']
+ },
+ 'french': {
+ 'certain': ['^[\s]*Contactez nous[\s]*$', '^[\s]*(Nous )?contacter[\s]*$', '^[\s]*Email[\s]*$', '^[\s]*Contact[\s]*$', '^[\s]*Commentaires[\s]*$'],
+ 'probable': ['^[\s]Contact', '^[\s]*Email'],
+ 'uncertain': ['^[\s]*(A|À) propos', 'Qui nous sommes', 'Qui suis(-| )?je', 'Info', 'Service Client(e|è)le']
+ },
+};
+
+var usaPhoneNumber = /(?:\+ ?1 ?)?\(?[2-9]{1}[0-9]{2}\)?(?:\-|\.| )?[0-9]{3}(?:\-|\.| )[0-9]{4}(?:[^0-9])/mg; \ No newline at end of file
diff --git a/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/link_types.js b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/link_types.js
new file mode 100644
index 0000000..fefd4fd
--- /dev/null
+++ b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/link_types.js
@@ -0,0 +1,42 @@
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2011, 2012 Loic J. Duros
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+var linkTypes = {
+
+ // constants. Also available in lib/ui_info.js
+ 'CERTAIN_EMAIL_ADDRESS_FOUND': 'certainEmailAddressFound',
+ 'UNCERTAIN_EMAIL_ADDRESS_FOUND': 'uncertainEmailAddressFound',
+
+ // Looking for contact links
+ 'CERTAIN_LINK_FOUND': 'certainLinkFound',
+ 'PROBABLE_LINK_FOUND': 'probableLinkFound',
+ 'UNCERTAIN_LINK_FOUND': 'uncertainLinkFound',
+ 'LINK_NOT_FOUND': 'contactLinkNotFound',
+
+ // Looking for identi.ca and twitter accounts.
+ 'TWITTER_LINK_FOUND': 'twitterLinkFound',
+ 'IDENTICA_LINK_FOUND': 'identicaLinkFound',
+
+ // phone number and address
+ 'PHONE_NUMBER_FOUND': 'phoneNumberFound',
+ 'SNAIL_ADDRESS_FOUND': 'snailAddressFound'
+
+};
+
diff --git a/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/pagemod_finder.js b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/pagemod_finder.js
new file mode 100644
index 0000000..036f5f6
--- /dev/null
+++ b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/pagemod_finder.js
@@ -0,0 +1,291 @@
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2011, 2012 Loic J. Duros
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+
+var pageModFinder = {
+
+
+ image: null,
+
+ stylesheet: null,
+
+ button: null,
+
+ displayPanel: false,
+
+ links: null,
+
+ box: null,
+
+ infoBox: null,
+
+ init: function () {
+
+ var that = this, le;
+
+ this.links = [];
+
+
+ self.on('message', function (respData) {
+
+ if (respData.event === 'assets-uri') {
+ that.setComplaintPanel(respData.value);
+ }
+
+ else if (respData.event === 'page-url') {
+
+ // search for contact list. Top level.
+ contactFinder.init();
+ //console.debug('page url is', respData.value);
+ contactFinder.searchForContactLink(respData.value);
+
+ }
+
+ else if (respData.contact !== undefined){
+ that.displayLinkByPriority(respData);
+ }
+ });
+
+ },
+
+ /**
+ * setComplaintPanel
+ *
+ * Create complaint panel and assign properties to the
+ * dom elements.
+ *
+ */
+ setComplaintPanel: function (uri) {
+
+ // provide uri of stylesheet
+ this.stylesheet = uri + 'css/style.css';
+
+ // add stylesheet.
+ $('head').append($('<link/>').attr({'rel': 'stylesheet',
+ 'href': this.stylesheet,
+ 'type': 'text/css'}));
+
+ $('body').prepend('<div id="librejs-complaint-box" style="display:none">' +
+ '\n\n ' +
+ '<a id="librejs-tab-button" href="#" title="LibreJS -- Complain to this site">LibreJS -- Complain to this site.</a>' +
+ '\n\n ' +
+ '<div id="librejs-complaint-info">' +
+ '\n\n ' +
+ '<h1 title="Nonfree JavaScript -- Complain">\n Nonfree JavaScript Complain\n </h1>' +
+ '\n\n' +
+ '<p id="librejs-time-mention">Searching for contact links in this website...</p>' +
+ '\n\n' +
+ '<div id="librejs-complaint-info-text">' +
+
+ '<h2>Emails you should use</h2>' +
+ '<ul id="librejs-certain-emails"></ul>' +
+
+ '<h2>Non-webmaster Emails you might want to use</h2>' +
+ '<ul id="librejs-uncertain-emails"></ul>' +
+
+ '<h2>Contact form or useful Contact Information</h2>' +
+ '<ul id="librejs-certain-links"></ul>' +
+
+ '<h2>Twitter Links</h2>' +
+ '<ul id="librejs-twitter-links"></ul>' +
+
+ '<h2>Identi.ca Links</h2>' +
+ '<ul id="librejs-identica-links"></ul>' +
+
+ '<h2>May be of interest</h2>' +
+ '<ul id="librejs-uncertain-links"></ul>' +
+
+ '<h2>May be of interest</h2>' +
+ '<ul id="librejs-probable-links"></ul>' +
+
+ '<h2>Phone Numbers</h2>' +
+ '<ul id="librejs-phone-numbers"></ul>' +
+
+ '<h2>Snail Mail Addresses</h2>' +
+ '<ul id="librejs-snail-addresses"></ul>' +
+ '</div>' +
+ ' </div></div>');
+
+ // main elements of the complaint panel.
+ this.infoBox = $('#librejs-complaint-info');
+ this.infoBoxText = $('#librejs-complaint-info-text');
+
+ // all lists.
+ this.certainEmails = $("#librejs-certain-emails");
+ this.uncertainEmails = $("#librejs-uncertain-emails");
+ this.certainLinks = $("#librejs-certain-links");
+ this.uncertainLinks = $("#librejs-uncertain-links");
+ this.probableLinks = $("#librejs-probable-links");
+ this.twitterLinks = $("#librejs-twitter-links");
+ this.identicaLinks = $("#librejs-identica-links");
+ this.phoneNumbers = $("#librejs-phone-numbers");
+ this.snailAddresses = $("#librejs-snail-addresses");
+
+ this.button = $('#librejs-tab-button');
+ this.box = $('#librejs-complaint-box');
+
+ this.infoBox.height(window.innerHeight / 1.3);
+ this.infoBoxText.height(this.infoBox.height() - 150);
+
+ },
+
+
+ /**
+ *
+ * displayLinkByPriority
+ *
+ * Place the link in the correct list depending
+ * on the correct
+ */
+ displayLinkByPriority: function (respData) {
+
+ // we have a link to show. Add it to the button.
+ // first time finalLinkFound is triggered.
+ if (this.displayPanel === false) {
+
+ this.addComplaintOverlay();
+ this.displayPanel = true;
+ this.hideBox(true);
+ }
+
+ // check link isn't already added.
+ if (respData.contact !== undefined &&
+ !this.isInLinks(respData.contact.link)) {
+
+ // push link to list.
+ le = this.links.push(respData);
+
+ // making sure this is the latest link added.
+ this.addALinkToPanel(this.links[le -1]);
+
+ }
+
+
+ },
+
+ isInLinks: function (searchValue) {
+ var i = 0,
+ le = this.links.length;
+
+ for (; i < le; i++) {
+
+ if (this.links[i].contact.link.replace(/\/$/, '') === searchValue.replace(/\/$/, '')) {
+ return true;
+ }
+ }
+
+ // no match has been found.
+ return false;
+
+ },
+
+ /**
+ * addALinkToPanel
+ *
+ * Check the type of link and place it in the
+ * appropriate list in the complaint panel.
+ *
+ */
+ addALinkToPanel: function (link) {
+
+ var listElem;
+
+ switch (link.event) {
+
+ case linkTypes.CERTAIN_EMAIL_ADDRESS_FOUND:
+ listElem = this.certainEmails;
+ break;
+
+ case linkTypes.UNCERTAIN_EMAIL_ADDRESS_FOUND:
+ listElem = this.uncertainEmails;
+ break;
+
+ case linkTypes.CERTAIN_LINK_FOUND:
+ listElem = this.certainLinks;
+ break;
+
+ case linkTypes.PROBABLE_LINK_FOUND:
+ listElem = this.probableLinks;
+ break;
+
+ case linkTypes.UNCERTAIN_LINK_FOUND:
+ listElem = this.uncertainLinks;
+ break;
+
+ case linkTypes.TWITTER_LINK_FOUND:
+ listElem = this.twitterLinks;
+ break;
+
+ case linkTypes.IDENTICA_LINK_FOUND:
+ listElem = this.identicaLinks;
+ break;
+
+ case linkTypes.PHONE_NUMBER_FOUND:
+ listElem = this.phoneNumbers;
+ break;
+
+ case linkTypes.SNAIL_ADDRESS_FOUND:
+ listElem = this.snailAddresses;
+ break;
+ }
+
+ listElem.prev('h2').css({'display': 'block'});
+ listElem.append($('<li/>').append($('<a/>').attr({'href': link.contact.link,
+ 'target': '_blank'}).text(link.contact.label)));
+
+
+ },
+
+ addComplaintOverlay: function () {
+ var that = this;
+
+ this.button.bind('mouseenter', function () { that.showBox(); });
+
+ this.box.bind('mouseleave', function () { that.hideBox(); });
+
+ this.button.bind('focus', function () { that.showBox(); });
+ this.box.bind('blur', function () { that.hideBox(); });
+
+ this.box.css({'display': 'block'});
+
+ //this.hideBox(true);
+ },
+
+ showBox: function () {
+ this.box.stop().animate({
+ right: '-5px'
+ }, {queue: false, duration: 1500, easing: 'easeInOutQuart'});
+ },
+
+ hideBox: function (hint) {
+ var rightMargin = '-550px';
+
+ if (hint) {
+ rightMargin = '-530px';
+ }
+
+ this.box.stop().delay(10000).animate({
+ right: rightMargin
+ }, {queue:false, duration: 1500, easing: 'easeInOutQuart'});
+
+ }
+
+
+};
diff --git a/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/worker_finder.js b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/worker_finder.js
new file mode 100644
index 0000000..2cda32e
--- /dev/null
+++ b/helpers/DATA/firefox/gnu/extensions/jid1-KtlZuoiikVfFew@jetpack/resources/librejs/data/complain/worker_finder.js
@@ -0,0 +1,35 @@
+/**
+ * GNU LibreJS - A browser add-on to block nonfree nontrivial JavaScript.
+ * *
+ * Copyright (C) 2011, 2012 Loic J. Duros
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+var workerFinder = {
+
+ init: function () {
+
+ var that = this;
+ console.debug('searching with pageworker');
+
+ contactFinder.init(true);
+ contactFinder.searchForContactLink(window.location.href);
+
+ }
+
+};
+
+workerFinder.init();