| OLD | NEW |
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <https://adblockplus.org/>, | 2 * This file is part of Adblock Plus <https://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2015 Eyeo GmbH | 3 * Copyright (C) 2006-2015 Eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 5 * Adblock Plus is free software: you can redistribute it and/or modify |
| 6 * it under the terms of the GNU General Public License version 3 as | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 E("tooltipTypeRow").hidden = ("tooltip" in item); | 254 E("tooltipTypeRow").hidden = ("tooltip" in item); |
| 255 E("tooltipSizeRow").hidden = !size; | 255 E("tooltipSizeRow").hidden = !size; |
| 256 E("tooltipDocDomainRow").hidden = ("tooltip" in item || !item.docDomain); | 256 E("tooltipDocDomainRow").hidden = ("tooltip" in item || !item.docDomain); |
| 257 E("tooltipFilterRow").hidden = !filter; | 257 E("tooltipFilterRow").hidden = !filter; |
| 258 E("tooltipFilterSourceRow").hidden = !subscriptions.length; | 258 E("tooltipFilterSourceRow").hidden = !subscriptions.length; |
| 259 | 259 |
| 260 if ("tooltip" in item) | 260 if ("tooltip" in item) |
| 261 E("tooltipDummy").setAttribute("value", item.tooltip); | 261 E("tooltipDummy").setAttribute("value", item.tooltip); |
| 262 else | 262 else |
| 263 { | 263 { |
| 264 E("tooltipAddress").parentNode.hidden = (item.typeDescr == "ELEMHIDE"); | 264 E("tooltipAddress").parentNode.hidden = (item.type == "ELEMHIDE"); |
| 265 setMultilineContent(E("tooltipAddress"), item.location); | 265 setMultilineContent(E("tooltipAddress"), item.location); |
| 266 | 266 |
| 267 var type = types.get(item.type); | 267 var type = types.get(item.type); |
| 268 if (filter && filter instanceof WhitelistFilter) | 268 if (filter && filter instanceof WhitelistFilter) |
| 269 type += " " + E("tooltipType").getAttribute("whitelisted"); | 269 type += " " + E("tooltipType").getAttribute("whitelisted"); |
| 270 else if (filter && item.typeDescr != "ELEMHIDE") | 270 else if (filter && item.type != "ELEMHIDE") |
| 271 type += " " + E("tooltipType").getAttribute("filtered"); | 271 type += " " + E("tooltipType").getAttribute("filtered"); |
| 272 E("tooltipType").setAttribute("value", type); | 272 E("tooltipType").setAttribute("value", type); |
| 273 | 273 |
| 274 if (size) | 274 if (size) |
| 275 E("tooltipSize").setAttribute("value", size.join(" x ")); | 275 E("tooltipSize").setAttribute("value", size.join(" x ")); |
| 276 | 276 |
| 277 E("tooltipDocDomain").setAttribute("value", item.docDomain + " " + (item.thi
rdParty ? docDomainThirdParty : docDomainFirstParty)); | 277 E("tooltipDocDomain").setAttribute("value", item.docDomain + " " + (item.thi
rdParty ? docDomainThirdParty : docDomainFirstParty)); |
| 278 } | 278 } |
| 279 | 279 |
| 280 if (filter) | 280 if (filter) |
| (...skipping 12 matching lines...) Expand all Loading... |
| 293 { | 293 { |
| 294 let sourceElement = E("tooltipFilterSource"); | 294 let sourceElement = E("tooltipFilterSource"); |
| 295 while (sourceElement.firstChild) | 295 while (sourceElement.firstChild) |
| 296 sourceElement.removeChild(sourceElement.firstChild); | 296 sourceElement.removeChild(sourceElement.firstChild); |
| 297 for (let i = 0; i < subscriptions.length; i++) | 297 for (let i = 0; i < subscriptions.length; i++) |
| 298 setMultilineContent(sourceElement, subscriptions[i].title, true); | 298 setMultilineContent(sourceElement, subscriptions[i].title, true); |
| 299 } | 299 } |
| 300 } | 300 } |
| 301 | 301 |
| 302 var showPreview = Prefs.previewimages && !("tooltip" in item); | 302 var showPreview = Prefs.previewimages && !("tooltip" in item); |
| 303 showPreview = showPreview && item.typeDescr == "IMAGE"; | 303 showPreview = showPreview && item.type == "IMAGE"; |
| 304 showPreview = showPreview && (!item.filter || item.filter.disabled || item.fil
ter instanceof WhitelistFilter); | 304 showPreview = showPreview && (!item.filter || item.filter.disabled || item.fil
ter instanceof WhitelistFilter); |
| 305 E("tooltipPreviewBox").hidden = true; | 305 E("tooltipPreviewBox").hidden = true; |
| 306 if (showPreview) | 306 if (showPreview) |
| 307 { | 307 { |
| 308 if (!cacheStorage) | 308 if (!cacheStorage) |
| 309 { | 309 { |
| 310 let {Services} = Cu.import("resource://gre/modules/Services.jsm", null); | 310 let {Services} = Cu.import("resource://gre/modules/Services.jsm", null); |
| 311 // Cache v2 API is enabled by default starting with Gecko 32 | 311 // Cache v2 API is enabled by default starting with Gecko 32 |
| 312 if (Services.vc.compare(Utils.platformVersion, "32.0a1") >= 0) | 312 if (Services.vc.compare(Utils.platformVersion, "32.0a1") >= 0) |
| 313 { | 313 { |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 | 410 |
| 411 if (domain && !filter.isActiveOnlyOnDomain(domain)) | 411 if (domain && !filter.isActiveOnlyOnDomain(domain)) |
| 412 { | 412 { |
| 413 menuItem = E("contextDisableOnSite"); | 413 menuItem = E("contextDisableOnSite"); |
| 414 menuItem.setAttribute("label", menuItem.getAttribute("labeltempl").repla
ce(/\?1\?/, domain)); | 414 menuItem.setAttribute("label", menuItem.getAttribute("labeltempl").repla
ce(/\?1\?/, domain)); |
| 415 menuItem.hidden = false; | 415 menuItem.hidden = false; |
| 416 } | 416 } |
| 417 } | 417 } |
| 418 } | 418 } |
| 419 | 419 |
| 420 E("contextWhitelist").hidden = ("tooltip" in item || !item.filter || item.filt
er.disabled || item.filter instanceof WhitelistFilter || item.typeDescr == "ELEM
HIDE"); | 420 E("contextWhitelist").hidden = ("tooltip" in item || !item.filter || item.filt
er.disabled || item.filter instanceof WhitelistFilter || item.type == "ELEMHIDE"
); |
| 421 E("contextBlock").hidden = !E("contextWhitelist").hidden; | 421 E("contextBlock").hidden = !E("contextWhitelist").hidden; |
| 422 E("contextBlock").setAttribute("disabled", "filter" in item && item.filter &&
!item.filter.disabled); | 422 E("contextBlock").setAttribute("disabled", "filter" in item && item.filter &&
!item.filter.disabled); |
| 423 E("contextEditFilter").setAttribute("disabled", !("filter" in item && item.fil
ter)); | 423 E("contextEditFilter").setAttribute("disabled", !("filter" in item && item.fil
ter)); |
| 424 E("contextOpen").setAttribute("disabled", "tooltip" in item || item.typeDescr
== "ELEMHIDE"); | 424 E("contextOpen").setAttribute("disabled", "tooltip" in item || item.type == "E
LEMHIDE"); |
| 425 E("contextFlash").setAttribute("disabled", "tooltip" in item || !(item.typeDes
cr in visual) || (item.filter && !item.filter.disabled && !(item.filter instance
of WhitelistFilter))); | 425 E("contextFlash").setAttribute("disabled", "tooltip" in item || !(item.type in
visual) || (item.filter && !item.filter.disabled && !(item.filter instanceof Wh
itelistFilter))); |
| 426 E("contextCopyFilter").setAttribute("disabled", !allItems.some(function(item)
{return "filter" in item && item.filter})); | 426 E("contextCopyFilter").setAttribute("disabled", !allItems.some(function(item)
{return "filter" in item && item.filter})); |
| 427 | 427 |
| 428 return true; | 428 return true; |
| 429 } | 429 } |
| 430 | 430 |
| 431 /** | 431 /** |
| 432 * Resets context menu data once the context menu is closed. | 432 * Resets context menu data once the context menu is closed. |
| 433 */ | 433 */ |
| 434 function clearContextMenu(/**Event*/ event) | 434 function clearContextMenu(/**Event*/ event) |
| 435 { | 435 { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 } | 477 } |
| 478 | 478 |
| 479 /** | 479 /** |
| 480 * Opens the item in a new tab. | 480 * Opens the item in a new tab. |
| 481 */ | 481 */ |
| 482 function openInTab(item, /**Event*/ event) | 482 function openInTab(item, /**Event*/ event) |
| 483 { | 483 { |
| 484 let items = (item ? [item] : treeView.getAllSelectedItems()); | 484 let items = (item ? [item] : treeView.getAllSelectedItems()); |
| 485 for (let item of items) | 485 for (let item of items) |
| 486 { | 486 { |
| 487 if (item && item.typeDescr != "ELEMHIDE") | 487 if (item && item.type != "ELEMHIDE") |
| 488 UI.loadInBrowser(item.location, mainWin, event); | 488 UI.loadInBrowser(item.location, mainWin, event); |
| 489 } | 489 } |
| 490 } | 490 } |
| 491 | 491 |
| 492 function doBlock() { | 492 function doBlock() { |
| 493 var item = treeView.getSelectedItem(); | 493 var item = treeView.getSelectedItem(); |
| 494 if (!item || item.typeDescr == "ELEMHIDE") | 494 if (!item || item.type == "ELEMHIDE") |
| 495 return; | 495 return; |
| 496 | 496 |
| 497 var filter = null; | 497 var filter = null; |
| 498 if (item.filter && !item.filter.disabled) | 498 if (item.filter && !item.filter.disabled) |
| 499 filter = item.filter; | 499 filter = item.filter; |
| 500 | 500 |
| 501 if (filter && filter instanceof WhitelistFilter) | 501 if (filter && filter instanceof WhitelistFilter) |
| 502 return; | 502 return; |
| 503 | 503 |
| 504 openDialog("chrome://adblockplus/content/ui/composer.xul", "_blank", "chrome,c
enterscreen,resizable,dialog=no,dependent", item.nodes, item.orig); | 504 openDialog("chrome://adblockplus/content/ui/composer.xul", "_blank", "chrome,c
enterscreen,resizable,dialog=no,dependent", item.nodes, item.orig); |
| (...skipping 590 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 } | 1095 } |
| 1096 | 1096 |
| 1097 // Add new item to the list | 1097 // Add new item to the list |
| 1098 // Store original item in orig property - reading out prototype is messed up
in Gecko 1.9.2 | 1098 // Store original item in orig property - reading out prototype is messed up
in Gecko 1.9.2 |
| 1099 item = {__proto__: item, orig: item, nodes: [node]}; | 1099 item = {__proto__: item, orig: item, nodes: [node]}; |
| 1100 this.allData.push(item); | 1100 this.allData.push(item); |
| 1101 this.dataMap[key] = item; | 1101 this.dataMap[key] = item; |
| 1102 | 1102 |
| 1103 // Show disabled filters if no other filter applies | 1103 // Show disabled filters if no other filter applies |
| 1104 if (!item.filter) | 1104 if (!item.filter) |
| 1105 item.filter = disabledMatcher.matchesAny(item.location, RegExpFilter.typeM
ap[item.typeDescr], item.docDomain, item.thirdParty); | 1105 item.filter = disabledMatcher.matchesAny(item.location, RegExpFilter.typeM
ap[item.type], item.docDomain, item.thirdParty); |
| 1106 | 1106 |
| 1107 if (!this.matchesFilter(item)) | 1107 if (!this.matchesFilter(item)) |
| 1108 return; | 1108 return; |
| 1109 | 1109 |
| 1110 let index = -1; | 1110 let index = -1; |
| 1111 if (this.sortProc && this.sortColumn && this.sortColumn.id == "size") | 1111 if (this.sortProc && this.sortColumn && this.sortColumn.id == "size") |
| 1112 { | 1112 { |
| 1113 // Sorting by size requires accessing content document, and that's | 1113 // Sorting by size requires accessing content document, and that's |
| 1114 // dangerous from a content policy (and we are likely called directly | 1114 // dangerous from a content policy (and we are likely called directly |
| 1115 // from a content policy call). Size data will be inaccurate anyway, | 1115 // from a content policy call). Size data will be inaccurate anyway, |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1150 this.boxObject.ensureRowIsVisible(this.selection.currentIndex); | 1150 this.boxObject.ensureRowIsVisible(this.selection.currentIndex); |
| 1151 }, | 1151 }, |
| 1152 | 1152 |
| 1153 updateFilters: function() | 1153 updateFilters: function() |
| 1154 { | 1154 { |
| 1155 for (let item of this.allData) | 1155 for (let item of this.allData) |
| 1156 { | 1156 { |
| 1157 if (item.filter instanceof RegExpFilter && item.filter.disabled) | 1157 if (item.filter instanceof RegExpFilter && item.filter.disabled) |
| 1158 delete item.filter; | 1158 delete item.filter; |
| 1159 if (!item.filter) | 1159 if (!item.filter) |
| 1160 item.filter = disabledMatcher.matchesAny(item.location, RegExpFilter.typ
eMap[item.typeDescr], item.docDomain, item.thirdParty); | 1160 item.filter = disabledMatcher.matchesAny(item.location, RegExpFilter.typ
eMap[item.type], item.docDomain, item.thirdParty); |
| 1161 } | 1161 } |
| 1162 this.refilter(); | 1162 this.refilter(); |
| 1163 }, | 1163 }, |
| 1164 | 1164 |
| 1165 /** | 1165 /** |
| 1166 * Updates the list after a filter or sorting change. | 1166 * Updates the list after a filter or sorting change. |
| 1167 */ | 1167 */ |
| 1168 refilter: function() | 1168 refilter: function() |
| 1169 { | 1169 { |
| 1170 if (this.resortTimeout) | 1170 if (this.resortTimeout) |
| 1171 clearTimeout(this.resortTimeout); | 1171 clearTimeout(this.resortTimeout); |
| 1172 | 1172 |
| 1173 this.data = this.allData.filter(this.matchesFilter, this); | 1173 this.data = this.allData.filter(this.matchesFilter, this); |
| 1174 | 1174 |
| 1175 if (this.sortProc) | 1175 if (this.sortProc) |
| 1176 this.data.sort(this.sortProc); | 1176 this.data.sort(this.sortProc); |
| 1177 }, | 1177 }, |
| 1178 | 1178 |
| 1179 /** | 1179 /** |
| 1180 * Tests whether an item matches current list filter. | 1180 * Tests whether an item matches current list filter. |
| 1181 * @return {Boolean} true if the item should be shown | 1181 * @return {Boolean} true if the item should be shown |
| 1182 */ | 1182 */ |
| 1183 matchesFilter: function(item) | 1183 matchesFilter: function(item) |
| 1184 { | 1184 { |
| 1185 if (!this.filter) | 1185 if (!this.filter) |
| 1186 return true; | 1186 return true; |
| 1187 | 1187 |
| 1188 return (item.location.toLowerCase().indexOf(this.filter) >= 0 || | 1188 return (item.location.toLowerCase().indexOf(this.filter) >= 0 || |
| 1189 (item.filter && item.filter.text.toLowerCase().indexOf(this.filter)
>= 0) || | 1189 (item.filter && item.filter.text.toLowerCase().indexOf(this.filter)
>= 0) || |
| 1190 item.typeDescr.toLowerCase().indexOf(this.filter.replace(/-/g, "_"))
>= 0 || | 1190 item.type.toLowerCase().indexOf(this.filter.replace(/-/g, "_")) >= 0
|| |
| 1191 types.get(item.type).toLowerCase().indexOf(this.filter) >= 0 || | 1191 types.get(item.type).toLowerCase().indexOf(this.filter) >= 0 || |
| 1192 (item.docDomain && item.docDomain.toLowerCase().indexOf(this.filter)
>= 0) || | 1192 (item.docDomain && item.docDomain.toLowerCase().indexOf(this.filter)
>= 0) || |
| 1193 (item.docDomain && item.thirdParty && docDomainThirdParty.toLowerCas
e().indexOf(this.filter) >= 0) || | 1193 (item.docDomain && item.thirdParty && docDomainThirdParty.toLowerCas
e().indexOf(this.filter) >= 0) || |
| 1194 (item.docDomain && !item.thirdParty && docDomainFirstParty.toLowerCa
se().indexOf(this.filter) >= 0)); | 1194 (item.docDomain && !item.thirdParty && docDomainFirstParty.toLowerCa
se().indexOf(this.filter) >= 0)); |
| 1195 }, | 1195 }, |
| 1196 | 1196 |
| 1197 setFilter: function(filter) { | 1197 setFilter: function(filter) { |
| 1198 var oldRows = this.rowCount; | 1198 var oldRows = this.rowCount; |
| 1199 | 1199 |
| 1200 this.filter = filter.toLowerCase(); | 1200 this.filter = filter.toLowerCase(); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1270 return {tooltip: this.itemsDummyTooltip}; | 1270 return {tooltip: this.itemsDummyTooltip}; |
| 1271 }, | 1271 }, |
| 1272 | 1272 |
| 1273 invalidateItem: function(item) | 1273 invalidateItem: function(item) |
| 1274 { | 1274 { |
| 1275 let row = this.data.indexOf(item); | 1275 let row = this.data.indexOf(item); |
| 1276 if (row >= 0) | 1276 if (row >= 0) |
| 1277 this.boxObject.invalidateRow(row); | 1277 this.boxObject.invalidateRow(row); |
| 1278 } | 1278 } |
| 1279 } | 1279 } |
| OLD | NEW |