Skip to content

Commit

Permalink
url filter
Browse files Browse the repository at this point in the history
  • Loading branch information
abzubarev committed Sep 25, 2013
1 parent f1babc4 commit 37e95ee
Show file tree
Hide file tree
Showing 7 changed files with 140 additions and 41 deletions.
14 changes: 14 additions & 0 deletions background.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>

<title></title>
<script type="text/javascript" src="javascripts/parseuri.js"></script>
<script type="text/javascript" src="javascripts/utils.js"></script>
<script type="text/javascript" src="javascripts/background.js"></script>

</head>
<body>

</body>
</html>
21 changes: 2 additions & 19 deletions javascripts/background.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,3 @@
function getSetsForCurrentUrl(url) {
var sets = [];

for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
var settings = JSON.parse(localStorage.getItem(key));

if (url === settings.url.toLowerCase()) {
settings.key = key;
sets.push(settings);
}
}

return sets;
}

function getHotkeys(url) {
var sets = getSetsForCurrentUrl(url);
var hotkeys = [];
Expand All @@ -30,16 +14,15 @@ function getHotkeys(url) {
}

chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
var url = request.url.split('?')[0].toLowerCase();
var hotkeys = getHotkeys(url);
var hotkeys = getHotkeys(request.url);

switch (request.action) {
case 'gethotkeys':
sendResponse(hotkeys);
break;

case 'hotkey':
var sets = getSetsForCurrentUrl(url);
var sets = getSetsForCurrentUrl(request.url);
for (var i = 0; i < sets.length; i++) {
if (sets[i].hotkey == request.code) {
sendResponse(sets[i]);
Expand Down
32 changes: 32 additions & 0 deletions javascripts/parseuri.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// parseUri 1.2.2
// (c) Steven Levithan <stevenlevithan.com>
// MIT License

function parseUri (str) {
var o = parseUri.options,
m = o.parser[o.strictMode ? "strict" : "loose"].exec(str),
uri = {},
i = 14;

while (i--) uri[o.key[i]] = m[i] || "";

uri[o.q.name] = {};
uri[o.key[12]].replace(o.q.parser, function ($0, $1, $2) {
if ($1) uri[o.q.name][$1] = $2;
});

return uri;
};

parseUri.options = {
strictMode: false,
key: ["source","protocol","authority","userInfo","user","password","host","port","relative","path","directory","file","query","anchor"],
q: {
name: "queryKey",
parser: /(?:^|&)([^&=]*)=?([^&]*)/g
},
parser: {
strict: /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/,
loose: /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/
}
};
49 changes: 31 additions & 18 deletions javascripts/popup.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,14 @@
var tab_url;

function getSetsForCurrentUrl(url) {
var sets = [];

for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
var settings = JSON.parse(localStorage.getItem(key));

if (url.toLowerCase() === settings.url.toLowerCase()) {
settings.key = key;
sets.push(settings);
}
}

return sets;
}

function getAllSets() {
var sets = [];

for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
if (key == 'filter') {
continue;
}

var settings = JSON.parse(localStorage.getItem(key));
settings.key = key;
sets.push(settings);
Expand Down Expand Up @@ -61,7 +49,7 @@ function refreshSetsList(url) {
} else {
$('#sets').hide();
$('#nosets').show();
$('#nosets_url').text(url);
//$('#nosets_url').text(url);
$('#clearall').addClass('disabled');
return;
}
Expand Down Expand Up @@ -131,12 +119,26 @@ function sendMessage(obj, callback) {
});
}

function setCurrentFilter() {
var value = localStorage.getItem('filter');

if (!value) {
localStorage.setItem('filter', FILTER_BY_FULL);
value = FILTER_BY_FULL;
}

var link = $('a.filter[id=' + value + ']');
link.prepend('<i class="icon-ok"></i> ');
}

chrome.tabs.query({ 'active': true, 'currentWindow': true }, function (tab) {
tab_url = tab[0].url.split('?')[0].toLowerCase();
tab_url = tab[0].url;
refreshSetsList(tab_url);
});

$(document).ready(function () {
setCurrentFilter();

$("#check").click(function () {

});
Expand Down Expand Up @@ -318,6 +320,17 @@ $(document).ready(function () {
$('#btnHotkeyCancel').click(function () {
$('#hotkeyBlock').hide();
});

$('a.filter').click(function () {
var link = $(this);
var value = link.attr('id');
$('a.filter').not(link).find('i').remove();

localStorage.setItem('filter', value);
link.prepend('<i class="icon-ok"></i> ');

refreshSetsList(tab_url);
});

sets
.on("mousedown", 'tbody td', function(event) {
Expand Down
47 changes: 47 additions & 0 deletions javascripts/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
var FILTER_BY_DOMAIN = 'domain';
var FILTER_BY_PATH = 'path';
var FILTER_BY_FULL = 'full';

function fits(current, storage) {
var value = localStorage.getItem('filter');

current = current.toLowerCase();
storage = storage.toLowerCase();

var url1 = parseUri(current);
var url2 = parseUri(storage);

if (value === FILTER_BY_DOMAIN) {
return url1.host === url2.host;

} else if (value === FILTER_BY_PATH) {
return (url1.protocol + url1.host + url1.path) == (url2.protocol + url2.host + url2.path);

} else if (value === FILTER_BY_FULL) {
return current == storage;

} else {
console.error('WebFormFiller: filter value is wrong: ' + value);
return true;
}
}

function getSetsForCurrentUrl(url) {
var sets = [];

for (var i = 0; i < localStorage.length; i++) {
var key = localStorage.key(i);
if (key == 'filter') {
continue;
}

var settings = JSON.parse(localStorage.getItem(key));

if (fits(url, settings.url)) {
settings.key = key;
sets.push(settings);
}
}

return sets;
}
8 changes: 6 additions & 2 deletions manifest.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
{
"content_scripts" : [ {
"js" : ["javascripts/jquery-1.9.1.min.js", "javascripts/jquery.nmx.deserialize-0.1.js", "javascripts/content_script.js", "javascripts/mousetrap.min.js" ],
"js" : [
"javascripts/jquery-1.9.1.min.js",
"javascripts/jquery.nmx.deserialize-0.1.js",
"javascripts/content_script.js",
"javascripts/mousetrap.min.js" ],
"matches" : [ "http://*/*", "https://*/*" ],
"run_at" : "document_start"
} ],
Expand All @@ -17,7 +21,7 @@
"default_popup": "popup.html"
},
"background": {
"scripts": ["javascripts/background.js"]
"page": "background.html"
},
"permissions": [
"tabs",
Expand Down
10 changes: 8 additions & 2 deletions popup.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
<title></title>
<link href="bootstrap/css/bootstrap.min.css" type="text/css" rel="stylesheet" />
<script type="text/javascript" src="javascripts/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="javascripts/parseuri.js"></script>
<script type="text/javascript" src="javascripts/utils.js"></script>
<script type="text/javascript" src="javascripts/popup.js"></script>
<script type="text/javascript" src="bootstrap/js/bootstrap.min.js"></script>

Expand All @@ -24,7 +26,7 @@
table#sets button { margin-top: -3px; }
table#sets input.txtSetName { margin-top: 0;margin-bottom: 0;height: 15px;width: 90px; }
table#sets input[type=checkbox] { margin-top: -3px; }
.dropdown-menu { left: 34%; text-align: left }
.dropdown-menu { left: 38%; text-align: left }
</style>
</head>
<body>
Expand All @@ -42,13 +44,17 @@ <h6></h6>
<ul class="dropdown-menu">
<li><a href="#" id="viewSets">View all saved sets</a></li>
<li class="divider"></li>
<li><a href="#" class="filter" id="domain">Filter by domain</a></li>
<li><a href="#" class="filter" id="path">Filter by path</a></li>
<li><a href="#" class="filter" id="full">Filter by full URL</a></li>
<li class="divider"></li>
<li><a href="https://chrome.google.com/webstore/support/gbagmkohmhcjgbepncmehejaljoclpil?hl=ru&gl=ID#bug" target="_blank">Report a problem</a></li>
<li><a href="http://github.com/abzubarev/web-developer-form-filler-ext" target="_blank">Sources on GitHub</a></li>
</ul>
</div>

<div class="text-center" id="nosets" style="display: none;">
<h6>No saved sets for URL: </h6><h6 id="nosets_url"></h6>
<h6>No saved sets for this URL (check filter)</h6><h6 id="nosets_url"></h6>
</div>

<table id="sets" class="table">
Expand Down

0 comments on commit 37e95ee

Please sign in to comment.