diff options
| author | Gabriel Arakaki Giovanini <mail@gabrielgio.me> | 2023-08-18 21:57:47 +0200 | 
|---|---|---|
| committer | Gabriel Arakaki Giovanini <mail@gabrielgio.me> | 2023-08-18 21:57:47 +0200 | 
| commit | a1f09d1f143012570a62bcb2a8fe51c439ad68fb (patch) | |
| tree | 591cf29229453f2402fc82f50f6b4e0bee8f0e22 | |
| parent | d2a9e162352646e7f1550823c3d88496590f8760 (diff) | |
| download | lens-a1f09d1f143012570a62bcb2a8fe51c439ad68fb.tar.gz lens-a1f09d1f143012570a62bcb2a8fe51c439ad68fb.tar.bz2 lens-a1f09d1f143012570a62bcb2a8fe51c439ad68fb.zip | |
feat: Make mosaic reusable
| -rw-r--r-- | pkg/list/list.go | 6 | ||||
| -rw-r--r-- | pkg/view/media.go | 11 | ||||
| -rw-r--r-- | templates/album.qtpl | 21 | ||||
| -rw-r--r-- | templates/media.qtpl | 21 | ||||
| -rw-r--r-- | templates/mosaic.qtpl | 24 | 
5 files changed, 37 insertions, 46 deletions
| diff --git a/pkg/list/list.go b/pkg/list/list.go index 3aa9d65..b6b6b89 100644 --- a/pkg/list/list.go +++ b/pkg/list/list.go @@ -13,15 +13,15 @@ type Pair[T, U any] struct {  	Right U  } -func Chunck[T any](slice []T, size int) [][]T { +func Distribuite[T any](slice []T, size int) [][]T {  	chuncks := make([][]T, size)  	for i := 0; i < len(slice); i += size {  		for x := 0; x < size; x++ {  			end := i + x -			if end > len(slice) { -				break +			if end >= len(slice) { +				return chuncks  			}  			chuncks[x] = append(chuncks[x], slice[end]) diff --git a/pkg/view/media.go b/pkg/view/media.go index 3124119..d5aace2 100644 --- a/pkg/view/media.go +++ b/pkg/view/media.go @@ -44,7 +44,8 @@ func getPagination(r *http.Request) *repository.Pagination {  	}  	if albumIDStr == "" { -		page = 0 +		id := uint(0) +		albumID = &id  	} else if p, err := strconv.Atoi(albumIDStr); err == nil {  		id := uint(p)  		albumID = &id @@ -132,9 +133,9 @@ func (self *MediaView) GetThumbnail(w http.ResponseWriter, r *http.Request) erro  }  func (self *MediaView) SetMyselfIn(r *ext.Router) { -	r.GET("/media/", self.Index) -	r.POST("/media/", self.Index) +	r.GET("/media", self.Index) +	r.POST("/media", self.Index) -	r.GET("/media/image/", self.GetImage) -	r.GET("/media/thumbnail/", self.GetThumbnail) +	r.GET("/media/image", self.GetImage) +	r.GET("/media/thumbnail", self.GetThumbnail)  } diff --git a/templates/album.qtpl b/templates/album.qtpl index 328c6d4..1f25bf6 100644 --- a/templates/album.qtpl +++ b/templates/album.qtpl @@ -1,5 +1,4 @@  {% import "git.sr.ht/~gabrielgio/img/pkg/database/repository" %} -{% import "git.sr.ht/~gabrielgio/img/pkg/list" %}  {% code  type AlbumPage struct { @@ -28,26 +27,10 @@ func (m *AlbumPage) PreloadAttr() string {  {% endfor %}  </div>  <div class="columns"> -{% for _, c := range list.Chunck(p.Medias, 4) %} -    <div class="column is-3"> -    {% for _, media := range c %} -    <div class="card-image"> -       {% if media.IsVideo() %} -       <video class="image is-fit" controls muted="true" poster="/media/thumbnail/?path_hash={%s media.PathHash %}" preload="{%s p.PreloadAttr() %}"> -           <source src="/media/image/?path_hash={%s media.PathHash %}" type="{%s media.MIMEType %}"> -       </video> -       {% else %} -        <figure class="image is-fit"> -            <img src="/media/thumbnail/?path_hash={%s media.PathHash %}"> -        </figure> -        {% endif %} -    </div> -    {% endfor %} -    </div> -{% endfor %} +{%= Mosaic(p.Medias, p.PreloadAttr()) %}  </div>  <div> -    <a href="/media/?page={%d p.Next.Page %}" class="button is-pulled-right">next</a> +    <a href="/media?page={%d p.Next.Page %}" class="button is-pulled-right">next</a>  </div>  {% endfunc %} diff --git a/templates/media.qtpl b/templates/media.qtpl index 7dcdf54..737d03d 100644 --- a/templates/media.qtpl +++ b/templates/media.qtpl @@ -1,5 +1,4 @@  {% import "git.sr.ht/~gabrielgio/img/pkg/database/repository" %} -{% import "git.sr.ht/~gabrielgio/img/pkg/list" %}  {% code  type MediaPage struct { @@ -20,26 +19,10 @@ func (m *MediaPage) PreloadAttr() string {  {% func (p *MediaPage) Content() %}  <div class="columns"> -{% for _, c := range list.Chunck(p.Medias, 4) %} -    <div class="column is-3"> -    {% for _, media := range c %} -    <div class="card-image"> -       {% if media.IsVideo() %} -       <video class="image is-fit" controls muted="true" poster="/media/thumbnail/?path_hash={%s media.PathHash %}" preload="{%s p.PreloadAttr() %}"> -           <source src="/media/image/?path_hash={%s media.PathHash %}" type="{%s media.MIMEType %}"> -       </video> -       {% else %} -        <figure class="image is-fit"> -            <img src="/media/thumbnail/?path_hash={%s media.PathHash %}"> -        </figure> -        {% endif %} -    </div> -    {% endfor %} -    </div> -{% endfor %} +{%= Mosaic(p.Medias, p.PreloadAttr()) %}  </div>  <div> -    <a href="/media/?page={%d p.Next.Page %}" class="button is-pulled-right">next</a> +    <a href="/media?page={%d p.Next.Page %}" class="button is-pulled-right">next</a>  </div>  {% endfunc %} diff --git a/templates/mosaic.qtpl b/templates/mosaic.qtpl new file mode 100644 index 0000000..18dbcba --- /dev/null +++ b/templates/mosaic.qtpl @@ -0,0 +1,24 @@ +{% import "git.sr.ht/~gabrielgio/img/pkg/database/repository" %} +{% import "git.sr.ht/~gabrielgio/img/pkg/list" %} + +{% func Mosaic(medias []*repository.Media, preloadAttr string) %} +<div class="columns"> +{% for _, c := range list.Distribuite(medias, 6) %} +    <div class="column is-2"> +    {% for _, media := range c %} +    <div class="card-image"> +       {% if media.IsVideo() %} +       <video class="image is-fit" controls muted="true" poster="/media/thumbnail?path_hash={%s media.PathHash %}" preload="{%s preloadAttr %}"> +           <source src="/media/image?path_hash={%s media.PathHash %}" type="{%s media.MIMEType %}"> +       </video> +       {% else %} +        <figure class="image is-fit"> +            <img src="/media/thumbnail?path_hash={%s media.PathHash %}"> +        </figure> +        {% endif %} +    </div> +    {% endfor %} +    </div> +{% endfor %} +</div> +{% endfunc %} | 
