1
0
mirror of https://github.com/gorhill/uBlock.git synced 2024-09-15 15:32:28 +02:00

remember/restore element picker session data when same URL

This commit is contained in:
gorhill 2015-03-20 11:39:20 -04:00
parent e15001bae1
commit 45882970fa
4 changed files with 46 additions and 21 deletions

View File

@ -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
}; };

View File

@ -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);

View File

@ -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;
} }

View File

@ -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' });
}; };