go.talks: Show "run" button only for files with extension .go if running on App Engine

R=adg, r, iant
CC=golang-dev
https://golang.org/cl/22450043
diff --git a/present/appengine.go b/present/appengine.go
index affcf50..20aa152 100644
--- a/present/appengine.go
+++ b/present/appengine.go
@@ -18,3 +18,7 @@
 	playScript(basePath, "HTTPTransport")
 	present.PlayEnabled = true
 }
+
+func playable(c present.Code) bool {
+	return present.PlayEnabled && c.Play && c.Ext == ".go"
+}
diff --git a/present/dir.go b/present/dir.go
index 4cc225b..3a1e9bc 100644
--- a/present/dir.go
+++ b/present/dir.go
@@ -81,6 +81,7 @@
 
 	// Read and parse the input.
 	tmpl := present.Template()
+	tmpl = tmpl.Funcs(template.FuncMap{"playable": playable})
 	if _, err := tmpl.ParseFiles(actionTmpl, contentTmpl); err != nil {
 		return err
 	}
diff --git a/present/local.go b/present/local.go
index 7bd067c..326d6f4 100644
--- a/present/local.go
+++ b/present/local.go
@@ -55,6 +55,10 @@
 	log.Fatal(http.ListenAndServe(*httpListen, nil))
 }
 
+func playable(c present.Code) bool {
+	return present.PlayEnabled && c.Play
+}
+
 const basePathMessage = `
 By default, gopresent locates the slide template files and associated
 static content by looking for a %q package
diff --git a/present/templates/action.tmpl b/present/templates/action.tmpl
index 657e7db..1fa0073 100644
--- a/present/templates/action.tmpl
+++ b/present/templates/action.tmpl
@@ -28,7 +28,7 @@
 {{end}}
 
 {{define "code"}}
-  <div class="code{{if .Play}} playground{{end}}" contenteditable="true" spellcheck="false">{{.Text}}</div>
+  <div class="code{{if playable .}} playground{{end}}" contenteditable="true" spellcheck="false">{{.Text}}</div>
 {{end}}
 
 {{define "image"}}
@@ -40,7 +40,7 @@
 {{define "iframe"}}
 <iframe src="{{.URL}}"{{with .Height}} height="{{.}}"{{end}}{{with .Width}} width="{{.}}"{{end}}></iframe>
 {{end}}
-      
+
 {{define "link"}}<p class="link"><a href="{{.URL}}" target="_blank">{{style .Label}}</a></p>{{end}}
 
 {{define "html"}}{{.HTML}}{{end}}