Index: assets/js/FilterStorage.jsm |
diff --git a/assets/js/FilterStorage.jsm b/assets/js/FilterStorage.jsm |
deleted file mode 100755 |
index 504b18037fed26cce646fb14aa8ac376d713a721..0000000000000000000000000000000000000000 |
--- a/assets/js/FilterStorage.jsm |
+++ /dev/null |
@@ -1,556 +0,0 @@ |
-/* |
- * This file is part of Adblock Plus <http://adblockplus.org/>, |
- * Copyright (C) 2006-2014 Eyeo GmbH |
- * |
- * Adblock Plus is free software: you can redistribute it and/or modify |
- * it under the terms of the GNU General Public License version 3 as |
- * published by the Free Software Foundation. |
- * |
- * Adblock Plus 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 Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
- */ |
- |
- |
-// |
-// This file has been generated automatically from Adblock Plus source code |
-// |
- |
-(function (_patchFunc11) { |
- const formatVersion = 4; |
- var FilterStorage = { |
- get formatVersion() { |
- return formatVersion; |
- }, |
- get sourceFile() { |
- var file = null; |
- if (Prefs.patternsfile) { |
- file = Utils.resolveFilePath(Prefs.patternsfile); |
- } |
- if (!file) { |
- file = Utils.resolveFilePath(Prefs.data_directory); |
- if (file) |
- file.append("patterns.ini"); |
- } |
- if (!file) { |
- try { |
- file = Utils.resolveFilePath(Prefs.defaultBranch.getCharPref("data_directory")); |
- if (file) |
- file.append("patterns.ini"); |
- } |
- catch (e){} |
- } |
- if (!file) |
- Cu.reportError("Adblock Plus: Failed to resolve filter file location from extensions.adblockplus.patternsfile preference"); |
- this.__defineGetter__("sourceFile", function () { |
- return file; |
- }); |
- return this.sourceFile; |
- } |
- , |
- fileProperties: { |
- __proto__: null |
- }, |
- subscriptions: [], |
- knownSubscriptions: { |
- __proto__: null |
- }, |
- getGroupForFilter: function (filter) { |
- var generalSubscription = null; |
- for (var _loopIndex0 = 0; |
- _loopIndex0 < FilterStorage.subscriptions.length; ++ _loopIndex0) { |
- var subscription = FilterStorage.subscriptions[_loopIndex0]; |
- if (subscription instanceof SpecialSubscription) { |
- if (subscription.isDefaultFor(filter)) |
- return subscription; |
- if (!generalSubscription && (!subscription.defaults || !subscription.defaults.length)) |
- generalSubscription = subscription; |
- } |
- } |
- return generalSubscription; |
- } |
- , |
- addSubscription: function (subscription, silent) { |
- if (subscription.url in FilterStorage.knownSubscriptions) |
- return ; |
- FilterStorage.subscriptions.push(subscription); |
- FilterStorage.knownSubscriptions[subscription.url] = subscription; |
- addSubscriptionFilters(subscription); |
- if (!silent) |
- FilterNotifier.triggerListeners("subscription.added", subscription); |
- } |
- , |
- removeSubscription: function (subscription, silent) { |
- for (var i = 0; |
- i < FilterStorage.subscriptions.length; i++) { |
- if (FilterStorage.subscriptions[i].url == subscription.url) { |
- removeSubscriptionFilters(subscription); |
- FilterStorage.subscriptions.splice(i--, 1); |
- delete FilterStorage.knownSubscriptions[subscription.url]; |
- if (!silent) |
- FilterNotifier.triggerListeners("subscription.removed", subscription); |
- return ; |
- } |
- } |
- } |
- , |
- moveSubscription: function (subscription, insertBefore) { |
- var currentPos = FilterStorage.subscriptions.indexOf(subscription); |
- if (currentPos < 0) |
- return ; |
- var newPos = insertBefore ? FilterStorage.subscriptions.indexOf(insertBefore) : -1; |
- if (newPos < 0) |
- newPos = FilterStorage.subscriptions.length; |
- if (currentPos < newPos) |
- newPos--; |
- if (currentPos == newPos) |
- return ; |
- FilterStorage.subscriptions.splice(currentPos, 1); |
- FilterStorage.subscriptions.splice(newPos, 0, subscription); |
- FilterNotifier.triggerListeners("subscription.moved", subscription); |
- } |
- , |
- updateSubscriptionFilters: function (subscription, filters) { |
- removeSubscriptionFilters(subscription); |
- subscription.oldFilters = subscription.filters; |
- subscription.filters = filters; |
- addSubscriptionFilters(subscription); |
- FilterNotifier.triggerListeners("subscription.updated", subscription); |
- delete subscription.oldFilters; |
- if (subscription instanceof SpecialSubscription && !subscription.filters.length && subscription.disabled) |
- subscription.disabled = false; |
- } |
- , |
- addFilter: function (filter, subscription, position, silent) { |
- if (!subscription) { |
- if (filter.subscriptions.some(function (s) { |
- return s instanceof SpecialSubscription; |
- })) |
- return ; |
- subscription = FilterStorage.getGroupForFilter(filter); |
- } |
- if (!subscription) { |
- subscription = SpecialSubscription.createForFilter(filter); |
- this.addSubscription(subscription); |
- return ; |
- } |
- if (typeof position == "undefined") |
- position = subscription.filters.length; |
- if (filter.subscriptions.indexOf(subscription) < 0) |
- filter.subscriptions.push(subscription); |
- subscription.filters.splice(position, 0, filter); |
- if (!silent) |
- FilterNotifier.triggerListeners("filter.added", filter, subscription, position); |
- } |
- , |
- removeFilter: function (filter, subscription, position) { |
- var subscriptions = (subscription ? [subscription] : filter.subscriptions.slice()); |
- for (var i = 0; |
- i < subscriptions.length; i++) { |
- var subscription = subscriptions[i]; |
- if (subscription instanceof SpecialSubscription) { |
- var positions = []; |
- if (typeof position == "undefined") { |
- var index = -1; |
- do { |
- index = subscription.filters.indexOf(filter, index + 1); |
- if (index >= 0) |
- positions.push(index); |
- } |
- while (index >= 0); |
- } |
- else |
- positions.push(position); |
- for (var j = positions.length - 1; |
- j >= 0; j--) { |
- var position = positions[j]; |
- if (subscription.filters[position] == filter) { |
- subscription.filters.splice(position, 1); |
- if (subscription.filters.indexOf(filter) < 0) { |
- var index = filter.subscriptions.indexOf(subscription); |
- if (index >= 0) |
- filter.subscriptions.splice(index, 1); |
- } |
- FilterNotifier.triggerListeners("filter.removed", filter, subscription, position); |
- } |
- } |
- } |
- } |
- } |
- , |
- moveFilter: function (filter, subscription, oldPosition, newPosition) { |
- if (!(subscription instanceof SpecialSubscription) || subscription.filters[oldPosition] != filter) |
- return ; |
- newPosition = Math.min(Math.max(newPosition, 0), subscription.filters.length - 1); |
- if (oldPosition == newPosition) |
- return ; |
- subscription.filters.splice(oldPosition, 1); |
- subscription.filters.splice(newPosition, 0, filter); |
- FilterNotifier.triggerListeners("filter.moved", filter, subscription, oldPosition, newPosition); |
- } |
- , |
- increaseHitCount: function (filter) { |
- if (!Prefs.savestats || Prefs.privateBrowsing || !(filter instanceof ActiveFilter)) |
- return ; |
- filter.hitCount++; |
- filter.lastHit = Date.now(); |
- } |
- , |
- resetHitCounts: function (filters) { |
- if (!filters) { |
- filters = []; |
- for (var _loopIndex2 = 0; |
- _loopIndex2 < Filter.knownFilters.length; ++ _loopIndex2) { |
- var filter = Filter.knownFilters[_loopIndex2]; |
- filters.push(filter); |
- } |
- } |
- for (var _loopIndex1 = 0; |
- _loopIndex1 < filters.length; ++ _loopIndex1) { |
- var filter = filters[_loopIndex1]; |
- filter.hitCount = 0; |
- filter.lastHit = 0; |
- } |
- } |
- , |
- loadFromDisk: function (sourceFile, silent) { |
- if (!silent) { |
- Filter.knownFilters = { |
- __proto__: null |
- }; |
- Subscription.knownSubscriptions = { |
- __proto__: null |
- }; |
- } |
- var explicitFile = true; |
- if (!sourceFile) { |
- sourceFile = FilterStorage.sourceFile; |
- explicitFile = false; |
- if (!sourceFile || !sourceFile.exists()) { |
- var patternsURL = Utils.ioService.newURI("chrome://adblockplus-defaults/content/patterns.ini", null, null); |
- patternsURL = Utils.chromeRegistry.convertChromeURL(patternsURL); |
- if (patternsURL instanceof Ci.nsIFileURL) |
- sourceFile = patternsURL.file; |
- } |
- } |
- var userFilters = null; |
- var backup = 0; |
- while (true) { |
- FilterStorage.subscriptions = []; |
- FilterStorage.knownSubscriptions = { |
- __proto__: null |
- }; |
- try { |
- if (sourceFile && sourceFile.exists()) { |
- var fileStream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); |
- fileStream.init(sourceFile, 1, 292, 0); |
- var stream = Cc["@mozilla.org/intl/converter-input-stream;1"].createInstance(Ci.nsIConverterInputStream); |
- stream.init(fileStream, "UTF-8", 16384, 0); |
- stream = stream.QueryInterface(Ci.nsIUnicharLineInputStream); |
- userFilters = parseIniFile(stream); |
- stream.close(); |
- if (!FilterStorage.subscriptions.length) { |
- throw new Error("No data in the file"); |
- } |
- } |
- break; |
- } |
- catch (e){ |
- Cu.reportError("Adblock Plus: Failed to read filters from file " + sourceFile.path); |
- Cu.reportError(e); |
- } |
- if (explicitFile) |
- break; |
- sourceFile = FilterStorage.sourceFile; |
- if (!sourceFile) |
- break; |
- var part1 = sourceFile.leafName; |
- var part2 = ""; |
- if (/^(.*)(\.\w+)$/.test(part1)) { |
- part1 = RegExp["$1"]; |
- part2 = RegExp["$2"]; |
- } |
- sourceFile = sourceFile.clone(); |
- sourceFile.leafName = part1 + "-backup" + (++ backup) + part2; |
- } |
- for (var _loopIndex3 = 0; |
- _loopIndex3 < ["~il~", "~wl~", "~fl~", "~eh~"].length; ++ _loopIndex3) { |
- var specialSubscription = ["~il~", "~wl~", "~fl~", "~eh~"][_loopIndex3]; |
- if (specialSubscription in FilterStorage.knownSubscriptions) { |
- var subscription = Subscription.fromURL(specialSubscription); |
- if (subscription.filters.length == 0) |
- FilterStorage.removeSubscription(subscription, true); |
- } |
- } |
- if (userFilters) { |
- for (var _loopIndex4 = 0; |
- _loopIndex4 < userFilters.length; ++ _loopIndex4) { |
- var filter = userFilters[_loopIndex4]; |
- filter = Filter.fromText(filter); |
- if (filter) |
- FilterStorage.addFilter(filter, null, undefined, true); |
- } |
- } |
- if (!silent) |
- FilterNotifier.triggerListeners("load"); |
- } |
- , |
- saveToDisk: function (targetFile) { |
- var explicitFile = true; |
- if (!targetFile) { |
- targetFile = FilterStorage.sourceFile; |
- explicitFile = false; |
- } |
- if (!targetFile) |
- return ; |
- try { |
- targetFile.normalize(); |
- } |
- catch (e){} |
- try { |
- targetFile.parent.create(Ci.nsIFile.DIRECTORY_TYPE, 493); |
- } |
- catch (e){} |
- var tempFile = targetFile.clone(); |
- tempFile.leafName += "-temp"; |
- var fileStream, stream; |
- try { |
- fileStream = Cc["@mozilla.org/network/safe-file-output-stream;1"].createInstance(Ci.nsIFileOutputStream); |
- fileStream.init(tempFile, 2 | 8 | 32, 420, 0); |
- stream = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(Ci.nsIConverterOutputStream); |
- stream.init(fileStream, "UTF-8", 16384, Ci.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER); |
- } |
- catch (e){ |
- Cu.reportError(e); |
- return ; |
- } |
- const maxBufLength = 1024; |
- var buf = ["# Adblock Plus preferences", "version=" + formatVersion]; |
- var lineBreak = Utils.getLineBreak(); |
- function writeBuffer() { |
- stream.writeString(buf.join(lineBreak) + lineBreak); |
- buf.splice(0, buf.length); |
- } |
- var saved = { |
- __proto__: null |
- }; |
- for (var _loopIndex5 = 0; |
- _loopIndex5 < FilterStorage.subscriptions.length; ++ _loopIndex5) { |
- var subscription = FilterStorage.subscriptions[_loopIndex5]; |
- if (subscription instanceof ExternalSubscription) |
- continue; |
- for (var _loopIndex7 = 0; |
- _loopIndex7 < subscription.filters.length; ++ _loopIndex7) { |
- var filter = subscription.filters[_loopIndex7]; |
- if (!(filter.text in saved)) { |
- filter.serialize(buf); |
- saved[filter.text] = filter; |
- if (buf.length > maxBufLength) |
- writeBuffer(); |
- } |
- } |
- } |
- for (var _loopIndex6 = 0; |
- _loopIndex6 < FilterStorage.subscriptions.length; ++ _loopIndex6) { |
- var subscription = FilterStorage.subscriptions[_loopIndex6]; |
- if (subscription instanceof ExternalSubscription) |
- continue; |
- buf.push(""); |
- subscription.serialize(buf); |
- if (subscription.filters.length) { |
- buf.push("", "[Subscription filters]"); |
- subscription.serializeFilters(buf); |
- } |
- if (buf.length > maxBufLength) |
- writeBuffer(); |
- } |
- try { |
- stream.writeString(buf.join(lineBreak) + lineBreak); |
- stream.flush(); |
- fileStream.QueryInterface(Ci.nsISafeOutputStream).finish(); |
- } |
- catch (e){ |
- Cu.reportError(e); |
- return ; |
- } |
- if (!explicitFile && targetFile.exists()) { |
- var part1 = targetFile.leafName; |
- var part2 = ""; |
- if (/^(.*)(\.\w+)$/.test(part1)) { |
- part1 = RegExp["$1"]; |
- part2 = RegExp["$2"]; |
- } |
- var doBackup = (Prefs.patternsbackups > 0); |
- if (doBackup) { |
- var lastBackup = targetFile.clone(); |
- lastBackup.leafName = part1 + "-backup1" + part2; |
- if (lastBackup.exists() && (Date.now() - lastBackup.lastModifiedTime) / 3600000 < Prefs.patternsbackupinterval) |
- doBackup = false; |
- } |
- if (doBackup) { |
- var backupFile = targetFile.clone(); |
- backupFile.leafName = part1 + "-backup" + Prefs.patternsbackups + part2; |
- try { |
- backupFile.remove(false); |
- } |
- catch (e){} |
- for (var i = Prefs.patternsbackups - 1; |
- i >= 0; i--) { |
- backupFile.leafName = part1 + (i > 0 ? "-backup" + i : "") + part2; |
- try { |
- backupFile.moveTo(backupFile.parent, part1 + "-backup" + (i + 1) + part2); |
- } |
- catch (e){} |
- } |
- } |
- } |
- else |
- if (targetFile.exists()) |
- targetFile.remove(false); |
- tempFile.moveTo(targetFile.parent, targetFile.leafName); |
- if (!explicitFile) |
- FilterNotifier.triggerListeners("save"); |
- } |
- , |
- getBackupFiles: function () { |
- var result = []; |
- var part1 = FilterStorage.sourceFile.leafName; |
- var part2 = ""; |
- if (/^(.*)(\.\w+)$/.test(part1)) { |
- part1 = RegExp["$1"]; |
- part2 = RegExp["$2"]; |
- } |
- for (var i = 1; |
- ; |
- i++) { |
- var file = FilterStorage.sourceFile.clone(); |
- file.leafName = part1 + "-backup" + i + part2; |
- if (file.exists()) |
- result.push(file); |
- else |
- break; |
- } |
- return result; |
- } |
- |
- }; |
- function addSubscriptionFilters(subscription) { |
- if (!(subscription.url in FilterStorage.knownSubscriptions)) |
- return ; |
- for (var _loopIndex8 = 0; |
- _loopIndex8 < subscription.filters.length; ++ _loopIndex8) { |
- var filter = subscription.filters[_loopIndex8]; |
- filter.subscriptions.push(subscription); |
- } |
- } |
- function removeSubscriptionFilters(subscription) { |
- if (!(subscription.url in FilterStorage.knownSubscriptions)) |
- return ; |
- for (var _loopIndex9 = 0; |
- _loopIndex9 < subscription.filters.length; ++ _loopIndex9) { |
- var filter = subscription.filters[_loopIndex9]; |
- var i = filter.subscriptions.indexOf(subscription); |
- if (i >= 0) |
- filter.subscriptions.splice(i, 1); |
- } |
- } |
- function parseIniFile(stream) { |
- var wantObj = true; |
- FilterStorage.fileProperties = { |
- |
- }; |
- var curObj = FilterStorage.fileProperties; |
- var curSection = null; |
- var line = { |
- |
- }; |
- var haveMore = true; |
- var userFilters = null; |
- while (true) { |
- if (haveMore) |
- haveMore = stream.readLine(line); |
- else |
- line.value = "[end]"; |
- var val = line.value; |
- if (wantObj === true && /^(\w+)=(.*)$/.test(val)) |
- curObj[RegExp["$1"]] = RegExp["$2"]; |
- else |
- if (/^\s*\[(.+)\]\s*$/.test(val)) { |
- var newSection = RegExp["$1"].toLowerCase(); |
- if (curObj) { |
- switch (curSection) { |
- case "filter": ; |
- case "pattern": { |
- if ("text" in curObj) |
- Filter.fromObject(curObj); |
- break; |
- } |
- case "subscription": { |
- var subscription = Subscription.fromObject(curObj); |
- if (subscription) |
- FilterStorage.addSubscription(subscription, true); |
- break; |
- } |
- case "subscription filters": ; |
- case "subscription patterns": { |
- if (FilterStorage.subscriptions.length) { |
- var subscription = FilterStorage.subscriptions[FilterStorage.subscriptions.length - 1]; |
- for (var _loopIndex10 = 0; |
- _loopIndex10 < curObj.length; ++ _loopIndex10) { |
- var text = curObj[_loopIndex10]; |
- var filter = Filter.fromText(text); |
- if (filter) { |
- subscription.filters.push(filter); |
- filter.subscriptions.push(subscription); |
- } |
- } |
- } |
- break; |
- } |
- case "user patterns": { |
- userFilters = curObj; |
- break; |
- } |
- } |
- } |
- if (newSection == "end") |
- break; |
- curSection = newSection; |
- switch (curSection) { |
- case "filter": ; |
- case "pattern": ; |
- case "subscription": { |
- wantObj = true; |
- curObj = { |
- |
- }; |
- break; |
- } |
- case "subscription filters": ; |
- case "subscription patterns": ; |
- case "user patterns": { |
- wantObj = false; |
- curObj = []; |
- break; |
- } |
- default: { |
- wantObj = undefined; |
- curObj = null; |
- } |
- } |
- } |
- else |
- if (wantObj === false && val) |
- curObj.push(val.replace(/\\\[/g, "[")); |
- } |
- return userFilters; |
- } |
- if (typeof _patchFunc11 != "undefined") |
- eval("(" + _patchFunc11.toString() + ")()"); |
- window.FilterStorage = FilterStorage; |
-} |
-)(window.FilterStoragePatch); |