From a6a35361ac143fe314dce9871d077cf6ea228ac6 Mon Sep 17 00:00:00 2001 From: Michael Knox <109655+mikeknox@users.noreply.github.com> Date: Sun, 4 Feb 2024 15:43:40 +1100 Subject: [PATCH] add template slide option --- .gitignore | 1 + README.md | 15 +++++++++++++-- cli.go | 9 +++++++++ server.go | 23 ++++++++++++++++++++++- version.go | 2 +- 5 files changed, 46 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 1e45af6..33c71f2 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,4 @@ cover.out original.css .vscode/ dist/ +/revealgo \ No newline at end of file diff --git a/README.md b/README.md index 9b01e49..f7fdd84 100644 --- a/README.md +++ b/README.md @@ -43,10 +43,13 @@ Available options: -p, --port TCP port number of this server (default: 3000) --theme Slide theme or original css file name. default themes: beige, black, blood, league, moon, night, serif, simple, sky, solarized, and white (default: black.css) +--template Custom HTML template file name. default template: slide +--disable-auto-open Disable automatic opening of the browser --transition Transition effect for slides: default, cube, page, concave, zoom, linear, fade, none (default: default) --separator Horizontal slide separator characters (default: ^---) --vertical-separator Vertical slide separator characters (default: ^___) ---multiplex Enable slide multiplex +--multiplex Enable slide multiplexing +-v, --version Show the version ``` ### Screenshots @@ -59,7 +62,7 @@ Open the server address with your web browser: ![Slides](https://cloud.githubusercontent.com/assets/10682/12741672/f9cda548-c9c1-11e5-9c21-fcaf1af3cdf4.png) -### Sample Makrdown +### Sample Markdown ```text ## This is an H2 Title @@ -111,6 +114,14 @@ $ curl http://localhost:3000/ > slide.html Edit `slide.html`, and then open `http://localhost:3000/slide.html` with your browser. A slide with the modified configurations will come up. +### Customize Slide template + +A custom `slide.html` can also be provided using the `--template` option, or putting a `slide.html` next to your custom theme file. +This allows you to use templating within your `slide.html` + +You could use the `slide.html` output from your localhost, or grab a copy of the orignal asset to use as the base. +This can be obtained from: + ### Using slide multiplex > The multiplex plugin allows your audience to follow the slides of the diff --git a/cli.go b/cli.go index 4e7c3d3..f974b90 100644 --- a/cli.go +++ b/cli.go @@ -24,6 +24,7 @@ type CLI struct { type CLIOptions struct { Port int `short:"p" long:"port" description:"TCP port number of this server" default:"3000"` Theme string `long:"theme" description:"Slide theme or original css file name. default themes: beige, black, blood, league, moon, night, serif, simple, sky, solarized, and white" default:"black.css"` + Template string `long:"template" description:"Custom HTML template file name. default template: slide"` DisableAutoOpen bool `long:"disable-auto-open" description:"Disable automatic opening of the browser"` Transition string `long:"transition" description:"Transition effect for slides: default, cube, page, concave, zoom, linear, fade, none" default:"default"` Separator string `long:"separator" description:"Horizontal slide separator characters" default:"^---"` @@ -79,14 +80,22 @@ func (cli *CLI) serve(args []string) { originalTheme = true } + _, err = os.Stat(opts.Template) + originalTemplate := false + if err == nil { + originalTemplate = true + } + server := Server{ port: opts.Port, } param := ServerParam{ Path: args[0], Theme: addExtention(opts.Theme, "css"), + Template: addExtention(opts.Template, "html"), Transition: opts.Transition, OriginalTheme: originalTheme, + OriginalTemplate: originalTemplate, DisableAutoOpen: opts.DisableAutoOpen, Separator: opts.Separator, VerticalSeparator: opts.VerticalSeparator, diff --git a/server.go b/server.go index 41a8e47..e577ef2 100644 --- a/server.go +++ b/server.go @@ -5,6 +5,7 @@ import ( "fmt" "log" "net/http" + "os" "path/filepath" "text/template" @@ -36,6 +37,8 @@ type ServerParam struct { Path string Theme string OriginalTheme bool + Template string + OriginalTemplate bool DisableAutoOpen bool Transition string Separator string @@ -144,7 +147,25 @@ func contentHandler(params ServerParam, h http.Handler) http.Handler { return } - tmpl, err := template.New("slide template").Parse(slideTemplate) + useTemplate := slideTemplate + + if params.OriginalTemplate || params.OriginalTheme { + var errOpenTempl error + var templByteStream []byte + if params.Template != ".html" { + templByteStream, errOpenTempl = os.ReadFile(params.Template) + } else { + tryTemplateFile := fmt.Sprintf("%s/slide.html", filepath.Dir(params.Theme)) + templByteStream, errOpenTempl = os.ReadFile(tryTemplateFile) + } + if errOpenTempl != nil { + log.Printf("error:%v", errOpenTempl) + http.NotFound(w, r) + return + } + useTemplate = string(templByteStream) + } + tmpl, err := template.New("slide template").Parse(useTemplate) if err != nil { log.Printf("error:%v", err) http.NotFound(w, r) diff --git a/version.go b/version.go index 676392b..47f4d65 100644 --- a/version.go +++ b/version.go @@ -1,3 +1,3 @@ package revealgo -var Version string = "v1.2.2" +var Version string = "v1.3.0"