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) {
|
||||
case 'urls':
|
||||
hasUrlFilters = true;
|
||||
if (url.search(filter.urlPattern) == 0) {
|
||||
if (url.search(filter.urlRegex) == 0) {
|
||||
allowUrls = true;
|
||||
}
|
||||
break;
|
||||
@@ -77,7 +77,7 @@ function loadSelectedProfile_() {
|
||||
}
|
||||
joiner.push(c);
|
||||
}
|
||||
filter.urlPattern = joiner.join('');
|
||||
filter.urlRegex = joiner.join('');
|
||||
}
|
||||
filters.push(filter);
|
||||
}
|
||||
|
||||
+4
-4
@@ -322,17 +322,17 @@
|
||||
<md-option value="types">Resource Type</md-option>
|
||||
</md-select>
|
||||
<md-autocomplete
|
||||
md-search-text="filter.urlPattern"
|
||||
md-search-text="filter.urlRegex"
|
||||
md-items="[]"
|
||||
ng-if="filter.type == 'urls'"
|
||||
md-floating-label="*://*.google.com/*"
|
||||
placeholder="*://*.google.com/*"
|
||||
md-floating-label=".*://.*.google.com/.*"
|
||||
placeholder=".*://.*.google.com/.*"
|
||||
class="comment-autocomplete"
|
||||
flex>
|
||||
</md-autocomplete>
|
||||
<md-button class="md-icon-button" aria-label="Help" md-no-ink
|
||||
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-button>
|
||||
<md-select ng-model="filter.resourceType" placeholder="Resource Type" flex
|
||||
|
||||
+29
-5
@@ -1,3 +1,4 @@
|
||||
const SPECIAL_CHARS = '^$&+?.()|{}[]/'.split('');
|
||||
const browser = chrome;
|
||||
const modHeader = angular.module('modheader-popup', ['ngMaterial']);
|
||||
modHeader.config(['$compileProvider', function ($compileProvider) {
|
||||
@@ -16,16 +17,16 @@ modHeader.factory('dataSource', function($mdToast) {
|
||||
};
|
||||
|
||||
dataSource.addFilter = function(filters) {
|
||||
let urlPattern = '';
|
||||
let urlRegex = '';
|
||||
if (localStorage.currentTabUrl) {
|
||||
const parser = document.createElement('a');
|
||||
parser.href = localStorage.currentTabUrl;
|
||||
urlPattern = parser.origin + '/*';
|
||||
urlRegex = parser.origin + '/.*';
|
||||
}
|
||||
filters.push({
|
||||
enabled: true,
|
||||
type: 'urls',
|
||||
urlPattern: urlPattern
|
||||
urlRegex: urlRegex
|
||||
});
|
||||
};
|
||||
|
||||
@@ -108,11 +109,11 @@ modHeader.factory('dataSource', function($mdToast) {
|
||||
};
|
||||
|
||||
dataSource.createProfile = function() {
|
||||
var index = 1;
|
||||
const index = 1;
|
||||
while (isExistingProfileTitle_('Profile ' + index)) {
|
||||
++index;
|
||||
}
|
||||
var profile = {
|
||||
const profile = {
|
||||
title: 'Profile ' + index,
|
||||
hideComment: true,
|
||||
headers: [],
|
||||
@@ -128,6 +129,29 @@ modHeader.factory('dataSource', function($mdToast) {
|
||||
|
||||
if (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 {
|
||||
dataSource.profiles = [];
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user