diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml
index 9a6f29a..f8a509b 100644
--- a/.idea/watcherTasks.xml
+++ b/.idea/watcherTasks.xml
@@ -22,7 +22,7 @@
-
+
diff --git a/www/data/css/styles.css b/www/data/css/styles.css
index 685f6c8..b722316 100644
--- a/www/data/css/styles.css
+++ b/www/data/css/styles.css
@@ -782,6 +782,26 @@ html, body {
text-align: left;
}
+.egg_col_x5_0 {
+ fill: #eeeeee;
+}
+
+.egg_col_x5_1 {
+ fill: #6bcdff;
+}
+
+.egg_col_x5_2 {
+ fill: #00a1f3;
+}
+
+.egg_col_x5_3 {
+ fill: #0079b7;
+}
+
+.egg_col_x5_4 {
+ fill: #003958;
+}
+
/* 400px */
.admincontent {
display: block;
diff --git a/www/data/css/styles.min.css b/www/data/css/styles.min.css
index 7b6e35d..d30e097 100644
--- a/www/data/css/styles.min.css
+++ b/www/data/css/styles.min.css
@@ -152,6 +152,11 @@ html,body{margin:0;padding:0;height:100%}
.about_circles{display:flex;flex-direction:column}
.about_circles a{margin:5px 0}
.about_circles .iconbutton_light span{text-align:left}
+.egg_col_x5_0{fill:#eee}
+.egg_col_x5_1{fill:#6bcdff}
+.egg_col_x5_2{fill:#00a1f3}
+.egg_col_x5_3{fill:#0079b7}
+.egg_col_x5_4{fill:#003958}
.admincontent{display:block;width:100%}
.admincontent .boxedcontent{margin-bottom:20px}
.egh_ajaxOutput{display:flex;box-sizing:border-box;width:100%;align-self:center;margin-left:auto;margin-right:auto;resize:none;height:300px}
diff --git a/www/data/css/styles_about.scss b/www/data/css/styles_about.scss
index 54e1a26..c2eabcc 100644
--- a/www/data/css/styles_about.scss
+++ b/www/data/css/styles_about.scss
@@ -110,4 +110,82 @@
.iconbutton_light span {text-align: left;}
+}
+
+@if $CFG_EGG_THEME == 'standard'
+{
+ // ==== STANDARD ====
+ .egg_col_x5_0 { fill: #ebedf0; }
+ .egg_col_x5_1 { fill: #c6e48b; }
+ .egg_col_x5_2 { fill: #7bc96f; }
+ .egg_col_x5_3 { fill: #239a3b; }
+ .egg_col_x5_4 { fill: #196127; }
+}
+@elseif $CFG_EGG_THEME == 'modern'
+{
+ .egg_col_x5_0 { fill: #afaca8; }
+ .egg_col_x5_1 { fill: #d6e685; }
+ .egg_col_x5_2 { fill: #8cc665; }
+ .egg_col_x5_3 { fill: #44a340; }
+ .egg_col_x5_4 { fill: #1e6823; }
+}
+@elseif $CFG_EGG_THEME == 'gray'
+{
+ .egg_col_x5_0 { fill: #eeeeee; }
+ .egg_col_x5_1 { fill: #bdbdbd; }
+ .egg_col_x5_2 { fill: #9e9e9e; }
+ .egg_col_x5_3 { fill: #616161; }
+ .egg_col_x5_4 { fill: #212121; }
+}
+@elseif $CFG_EGG_THEME == 'red'
+{
+ .egg_col_x5_0 { fill: #eeeeee; }
+ .egg_col_x5_1 { fill: #ff7171; }
+ .egg_col_x5_2 { fill: #ff0000; }
+ .egg_col_x5_3 { fill: #b70000; }
+ .egg_col_x5_4 { fill: #830000; }
+}
+@elseif $CFG_EGG_THEME == 'blue'
+{
+ .egg_col_x5_0 { fill: #eeeeee; }
+ .egg_col_x5_1 { fill: #6bcdff; }
+ .egg_col_x5_2 { fill: #00a1f3; }
+ .egg_col_x5_3 { fill: #0079b7; }
+ .egg_col_x5_4 { fill: #003958; }
+}
+@elseif $CFG_EGG_THEME == 'purple'
+{
+ .egg_col_x5_0 { fill: #eeeeee; }
+ .egg_col_x5_1 { fill: #d2ace6; }
+ .egg_col_x5_2 { fill: #aa66cc; }
+ .egg_col_x5_3 { fill: #660099; }
+ .egg_col_x5_4 { fill: #4f2266; }
+}
+@elseif $CFG_EGG_THEME == 'orange'
+{
+ .egg_col_x5_0 { fill: #eeeeee; }
+ .egg_col_x5_1 { fill: #ffcc80; }
+ .egg_col_x5_2 { fill: #ffa726; }
+ .egg_col_x5_3 { fill: #fb8c00; }
+ .egg_col_x5_4 { fill: #e65100; }
+}
+@elseif $CFG_EGG_THEME == 'halloween'
+{
+ .egg_col_x5_0 { fill: #eeeeee; }
+ .egg_col_x5_1 { fill: #ffee4a; }
+ .egg_col_x5_2 { fill: #ffc501; }
+ .egg_col_x5_3 { fill: #fe9600; }
+ .egg_col_x5_4 { fill: #03001c; }
+}
+@elseif $CFG_EGG_THEME == 'custom'
+{
+ .egg_col_x9_0 { fill: #F5F5F5; }
+ .egg_col_x9_1 { fill: #DBDEE0; }
+ .egg_col_x9_2 { fill: #C2C7CB; }
+ .egg_col_x9_3 { fill: #AAB0B7; }
+ .egg_col_x9_4 { fill: #9099A2; }
+ .egg_col_x9_5 { fill: #77828E; }
+ .egg_col_x9_6 { fill: #5E6B79; }
+ .egg_col_x9_7 { fill: #455464; }
+ .egg_col_x9_8 { fill: #2C3E50; }
}
\ No newline at end of file
diff --git a/www/data/css/styles_config.scss b/www/data/css/styles_config.scss
index 36fd56d..21e7ffd 100644
--- a/www/data/css/styles_config.scss
+++ b/www/data/css/styles_config.scss
@@ -1,3 +1,8 @@
+
+$CFG_EGG_THEME: 'blue';
+
+// ------------------------------------
+
$FONT_HEADER: Lato, "Helvetica Neue", Helvetica, Arial, sans-serif;
$FONT_CODE: Consolas, Monaco, "Courier New", Menlo, monospace;
$FONT_DEFAULT: 'Times New Roman', serif;
diff --git a/www/data/javascript/egh.js b/www/data/javascript/egh.js
deleted file mode 100644
index 05b20c3..0000000
--- a/www/data/javascript/egh.js
+++ /dev/null
@@ -1,57 +0,0 @@
-function formatDate(date) {
- const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
- const days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
-
- let wday = days[date.getDay()];
- let day = date.getDate();
- let monthIndex = date.getMonth();
- let year = date.getFullYear();
-
- let suffix = 'th';
- if (day === 1) suffix = 'st';
- if (day === 2) suffix = 'nd';
- if (day === 3) suffix = 'rd';
-
- return wday + ' ' + day + suffix + ' ' + monthNames[monthIndex] + ', ' + year;
-}
-
-window.addEventListener("load",function ()
-{
- let svgtips = document.getElementsByClassName("svg-tip");
- let rects = document.getElementsByClassName("egg_rect");
-
- let masterTip = null;
-
- for (let tip of svgtips)
- {
- tip.style.opacity = '1';
- tip.style.display = 'none';
-
- masterTip = tip;
- }
-
- let masterTipHeader = masterTip.getElementsByTagName('strong')[0];
- let masterTipContent = masterTip.getElementsByTagName('span')[0];
-
- for (let rect of rects)
- {
- rect.addEventListener("mouseenter", function(event)
- {
- let datesplit = event.target.getAttribute('data-date').split('-');
- let count = event.target.getAttribute('data-count');
- let date = new Date(Number(datesplit[0]), Number(datesplit[1])-1, Number(datesplit[2]));
-
- masterTip.style.display = 'block';
-
- masterTipHeader.innerHTML = count + ' commits';
- masterTipContent.innerHTML = ' on ' + formatDate(date);
-
- masterTip.style.left = (window.pageXOffset + event.target.getBoundingClientRect().left - masterTip.getBoundingClientRect().width /2 - 3.5 + 9) + 'px';
- masterTip.style.top = (window.pageYOffset + event.target.getBoundingClientRect().top - masterTip.getBoundingClientRect().height -10) + 'px';
- });
- rect.addEventListener("mouseleave", function(event)
- {
- masterTip.style.display = 'none';
- });
- }
-},false);
\ No newline at end of file
diff --git a/www/data/javascript/extendedgitgraph.js b/www/data/javascript/extendedgitgraph.js
new file mode 100644
index 0000000..57d8808
--- /dev/null
+++ b/www/data/javascript/extendedgitgraph.js
@@ -0,0 +1,30 @@
+"use strict";
+var ExtendedGitGraph2;
+(function (ExtendedGitGraph2) {
+ function initHover() {
+ const allsvgtips = Array.from(document.getElementsByClassName("svg-tip"));
+ if (allsvgtips.length == 0)
+ return;
+ const masterTip = allsvgtips[0];
+ masterTip.style.opacity = '1';
+ masterTip.style.display = 'none';
+ const masterTipHeader = masterTip.getElementsByTagName('strong')[0];
+ const masterTipContent = masterTip.getElementsByTagName('span')[0];
+ const rects = Array.from(document.getElementsByClassName("egg_rect"));
+ for (let rect of rects) {
+ rect.addEventListener("mouseenter", event => {
+ const target = event.target;
+ let count = target.getAttribute('data-count');
+ let date = target.getAttribute('data-date');
+ masterTip.style.display = 'block';
+ masterTipHeader.innerHTML = count + ' commits';
+ masterTipContent.innerHTML = ' on ' + date;
+ masterTip.style.left = (window.pageXOffset + target.getBoundingClientRect().left - masterTip.getBoundingClientRect().width / 2 - 3.5 + 9) + 'px';
+ masterTip.style.top = (window.pageYOffset + target.getBoundingClientRect().top - masterTip.getBoundingClientRect().height - 10) + 'px';
+ });
+ rect.addEventListener("mouseleave", _ => masterTip.style.display = 'none');
+ }
+ }
+ ExtendedGitGraph2.initHover = initHover;
+})(ExtendedGitGraph2 || (ExtendedGitGraph2 = {}));
+window.onload = () => { ExtendedGitGraph2.initHover(); };
\ No newline at end of file
diff --git a/www/pages/about.php b/www/pages/about.php
index 706750b..cec20cf 100644
--- a/www/pages/about.php
+++ b/www/pages/about.php
@@ -11,7 +11,7 @@ global $OPTIONS;
-
+