Compare commits
No commits in common. "a251acec86b14bfd4941e8103e12da1ce0931c48" and "949106ce50a1f901fbd5f393fc5e9506d5cddddd" have entirely different histories.
a251acec86
...
949106ce50
@ -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
2
.gitignore
vendored
@ -1,2 +0,0 @@
|
|||||||
./.idea
|
|
||||||
*.xpi
|
|
6
Makefile
6
Makefile
@ -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 |
@ -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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
43
options.html
43
options.html
@ -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>
|
|
64
options.js
64
options.js
@ -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);
|
|
61
postify.js
61
postify.js
@ -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);
|
|
22
readme.md
22
readme.md
@ -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
|
|
@ -1,5 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
ob_start();
|
|
||||||
var_dump(file_get_contents('php://input'));
|
|
||||||
error_log(ob_get_clean(), 4);
|
|
24
storage.js
24
storage.js
@ -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');
|
|
Loading…
Reference in New Issue
Block a user