From e39a8a55a9990140941c31500b29b9ef638b158f Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Fri, 3 May 2019 14:06:16 +0200 Subject: [PATCH] htmldoc: add the ability to choose the skin skinselector hidden when JS is disabled or when printed --- src/Makefile | 2 +- src/generatedoc.c | 78 +++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 77 insertions(+), 3 deletions(-) diff --git a/src/Makefile b/src/Makefile index 3a47dc12..af4f9ead 100644 --- a/src/Makefile +++ b/src/Makefile @@ -1234,7 +1234,7 @@ doxygen: htmldoc: $(GENERATEDOCBIN) $(MKDIR) ../doc/html - $(CP) ../share/grafx2/skins/skin_classic.png ../doc/html + $(CP) $(filter ../share/grafx2/skins/skin%.png,$(SKIN_FILES)) ../doc/html $(GENERATEDOCBIN) ../doc/html print-%: diff --git a/src/generatedoc.c b/src/generatedoc.c index 50ea5873..bf3939bf 100644 --- a/src/generatedoc.c +++ b/src/generatedoc.c @@ -38,6 +38,16 @@ static T_Toolbar_button Buttons[NB_BUTTONS]; +/// available skins +const char * const skins[] = { + "classic", + "modern", + "DPaint", + "scenish", + "Aurora", + NULL +}; + /// /// Export the help to HTML files static int Export_help(const char * path); @@ -186,6 +196,7 @@ static const char * Export_help_table(FILE * f, unsigned int page) fprintf(f, "%s\n", title); fprintf(f, "\n"); fprintf(f, "\n"); + fprintf(f, "\n"); fprintf(f, "\n"); fprintf(f, "\n"); @@ -199,7 +210,7 @@ static const char * Export_help_table(FILE * f, unsigned int page) fprintf(f, "Next\n", page + 1); fprintf(f, ""); fprintf(f, "\n"); - fprintf(f, "
"); + fprintf(f, "
"); for (index = 0; index < length; index++) { if (table[index].Line_type == '-') @@ -326,9 +337,21 @@ static int Export_help(const char * path) fprintf(findex, "GrafX2 Help\n"); fprintf(findex, "\n"); fprintf(findex, "\n"); + fprintf(findex, "\n"); + fprintf(findex, "\n"); fprintf(findex, "\n"); fprintf(findex, "\n"); + fprintf(findex, "
\n"); + fprintf(findex, "
\n"); + fprintf(findex, "Choose your skin :\n"); + for (i = 0; skins[i] != NULL; i++) + { + fprintf(findex, "%s\n", skins[i], skins[i]); + } + fprintf(findex, "
\n"); fprintf(findex, "
"); fprintf(findex, "
    \n"); @@ -357,6 +380,7 @@ static int Export_help(const char * path) fprintf(findex, "\n"); } fprintf(findex, "
\n"); + fprintf(findex, "
\n"); fprintf(findex, "\n"); fclose(findex); @@ -370,10 +394,60 @@ static int Export_help(const char * path) fprintf(f, "}\n"); fprintf(f, "div.button {\n"); fprintf(f, "display: inline-block;\n"); - fprintf(f, "background-image: url(\"skin_classic.png\");\n"); fprintf(f, "width: 16px;\n"); fprintf(f, "height: 16px;\n"); fprintf(f, "}\n"); + for (i = 0; skins[i] != NULL; i++) + { + fprintf(f, ".skin_%s .button {\n", skins[i]); + fprintf(f, "background-image: url(\"skin_%s.png\");\n", skins[i]); + fprintf(f, "}\n"); + } + fprintf(f, "@media print {\n"); + fprintf(f, " .skinselector {\n"); + fprintf(f, " display: none;\n"); + fprintf(f, " }\n"); + fprintf(f, " body {\n"); + fprintf(f, " -webkit-print-color-adjust: exact; /*Chrome, Safari */\n"); + fprintf(f, " color-adjust: exact; /*Firefox*/\n"); + fprintf(f, " }\n"); + fprintf(f, "}\n"); + fclose(f); + } + + snprintf(filename, sizeof(filename), "%s/grafx2.js", path); + f = fopen(filename, "w"); + if (f != NULL) + { + fprintf(f, "function setCookie(cname, cvalue) {\n" + " document.cookie = cname + '=' + cvalue /*+ ';path=/'*/;\n" + "}\n"); + fprintf(f, "function getCookie(cname) {\n" + " var name = cname + '=';\n" + " var ca = decodeURIComponent(document.cookie).split(';');\n" + " for (var i = 0; i < ca.length; i++) {\n" + " var c = ca[i];\n" + " while (c.charAt(0) == ' ') c = c.substring(1);\n" + " if (c.indexOf(name) == 0) {\n" + " return c.substring(name.length);\n" + " }\n" + " }\n" + " return '';\n" + "}\n"); + fprintf(f, "function change_skin(newskin) {\n" + " var elts = document.getElementsByClassName('skin');\n" + " for (var i = 0; i < elts.length; i++) {\n" + " elts[0].className = elts[0].className.replace(/skin_.*/, newskin);\n" + " }\n" + "}\n"); + fprintf(f, "function choose_skin(skin) {\n" + " setCookie('skin', skin);\n" + " change_skin('skin_' + skin);\n" + "}\n"); + fprintf(f, "window.onload = function () {\n" + " var skin = getCookie('skin');\n" + " if (skin != '') choose_skin(skin);\n" + "}\n"); fclose(f); } return 0;