diff --git a/Taskfile.yml b/Taskfile.yml index 354a126..5891efb 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -2,9 +2,9 @@ version: '3' vars: DEBUG_PORT: 2345 - REVEALJS_VERSION: 4.1.2 + REVEALJS_VERSION: 4.2.1 HIGHLIGHTJS_VERSION: 11.3.1 - MERMAID_VERSION: 8.13.4 + MERMAID_VERSION: 8.13.6 BINARY_NAME: goveal OUT_DIR: ./out GO_BUILD_ARGS: -ldflags="-w -s" @@ -98,7 +98,7 @@ tasks: - curl -L -o ./assets/reveal/plugin/mouse-pointer/mouse-pointer.js https://raw.githubusercontent.com/caiofcm/plugin-revealjs-mouse-pointer/master/mouse-pointer.js - rm -f ./assets/reveal/plugin/menu/{bower.json,CONTRIBUTING.md,LICENSE,package.json,README.md,.gitignore,gulpfile.js,package-lock.json} - curl -L https://github.com/highlightjs/highlight.js/archive/{{ .HIGHLIGHTJS_VERSION }}.tar.gz | tar -xvz --strip-components=3 -C ./assets/reveal/plugin/highlight --wildcards "*.css" highlight.js-{{ .HIGHLIGHTJS_VERSION }}/src/styles/ - - curl -L https://github.com/mermaid-js/mermaid/archive/refs/tags/{{ .MERMAID_VERSION }}.tar.gz | tar -xvz -C ./assets/mermaid/ mermaid-{{ .MERMAID_VERSION }}/dist --strip-components=2 + - curl -L https://registry.npmjs.org/mermaid/-/mermaid-{{ .MERMAID_VERSION }}.tgz | tar -xvz -C ./assets/mermaid/ package/dist --strip-components=2 go-get-tool: vars: diff --git a/cmd/goveal/serve.go b/cmd/goveal/serve.go index c4fd3af..3d94658 100644 --- a/cmd/goveal/serve.go +++ b/cmd/goveal/serve.go @@ -2,10 +2,13 @@ package main import ( "encoding/hex" + "fmt" "hash/fnv" "net/http" + "os/exec" "path" "path/filepath" + "runtime" "github.com/gofiber/fiber/v2" "github.com/gofiber/template/html" @@ -20,10 +23,18 @@ import ( "github.com/baez90/goveal/web" ) +const ( + defaultListeningPort uint16 = 3000 + defaultHost = "127.0.0.1" +) + var ( - workingDir string - cfg *config.Components - serveCmd = &cobra.Command{ + workingDir string + cfg *config.Components + host string + port uint16 + openBrowser bool + serveCmd = &cobra.Command{ Use: "serve", Args: cobra.ExactArgs(1), RunE: func(_ *cobra.Command, args []string) (err error) { @@ -47,6 +58,10 @@ var ( h := fnv.New32a() return hex.EncodeToString(h.Sum([]byte(path.Base(fileName)))) }), + AppName: "goveal", + GETOnly: true, + DisableStartupMessage: true, + StreamRequestBody: true, }) hub := events.NewEventHub( wdfs, @@ -63,11 +78,38 @@ var ( return err } - return app.Listen(":3000") + if openBrowser { + log.Info("Opening browser...") + openBrowserInBackground(fmt.Sprintf("http://%s:%d", host, port)) + } + + log.Infof("Listening on %s:%d", host, port) + return app.Listen(fmt.Sprintf("%s:%d", host, port)) }, } ) func init() { + serveCmd.Flags().Uint16Var(&port, "port", defaultListeningPort, "port to listen on") + serveCmd.Flags().StringVar(&host, "host", defaultHost, "address/hostname to bind on") + serveCmd.Flags().BoolVar(&openBrowser, "open-browser", true, "Open browser when starting") rootCmd.AddCommand(serveCmd) } + +func openBrowserInBackground(url string) { + var err error + + switch runtime.GOOS { + case "linux": + err = exec.Command("xdg-open", url).Start() + case "windows": + err = exec.Command("rundll32", "url.dll,FileProtocolHandler", url).Start() + case "darwin": + err = exec.Command("open", url).Start() + default: + err = fmt.Errorf("unsupported platform") + } + if err != nil { + log.Warn(err) + } +} diff --git a/config/components.go b/config/components.go index e9c2027..a7024c8 100644 --- a/config/components.go +++ b/config/components.go @@ -4,6 +4,8 @@ var defaults = map[string]interface{}{ "mermaid.theme": "forest", "theme": "beige", "codeTheme": "monokai", + "verticalSeparator": `\*\*\*`, + "horizontalSeparator": `---`, "transition": TransitionNone, "controlsLayout": ControlsLayoutEdges, "controls": true, diff --git a/examples/slides.md b/examples/slides.md index f507a15..eecff37 100644 --- a/examples/slides.md +++ b/examples/slides.md @@ -91,7 +91,7 @@ for (var j = 0; j < i; j++) { ### Mermaid ```mermaid -%%{init: {'theme': 'dark'}}%% +%%{init: {'theme': 'neutral'}}%% flowchart LR a --> b & c--> d ``` @@ -101,7 +101,6 @@ flowchart LR ### The inadequacy of a non-highlighted being {line-numbers="1-2|3|4"} - ```js let a = 1; let b = 2;