diff options
| author | Shulhan <ms@kilabit.info> | 2025-01-06 02:54:52 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2025-01-07 00:13:55 +0700 |
| commit | 85ae94f62b75372943a8ffdd705ce932a7849a8d (patch) | |
| tree | ff55363d9e47729ce5d3c0be9fafa54d2cbd2e30 /converter.go | |
| parent | 6593f4d2069790c73595f14b3312a8d83e61760e (diff) | |
| download | ciigo-85ae94f62b75372943a8ffdd705ce932a7849a8d.tar.xz | |
all: auto convert markup when HTTP client request GET to HTML file
In development mode, where [ServeOptions.IsDevelopment] is set to true
or when running "ciigo serve", the ciigo HTTP server will check if the
new markup file is newer than HTML file when user press refresh or
reload on the browser.
If its newer, it will convert the markup file and return the new content
of HTML file.
Diffstat (limited to 'converter.go')
| -rw-r--r-- | converter.go | 62 |
1 files changed, 43 insertions, 19 deletions
diff --git a/converter.go b/converter.go index da1aa8e..57695e7 100644 --- a/converter.go +++ b/converter.go @@ -84,29 +84,13 @@ func (converter *Converter) convertFileMarkups(fileMarkups map[string]*FileMarku var ( logp = `convertFileMarkups` - fmarkup *FileMarkup - htmlInfo os.FileInfo - htmlModtime time.Time - err error - skip bool + fmarkup *FileMarkup + err error ) for _, fmarkup = range fileMarkups { - skip = true if !isForce { - htmlInfo, _ = os.Stat(fmarkup.pathHTML) - if htmlInfo == nil { - // HTML file may not exist. - skip = false - } else { - htmlModtime = htmlInfo.ModTime() - if converter.htmlTemplateModtime.After(htmlModtime) { - skip = false - } else if fmarkup.info.ModTime().After(htmlModtime) { - skip = false - } - } - if skip { + if !converter.shouldConvert(fmarkup) { continue } } @@ -230,3 +214,43 @@ func (converter *Converter) markdownToHTML(fmarkup *FileMarkup) (fhtml *fileHTML return fhtml, nil } + +// shouldConvert will return true if the file markup fmarkup needs to be +// converted to HTML. +// It return true if the HTML file not exist or the template or markup file is +// newer than the HTML file. +func (converter *Converter) shouldConvert(fmarkup *FileMarkup) bool { + var fi os.FileInfo + fi, _ = os.Stat(fmarkup.pathHTML) + if fi == nil { + // HTML file may not exist. + return true + } + + var htmlModtime = fi.ModTime() + var err error + + if len(converter.htmlTemplate) != 0 { + fi, err = os.Stat(converter.htmlTemplate) + if err != nil { + // The template file may has been deleted. + return true + } + + if fi.ModTime().After(htmlModtime) { + converter.htmlTemplateModtime = fi.ModTime() + return true + } + } + + fi, err = os.Stat(fmarkup.path) + if err != nil { + // The markup file may has been deleted. + return false + } + if fi.ModTime().After(htmlModtime) || fmarkup.info.Size() != fi.Size() { + fmarkup.info = fi + return true + } + return false +} |
