| Left: | ||
| Right: |
| LEFT | RIGHT |
|---|---|
| 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-2016 Eyeo GmbH | 3 * Copyright (C) 2006-2016 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 27 matching lines...) Expand all Loading... | |
| 38 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); | 38 let {Services} = Cu.import("resource://gre/modules/Services.jsm", {}); |
| 39 | 39 |
| 40 let {port} = require("messaging"); | 40 let {port} = require("messaging"); |
| 41 let {Utils} = require("utils"); | 41 let {Utils} = require("utils"); |
| 42 let {getFrames, isPrivate} = require("child/utils"); | 42 let {getFrames, isPrivate} = require("child/utils"); |
| 43 let {objectMouseEventHander} = require("child/objectTabs"); | 43 let {objectMouseEventHander} = require("child/objectTabs"); |
| 44 let {RequestNotifier} = require("child/requestNotifier"); | 44 let {RequestNotifier} = require("child/requestNotifier"); |
| 45 | 45 |
| 46 /** | 46 /** |
| 47 * Randomly generated class name, to be applied to collapsed nodes. | 47 * Randomly generated class name, to be applied to collapsed nodes. |
| 48 * @type string | 48 * @type Promise.<string> |
| 49 */ | 49 */ |
| 50 let collapsedClass = null; | 50 let collapsedClass = port.emitWithResponse("getCollapsedClass"); |
| 51 | 51 |
| 52 /** | 52 /** |
| 53 * Maps numerical content type IDs to strings. | 53 * Maps numerical content type IDs to strings. |
| 54 * @type Map.<number,string> | 54 * @type Map.<number,string> |
| 55 */ | 55 */ |
| 56 let types = new Map(); | 56 let types = new Map(); |
| 57 | 57 |
| 58 /** | 58 /** |
| 59 * Contains nodes stored by storeNodes() mapped by their IDs. | 59 * Contains nodes stored by storeNodes() mapped by their IDs. |
| 60 * @type Map.<string,DOMNode[]> | 60 * @type Map.<string,DOMNode[]> |
| (...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 449 scheduledNodes = [node]; | 449 scheduledNodes = [node]; |
| 450 Utils.runAsync(postProcessNodes); | 450 Utils.runAsync(postProcessNodes); |
| 451 } | 451 } |
| 452 } | 452 } |
| 453 | 453 |
| 454 /** | 454 /** |
| 455 * Processes nodes scheduled for post-processing (typically hides them). | 455 * Processes nodes scheduled for post-processing (typically hides them). |
| 456 */ | 456 */ |
| 457 function postProcessNodes() | 457 function postProcessNodes() |
| 458 { | 458 { |
| 459 if (!collapsedClass) | 459 collapsedClass.then(cls => |
|
Thomas Greiner
2016/03/23 18:47:59
Detail: Anything wrong with calling it "collapsedC
Wladimir Palant
2016/03/24 07:27:26
They are not the same thing however. I would consi
| |
| 460 { | 460 { |
| 461 port.emitWithResponse("getCollapsedClass").then(cls => | 461 let nodes = scheduledNodes; |
| 462 { | 462 scheduledNodes = null; |
| 463 // We might have sent this message multiple times, ignore response if a | 463 |
| 464 // previous response was already processed. | 464 // Resolving class is async initially so the nodes might have already been |
| 465 if (collapsedClass) | 465 // processed in the meantime. |
| 466 return; | 466 if (!nodes) |
| 467 | 467 return; |
| 468 collapsedClass = cls; | 468 |
| 469 postProcessNodes(); | 469 for (let node of nodes) |
| 470 }); | 470 { |
| 471 return; | 471 // adjust frameset's cols/rows for frames |
| 472 } | 472 let parentNode = node.parentNode; |
| 473 | 473 if (parentNode && parentNode instanceof Ci.nsIDOMHTMLFrameSetElement) |
| 474 let nodes = scheduledNodes; | |
| 475 scheduledNodes = null; | |
|
Erik
2016/03/15 20:57:41
It appears that `postProcessNodes` is run twice no
Wladimir Palant
2016/03/16 10:13:00
No, we don't run this code multiple times (return
| |
| 476 | |
| 477 for (let node of nodes) | |
| 478 { | |
| 479 // adjust frameset's cols/rows for frames | |
| 480 let parentNode = node.parentNode; | |
| 481 if (parentNode && parentNode instanceof Ci.nsIDOMHTMLFrameSetElement) | |
| 482 { | |
| 483 let hasCols = (parentNode.cols && parentNode.cols.indexOf(",") > 0); | |
| 484 let hasRows = (parentNode.rows && parentNode.rows.indexOf(",") > 0); | |
| 485 if ((hasCols || hasRows) && !(hasCols && hasRows)) | |
| 486 { | 474 { |
| 487 let index = -1; | 475 let hasCols = (parentNode.cols && parentNode.cols.indexOf(",") > 0); |
| 488 for (let frame = node; frame; frame = frame.previousSibling) | 476 let hasRows = (parentNode.rows && parentNode.rows.indexOf(",") > 0); |
| 489 if (frame instanceof Ci.nsIDOMHTMLFrameElement || frame instanceof Ci. nsIDOMHTMLFrameSetElement) | 477 if ((hasCols || hasRows) && !(hasCols && hasRows)) |
| 490 index++; | 478 { |
| 491 | 479 let index = -1; |
| 492 let property = (hasCols ? "cols" : "rows"); | 480 for (let frame = node; frame; frame = frame.previousSibling) |
| 493 let weights = parentNode[property].split(","); | 481 if (frame instanceof Ci.nsIDOMHTMLFrameElement || frame instanceof C i.nsIDOMHTMLFrameSetElement) |
| 494 weights[index] = "0"; | 482 index++; |
| 495 parentNode[property] = weights.join(","); | 483 |
| 484 let property = (hasCols ? "cols" : "rows"); | |
| 485 let weights = parentNode[property].split(","); | |
| 486 weights[index] = "0"; | |
| 487 parentNode[property] = weights.join(","); | |
| 488 } | |
| 496 } | 489 } |
| 497 } | 490 else |
| 498 else | 491 node.classList.add(cls); |
| 499 node.classList.add(collapsedClass); | 492 } |
| 500 } | 493 }); |
| 501 } | 494 } |
| LEFT | RIGHT |