mirror of
https://github.com/thebaer/cdr.git
synced 2024-11-15 01:31:01 +00:00
Use Go's embed pkg instead of inline tool
This moves the minimum requirements to Go 1.16 to build this project.
This commit is contained in:
parent
827bb0d0a2
commit
16e4510d9d
@ -38,6 +38,10 @@ You can also tweak the original template _before_ it generates the final page.
|
|||||||
1. Edit this file to your liking, being sure to retain the `{{template ...}}` lines in the file
|
1. Edit this file to your liking, being sure to retain the `{{template ...}}` lines in the file
|
||||||
1. Run `cdr burn` -- it'll generate your page from this template instead of the default!
|
1. Run `cdr burn` -- it'll generate your page from this template instead of the default!
|
||||||
|
|
||||||
|
### Developers
|
||||||
|
|
||||||
|
Requires Go 1.16 and above.
|
||||||
|
|
||||||
## Commands
|
## Commands
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -59,4 +63,4 @@ COMMANDS:
|
|||||||
GLOBAL OPTIONS:
|
GLOBAL OPTIONS:
|
||||||
--help, -h show help (default: false)
|
--help, -h show help (default: false)
|
||||||
--version, -v print the version (default: false)
|
--version, -v print the version (default: false)
|
||||||
```
|
```
|
||||||
|
2
go.mod
2
go.mod
@ -1,6 +1,6 @@
|
|||||||
module github.com/thebaer/cdr
|
module github.com/thebaer/cdr
|
||||||
|
|
||||||
go 1.13
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/dhowden/tag v0.0.0-20201120070457-d52dcb253c63
|
github.com/dhowden/tag v0.0.0-20201120070457-d52dcb253c63
|
||||||
|
14
render.go
14
render.go
@ -1,8 +1,7 @@
|
|||||||
//go:generate inline -o templates.go -p cdr mixtape.tmpl templates/parts.tmpl
|
|
||||||
|
|
||||||
package cdr
|
package cdr
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
_ "embed"
|
||||||
"html/template"
|
"html/template"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
@ -10,17 +9,10 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func Render(m *Mixtape, w io.Writer) error {
|
func Render(m *Mixtape, w io.Writer) error {
|
||||||
partsRawTmpl, err := ReadAsset("templates/parts.tmpl", false)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
mixtapeRawTmpl, err := ioutil.ReadFile("mixtape.tmpl")
|
mixtapeRawTmpl, err := ioutil.ReadFile("mixtape.tmpl")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Print("Unable to load local mixtape.tmpl; falling back to default")
|
log.Print("Unable to load custom mixtape.tmpl; falling back to default")
|
||||||
mixtapeRawTmpl, err = ReadAsset("mixtape.tmpl", false)
|
mixtapeRawTmpl = defaultMixtapeTmpl
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
log.Print("Generating from local mixtape.tmpl")
|
log.Print("Generating from local mixtape.tmpl")
|
||||||
}
|
}
|
||||||
|
148
templates.go
148
templates.go
@ -1,149 +1,11 @@
|
|||||||
// Code generated by "inline -o templates.go -p cdr mixtape.tmpl templates/parts.tmpl" -- DO NOT EDIT --
|
|
||||||
|
|
||||||
package cdr
|
package cdr
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
_ "embed"
|
||||||
"io/ioutil"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func ReadAsset(file string, useLocal bool) ([]byte, error) {
|
//go:embed mixtape.tmpl
|
||||||
if useLocal {
|
var defaultMixtapeTmpl []byte
|
||||||
return ioutil.ReadFile(file)
|
|
||||||
}
|
|
||||||
if f, ok := files[file]; ok {
|
|
||||||
return []byte(f), nil
|
|
||||||
}
|
|
||||||
return nil, fmt.Errorf("file doesn't exist.")
|
|
||||||
}
|
|
||||||
|
|
||||||
var files = map[string]string{
|
//go:embed templates/parts.tmpl
|
||||||
"mixtape.tmpl": `{{define "mixtape"}}
|
var partsRawTmpl []byte
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>Mixtape</title>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
||||||
<style type="text/css">
|
|
||||||
body {
|
|
||||||
font-size: 1.2em;
|
|
||||||
margin: 1em;
|
|
||||||
}
|
|
||||||
#playlist {
|
|
||||||
list-style: decimal-leading-zero;
|
|
||||||
margin: 1em 0;
|
|
||||||
}
|
|
||||||
#playlist li {
|
|
||||||
margin: 0.5em 0;
|
|
||||||
}
|
|
||||||
li p {
|
|
||||||
display: none;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
li.active a {
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
li.active p {
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
{{template "full-player" .Tracks}}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{define "track-info"}}
|
|
||||||
{{if eq .Num 1}}
|
|
||||||
<p>[Here I might introduce this mix.]</p>
|
|
||||||
<p>[Some notes about track 1.]</p>
|
|
||||||
{{else if eq .Num 2}}
|
|
||||||
<p>[Some notes about track 2.]</p>
|
|
||||||
{{else if eq .Num 5}}
|
|
||||||
<p>[Some notes about track 5.]</p>
|
|
||||||
{{end}}
|
|
||||||
{{end}}`,
|
|
||||||
"templates/parts.tmpl": `{{define "player"}}
|
|
||||||
{{with $x := index . 0}}
|
|
||||||
<audio id="player" preload="auto" tabindex="0" controls>
|
|
||||||
<source src="{{$x.Filename}}">
|
|
||||||
</audio>
|
|
||||||
{{end}}
|
|
||||||
{{end}}
|
|
||||||
{{define "playlist"}}
|
|
||||||
<ol id="playlist">
|
|
||||||
{{range $i, $el := .}}
|
|
||||||
<li{{if eq $i 0}} class="active"{{end}}>
|
|
||||||
<a class="track" href="{{$el.Filename}}">{{$el.Artist}} - {{$el.Title}}</a>
|
|
||||||
{{template "track-info" $el}}
|
|
||||||
</li>
|
|
||||||
{{end}}
|
|
||||||
</ol>
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{define "track-info"}}{{end}}
|
|
||||||
|
|
||||||
{{define "full-player"}}
|
|
||||||
{{template "player" .}}
|
|
||||||
{{template "playlist" .}}
|
|
||||||
{{template "playlist-js"}}
|
|
||||||
{{end}}
|
|
||||||
|
|
||||||
{{define "playlist-js"}}
|
|
||||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
|
||||||
<script type="text/javascript">
|
|
||||||
$(document).ready(function() {
|
|
||||||
var current = 0;
|
|
||||||
var $audio = $('#player');
|
|
||||||
var $playlist = $('#playlist');
|
|
||||||
var $tracks = $playlist.find('li a.track');
|
|
||||||
var len = $tracks.length;
|
|
||||||
|
|
||||||
$playlist.on('click', 'a.track', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
link = $(this);
|
|
||||||
current = link.parent().index();
|
|
||||||
play(link, $audio[0]);
|
|
||||||
});
|
|
||||||
$audio[0].addEventListener('ended', function (e) {
|
|
||||||
playNext();
|
|
||||||
});
|
|
||||||
$('a#next').on('click', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
playNext();
|
|
||||||
});
|
|
||||||
$('a#prev').on('click', function (e) {
|
|
||||||
e.preventDefault();
|
|
||||||
playPrev();
|
|
||||||
});
|
|
||||||
|
|
||||||
function playPrev() {
|
|
||||||
current--;
|
|
||||||
if (current <= 0) {
|
|
||||||
current = len - 1;
|
|
||||||
}
|
|
||||||
link = $playlist.find('a.track')[current];
|
|
||||||
play($(link), $audio[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function playNext() {
|
|
||||||
current++;
|
|
||||||
if (current == len) {
|
|
||||||
current = 0;
|
|
||||||
}
|
|
||||||
link = $playlist.find('a.track')[current];
|
|
||||||
play($(link), $audio[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
function play($link, $player) {
|
|
||||||
$player.src = $link.attr('href');
|
|
||||||
par = $link.parent();
|
|
||||||
par.addClass('active').siblings().removeClass('active');
|
|
||||||
$player.load();
|
|
||||||
$player.play();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
{{end}}`,
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user