Compare commits

..

No commits in common. "a251acec86b14bfd4941e8103e12da1ce0931c48" and "949106ce50a1f901fbd5f393fc5e9506d5cddddd" have entirely different histories.

11 changed files with 13 additions and 266 deletions

View File

@ -1,15 +0,0 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
charset = utf-8
[*.js]
indent_style = space
indent_size = 4
# 4 space indentation
[*.html]
indent_style = space
indent_size = 2

2
.gitignore vendored
View File

@ -1,2 +0,0 @@
./.idea
*.xpi

View File

@ -1,6 +0,0 @@
build-xpi:
rm -f postify.xpi
zip -r -FS ./postify.xpi * \
--exclude '*.git*' \
--exclude '*.php' \
--exclude '*.xpi'

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -1,39 +1,26 @@
{ {
"manifest_version": 2, "manifest_version": 2,
"name": "Postify", "name": "Postify",
"version": "1.0.6", "version": "1.0",
"description": "Post current url to external web-server.", "description": "Post current url to external web-server.",
"icons": {
"48": "icons/postify-48.png"
},
"applications": { "applications": {
"gecko": { "gecko": {
"id": "postify@mozilla.org", "id": "postify@mozilla.org",
"strict_min_version": "45.0" "strict_min_version": "45.0"
} }
}, },
"permissions": [ "content_scripts": [
"activeTab", {
"notifications", "matches": [
"storage", "*://*.mozilla.org/*"
"webRequest", ],
"*://localhost/*" "js": [
"postify.js"
]
}
], ],
"background": {
"scripts": ["storage.js", "postify.js"]
},
"browser_action": { "browser_action": {
"default_icon": "icons/postify-32.png", "default_icon": "icons/postify-32.png",
"default_title": "Postify" "default_title": "Beastify"
},
"commands": {
"_execute_browser_action": {
"suggested_key": {
"default": "Ctrl+Shift+D"
}
}
},
"options_ui": {
"page": "options.html"
} }
} }

View File

@ -1,43 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<style type="text/css">
.left {
text-align: left;
}
</style>
<body>
<form class="js-form">
<p>
Specify servers and url patterns.
</p>
<table>
<thead>
<tr>
<th class="left">Server address</th>
<th class="left">Url pattern</th>
</tr>
</thead>
<tbody class="js-pattern-rows">
</tbody>
</table>
<button type="submit" class="js-submit">Save</button>
<button class="js-add">Add</button>
</form>
<script src="storage.js"></script>
<script src="options.js"></script>
</body>
</html>

View File

@ -1,64 +0,0 @@
const PATTERN_ROW = (addr, pattern) => `
<tr>
<td><input type="text" name="server" value="${addr}"></td>
<td><input type="text" name="pattern" value="${pattern}"></td>
</tr>
`;
function defaultPatterns() {
return [
{ server: '', pattern: '.*' },
];
}
function setPatterns(patterns) {
if (!patterns || patterns.length === 0) {
patterns = defaultPatterns();
}
console.log('PATTERNS', patterns);
const reducer = (acc, item) => acc + PATTERN_ROW(item.server, item.pattern);
const html = patterns.reduce(reducer, '');
document.querySelector(".js-pattern-rows").innerHTML = html;
}
function restoreOptions() {
PatternStorage.get().then(
setPatterns,
(error) => {
console.log(`Error: ${error}`)
}
);
}
function parseForm() {
const formData = [];
const rows = document.querySelectorAll(".js-pattern-rows tr");
rows.forEach(row => {
var server = row.querySelector('[name="server"]').value;
var pattern = row.querySelector('[name="pattern"]').value;
formData.push({server: server, pattern: pattern});
});
return formData;
}
function saveOptions(evt) {
evt.preventDefault();
const formData = parseForm();
const filter = item => item.server;
const patterns = formData.filter(filter);
PatternStorage.set(patterns);
}
function addRow(evt) {
evt.preventDefault();
const el = document.querySelector(".js-pattern-rows");
el.innerHTML += PATTERN_ROW('', '');
}
document.addEventListener("DOMContentLoaded", restoreOptions);
document.querySelector(".js-submit").addEventListener("click", saveOptions);
document.querySelector(".js-add").addEventListener("click", addRow);

View File

@ -1,60 +1 @@
const APP_NAME = 'Postify'; console.log('Yeah!')
function sendUrlToServer(url, addr) {
console.log('Send url to server', url, addr);
return fetch(addr, {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
url: url,
}),
});
}
function showNotification(url, addr) {
console.log('NOTIFY', url, addr);
var id = Math.random().toString(36).substr(2);
browser.notifications.create(id, {
"type": "basic",
"iconUrl": browser.extension.getURL("icons/postify-48.png"),
"title": APP_NAME,
"message": `Sent "${url}" to ${addr}.`,
});
var close = function () {
browser.notifications.clear(id);
}
setTimeout(close, 2000);
}
function sendUrlToServers(url, patterns) {
patterns.forEach(item => {
const regex = new RegExp(item.pattern || '.*', 'i');
if (regex.test(url) && item.server) {
sendUrlToServer(url, item.server).then(
() => showNotification(url, item.server),
(e) => console.log('SEND ERROR', e)
);
}
});
}
function sendUrl(url) {
PatternStorage.get().then(patterns => {
sendUrlToServers(url, patterns);
});
}
function sendCurrentUrl(args) {
if (args.url) {
sendUrl(args.url)
}
}
browser.browserAction.onClicked.addListener(sendCurrentUrl);

View File

@ -1,22 +0,0 @@
# Postify
Post current url to external http server.
## Install
First, build xpi file
```shell
make build-xpi
```
Next, change firefox extension signature preferences
* open `about:config`
* change `xpinstall.signatures.required` to `false`
Finally, install extension via "Install Add-on from a file".
## See also
* https://github.com/ibizaman/jsondispatch

View File

@ -1,5 +0,0 @@
<?php
ob_start();
var_dump(file_get_contents('php://input'));
error_log(ob_get_clean(), 4);

View File

@ -1,24 +0,0 @@
function PropertyStorage(name) {
const parse = function (data) {
const propertyData = data[name];
if (!propertyData) {
return null;
}
try {
return JSON.parse(propertyData);
} catch (e) {
return null;
}
};
this.get = function () {
const getting = browser.storage.local.get(name);
return getting.then(parse);
};
this.set = function (value) {
return browser.storage.local.set({ patterns: JSON.stringify(value) });
};
}
PatternStorage = new PropertyStorage('patterns');