From e33deabf570906df206a80b983b8b921546392c3 Mon Sep 17 00:00:00 2001 From: Jordan Bates Date: Wed, 1 May 2013 20:11:08 -0700 Subject: [PATCH] Move if statement into init --- CHANGELOG.md | 3 ++ builds/4chan-X.js | 72 +++++++++++++++++++++++++------- builds/4chan-X.user.js | 72 +++++++++++++++++++++++++------- builds/crx/script.js | 72 +++++++++++++++++++++++++------- src/Linkification/Linkify.coffee | 20 ++++----- 5 files changed, 184 insertions(+), 55 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82ac11f5a..8ebf44957 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ seaweedchan ihavenoface: - 4chan Pass link by the style selector +zixaphir: +- Make Allow False Positives option more efficient + ### 1.1.8 - 2013-05-01 seaweedchan: - Fix QR not clearing on submit with Posting Success Notifications disabled diff --git a/builds/4chan-X.js b/builds/4chan-X.js index bf9e3db6d..29fc8fe73 100644 --- a/builds/4chan-X.js +++ b/builds/4chan-X.js @@ -107,7 +107,7 @@ * */ (function() { - var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, + var $, $$, Anonymize, ArchiveLink, BanChecker, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, __slice = [].slice, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, @@ -4107,6 +4107,7 @@ if (g.VIEW === 'catalog' || !Conf['Linkify']) { return; } + this.regString = Conf['Allow False Positives'] ? this.regLooseString : this.regStrictString; if (Conf['Comment Expansion']) { ExpandComment.callbacks.push(this.node); } @@ -4115,8 +4116,8 @@ cb: this.node }); }, - regString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, - regAltString: /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi, + regLooseString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, + regStrictString: /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi, cypher: $.el('div'), node: function() { var a, child, cypher, cypherText, data, embed, embedder, embeds, i, index, len, link, links, lookahead, name, next, node, nodes, snapshot, spoiler, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2; @@ -4137,17 +4138,10 @@ nodes = $.frag(); node = snapshot.snapshotItem(i); data = node.data; - if (Conf['Allow False Positives']) { - if (!(node.parentNode && Linkify.regString.test(data))) { - continue; - } - Linkify.regString.lastIndex = 0; - } else { - if (!(node.parentNode && Linkify.regAltString.test(data))) { - continue; - } - Linkify.regAltString.lastIndex = 0; + if (!(node.parentNode && Linkify.regString.test(data))) { + continue; } + Linkify.regString.lastIndex = 0; cypherText = []; if (next = node.nextSibling) { cypher.textContent = node.textContent; @@ -4169,7 +4163,7 @@ if (cypherText.length) { data = cypherText.join(''); } - links = Conf['Allow False Positives'] ? data.match(Linkify.regString) : data.match(Linkify.regAltString); + links = data.match(Linkify.regString); for (_j = 0, _len1 = links.length; _j < _len1; _j++) { link = links[_j]; index = data.indexOf(link); @@ -7821,6 +7815,56 @@ } }; + BanChecker = { + init: function() { + var _this = this; + + if (!Conf['Check for Bans']) { + return; + } + return $.ready(function() { + return _this.load(); + }); + }, + load: function() { + this.url = 'https://www.4chan.org/banned'; + return $.ajax(this.url, { + onloadend: function() { + var ban, board, err, tmpDoc; + + if (this.status === 200 || 304) { + tmpDoc = d.implementation.createHTMLDocument(''); + tmpDoc.documentElement.innerHTML = this.response; + if (ban = $('.banType', tmpDoc)) { + board = $('.board', tmpDoc).innerHTML; + err = $.el('span', { + innerHTML: ban.textContent.toLowerCase() === 'banned' ? ("You are banned on " + board + "! ;_;
") + "Click here to see the reason." : ("You were issued a warning on " + board + " as " + ($('.nameBlock', tmpDoc).innerHTML) + ".
") + ("Reason: " + ($('.reason', tmpDoc).innerHTML)) + }); + } + if (err) { + BanChecker.error(err); + } + } + } + }); + }, + error: function(err) { + var el; + + if (typeof err === 'string') { + el = $.tn(err); + } else { + el = err; + el.removeAttribute('style'); + } + if (d.hidden) { + alert(el.textContent); + } + return BanChecker.notifications.push(new Notification('warning', el)); + }, + notifications: [] + }; + CatalogLinks = { init: function() { var el, input; diff --git a/builds/4chan-X.user.js b/builds/4chan-X.user.js index ea6397e1a..85f7e8e08 100644 --- a/builds/4chan-X.user.js +++ b/builds/4chan-X.user.js @@ -107,7 +107,7 @@ * */ (function() { - var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, + var $, $$, Anonymize, ArchiveLink, BanChecker, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, __slice = [].slice, __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, @@ -4103,6 +4103,7 @@ if (g.VIEW === 'catalog' || !Conf['Linkify']) { return; } + this.regString = Conf['Allow False Positives'] ? this.regLooseString : this.regStrictString; if (Conf['Comment Expansion']) { ExpandComment.callbacks.push(this.node); } @@ -4111,8 +4112,8 @@ cb: this.node }); }, - regString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, - regAltString: /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi, + regLooseString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, + regStrictString: /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi, cypher: $.el('div'), node: function() { var a, child, cypher, cypherText, data, embed, embedder, embeds, i, index, len, link, links, lookahead, name, next, node, nodes, snapshot, spoiler, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2; @@ -4133,17 +4134,10 @@ nodes = $.frag(); node = snapshot.snapshotItem(i); data = node.data; - if (Conf['Allow False Positives']) { - if (!(node.parentNode && Linkify.regString.test(data))) { - continue; - } - Linkify.regString.lastIndex = 0; - } else { - if (!(node.parentNode && Linkify.regAltString.test(data))) { - continue; - } - Linkify.regAltString.lastIndex = 0; + if (!(node.parentNode && Linkify.regString.test(data))) { + continue; } + Linkify.regString.lastIndex = 0; cypherText = []; if (next = node.nextSibling) { cypher.textContent = node.textContent; @@ -4165,7 +4159,7 @@ if (cypherText.length) { data = cypherText.join(''); } - links = Conf['Allow False Positives'] ? data.match(Linkify.regString) : data.match(Linkify.regAltString); + links = data.match(Linkify.regString); for (_j = 0, _len1 = links.length; _j < _len1; _j++) { link = links[_j]; index = data.indexOf(link); @@ -7842,6 +7836,56 @@ } }; + BanChecker = { + init: function() { + var _this = this; + + if (!Conf['Check for Bans']) { + return; + } + return $.ready(function() { + return _this.load(); + }); + }, + load: function() { + this.url = 'https://www.4chan.org/banned'; + return $.ajax(this.url, { + onloadend: function() { + var ban, board, err, tmpDoc; + + if (this.status === 200 || 304) { + tmpDoc = d.implementation.createHTMLDocument(''); + tmpDoc.documentElement.innerHTML = this.response; + if (ban = $('.banType', tmpDoc)) { + board = $('.board', tmpDoc).innerHTML; + err = $.el('span', { + innerHTML: ban.textContent.toLowerCase() === 'banned' ? ("You are banned on " + board + "! ;_;
") + "Click here to see the reason." : ("You were issued a warning on " + board + " as " + ($('.nameBlock', tmpDoc).innerHTML) + ".
") + ("Reason: " + ($('.reason', tmpDoc).innerHTML)) + }); + } + if (err) { + BanChecker.error(err); + } + } + } + }); + }, + error: function(err) { + var el; + + if (typeof err === 'string') { + el = $.tn(err); + } else { + el = err; + el.removeAttribute('style'); + } + if (d.hidden) { + alert(el.textContent); + } + return BanChecker.notifications.push(new Notification('warning', el)); + }, + notifications: [] + }; + CatalogLinks = { init: function() { var el, input; diff --git a/builds/crx/script.js b/builds/crx/script.js index 7aa2df050..c0d701887 100644 --- a/builds/crx/script.js +++ b/builds/crx/script.js @@ -88,7 +88,7 @@ * */ (function() { - var $, $$, Anonymize, ArchiveLink, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, + var $, $$, Anonymize, ArchiveLink, BanChecker, Board, Build, CatalogLinks, Clone, Conf, Config, CustomCSS, DataBoard, DataBoards, DeleteLink, DownloadLink, Emoji, ExpandComment, ExpandThread, FappeTyme, Favicon, FileInfo, Filter, Fourchan, Get, Header, IDColor, ImageExpand, ImageHover, ImageReplace, Keybinds, Linkify, Main, Menu, Nav, Notification, PSAHiding, Polyfill, Post, PostHiding, QR, QuoteBacklink, QuoteCT, QuoteInline, QuoteOP, QuotePreview, QuoteStrikeThrough, QuoteThreading, QuoteYou, Quotify, Recursive, Redirect, RelativeDates, RemoveSpoilers, Report, ReportLink, RevealSpoilers, Sauce, Settings, Thread, ThreadExcerpt, ThreadHiding, ThreadStats, ThreadUpdater, ThreadWatcher, Time, UI, Unread, c, d, doc, g, __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }, __slice = [].slice, __hasProp = {}.hasOwnProperty, @@ -4105,6 +4105,7 @@ if (g.VIEW === 'catalog' || !Conf['Linkify']) { return; } + this.regString = Conf['Allow False Positives'] ? this.regLooseString : this.regStrictString; if (Conf['Comment Expansion']) { ExpandComment.callbacks.push(this.node); } @@ -4113,8 +4114,8 @@ cb: this.node }); }, - regString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, - regAltString: /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi, + regLooseString: /(\b([a-z]+:\/\/|[a-z]{3,}\.[-a-z0-9]+\.[a-z]+|[-a-z0-9]+\.[a-z]|[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+|[a-z]{3,}:[a-z0-9?]|[a-z0-9._%+-:]+@[a-z0-9.-]+\.[a-z0-9])[^\s'"]+)/gi, + regStrictString: /(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\:\/\/){1}\S+)/gi, cypher: $.el('div'), node: function() { var a, child, cypher, cypherText, data, embed, embedder, embeds, i, index, len, link, links, lookahead, name, next, node, nodes, snapshot, spoiler, text, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2; @@ -4135,17 +4136,10 @@ nodes = $.frag(); node = snapshot.snapshotItem(i); data = node.data; - if (Conf['Allow False Positives']) { - if (!(node.parentNode && Linkify.regString.test(data))) { - continue; - } - Linkify.regString.lastIndex = 0; - } else { - if (!(node.parentNode && Linkify.regAltString.test(data))) { - continue; - } - Linkify.regAltString.lastIndex = 0; + if (!(node.parentNode && Linkify.regString.test(data))) { + continue; } + Linkify.regString.lastIndex = 0; cypherText = []; if (next = node.nextSibling) { cypher.textContent = node.textContent; @@ -4167,7 +4161,7 @@ if (cypherText.length) { data = cypherText.join(''); } - links = Conf['Allow False Positives'] ? data.match(Linkify.regString) : data.match(Linkify.regAltString); + links = data.match(Linkify.regString); for (_j = 0, _len1 = links.length; _j < _len1; _j++) { link = links[_j]; index = data.indexOf(link); @@ -7825,6 +7819,56 @@ } }; + BanChecker = { + init: function() { + var _this = this; + + if (!Conf['Check for Bans']) { + return; + } + return $.ready(function() { + return _this.load(); + }); + }, + load: function() { + this.url = 'https://www.4chan.org/banned'; + return $.ajax(this.url, { + onloadend: function() { + var ban, board, err, tmpDoc; + + if (this.status === 200 || 304) { + tmpDoc = d.implementation.createHTMLDocument(''); + tmpDoc.documentElement.innerHTML = this.response; + if (ban = $('.banType', tmpDoc)) { + board = $('.board', tmpDoc).innerHTML; + err = $.el('span', { + innerHTML: ban.textContent.toLowerCase() === 'banned' ? ("You are banned on " + board + "! ;_;
") + "Click here to see the reason." : ("You were issued a warning on " + board + " as " + ($('.nameBlock', tmpDoc).innerHTML) + ".
") + ("Reason: " + ($('.reason', tmpDoc).innerHTML)) + }); + } + if (err) { + BanChecker.error(err); + } + } + } + }); + }, + error: function(err) { + var el; + + if (typeof err === 'string') { + el = $.tn(err); + } else { + el = err; + el.removeAttribute('style'); + } + if (d.hidden) { + alert(el.textContent); + } + return BanChecker.notifications.push(new Notification('warning', el)); + }, + notifications: [] + }; + CatalogLinks = { init: function() { var el, input; diff --git a/src/Linkification/Linkify.coffee b/src/Linkification/Linkify.coffee index 6e8babf86..6a497455e 100644 --- a/src/Linkification/Linkify.coffee +++ b/src/Linkification/Linkify.coffee @@ -2,6 +2,8 @@ Linkify = init: -> return if g.VIEW is 'catalog' or not Conf['Linkify'] + @regString = if Conf['Allow False Positives'] then @regLooseString else @regStrictString + if Conf['Comment Expansion'] ExpandComment.callbacks.push @node @@ -9,7 +11,7 @@ Linkify = name: 'Linkify' cb: @node - regString: ///( + regLooseString: ///( \b( [a-z]+:// | @@ -26,7 +28,7 @@ Linkify = [^\s'"]+ )///gi - regAltString: ///(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\://){1}\S+)///gi + regStrictString: ///(((magnet|mailto)\:|(www\.)|(news|(ht|f)tp(s?))\://){1}\S+)///gi cypher: $.el 'div' @@ -46,15 +48,10 @@ Linkify = data = node.data # Test for valid links - if Conf['Allow False Positives'] - continue unless node.parentNode and Linkify.regString.test data - Linkify.regString.lastIndex = 0 + continue unless node.parentNode and Linkify.regString.test data - else - continue unless node.parentNode and Linkify.regAltString.test data - - Linkify.regAltString.lastIndex = 0 + Linkify.regString.lastIndex = 0 cypherText = [] @@ -78,10 +75,7 @@ Linkify = if cypherText.length data = cypherText.join '' - links = if Conf['Allow False Positives'] - data.match Linkify.regString - else - data.match Linkify.regAltString + links = data.match Linkify.regString for link in links index = data.indexOf link