initial Commit
This commit is contained in:
commit
70730bbfad
11 changed files with 281 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
.idea/
|
BIN
icons/logo128.png
Normal file
BIN
icons/logo128.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.7 KiB |
BIN
icons/logo16.png
Normal file
BIN
icons/logo16.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 920 B |
BIN
icons/logo180.png
Normal file
BIN
icons/logo180.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3 KiB |
BIN
icons/logo38.png
Normal file
BIN
icons/logo38.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.1 KiB |
BIN
icons/logo48.png
Normal file
BIN
icons/logo48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
128
main.js
Normal file
128
main.js
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
function getCounter() {
|
||||||
|
var x = new XMLHttpRequest();
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("module", "API");
|
||||||
|
formData.append("method", "Live.getCounters");
|
||||||
|
formData.append("idSite", s.siteId);
|
||||||
|
formData.append("lastMinutes", s.badgelastHours * 60);
|
||||||
|
formData.append("format", "JSON");
|
||||||
|
formData.append("token_auth", s.accessToken);
|
||||||
|
|
||||||
|
x.open("POST", s.url + "index.php", true);
|
||||||
|
x.onreadystatechange = function () {
|
||||||
|
if (x.readyState == 4) {
|
||||||
|
if (x.status == 200) {
|
||||||
|
var response = JSON.parse(x.responseText)[0];
|
||||||
|
chrome.browserAction.setBadgeText({text: response["visits"]});
|
||||||
|
} else {
|
||||||
|
console.error("FEHLER:" + x.status + x.response)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
x.send(formData);
|
||||||
|
}
|
||||||
|
function getVisitorLog(success) {
|
||||||
|
var x = new XMLHttpRequest();
|
||||||
|
var formData = new FormData();
|
||||||
|
formData.append("module", "API");
|
||||||
|
formData.append("method", "Live.getLastVisitsDetails");
|
||||||
|
formData.append("period", "range");
|
||||||
|
formData.append("date", "last" + s.listLastDays);
|
||||||
|
formData.append("filter_limit", s.listMax);
|
||||||
|
formData.append("idSite", s.siteId);
|
||||||
|
formData.append("format", "JSON");
|
||||||
|
formData.append("token_auth", s.accessToken);
|
||||||
|
|
||||||
|
x.open("POST", s.url + "index.php", true);
|
||||||
|
x.onreadystatechange = function () {
|
||||||
|
if (x.readyState == 4) {
|
||||||
|
if (x.status == 200) {
|
||||||
|
|
||||||
|
var response = JSON.parse(x.responseText);
|
||||||
|
console.log(response);
|
||||||
|
success(response);
|
||||||
|
} else {
|
||||||
|
console.error("FEHLER:" + x.status + x.response)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
|
x.send(formData);
|
||||||
|
}
|
||||||
|
function updateVisitorLog() {
|
||||||
|
document.getElementById('visitors').innerHTML = localStorage["htmlCache"];
|
||||||
|
|
||||||
|
getVisitorLog(function (response) {
|
||||||
|
var list = [
|
||||||
|
"serverDatePretty",
|
||||||
|
"serverTimePretty",
|
||||||
|
"visitDurationPretty",
|
||||||
|
"browserIcon",
|
||||||
|
"deviceTypeIcon",
|
||||||
|
"operatingSystemIcon",
|
||||||
|
"visitorTypeIcon",
|
||||||
|
"countryFlag",
|
||||||
|
"actions",
|
||||||
|
"visitIp",
|
||||||
|
"referrerUrl"
|
||||||
|
];
|
||||||
|
document.getElementById('visitors').innerHTML = "";
|
||||||
|
var i, visitor;
|
||||||
|
for (i = 0; i < response.length; ++i) {
|
||||||
|
visitor = response[i];
|
||||||
|
var tr = document.createElement('tr');
|
||||||
|
for (var j = 0; j < list.length; j++) {
|
||||||
|
var key = list[j];
|
||||||
|
var td = tr.appendChild(document.createElement('td'));
|
||||||
|
if (key.indexOf("Icon") !== -1 || key.indexOf("Flag") !== -1) {
|
||||||
|
if (visitor[key]) {
|
||||||
|
td.innerHTML = "<img src='" + s.url + visitor[key] + "'>";
|
||||||
|
}
|
||||||
|
} else if (key == "referrerUrl" && visitor[key]) {
|
||||||
|
var link = document.createElement('a');
|
||||||
|
link.href = visitor[key];
|
||||||
|
link.target = "_blank";
|
||||||
|
link.textContent = link.hostname;
|
||||||
|
td.appendChild(link);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
td.textContent = visitor[key];
|
||||||
|
}
|
||||||
|
tr.appendChild(td);
|
||||||
|
}
|
||||||
|
document.getElementById('visitors').appendChild(tr);
|
||||||
|
}
|
||||||
|
localStorage["htmlCache"] = document.getElementById('visitors').innerHTML;
|
||||||
|
return true;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
var s;
|
||||||
|
chrome.storage.local.get({
|
||||||
|
url: "https://demo.piwik.org/",
|
||||||
|
siteId: 7,
|
||||||
|
accessToken: "",
|
||||||
|
badgelastHours: 1,
|
||||||
|
badgeRefresh: 1,
|
||||||
|
listMax: 10,
|
||||||
|
listLastDays: 2
|
||||||
|
}, function (settings) {
|
||||||
|
s = settings;
|
||||||
|
if (chrome.extension.getBackgroundPage() === window) {
|
||||||
|
/*
|
||||||
|
chrome.runtime.onInstalled.addListener(function () {
|
||||||
|
chrome.tabs.create({
|
||||||
|
url: chrome.extension.getURL("settings.html")
|
||||||
|
});
|
||||||
|
});
|
||||||
|
*/
|
||||||
|
|
||||||
|
chrome.browserAction.setBadgeBackgroundColor({color: "#2c58a2"});
|
||||||
|
getCounter(settings);
|
||||||
|
setInterval(getCounter, 60 * 1000);
|
||||||
|
|
||||||
|
|
||||||
|
} else {
|
||||||
|
updateVisitorLog(settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
26
manifest.json
Normal file
26
manifest.json
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
{
|
||||||
|
"manifest_version": 2,
|
||||||
|
"icons": {
|
||||||
|
"16": "icons/logo16.png",
|
||||||
|
"48": "icons/logo48.png",
|
||||||
|
"128": "icons/logo128.png"
|
||||||
|
},
|
||||||
|
"name": "Piwik Counter",
|
||||||
|
"description": "Description",
|
||||||
|
"version": "0.1",
|
||||||
|
"browser_action": {
|
||||||
|
"default_icon": "icons/logo38.png",
|
||||||
|
"default_popup": "popup.html"
|
||||||
|
},
|
||||||
|
"background": {
|
||||||
|
"scripts": [
|
||||||
|
"main.js"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options_page": "settings.html",
|
||||||
|
"permissions": [
|
||||||
|
"storage",
|
||||||
|
"http://*/*",
|
||||||
|
"https://*/*"
|
||||||
|
]
|
||||||
|
}
|
34
popup.html
Normal file
34
popup.html
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Piwik Popup</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
/*font-family: "Segoe UI", "Lucida Grande", Tahoma, sans-serif;*/
|
||||||
|
font-size: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
#v {
|
||||||
|
!* avoid an excessively wide status text *!
|
||||||
|
white-space: pre;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
!*overflow: hidden;*!
|
||||||
|
!*max-width: 400px;*!
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<table id="visitors"></table>
|
||||||
|
<script src="main.js"></script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
|
46
settings.html
Normal file
46
settings.html
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="de">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Piwik Einstellungen</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<form id="form">
|
||||||
|
<fieldset>
|
||||||
|
<div>
|
||||||
|
<label for="url">Piwik URL</label>
|
||||||
|
<input type="url" id="url" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="accessToken">Access Token</label>
|
||||||
|
<input type="text" id="accessToken" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="siteId">Site ID</label>
|
||||||
|
<input type="number" id="siteId" required>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<label for="badgelastHours">Badge last (hours)</label>
|
||||||
|
<input type="number" id="badgelastHours" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="badgeRefresh">Badge refresh (minutes)</label>
|
||||||
|
<input type="number" id="badgeRefresh" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="listMax">List Maximum</label>
|
||||||
|
<input type="number" id="listMax" required>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label for="listLastDays">List last days</label>
|
||||||
|
<input type="number" id="listLastDays" required>
|
||||||
|
</div>
|
||||||
|
<input type="submit" value="Save">
|
||||||
|
<div id="status"></div>
|
||||||
|
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
<script src="settings.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
46
settings.js
Normal file
46
settings.js
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
// Saves options to chrome.storage
|
||||||
|
function save_options(evt) {
|
||||||
|
evt.preventDefault();
|
||||||
|
var status = document.getElementById('status');
|
||||||
|
status.textContent = '';
|
||||||
|
|
||||||
|
chrome.storage.local.set({
|
||||||
|
url: document.getElementById('url').value,
|
||||||
|
siteId: document.getElementById('siteId').value,
|
||||||
|
accessToken: document.getElementById('accessToken').value,
|
||||||
|
badgelastHours: document.getElementById('badgelastHours').value,
|
||||||
|
badgeRefresh: document.getElementById('badgeRefresh').value,
|
||||||
|
listMax: document.getElementById('listMax').value,
|
||||||
|
listLastDays: document.getElementById('listLastDays').value
|
||||||
|
}, function () {
|
||||||
|
// Update status to let user know options were saved.
|
||||||
|
console.log("saved");
|
||||||
|
status.textContent = 'Options saved.';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Restores select box and checkbox state using the preferences
|
||||||
|
// stored in chrome.storage.
|
||||||
|
function restore_options() {
|
||||||
|
// Use default value color = 'red' and likesColor = true.
|
||||||
|
chrome.storage.local.get({
|
||||||
|
url: "",
|
||||||
|
siteId: 1,
|
||||||
|
accessToken: "",
|
||||||
|
badgelastHours: 24,
|
||||||
|
badgeRefresh: 1,
|
||||||
|
listMax: 10,
|
||||||
|
listLastDays: 2
|
||||||
|
}, function (settings) {
|
||||||
|
console.info(settings);
|
||||||
|
document.getElementById('url').value = settings.url;
|
||||||
|
document.getElementById('siteId').value = settings.siteId;
|
||||||
|
document.getElementById('accessToken').value = settings.accessToken;
|
||||||
|
document.getElementById('badgelastHours').value = settings.badgelastHours;
|
||||||
|
document.getElementById('badgeRefresh').value = settings.badgeRefresh;
|
||||||
|
document.getElementById('listMax').value = settings.listMax;
|
||||||
|
document.getElementById('listLastDays').value = settings.listLastDays;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
document.addEventListener('DOMContentLoaded', restore_options);
|
||||||
|
document.getElementById('form').addEventListener('submit', save_options);
|
Reference in a new issue