diff --git a/tools/cdata.js b/tools/cdata.js
index 561d390ef8..5e2bd45ac5 100644
--- a/tools/cdata.js
+++ b/tools/cdata.js
@@ -224,6 +224,8 @@ writeHtmlGzipped("wled00/data/simple.htm", "wled00/html_simple.h", 'simple');
writeHtmlGzipped("wled00/data/pixart/pixart.htm", "wled00/html_pixart.h", 'pixart');
writeHtmlGzipped("wled00/data/cpal/cpal.htm", "wled00/html_cpal.h", 'cpal');
writeHtmlGzipped("wled00/data/pxmagic/pxmagic.htm", "wled00/html_pxmagic.h", 'pxmagic');
+writeHtmlGzipped("wled00/data/gifplayer/gifplayer.htm", "wled00/html_gifplayer.h", 'gifplayer');
+
/*
writeChunks(
"wled00/data",
@@ -247,7 +249,8 @@ writeChunks(
filter: "html-minify-ui",
}
],
- "wled00/html_simplex.h"
+ "wled00/html_simplex.h",
+ "wled00/html_gifplayer.h"
);
*/
writeChunks(
diff --git a/wled00/data/gifplayer/gifplayer.htm b/wled00/data/gifplayer/gifplayer.htm
new file mode 100644
index 0000000000..d069a02420
--- /dev/null
+++ b/wled00/data/gifplayer/gifplayer.htm
@@ -0,0 +1,1335 @@
+
+
+
+
+
+ GIF Player
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Right click/long press image for more options
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/wled00/data/index.htm b/wled00/data/index.htm
index 57fca4cf8e..d36d4abe84 100644
--- a/wled00/data/index.htm
+++ b/wled00/data/index.htm
@@ -185,6 +185,9 @@
+
+
+
Color palette
diff --git a/wled00/data/index.js b/wled00/data/index.js
index 2c1f143ae1..875bb39150 100644
--- a/wled00/data/index.js
+++ b/wled00/data/index.js
@@ -205,7 +205,9 @@ function loadSkinCSS(cId)
h.appendChild(l);
}
}
-
+function getURL(path) {
+ return (loc ? locproto + "//" + locip : "") + path;
+}
function onLoad()
{
if (window.location.protocol == "file:") {
diff --git a/wled00/wled_server.cpp b/wled00/wled_server.cpp
index b6e786e6d0..1ca903c563 100644
--- a/wled00/wled_server.cpp
+++ b/wled00/wled_server.cpp
@@ -9,6 +9,11 @@
#ifdef WLED_ENABLE_PIXART
#include "html_pixart.h"
#endif
+#ifdef WLED_ENABLE_GIF
+ #ifndef WLED_DISABLE_GIFPLAYER
+ #include "html_gifplayer.h"
+ #endif
+#endif
#include "html_cpal.h"
/*
@@ -410,6 +415,20 @@ void initServer()
});
#endif
+#ifdef WLED_ENABLE_GIF
+ #ifndef WLED_DISABLE_GIFPLAYER
+ static const char _gifplayer_htm[] PROGMEM = "/gifplayer.htm";
+ server.on(_gifplayer_htm, HTTP_GET, [](AsyncWebServerRequest *request) {
+ if (handleFileRead(request, _gifplayer_htm)) return;
+ if (handleIfNoneMatchCacheHeader(request)) return;
+ AsyncWebServerResponse *response = request->beginResponse_P(200, "text/html", PAGE_gifplayer, PAGE_gifplayer_L);
+ response->addHeader(FPSTR(s_content_enc),"gzip");
+ setStaticContentCacheHeaders(response);
+ request->send(response);
+ });
+ #endif
+#endif
+
server.on("/cpal.htm", HTTP_GET, [](AsyncWebServerRequest *request){
if (handleFileRead(request, "/cpal.htm")) return;
if (handleIfNoneMatchCacheHeader(request)) return;