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