present: Set the background using CSS

This allowed me to better match the background image to the size of
the slides.

Change-Id: Ieaae93cd78582a3059ed6c3e64e740dea9088af5
Reviewed-on: https://go-review.googlesource.com/47130
Reviewed-by: Andrew Gerrand <adg@golang.org>
Run-TryBot: Andrew Gerrand <adg@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Edward Muller 2017-06-28 17:57:38 -07:00 committed by Andrew Gerrand
parent d78e5d2552
commit 41b76ca51c
4 changed files with 33 additions and 42 deletions

View File

@ -391,18 +391,9 @@ article > .video {
margin-top: 40px;
}
article > .background {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
z-index: -1;
}
article > .background > img {
max-height: 100%;
max-width: 100%;
article.background {
background-size: contain;
background-repeat: round;
}
table {

View File

@ -55,7 +55,7 @@
{{range $i, $s := .Sections}}
<!-- start of slide {{$s.Number}} -->
<article>
<article {{$s.HTMLAttributes}}>
{{if $s.Elem}}
<h3>{{$s.Title}}</h3>
{{range $s.Elem}}{{elem $.Template .}}{{end}}

View File

@ -1,25 +0,0 @@
// Copyright 2016 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package present
import (
"strings"
)
func init() {
Register("background", parseBackground)
}
type Background struct {
URL string
}
func (i Background) TemplateName() string { return "background" }
func parseBackground(ctx *Context, fileName string, lineno int, text string) (Elem, error) {
args := strings.Fields(text)
background := Background{URL: args[1]}
return background, nil
}

View File

@ -96,12 +96,32 @@ func (p *Author) TextElem() (elems []Elem) {
// Section represents a section of a document (such as a presentation slide)
// comprising a title and a list of elements.
type Section struct {
Number []int
Title string
Elem []Elem
Notes []string
Number []int
Title string
Elem []Elem
Notes []string
Classes []string
Styles []string
}
// HTMLAttributes for the section
func (s Section) HTMLAttributes() template.HTMLAttr {
if len(s.Classes) == 0 && len(s.Styles) == 0 {
return ""
}
var class string
if len(s.Classes) > 0 {
class = fmt.Sprintf(`class=%q`, strings.Join(s.Classes, " "))
}
var style string
if len(s.Styles) > 0 {
style = fmt.Sprintf(`style=%q`, strings.Join(s.Styles, " "))
}
return template.HTMLAttr(strings.Join([]string{class, style}, " "))
}
// Sections contained within the section.
func (s Section) Sections() (sections []Section) {
for _, e := range s.Elem {
if section, ok := e.(Section); ok {
@ -366,6 +386,11 @@ func parseSections(ctx *Context, name string, lines *Lines, number []int) ([]Sec
}
case strings.HasPrefix(text, "."):
args := strings.Fields(text)
if args[0] == ".background" {
section.Classes = append(section.Classes, "background")
section.Styles = append(section.Styles, "background-image: url('"+args[1]+"')")
break
}
parser := parsers[args[0]]
if parser == nil {
return nil, fmt.Errorf("%s:%d: unknown command %q\n", name, lines.line, text)