1
0
Fork 0

initial Commit

This commit is contained in:
Lukas Winkler 2016-08-25 12:22:02 +02:00
commit 70730bbfad
No known key found for this signature in database
GPG key ID: E75EDFBF65E8D43A
11 changed files with 281 additions and 0 deletions

1
.gitignore vendored Normal file
View file

@ -0,0 +1 @@
.idea/

BIN
icons/logo128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
icons/logo16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 920 B

BIN
icons/logo180.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3 KiB

BIN
icons/logo38.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
icons/logo48.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

128
main.js Normal file
View 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
View 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
View 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
View 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
View 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);