mirror of
https://github.com/gorhill/uBlock.git
synced 2024-09-14 23:12:28 +02:00
dom inspector quirks: keep identical filters in sync, do not create duplicate filters
This commit is contained in:
parent
862f588fd4
commit
7a3fb2273e
@ -50,6 +50,8 @@ var fingerprint = null;
|
|||||||
var inspector = uDom.nodeFromId('domInspector');
|
var inspector = uDom.nodeFromId('domInspector');
|
||||||
var domTree = uDom.nodeFromId('domTree');
|
var domTree = uDom.nodeFromId('domTree');
|
||||||
var tabSelector = uDom.nodeFromId('pageSelector');
|
var tabSelector = uDom.nodeFromId('pageSelector');
|
||||||
|
var uidGenerator = 1;
|
||||||
|
var filterToIdMap = new Map();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
@ -71,13 +73,21 @@ var nodeFromDomEntry = function(entry) {
|
|||||||
node.setAttribute('data-cnt', value);
|
node.setAttribute('data-cnt', value);
|
||||||
li.appendChild(node);
|
li.appendChild(node);
|
||||||
// cosmetic filter
|
// cosmetic filter
|
||||||
if ( entry.filter !== undefined ) {
|
if ( entry.filter === undefined ) {
|
||||||
|
return li;
|
||||||
|
}
|
||||||
node = document.createElement('code');
|
node = document.createElement('code');
|
||||||
node.classList.add('filter');
|
node.classList.add('filter');
|
||||||
|
value = filterToIdMap.get(entry.filter);
|
||||||
|
if ( value === undefined ) {
|
||||||
|
value = uidGenerator.toString();
|
||||||
|
filterToIdMap.set(entry.filter, value);
|
||||||
|
uidGenerator += 1;
|
||||||
|
}
|
||||||
|
node.setAttribute('data-filter-id', value);
|
||||||
node.textContent = entry.filter;
|
node.textContent = entry.filter;
|
||||||
li.appendChild(node);
|
li.appendChild(node);
|
||||||
li.classList.add('isCosmeticHide');
|
li.classList.add('isCosmeticHide');
|
||||||
}
|
|
||||||
return li;
|
return li;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -106,6 +116,8 @@ var renderDOMFull = function(response) {
|
|||||||
var ul = domTreeParent.removeChild(domTree);
|
var ul = domTreeParent.removeChild(domTree);
|
||||||
logger.removeAllChildren(domTree);
|
logger.removeAllChildren(domTree);
|
||||||
|
|
||||||
|
filterToIdMap.clear();
|
||||||
|
|
||||||
var lvl = 0;
|
var lvl = 0;
|
||||||
var entries = response.layout;
|
var entries = response.layout;
|
||||||
var n = entries.length;
|
var n = entries.length;
|
||||||
@ -115,7 +127,6 @@ var renderDOMFull = function(response) {
|
|||||||
if ( entry.lvl === lvl ) {
|
if ( entry.lvl === lvl ) {
|
||||||
li = nodeFromDomEntry(entry);
|
li = nodeFromDomEntry(entry);
|
||||||
appendListItem(ul, li);
|
appendListItem(ul, li);
|
||||||
//expandIfBlockElement(li);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ( entry.lvl > lvl ) {
|
if ( entry.lvl > lvl ) {
|
||||||
@ -124,7 +135,6 @@ var renderDOMFull = function(response) {
|
|||||||
li.classList.add('branch');
|
li.classList.add('branch');
|
||||||
li = nodeFromDomEntry(entry);
|
li = nodeFromDomEntry(entry);
|
||||||
appendListItem(ul, li);
|
appendListItem(ul, li);
|
||||||
//expandIfBlockElement(li);
|
|
||||||
lvl = entry.lvl;
|
lvl = entry.lvl;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -357,9 +367,15 @@ var startDialog = (function() {
|
|||||||
for ( i = 0; i < entries.length; i++ ) {
|
for ( i = 0; i < entries.length; i++ ) {
|
||||||
taValue.push(inspectedHostname + '##' + entries[i]);
|
taValue.push(inspectedHostname + '##' + entries[i]);
|
||||||
}
|
}
|
||||||
|
var ids = new Set(), id;
|
||||||
var nodes = domTree.querySelectorAll('code.filter.off');
|
var nodes = domTree.querySelectorAll('code.filter.off');
|
||||||
for ( i = 0; i < nodes.length; i++ ) {
|
for ( i = 0; i < nodes.length; i++ ) {
|
||||||
node = nodes[i];
|
node = nodes[i];
|
||||||
|
id = node.getAttribute('data-filter-id');
|
||||||
|
if ( ids.has(id) ) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
ids.add(id);
|
||||||
unhideSelectors.push(node.textContent);
|
unhideSelectors.push(node.textContent);
|
||||||
taValue.push(inspectedHostname + '#@#' + node.textContent);
|
taValue.push(inspectedHostname + '#@#' + node.textContent);
|
||||||
}
|
}
|
||||||
@ -453,25 +469,47 @@ var onClick = function(ev) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Toggle selector
|
// Not a node or filter
|
||||||
if ( target.localName === 'code' ) {
|
if ( target.localName !== 'code' ) {
|
||||||
var original = target.classList.contains('filter') === false;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggle cosmetic filter
|
||||||
|
if ( target.classList.contains('filter') ) {
|
||||||
messager.sendTo(
|
messager.sendTo(
|
||||||
{
|
{
|
||||||
what: 'toggleNodes',
|
what: 'toggleNodes',
|
||||||
original: original,
|
original: false,
|
||||||
target: original !== target.classList.toggle('off'),
|
target: target.classList.toggle('off'),
|
||||||
selector: selectorFromNode(target, original ? 1 : 2),
|
selector: selectorFromNode(target, 2),
|
||||||
nid: original ? nidFromNode(target) : ''
|
nid: ''
|
||||||
},
|
},
|
||||||
inspectedTabId,
|
inspectedTabId,
|
||||||
'dom-inspector.js'
|
'dom-inspector.js'
|
||||||
);
|
);
|
||||||
|
uDom('[data-filter-id="' + target.getAttribute('data-filter-id') + '"]', inspector).toggleClass(
|
||||||
|
'off',
|
||||||
|
target.classList.contains('off')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Toggle node
|
||||||
|
else {
|
||||||
|
messager.sendTo(
|
||||||
|
{
|
||||||
|
what: 'toggleNodes',
|
||||||
|
original: true,
|
||||||
|
target: target.classList.toggle('off') === false,
|
||||||
|
selector: selectorFromNode(target, 1),
|
||||||
|
nid: nidFromNode(target)
|
||||||
|
},
|
||||||
|
inspectedTabId,
|
||||||
|
'dom-inspector.js'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
var cantCreate = domTree.querySelector('.off') === null;
|
var cantCreate = domTree.querySelector('.off') === null;
|
||||||
inspector.querySelector('.permatoolbar .revert').classList.toggle('disabled', cantCreate);
|
inspector.querySelector('.permatoolbar .revert').classList.toggle('disabled', cantCreate);
|
||||||
inspector.querySelector('.permatoolbar .commit').classList.toggle('disabled', cantCreate);
|
inspector.querySelector('.permatoolbar .commit').classList.toggle('disabled', cantCreate);
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
Loading…
Reference in New Issue
Block a user