Allow arbitrary regex in URL pattern.
This commit is contained in:
+2
-2
@@ -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
@@ -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
@@ -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 = [];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user