Allow arbitrary regex in URL pattern.

This commit is contained in:
Hao Nguyen
2019-07-14 06:40:05 -07:00
parent 00c5417daf
commit 3938a2d1ad
3 changed files with 35 additions and 11 deletions
+2 -2
View File
@@ -23,7 +23,7 @@ function passFilters_(url, type, filters) {
switch (filter.type) { switch (filter.type) {
case 'urls': case 'urls':
hasUrlFilters = true; hasUrlFilters = true;
if (url.search(filter.urlPattern) == 0) { if (url.search(filter.urlRegex) == 0) {
allowUrls = true; allowUrls = true;
} }
break; break;
@@ -77,7 +77,7 @@ function loadSelectedProfile_() {
} }
joiner.push(c); joiner.push(c);
} }
filter.urlPattern = joiner.join(''); filter.urlRegex = joiner.join('');
} }
filters.push(filter); filters.push(filter);
} }
+4 -4
View File
@@ -322,17 +322,17 @@
<md-option value="types">Resource Type</md-option> <md-option value="types">Resource Type</md-option>
</md-select> </md-select>
<md-autocomplete <md-autocomplete
md-search-text="filter.urlPattern" md-search-text="filter.urlRegex"
md-items="[]" md-items="[]"
ng-if="filter.type == 'urls'" ng-if="filter.type == 'urls'"
md-floating-label="*://*.google.com/*" md-floating-label=".*://.*.google.com/.*"
placeholder="*://*.google.com/*" placeholder=".*://.*.google.com/.*"
class="comment-autocomplete" class="comment-autocomplete"
flex> flex>
</md-autocomplete> </md-autocomplete>
<md-button class="md-icon-button" aria-label="Help" md-no-ink <md-button class="md-icon-button" aria-label="Help" md-no-ink
ng-if="filter.type == 'urls'" ng-if="filter.type == 'urls'"
ng-click="openLink('https://developer.chrome.com/extensions/match_patterns')"> ng-click="openLink('https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions')">
<md-icon md-svg-src="images/ic_help_24px.svg"></md-icon> <md-icon md-svg-src="images/ic_help_24px.svg"></md-icon>
</md-button> </md-button>
<md-select ng-model="filter.resourceType" placeholder="Resource Type" flex <md-select ng-model="filter.resourceType" placeholder="Resource Type" flex
+29 -5
View File
@@ -1,3 +1,4 @@
const SPECIAL_CHARS = '^$&+?.()|{}[]/'.split('');
const browser = chrome; const browser = chrome;
const modHeader = angular.module('modheader-popup', ['ngMaterial']); const modHeader = angular.module('modheader-popup', ['ngMaterial']);
modHeader.config(['$compileProvider', function ($compileProvider) { modHeader.config(['$compileProvider', function ($compileProvider) {
@@ -16,16 +17,16 @@ modHeader.factory('dataSource', function($mdToast) {
}; };
dataSource.addFilter = function(filters) { dataSource.addFilter = function(filters) {
let urlPattern = ''; let urlRegex = '';
if (localStorage.currentTabUrl) { if (localStorage.currentTabUrl) {
const parser = document.createElement('a'); const parser = document.createElement('a');
parser.href = localStorage.currentTabUrl; parser.href = localStorage.currentTabUrl;
urlPattern = parser.origin + '/*'; urlRegex = parser.origin + '/.*';
} }
filters.push({ filters.push({
enabled: true, enabled: true,
type: 'urls', type: 'urls',
urlPattern: urlPattern urlRegex: urlRegex
}); });
}; };
@@ -108,11 +109,11 @@ modHeader.factory('dataSource', function($mdToast) {
}; };
dataSource.createProfile = function() { dataSource.createProfile = function() {
var index = 1; const index = 1;
while (isExistingProfileTitle_('Profile ' + index)) { while (isExistingProfileTitle_('Profile ' + index)) {
++index; ++index;
} }
var profile = { const profile = {
title: 'Profile ' + index, title: 'Profile ' + index,
hideComment: true, hideComment: true,
headers: [], headers: [],
@@ -128,6 +129,29 @@ modHeader.factory('dataSource', function($mdToast) {
if (localStorage.profiles) { if (localStorage.profiles) {
dataSource.profiles = angular.fromJson(localStorage.profiles); dataSource.profiles = angular.fromJson(localStorage.profiles);
for (let profile of dataSource.profiles) {
if (profile.filters) {
for (let filter of profile.filters) {
if (filter.urlPattern) {
const urlPattern = filter.urlPattern;
const joiner = [];
for (let i = 0; i < urlPattern.length; ++i) {
let c = urlPattern.charAt(i);
if (SPECIAL_CHARS.indexOf(c) >= 0) {
c = '\\' + c;
} else if (c == '\\') {
c = '\\\\';
} else if (c == '*') {
c = '.*';
}
joiner.push(c);
}
delete filter.urlPattern;
filter.urlRegex = joiner.join('');
}
}
}
}
} else { } else {
dataSource.profiles = []; dataSource.profiles = [];
} }