mirror of
https://github.com/gorhill/uBlock.git
synced 2024-09-18 17:02:27 +02:00
remember/restore element picker session data when same URL
This commit is contained in:
parent
e15001bae1
commit
45882970fa
@ -141,6 +141,9 @@ return {
|
|||||||
contextMenuClientX: -1,
|
contextMenuClientX: -1,
|
||||||
contextMenuClientY: -1,
|
contextMenuClientY: -1,
|
||||||
|
|
||||||
|
epickerTarget: '',
|
||||||
|
epickerEprom: null,
|
||||||
|
|
||||||
// so that I don't have to care for last comma
|
// so that I don't have to care for last comma
|
||||||
dummy: 0
|
dummy: 0
|
||||||
};
|
};
|
||||||
|
@ -144,6 +144,10 @@ var cosmeticFilterCandidates = [];
|
|||||||
|
|
||||||
var targetElements = [];
|
var targetElements = [];
|
||||||
|
|
||||||
|
var lastNetFilterSession = window.location.host + window.location.pathname;
|
||||||
|
var lastNetFilterHostname = '';
|
||||||
|
var lastNetFilterUnion = '';
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
// For browsers not supporting `:scope`, it's not the end of the world: the
|
// For browsers not supporting `:scope`, it's not the end of the world: the
|
||||||
@ -234,31 +238,30 @@ var removeElements = function(elems) {
|
|||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
var incrementalNetFilter = (function() {
|
var netFilterFromUnion = (function() {
|
||||||
var lastHostname = '';
|
|
||||||
var lastNetFilter = '';
|
|
||||||
var reTokenizer = /[^0-9a-z%*]+|[0-9a-z%]+|\*/gi;
|
var reTokenizer = /[^0-9a-z%*]+|[0-9a-z%]+|\*/gi;
|
||||||
var a = document.createElement('a');
|
var a = document.createElement('a');
|
||||||
|
|
||||||
var compute = function(to, out) {
|
return function(to, out) {
|
||||||
a.href= to;
|
a.href= to;
|
||||||
to = a.pathname + a.search;
|
to = a.pathname + a.search;
|
||||||
var from = lastNetFilter;
|
var from = lastNetFilterUnion;
|
||||||
|
|
||||||
// Reset reference filter when dealing with unrelated URLs
|
// Reset reference filter when dealing with unrelated URLs
|
||||||
if ( from === '' ) {
|
if ( from === '' && a.host !== lastNetFilterHostname ) {
|
||||||
lastHostname = a.host;
|
lastNetFilterHostname = a.host;
|
||||||
lastNetFilter = to;
|
lastNetFilterUnion = to;
|
||||||
return;
|
localMessager.send({
|
||||||
}
|
what: 'elementPickerEprom',
|
||||||
if ( a.host !== lastHostname ) {
|
lastNetFilterSession: lastNetFilterSession,
|
||||||
lastHostname = a.host;
|
lastNetFilterHostname: lastNetFilterHostname,
|
||||||
lastNetFilter = to;
|
lastNetFilterUnion: lastNetFilterUnion
|
||||||
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Related URLs
|
// Related URLs
|
||||||
lastHostname = a.host;
|
lastNetFilterHostname = a.host;
|
||||||
|
|
||||||
var fromTokens = from.match(reTokenizer);
|
var fromTokens = from.match(reTokenizer);
|
||||||
var toTokens = to.match(reTokenizer);
|
var toTokens = to.match(reTokenizer);
|
||||||
@ -287,14 +290,20 @@ var incrementalNetFilter = (function() {
|
|||||||
}
|
}
|
||||||
from = fromTokens.join('').replace(/\*\*+/g, '*');
|
from = fromTokens.join('').replace(/\*\*+/g, '*');
|
||||||
if ( from !== '/*' ) {
|
if ( from !== '/*' ) {
|
||||||
out.push('||' + lastHostname + from);
|
out.push('||' + lastNetFilterHostname + from);
|
||||||
} else {
|
} else {
|
||||||
from = to;
|
from = to;
|
||||||
}
|
}
|
||||||
lastNetFilter = from;
|
lastNetFilterUnion = from;
|
||||||
};
|
|
||||||
|
|
||||||
return compute;
|
// Remember across element picker sessions
|
||||||
|
localMessager.send({
|
||||||
|
what: 'elementPickerEprom',
|
||||||
|
lastNetFilterSession: lastNetFilterSession,
|
||||||
|
lastNetFilterHostname: lastNetFilterHostname,
|
||||||
|
lastNetFilterUnion: lastNetFilterUnion
|
||||||
|
});
|
||||||
|
};
|
||||||
})();
|
})();
|
||||||
|
|
||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
@ -334,7 +343,7 @@ var netFilterFromElement = function(elem, out) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Suggest a filter which is a result of combining more than one URL.
|
// Suggest a filter which is a result of combining more than one URL.
|
||||||
incrementalNetFilter(src, out);
|
netFilterFromUnion(src, out);
|
||||||
};
|
};
|
||||||
|
|
||||||
var netFilterSources = {
|
var netFilterSources = {
|
||||||
@ -846,6 +855,13 @@ var startPicker = function(details) {
|
|||||||
pickerRoot.contentWindow.addEventListener('keydown', onKeyPressed, true);
|
pickerRoot.contentWindow.addEventListener('keydown', onKeyPressed, true);
|
||||||
pickerRoot.contentWindow.focus();
|
pickerRoot.contentWindow.focus();
|
||||||
|
|
||||||
|
// Restore net filter union data if it originate from the same URL.
|
||||||
|
var eprom = details.eprom || {};
|
||||||
|
if ( eprom.lastNetFilterSession === lastNetFilterSession ) {
|
||||||
|
lastNetFilterHostname = eprom.lastNetFilterHostname || '';
|
||||||
|
lastNetFilterUnion = eprom.lastNetFilterUnion || '';
|
||||||
|
}
|
||||||
|
|
||||||
// Auto-select a specific target, if any, and if possible
|
// Auto-select a specific target, if any, and if possible
|
||||||
|
|
||||||
highlightElements([], true);
|
highlightElements([], true);
|
||||||
|
@ -586,7 +586,8 @@ var onMessage = function(request, sender, callback) {
|
|||||||
frameContent: this.responseText.replace(reStrings, replacer),
|
frameContent: this.responseText.replace(reStrings, replacer),
|
||||||
target: µb.contextMenuTarget,
|
target: µb.contextMenuTarget,
|
||||||
clientX: µb.contextMenuClientX,
|
clientX: µb.contextMenuClientX,
|
||||||
clientY: µb.contextMenuClientY
|
clientY: µb.contextMenuClientY,
|
||||||
|
eprom: µb.epickerEprom
|
||||||
});
|
});
|
||||||
|
|
||||||
µb.contextMenuTarget = '';
|
µb.contextMenuTarget = '';
|
||||||
@ -595,6 +596,7 @@ var onMessage = function(request, sender, callback) {
|
|||||||
};
|
};
|
||||||
xhr.send();
|
xhr.send();
|
||||||
return;
|
return;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -607,6 +609,10 @@ var onMessage = function(request, sender, callback) {
|
|||||||
µb.appendUserFilters(request.filters);
|
µb.appendUserFilters(request.filters);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 'elementPickerEprom':
|
||||||
|
µb.epickerEprom = request;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return vAPI.messaging.UNHANDLED;
|
return vAPI.messaging.UNHANDLED;
|
||||||
}
|
}
|
||||||
|
@ -279,7 +279,7 @@ var matchWhitelistDirective = function(url, hostname, directive) {
|
|||||||
/******************************************************************************/
|
/******************************************************************************/
|
||||||
|
|
||||||
µBlock.elementPickerExec = function(tabId, targetElement) {
|
µBlock.elementPickerExec = function(tabId, targetElement) {
|
||||||
this.elementPickerTarget = targetElement || '';
|
this.epickerTarget = targetElement || '';
|
||||||
vAPI.tabs.injectScript(tabId, { file: 'js/element-picker.js' });
|
vAPI.tabs.injectScript(tabId, { file: 'js/element-picker.js' });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user