1// Copyright 2016 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package present 6 7import ( 8 "fmt" 9 "strings" 10) 11 12func init() { 13 Register("video", parseVideo) 14} 15 16type Video struct { 17 URL string 18 SourceType string 19 Width int 20 Height int 21} 22 23func (v Video) TemplateName() string { return "video" } 24 25func parseVideo(ctx *Context, fileName string, lineno int, text string) (Elem, error) { 26 args := strings.Fields(text) 27 vid := Video{URL: args[1], SourceType: args[2]} 28 a, err := parseArgs(fileName, lineno, args[3:]) 29 if err != nil { 30 return nil, err 31 } 32 switch len(a) { 33 case 0: 34 // no size parameters 35 case 2: 36 // If a parameter is empty (underscore) or invalid 37 // leave the field set to zero. The "video" action 38 // template will then omit that vid tag attribute and 39 // the browser will calculate the value to preserve 40 // the aspect ratio. 41 if v, ok := a[0].(int); ok { 42 vid.Height = v 43 } 44 if v, ok := a[1].(int); ok { 45 vid.Width = v 46 } 47 default: 48 return nil, fmt.Errorf("incorrect video invocation: %q", text) 49 } 50 return vid, nil 51} 52