diff --git a/.DS_Store b/.DS_Store
index eb666dc..9efbcec 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/README.md b/README.md
index f36209c..b7ee47b 100644
--- a/README.md
+++ b/README.md
@@ -39,4 +39,4 @@ You can open an issue and there you must describe the feedback, the bug or the n
See folder screenshots
to see screenshots also of the older versions.
-
+
diff --git a/all-websites/index.html b/all-websites/index.html
index a7b6b5f..587b0fb 100644
--- a/all-websites/index.html
+++ b/all-websites/index.html
@@ -6,11 +6,13 @@
-
All time spent
+
All time spent
@@ -18,11 +20,19 @@
All time spent
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
diff --git a/css/style.css b/css/style.css
index d3b63df..2cb1a70 100644
--- a/css/style.css
+++ b/css/style.css
@@ -336,6 +336,65 @@ textarea {
z-index: 4;
}
+.th-sort-by-column {
+ cursor: pointer;
+ transition: 0s;
+}
+
+.th-sort-by-column:hover {
+ background-color: #2c96ff;
+}
+
+.th-sort-by-column-sel {
+ padding-right: 25px;
+ background-repeat: no-repeat;
+ background-position: right 5px center;
+ background-size: 20px auto;
+}
+
+.sort-by-column-asc {
+ background-image: url("/img/sort-asc.svg");
+}
+
+.sort-by-column-desc {
+ background-image: url("/img/sort-desc.svg");
+}
+
+#search-container {
+ grid-area: search;
+ text-align: left;
+ overflow: visible;
+}
+
+#nav-days-container {
+ grid-area: days;
+ text-align: right;
+ overflow: visible;
+}
+
+#filters-container {
+ grid-area: filters;
+ text-align: center;
+ overflow: visible;
+}
+
+#search-all-websites-text {
+ width: 100%;
+ min-width: 300px;
+ margin: 0px;
+ background-color: #2c96ff;
+ color: #ffffff;
+ opacity: 0.8;
+ border: 0px solid transparent;
+ padding: 4px 10px;
+}
+
+#search-all-websites-text:active, #search-all-websites-text:focus {
+ background-color: #6ab4ff;
+ box-shadow: 0px 0px 0px 2px #ffffffaa;
+ color: #ffffff;
+}
+
#navigator-days {
background-color: #0080ff;
margin: 5px;
@@ -349,11 +408,12 @@ textarea {
width: auto;
height: auto;
padding: 5px;
- text-align: right;
+ display: grid;
+ grid-template-areas: "search days";
}
.nav-days-fixed {
- background-color: #0080ffaa !important;
+ background-color: #0080ffdd !important;
border-radius: 5px !important;
}
@@ -634,10 +694,14 @@ h3 {
.float-right {
float: right;
+ overflow: visible;
+ text-align: right;
}
.float-left {
float: left;
+ overflow: visible;
+ text-align: left;
}
.margin-right-5-px {
@@ -673,7 +737,7 @@ h3 {
}
/*categories*/
-.other-category, .social-category, .travel-category, .news-category, .education-category, .shopping-category, .search-category, .reference-category, .entertainment-category, .adults-category, .sav22999-category, .develop-category, .messaging-category, .games-category, .health-category {
+.other-category, .social-category, .travel-category, .news-category, .education-category, .shopping-category, .search-category, .reference-category, .entertainment-category, .adults-category, .sav22999-category, .develop-category, .messaging-category, .games-category, .health-category, .cloud-category {
background-color: transparent;
background-repeat: no-repeat;
background-size: auto 100%;
@@ -739,6 +803,11 @@ h3 {
background-image: url("../img/categories/games.svg");
}
+.cloud-category {
+ background-image: url("../img/categories/cloud.svg");
+ background-size: auto 110%;
+}
+
.health-category {
background-image: url("../img/categories/health.svg");
}
\ No newline at end of file
diff --git a/img/categories/cloud.svg b/img/categories/cloud.svg
new file mode 100644
index 0000000..d1bc973
--- /dev/null
+++ b/img/categories/cloud.svg
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/img/sort-asc.svg b/img/sort-asc.svg
new file mode 100644
index 0000000..7ca6a0c
--- /dev/null
+++ b/img/sort-asc.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/img/sort-desc.svg b/img/sort-desc.svg
new file mode 100644
index 0000000..3574bec
--- /dev/null
+++ b/img/sort-desc.svg
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/js/all-websites.js b/js/all-websites.js
index 293c3bc..90a4e6b 100644
--- a/js/all-websites.js
+++ b/js/all-websites.js
@@ -5,6 +5,8 @@ let all_dates = [];
let start_date = null;
let days_to_show = 7; //number of days to show
+let categories = {};
+let sorted_by = "";
function loaded() {
document.getElementById("refresh-data-button").onclick = function () {
@@ -33,7 +35,12 @@ function loaded() {
goOlder();
}
- loadDataFromBrowser(true);
+ browser.runtime.sendMessage({from: "all-websites", ask: "categories"}, (response) => {
+ if (response !== undefined) {
+ categories = response.categories;
+ loadDataFromBrowser(true);
+ }
+ });
document.getElementById("all-websites-dedication-section").onscroll = function () {
if (document.getElementById("all-websites-dedication-section").scrollTop > 30) {
@@ -51,28 +58,39 @@ function loaded() {
}
}
}
+
+ document.getElementById("search-all-websites-text").onkeyup = function () {
+ search(document.getElementById("search-all-websites-text").value);
+ }
+
+ let titleAllWebsites = document.getElementById("title-all-time-spent");
+ let versionNumber = document.createElement("div");
+ versionNumber.classList.add("float-right", "small-button");
+ versionNumber.textContent = browser.runtime.getManifest().version;
+ versionNumber.id = "version";
+ titleAllWebsites.append(versionNumber);
}
function goToday() {
- loadDataFromBrowser(true);
+ loadDataFromBrowser(true, false);
start_date = 0;
}
function goLast() {
- loadDataFromBrowser(true);
+ loadDataFromBrowser(true, false);
start_date = 0;
if (all_dates.length > days_to_show) start_date = all_dates.length - days_to_show;
}
function goNewer() {
- loadDataFromBrowser(true);
+ loadDataFromBrowser(true, false);
//-7
if (start_date > days_to_show) start_date -= days_to_show;
else start_date = 0;
}
function goOlder() {
- loadDataFromBrowser(true);
+ loadDataFromBrowser(true, false);
//+7
if ((start_date + days_to_show) < all_dates.length) start_date += days_to_show;
//else start_date = all_dates.length - days_to_show;
@@ -82,7 +100,7 @@ function setDateInterval(from, to) {
document.getElementById("from-to-date-label").textContent = "Days: " + from + " – " + to;
}
-function loadDataFromBrowser(generate_section = true) {
+function loadDataFromBrowser(generate_section = true, force_generation = true) {
browser.storage.local.get("websites", function (value) {
websites_json = {};
if (value["websites"] !== undefined) {
@@ -90,13 +108,35 @@ function loadDataFromBrowser(generate_section = true) {
}
if (generate_section) {
document.getElementById("all-websites-sections").textContent = "";
- websites_json_by_domain = [];
- loadAllWebsites();
+ //websites_json_by_domain = [];
+ loadAllWebsites(generate_section, force_generation);
}
//console.log(JSON.stringify(websites_json));
});
}
+function search(value = "") {
+ browser.storage.local.get("websites").then(response => {
+ websites_json = {};
+ if (response["websites"] !== undefined) {
+ websites_json = response["websites"];
+ }
+ websites_json_by_domain = [];
+ document.getElementById("search-all-websites-text").value = value.toString();
+ let valueToUse = value.toLowerCase();
+ for (const website in websites_json) {
+ let current_website_json = websites_json[website];
+ let condition_category = true//TODO//
+ let condition_time = true//TODO//
+ let condition_enabled = true//TODO
+ if ((website.toLowerCase().includes(valueToUse)) && condition_category && condition_time && condition_enabled) {
+ websites_json_by_domain.push(website);
+ }
+ }
+ loadAllWebsites(true, false, false);
+ });
+}
+
function deleteAllData() {
let confirmation = confirm("Are you sure you want to clear all data?\nYou can't cancel this process once started.");
if (confirmation) {
@@ -200,213 +240,372 @@ function hideBackgroundOpacity() {
document.getElementById("background-opacity").style.display = "none";
}
-function loadAllWebsites() {
- if (!isEmpty(websites_json)) {
- //there are websites saved
-
- for (let url in websites_json) {
- websites_json_by_domain.push(url);
+/**
+ * Sort by column!
+ * @param column it can be "website", "category", "status", "since-install", "date-N" (where N is 0, 1, 2, ...)
+ * @param websites the dictionary to sort
+ * @param generate_ui true -> it "generates" also the UI, false -> otherwise it changes only the variable
+ */
+function sortByColumn(column, websites, generate_ui = true, toggle = true) {
+ if (sorted_by === "") sorted_by = "website-asc";
+
+ let previousColumn = "";
+ let ascOrDesc = "asc";
+ if (column === sorted_by.replace("-asc", "").replace("-desc", "")) {
+ //same column
+ if (sorted_by.includes("-asc") || !sorted_by.includes("-desc")) {
+ if (toggle) ascOrDesc = "desc";
+ else ascOrDesc = "asc";
+ } else if (sorted_by.includes("-desc")) {
+ if (toggle) ascOrDesc = "asc";
+ else ascOrDesc = "desc";
}
- //console.log(JSON.stringify(websites_json_by_domain));
-
- websites_json_by_domain.sort();
-
- smallest_date = getToday();
+ previousColumn = column;
+ } else {
+ previousColumn = sorted_by.replace("-asc", "").replace("-desc", "");
+ }
- for (let index in websites_json_by_domain) {
- for (let date in websites_json[websites_json_by_domain[index]]) {
- if (date !== "enabled" && date !== "category") {
- if (date < smallest_date) {
- smallest_date = date;
- }
- }
- }
+ sorted_by = column + "-" + ascOrDesc;
+ if (generate_ui) {
+ if (previousColumn !== "" && previousColumn !== column) {
+ if (document.getElementById("th-" + previousColumn).classList.contains("th-sort-by-column-sel")) document.getElementById("th-" + previousColumn).classList.remove("th-sort-by-column-sel");
+ if (document.getElementById("th-" + previousColumn).classList.contains("sort-by-column-asc")) document.getElementById("th-" + previousColumn).classList.remove("sort-by-column-asc");
+ if (document.getElementById("th-" + previousColumn).classList.contains("sort-by-column-desc")) document.getElementById("th-" + previousColumn).classList.remove("sort-by-column-desc");
}
- all_dates = getAllDates(smallest_date, getToday());
- all_dates.reverse();
+ if (!document.getElementById("th-" + column).classList.contains("th-sort-by-column-sel")) document.getElementById("th-" + column).classList.add("th-sort-by-column-sel");
+ if (document.getElementById("th-" + column).classList.contains("sort-by-column-asc")) document.getElementById("th-" + column).classList.remove("sort-by-column-asc");
+ if (document.getElementById("th-" + column).classList.contains("sort-by-column-desc")) document.getElementById("th-" + column).classList.remove("sort-by-column-desc");
+ document.getElementById("th-" + column).classList.add("sort-by-column-" + ascOrDesc);
+ }
- if (start_date === null) start_date = 0;
+ //console.log("col " + column + " | prev " + previousColumn + " | sorted_by " + sorted_by)
- let last_seven_days = [];
- let counter = start_date; //from index 0
- while (counter < (days_to_show + start_date)) {
- if (all_dates.length >= (counter + 1)) {
- last_seven_days.push(all_dates[counter]);
+ websites = getWebsitesToUse(websites_json);
+ if (sorted_by.includes("-asc")) {
+ //sort as "asc"
+ websites = websites.sort((a, b) => a[column] > b[column] ? 1 : -1);
+ } else {
+ //sort as "desc"
+ websites = websites.sort((a, b) => a[column] < b[column] ? 1 : -1);
+ }
+
+ if (generate_ui) {
+ browser.storage.local.get("websites").then(response => {
+ websites_json = {};
+ if (response["websites"] !== undefined) {
+ websites_json = response["websites"];
}
- counter++;
- }
+ document.getElementById("table-all-websites").removeChild(document.getElementById("tbody-table-all-websites"));
+ let tableTBodyElement = getTBodyTable(websites, getLastSevenDays());
+ document.getElementById("table-all-websites").append(tableTBodyElement);
+ });
+ }
+ return websites;
+}
- let section = document.createElement("div");
- section.classList.add("section", "overflow-auto", "no-padding");
- section.id = "table-section";
+function getWebsitesToUse(websites_json) {
+ let websites_to_use = [];
+ let last_seven_days = getLastSevenDays();
- let tableElement = document.createElement("table");
- tableElement.classList.add("table-days");
+ for (let index in websites_json_by_domain) {
+ //website
+ let current_website = websites_json_by_domain[index];
- let tableTHeadElement = document.createElement("thead");
- let tableRowElement = document.createElement("tr");
+ let new_website = {};
- let tableHeaderElement = document.createElement("th");
- tableHeaderElement.textContent = "Website";
- tableRowElement.append(tableHeaderElement);
+ new_website["website"] = current_website;
+ new_website["status"] = websites_json[current_website]["enabled"];
+ new_website["category"] = websites_json[current_website]["category"];
- tableHeaderElement = document.createElement("th");
- tableHeaderElement.textContent = "Status";
- tableRowElement.append(tableHeaderElement);
+ //since install
+ let number_of_days = all_dates.length;
- tableHeaderElement = document.createElement("th");
- tableHeaderElement.textContent = "Category";
- tableRowElement.append(tableHeaderElement);
+ let sum_since_install = 0;
+ for (let date in websites_json[current_website]) {
+ if (date !== "always" && date !== "enabled" && date !== "category") {
+ sum_since_install += websites_json[current_website][date];
+ }
+ }
+ new_website["since-install"] = sum_since_install;
- tableHeaderElement = document.createElement("th");
- tableHeaderElement.textContent = "Since install";
- tableRowElement.append(tableHeaderElement);
+ //days
for (let date in last_seven_days) {
let date_to_show = last_seven_days[date];
- tableHeaderElement = document.createElement("th");
- tableHeaderElement.textContent = date_to_show;
- tableRowElement.append(tableHeaderElement);
+ let time = 0;
+ if (websites_json[current_website][date_to_show] !== undefined) {
+ time = websites_json[current_website][date_to_show];
+ }
+ new_website["date-" + date] = time
}
- setDateInterval(last_seven_days[0], last_seven_days[last_seven_days.length - 1]);
- tableTHeadElement.append(tableRowElement);
- tableElement.append(tableTHeadElement);
+ websites_to_use.push(new_website);
+ }
- let tableTBodyElement = document.createElement("tbody");
- for (let index in websites_json_by_domain) {
- tableRowElement = document.createElement("tr");
+ return websites_to_use;
+}
- //website
- let current_website = websites_json_by_domain[index];
+function loadAllWebsites(clear = true, load_all_websites = true, apply_filter = true) {
+ if (clear) {
+ document.getElementById("all-websites-sections").textContent = "";
+ }
+ if (!isEmpty(websites_json) && load_all_websites || !isEmpty(websites_json_by_domain) && !load_all_websites) {
+ //there are websites saved
- let currentWebsiteElement = document.createElement("h2");
- currentWebsiteElement.textContent = "https://" + current_website;
- currentWebsiteElement.classList.add("link", "go-to-external");
- currentWebsiteElement.onclick = function () {
- browser.tabs.create({url: "https://" + current_website});
- }
- currentWebsiteElement.title = currentWebsiteElement.textContent;
-
- let buttonDelete = document.createElement("input");
- buttonDelete.type = "button";
- buttonDelete.alt = "Delete";
- buttonDelete.classList.add("button", "button-delete", "very-small-button", "float-left", "margin-left-minus-20-px", "margin-top-5-px", "text-align-center");
- buttonDelete.id = "button-delete-single";
- buttonDelete.onclick = function () {
- deleteAWebsite(current_website);
+ if (load_all_websites) {
+ websites_json_by_domain = [];
+ for (let url in websites_json) {
+ websites_json_by_domain.push(url);
}
+ }
+ websites_json_by_domain.sort();
+ //console.log(JSON.stringify(websites_json_by_domain));
- let tableDataElement = document.createElement("td");
- tableDataElement.classList.add("padding-left-30-px");
- tableDataElement.append(buttonDelete, currentWebsiteElement);
- tableRowElement.append(tableDataElement);
+ let websites_to_use = getWebsitesToUse(websites_json);
- //status
- let status_to_show = true;
- if (websites_json[current_website]["enabled"] !== undefined) {
- status_to_show = websites_json[current_website]["enabled"];
- }
- let tableDataElementStatus = document.createElement("td");
- tableDataElementStatus.classList.add("status-website");
- let switchToggleSection = document.createElement("div");
- switchToggleSection.id = "switch-toggle-section";
- let toggleContainer = document.createElement("div");
- toggleContainer.id = "toggle-container";
- let toggleBackground = document.createElement("div");
- toggleBackground.id = "toggle-background";
- let toggleThumb = document.createElement("div");
- toggleThumb.id = "toggle-thumb";
- toggleContainer.append(toggleBackground);
- toggleContainer.append(toggleThumb);
- toggleContainer.onclick = function () {
- switchToggleOnOff(toggleThumb, current_website, tableDataElementStatus);
- }
- switchToggleSection.append(toggleContainer);
- if (status_to_show) {
- //enabled
- toggleThumb.style.left = "auto";
- toggleThumb.style.right = "0px";
- toggleThumb.style.backgroundImage = "url('../img/yes.png')";
- tableDataElementStatus.append(switchToggleSection);
- tableDataElementStatus.classList.add("status-enabled");
- } else {
- //disabled
- toggleThumb.style.left = "0px";
- toggleThumb.style.right = "auto";
- toggleThumb.style.backgroundImage = "url('../img/no.png')";
- tableDataElementStatus.append(switchToggleSection);
- tableDataElementStatus.classList.add("status-disabled");
- }
- tableRowElement.append(tableDataElementStatus);
+ //console.log(websites_to_use)
+ websites_to_use = sortByColumn("website", websites_to_use, false, false);
+ showWebsitesTable(websites_to_use, apply_filter);
- //category
- let tableDataElementCategory = document.createElement("td");
- tableDataElementCategory.append(generateCategories(checkCategory(current_website), current_website, tableDataElementCategory));
- tableRowElement.append(tableDataElementCategory);
+ } else {
+ //no websites
+ let section = document.createElement("div");
+ section.classList.add("section-empty");
+ section.textContent = "No websites found";
+ document.getElementById("all-websites-sections").append(section);
+ }
+}
- //since install
- let number_of_days = all_dates.length;
+function getLastSevenDays() {
+ smallest_date = getToday();
- let sum_since_install = 0;
- for (let date in websites_json[current_website]) {
- if (date !== "always" && date !== "enabled" && date !== "category") {
- sum_since_install += websites_json[current_website][date];
+ for (let index in websites_json_by_domain) {
+ for (let date in websites_json[websites_json_by_domain[index]]) {
+ if (date !== "enabled" && date !== "category") {
+ if (date < smallest_date) {
+ smallest_date = date;
}
}
- let since_install = getTimeConverted(sum_since_install);
+ }
+ }
+
+ all_dates = getAllDates(smallest_date, getToday());
+ all_dates.reverse();
+
+ if (start_date === null) start_date = 0;
+
+ let last_seven_days = [];
+ let counter = start_date; //from index 0
+ while (counter < (days_to_show + start_date)) {
+ if (all_dates.length >= (counter + 1)) {
+ last_seven_days.push(all_dates[counter]);
+ }
+ counter++;
+ }
+
+ return last_seven_days;
+}
+
+function getTHeadTable(websites, last_seven_days) {
+ let tableTHeadElement = document.createElement("thead");
+ tableTHeadElement.id = "thead-table-all-websites";
+ let tableRowElement = document.createElement("tr");
+
+ let tableHeaderElement = document.createElement("th");
+ tableHeaderElement.textContent = "Website";
+ tableHeaderElement.id = "th-website";
+ tableHeaderElement.classList.add("th-sort-by-column");
+ if (sorted_by === "" || sorted_by === "website-asc") tableHeaderElement.classList.add("th-sort-by-column-sel", "sort-by-column-asc");
+ tableHeaderElement.onclick = function () {
+ websites = sortByColumn("website", websites);
+ }
+ tableRowElement.append(tableHeaderElement);
+
+ tableHeaderElement = document.createElement("th");
+ tableHeaderElement.textContent = "Status";
+ tableHeaderElement.id = "th-status";
+ tableHeaderElement.classList.add("th-sort-by-column");
+ tableHeaderElement.onclick = function () {
+ websites = sortByColumn("status", websites);
+ }
+ tableRowElement.append(tableHeaderElement);
+
+ tableHeaderElement = document.createElement("th");
+ tableHeaderElement.textContent = "Category";
+ tableHeaderElement.id = "th-category";
+ tableHeaderElement.classList.add("th-sort-by-column");
+ tableHeaderElement.onclick = function () {
+ websites = sortByColumn("category", websites);
+ }
+ tableRowElement.append(tableHeaderElement);
+
+ tableHeaderElement = document.createElement("th");
+ tableHeaderElement.textContent = "Since install";
+ tableHeaderElement.id = "th-since-install";
+ tableHeaderElement.classList.add("th-sort-by-column");
+ tableHeaderElement.onclick = function () {
+ websites = sortByColumn("since-install", websites);
+ }
+ tableRowElement.append(tableHeaderElement);
+ for (let date in last_seven_days) {
+
+ let date_to_show = last_seven_days[date];
+ tableHeaderElement = document.createElement("th");
+ tableHeaderElement.textContent = date_to_show;
+ tableHeaderElement.id = "th-date-" + date;
+ tableHeaderElement.classList.add("th-sort-by-column");
+ tableHeaderElement.onclick = function () {
+ websites = sortByColumn("date-" + date, websites);
+ }
+ tableRowElement.append(tableHeaderElement);
+ }
+ setDateInterval(last_seven_days[0], last_seven_days[last_seven_days.length - 1]);
+
+ tableTHeadElement.append(tableRowElement);
+ return tableTHeadElement;
+}
+
+function getTBodyTable(websites, last_seven_days) {
+ let tableTBodyElement = document.createElement("tbody");
+ tableTBodyElement.id = "tbody-table-all-websites";
+ for (let website in websites) {
+ let tableRowElement = document.createElement("tr");
+
+ //console.log(websites[website]);
+
+ let currentWebsiteElement = document.createElement("h2");
+ currentWebsiteElement.textContent = "https://" + websites[website]["website"];
+ currentWebsiteElement.classList.add("link", "go-to-external");
+ currentWebsiteElement.onclick = function () {
+ browser.tabs.create({url: "https://" + websites[website]["website"]});
+ }
+ currentWebsiteElement.title = currentWebsiteElement.textContent;
+
+ let buttonDelete = document.createElement("input");
+ buttonDelete.type = "button";
+ buttonDelete.alt = "Delete";
+ buttonDelete.classList.add("button", "button-delete", "very-small-button", "float-left", "margin-left-minus-20-px", "margin-top-5-px", "text-align-center");
+ buttonDelete.id = "button-delete-single";
+ buttonDelete.onclick = function () {
+ deleteAWebsite(websites[website]["website"]);
+ }
+
+
+ let tableDataElement = document.createElement("td");
+ tableDataElement.classList.add("padding-left-30-px");
+ tableDataElement.append(buttonDelete, currentWebsiteElement);
+ tableRowElement.append(tableDataElement);
+
+ //status
+ let status_to_show = websites[website]["status"];
+ let tableDataElementStatus = document.createElement("td");
+ tableDataElementStatus.classList.add("status-website");
+ let switchToggleSection = document.createElement("div");
+ switchToggleSection.id = "switch-toggle-section";
+ let toggleContainer = document.createElement("div");
+ toggleContainer.id = "toggle-container";
+ let toggleBackground = document.createElement("div");
+ toggleBackground.id = "toggle-background";
+ let toggleThumb = document.createElement("div");
+ toggleThumb.id = "toggle-thumb";
+ toggleContainer.append(toggleBackground);
+ toggleContainer.append(toggleThumb);
+ toggleContainer.onclick = function () {
+ switchToggleOnOff(toggleThumb, websites[website]["website"], tableDataElementStatus);
+ }
+ switchToggleSection.append(toggleContainer);
+ if (status_to_show) {
+ //enabled
+ toggleThumb.style.left = "auto";
+ toggleThumb.style.right = "0px";
+ toggleThumb.style.backgroundImage = "url('../img/yes.png')";
+ tableDataElementStatus.append(switchToggleSection);
+ tableDataElementStatus.classList.add("status-enabled");
+ } else {
+ //disabled
+ toggleThumb.style.left = "0px";
+ toggleThumb.style.right = "auto";
+ toggleThumb.style.backgroundImage = "url('../img/no.png')";
+ tableDataElementStatus.append(switchToggleSection);
+ tableDataElementStatus.classList.add("status-disabled");
+ }
+ tableRowElement.append(tableDataElementStatus);
+
+ //category
+ let tableDataElementCategory = document.createElement("td");
+ tableDataElementCategory.append(generateCategories(checkCategory(websites[website]["website"]), websites[website]["website"], tableDataElementCategory));
+ tableRowElement.append(tableDataElementCategory);
+
+
+ //since install
+ let number_of_days = all_dates.length;
+
+ let sum_since_install = websites[website]["since-install"]
+ let since_install = getTimeConverted(sum_since_install);
+ tableDataElement = document.createElement("td");
+ tableDataElement.textContent = since_install;
+ tableDataElement.classList.add("since-install-time");
+ if (sum_since_install >= (60 * 30) * number_of_days && sum_since_install < (60 * 60) * number_of_days) {
+ tableDataElement.classList.add("yellow");
+ } else if (sum_since_install >= (60 * 60) * number_of_days && sum_since_install < (60 * 60 * 3) * number_of_days) {
+ tableDataElement.classList.add("orange");
+ } else if (sum_since_install >= (60 * 60 * 3) * number_of_days) {
+ tableDataElement.classList.add("red");
+ }
+ tableRowElement.append(tableDataElement);
+
+
+ //days
+ for (let date in last_seven_days) {
+ let date_to_show = last_seven_days[date];
+ let time_to_show = getTimeConverted(websites[website]["date-" + date]);
+ let time = websites[website]["date-" + date];
+ if (time_to_show === "") time_to_show = getTimeConverted(0);
tableDataElement = document.createElement("td");
- tableDataElement.textContent = since_install;
- tableDataElement.classList.add("since-install-time");
- if (sum_since_install >= (60 * 30) * number_of_days && sum_since_install < (60 * 60) * number_of_days) {
+ tableDataElement.textContent = time_to_show;
+ if (time >= 60 * 30 && time < 60 * 60) {
tableDataElement.classList.add("yellow");
- } else if (sum_since_install >= (60 * 60) * number_of_days && sum_since_install < (60 * 60 * 3) * number_of_days) {
+ } else if (time >= 60 * 60 && time < 60 * 60 * 3) {
tableDataElement.classList.add("orange");
- } else if (sum_since_install >= (60 * 60 * 3) * number_of_days) {
+ } else if (time >= 60 * 60 * 3) {
tableDataElement.classList.add("red");
}
tableRowElement.append(tableDataElement);
+ }
+ tableTBodyElement.append(tableRowElement);
+ }
+ return tableTBodyElement;
+}
- //days
- for (let date in last_seven_days) {
- let date_to_show = last_seven_days[date];
- let time_to_show = getTimeConverted(0);
- let time = 0;
- if (websites_json[current_website][date_to_show] !== undefined) {
- time = websites_json[current_website][date_to_show];
- time_to_show = getTimeConverted(time);
- }
- if (time_to_show === "") time_to_show = getTimeConverted(0);
- tableDataElement = document.createElement("td");
- tableDataElement.textContent = time_to_show;
- if (time >= 60 * 30 && time < 60 * 60) {
- tableDataElement.classList.add("yellow");
- } else if (time >= 60 * 60 && time < 60 * 60 * 3) {
- tableDataElement.classList.add("orange");
- } else if (time >= 60 * 60 * 3) {
- tableDataElement.classList.add("red");
- }
- tableRowElement.append(tableDataElement);
- }
+function showWebsitesTable(websites, apply_filter = true) {
+ let section = document.createElement("div");
+ section.classList.add("section", "overflow-auto", "no-padding");
+ section.id = "table-section";
- tableTBodyElement.append(tableRowElement);
- }
- tableElement.append(tableTBodyElement);
+ let tableElement = document.createElement("table");
+ tableElement.id = "table-all-websites";
+ tableElement.classList.add("table-days");
- section.append(tableElement);
- document.getElementById("all-websites-sections").append(section);
+ let tableTHeadElement = getTHeadTable(websites, getLastSevenDays());
+ tableElement.append(tableTHeadElement);
- } else {
- //no websites
- let section = document.createElement("div");
- section.classList.add("section-empty");
- section.textContent = "No websites found";
+ let tableTBodyElement = getTBodyTable(websites, getLastSevenDays());
+ tableElement.append(tableTBodyElement);
- document.getElementById("all-websites-sections").append(section);
+ section.append(tableElement);
+ document.getElementById("all-websites-sections").append(section);
+ if (apply_filter) {
+ applyFilter();
+ }
+}
+
+function applyFilter() {
+ if (document.getElementById("search-all-websites-text").value.replaceAll(" ", "") !== "") {
+ search(document.getElementById("search-all-websites-text").value);
}
}
@@ -464,24 +663,6 @@ function checkCategory(current_website) {
return valueToReturn;
}
-let categories = {
- "social": ["facebook.com", "twitter.com", "instagram.com", "chat.openai.com"],
- "travel": ["booking.com", "expedia.com", "airbnb.com", "hotels.com", "trivago.it"],
- "news": ["bbc.com", "bbc.co.uk", "cnn.com", "rainews.it", "corriere.it", "repubblica.it", "msn.com", "news.yahoo.com", "aol.com", "ladige.it", "ildolomiti.it"],
- "education": ["classroom.google.com", "edu.google.com"],
- "shopping": ["amazon.com", "amazon.it", "amazon.fr", "amazon.de", "ebay.com", "eprice.it", "lafeltrinelli.it", "ibs.it", "mediaworld.it", "euronics.it", "trony.it", "unieuro.it", "justeat.it", "glovoapp.com", "deliveroo.co.uk", "deliveroo.it", "deliveroo.com", "tesco.com", "asda.com", "sainsburys.co.uk", "ah.nl"],
- "search": ["google.com", "google.it", "google.co.uk", "google.fr", "google.de", "bing.com", "duckduckgo.com", "qwant.com", "baidu.com", "yandex.com", "search.yahoo.com"],
- "reference": ["wikipedia.org", "wordreference.com", "dictionary.cambridge.org", "treccani.it", "oxfordlearnersdictionaries.com", "emojipedia.org", "affinity.help"],
- "entertainment": ["youtube.com", "netflix.com", "primevideo.com", "spotify.com", "deezer.com", "disneyplus.com", "imdb.com", "hulu.com"],
- "adults": ["youporn.com", "pornhub.com", "xnxx.com", "xvideos.com", "xhamster.com"],
- "sav22999": ["saveriomorelli.com", "emojiaddon.com", "savpdfviewer.com"],
- "develop": ["github.com", "gitlab.com", "addons.mozilla.org", "thunderbird.net", "addons.thunderbird.net", "stackoverflow.com", "w3.org", "w3schools.com", "developer.mozilla.org", "w3docs.com"],
- "messaging": ["whatsapp.com", "web.whatsapp.com", "telegram.org", "web.telegram.org", "t.me"],
- "games": [],
- "health": ["apss.tn.it"],
- "other": [] //must remain empty here
-};
-
function getCategory(website) {
let valueToReturn = "other";
for (item in categories) {
diff --git a/js/background.js b/js/background.js
index b92d054..4a5cd43 100644
--- a/js/background.js
+++ b/js/background.js
@@ -18,6 +18,25 @@ var minimized = false;
var activeTabId;
+const categories = {
+ "social": ["facebook.com", "twitter.com", "instagram.com", "chat.openai.com", "linkedin.com", "tiktok.com", "pinterest.com", "reddit.com"],
+ "travel": ["booking.com", "expedia.com", "airbnb.com", "hotels.com", "trivago.it", "trip.com", "hostelworld.com", "lastminute.com", "skyscanner.com", "thetrainline.com", "omio.it", "uber.com", "agoda.com", "edreams.it", "blablacar.com", "blablacar.it"],
+ "news": ["bbc.com", "bbc.co.uk", "cnn.com", "rainews.it", "corriere.it", "repubblica.it", "msn.com", "news.yahoo.com", "aol.com", "ladige.it", "ildolomiti.it"],
+ "education": ["classroom.google.com", "edu.google.com"],
+ "shopping": ["amazon.com", "amazon.it", "amazon.fr", "amazon.de", "ebay.com", "eprice.it", "lafeltrinelli.it", "ibs.it", "mediaworld.it", "euronics.it", "trony.it", "unieuro.it", "justeat.it", "glovoapp.com", "deliveroo.co.uk", "deliveroo.it", "deliveroo.com", "tesco.com", "asda.com", "sainsburys.co.uk", "ah.nl"],
+ "search": ["google.com", "google.it", "google.co.uk", "google.fr", "google.de", "bing.com", "duckduckgo.com", "qwant.com", "baidu.com", "yandex.com", "search.yahoo.com"],
+ "reference": ["wikipedia.org", "wordreference.com", "dictionary.cambridge.org", "treccani.it", "oxfordlearnersdictionaries.com", "emojipedia.org", "affinity.help"],
+ "entertainment": ["youtube.com", "netflix.com", "primevideo.com", "spotify.com", "deezer.com", "disneyplus.com", "imdb.com", "hulu.com"],
+ "adults": ["youporn.com", "pornhub.com", "xnxx.com", "xvideos.com", "xhamster.com", "badoo.com", "grindr.com", "tinder.com", "lovoo.com"],
+ "sav22999": ["saveriomorelli.com", "emojiaddon.com", "savpdfviewer.com"],
+ "develop": ["github.com", "gitlab.com", "addons.mozilla.org", "thunderbird.net", "addons.thunderbird.net", "stackoverflow.com", "w3.org", "w3schools.com", "developer.mozilla.org", "w3docs.com"],
+ "messaging": ["whatsapp.com", "web.whatsapp.com", "telegram.org", "web.telegram.org", "t.me", "signal.com", "kakaocorp.com", "snapchat.com", "wechat.com", "line.me"],
+ "games": ["store.steampowered.com", "ea.com", "ubisoft.com", "instant-gaming.com"],
+ "cloud": ["drive.google.com", "onedrive.live.com", "mega.io", "mega.nz", "pcloud.com", "my.pcloud.com", "icedrive.net", "dropbox.com", "box.com", "sync.com", "nordlocker.com"],
+ "health": ["apss.tn.it", "asmbasilicata.it", "aspbasilicata.it", "salute.gov.it", ""],
+ "other": [] //must remain empty here
+};
+
const linkReview = ["https://addons.mozilla.org/firefox/addon/limite/"]; //{firefox add-ons}
const linkDonate = ["https://www.paypal.me/saveriomorelli", "https://ko-fi.com/saveriomorelli", "https://liberapay.com/Sav22999/donate"]; //{paypal, ko-fi}
const icons = ["icon.png", "icon_disabled.png", "icon_yellow.png", "icon_orange.png", "icon_red.png"];
@@ -27,6 +46,11 @@ function loaded() {
browser.tabs.onActivated.addListener(tabUpdated);
browser.tabs.onUpdated.addListener(tabUpdated);
browser.windows.onFocusChanged.addListener(checkLostFocus);
+
+ //send categories to "all-websites"
+ browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
+ if (message !== undefined && message["from"] === "all-websites" && message["ask"] === "categories") sendResponse({"categories": categories});
+ });
}
function checkLostFocus(windowId) {
@@ -361,41 +385,11 @@ function setBadgeText(text, background_color = "#0080FF", text_color = "#FFFFFF"
browser.browserAction.setBadgeBackgroundColor({color: background_color});
}
-let categories = {
- "social": ["facebook.com", "twitter.com", "instagram.com", "chat.openai.com"],
- "travel": ["booking.com", "expedia.com", "airbnb.com", "hotels.com", "trivago.it"],
- "news": ["bbc.com", "bbc.co.uk", "cnn.com", "rainews.it", "corriere.it", "repubblica.it", "msn.com", "news.yahoo.com", "aol.com", "ladige.it", "ildolomiti.it"],
- "education": ["classroom.google.com", "edu.google.com"],
- "shopping": ["amazon.com", "amazon.it", "amazon.fr", "amazon.de", "ebay.com", "eprice.it", "lafeltrinelli.it", "ibs.it", "mediaworld.it", "euronics.it", "trony.it", "unieuro.it", "justeat.it", "glovoapp.com", "deliveroo.co.uk", "deliveroo.it", "deliveroo.com", "tesco.com", "asda.com", "sainsburys.co.uk", "ah.nl"],
- "search": ["google.com", "google.it", "google.co.uk", "google.fr", "google.de", "bing.com", "duckduckgo.com", "qwant.com", "baidu.com", "yandex.com", "search.yahoo.com"],
- "reference": ["wikipedia.org", "wordreference.com", "dictionary.cambridge.org", "treccani.it", "oxfordlearnersdictionaries.com", "emojipedia.org", "affinity.help"],
- "entertainment": ["youtube.com", "netflix.com", "primevideo.com", "spotify.com", "deezer.com", "disneyplus.com", "imdb.com", "hulu.com"],
- "adults": ["youporn.com", "pornhub.com", "xnxx.com", "xvideos.com", "xhamster.com"],
- "sav22999": ["saveriomorelli.com", "emojiaddon.com", "savpdfviewer.com"],
- "develop": ["github.com", "gitlab.com", "addons.mozilla.org", "thunderbird.net", "addons.thunderbird.net", "stackoverflow.com", "w3.org", "w3schools.com", "developer.mozilla.org", "w3docs.com"],
- "messaging": ["whatsapp.com", "web.whatsapp.com", "telegram.org", "web.telegram.org", "t.me"],
- "games": [],
- "health": ["apss.tn.it"],
- "other": [] //must remain empty here
-};
-
function getCategory(website) {
- let valueToReturn = "";
- if (website in categories["social"]) valueToReturn = "social";
- else if (categories["travel"].includes(website)) valueToReturn = "travel";
- else if (categories["news"].includes(website)) valueToReturn = "news";
- else if (categories["education"].includes(website)) valueToReturn = "education";
- else if (categories["shopping"].includes(website)) valueToReturn = "shopping";
- else if (categories["search"].includes(website)) valueToReturn = "search";
- else if (categories["reference"].includes(website)) valueToReturn = "reference";
- else if (categories["entertainment"].includes(website)) valueToReturn = "entertainment";
- else if (categories["adults"].includes(website)) valueToReturn = "adults";
- else if (categories["sav22999"].includes(website)) valueToReturn = "sav22999";
- else if (categories["develop"].includes(website)) valueToReturn = "develop";
- else if (categories["messaging"].includes(website)) valueToReturn = "messaging";
- else if (categories["games"].includes(website)) valueToReturn = "games";
- else if (categories["health"].includes(website)) valueToReturn = "health";
- else valueToReturn = "other";
+ let valueToReturn = "other";
+ for (item in categories) {
+ if (categories[item].includes(website)) valueToReturn = item;
+ }
//console.log(website + " : " + valueToReturn);//TODO: use for testing websites filter
return valueToReturn;
}
diff --git a/manifest.json b/manifest.json
index 616d991..d107382 100644
--- a/manifest.json
+++ b/manifest.json
@@ -1,7 +1,7 @@
{
"manifest_version": 2,
"name": "Limite",
- "version": "2.0.1",
+ "version": "2.1",
"author": "Saverio Morelli (Sav22999)",
"description": "Check how much time you spend on each website every day.\nOptimise your productivity, your time and your life as well.\nDon't lose precious time!",
"icons": {
diff --git a/screenshots/2.0/2 2.png b/screenshots/2.0/2 2.png
new file mode 100644
index 0000000..668b00d
Binary files /dev/null and b/screenshots/2.0/2 2.png differ
diff --git a/screenshots/2.0/3 2.xcf b/screenshots/2.0/3 2.xcf
new file mode 100644
index 0000000..cf3cb91
Binary files /dev/null and b/screenshots/2.0/3 2.xcf differ
diff --git a/screenshots/2.1/1.png b/screenshots/2.1/1.png
new file mode 100644
index 0000000..52b64b9
Binary files /dev/null and b/screenshots/2.1/1.png differ
diff --git a/screenshots/2.1/1.xcf b/screenshots/2.1/1.xcf
new file mode 100644
index 0000000..d9e6590
Binary files /dev/null and b/screenshots/2.1/1.xcf differ
diff --git a/screenshots/2.1/2.png b/screenshots/2.1/2.png
new file mode 100644
index 0000000..92156e3
Binary files /dev/null and b/screenshots/2.1/2.png differ
diff --git a/screenshots/2.1/2.xcf b/screenshots/2.1/2.xcf
new file mode 100644
index 0000000..a4ad71c
Binary files /dev/null and b/screenshots/2.1/2.xcf differ
diff --git a/screenshots/2.1/3.png b/screenshots/2.1/3.png
new file mode 100644
index 0000000..f271136
Binary files /dev/null and b/screenshots/2.1/3.png differ
diff --git a/screenshots/2.1/3.xcf b/screenshots/2.1/3.xcf
new file mode 100644
index 0000000..cf3cb91
Binary files /dev/null and b/screenshots/2.1/3.xcf differ