go.talks: remove present tool
Present has been moved to code.google.com/p/go.tools/cmd/present.
This change leaves behind a trivial package main that prints a message
explaining the move.
LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/93050044
diff --git a/present/appengine.go b/present/appengine.go
deleted file mode 100644
index 20aa152..0000000
--- a/present/appengine.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2012 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.
-
-// +build appengine
-
-package main
-
-import (
- "code.google.com/p/go.tools/present"
-
- _ "code.google.com/p/go.tools/playground"
-)
-
-var basePath = "./present/"
-
-func init() {
- 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
deleted file mode 100644
index a039f69..0000000
--- a/present/dir.go
+++ /dev/null
@@ -1,281 +0,0 @@
-// Copyright 2012 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 main
-
-import (
- "fmt"
- "html/template"
- "io"
- "log"
- "net/http"
- "os"
- "path/filepath"
- "sort"
-
- "code.google.com/p/go.tools/present"
-)
-
-func init() {
- http.HandleFunc("/", dirHandler)
-}
-
-// dirHandler serves a directory listing for the requested path, rooted at basePath.
-func dirHandler(w http.ResponseWriter, r *http.Request) {
- if r.URL.Path == "/favicon.ico" {
- http.Error(w, "not found", 404)
- return
- }
- const base = "."
- name := filepath.Join(base, r.URL.Path)
- if isDoc(name) {
- err := renderDoc(w, basePath, name)
- if err != nil {
- log.Println(err)
- http.Error(w, err.Error(), 500)
- }
- return
- }
- if isDir, err := dirList(w, name); err != nil {
- log.Println(err)
- http.Error(w, err.Error(), 500)
- return
- } else if isDir {
- return
- }
- http.FileServer(http.Dir(base)).ServeHTTP(w, r)
-}
-
-// extensions maps the presentable file extensions to the name of the
-// template to be executed.
-var extensions = map[string]string{
- ".slide": "slides.tmpl",
- ".article": "article.tmpl",
-}
-
-func isDoc(path string) bool {
- _, ok := extensions[filepath.Ext(path)]
- return ok
-}
-
-// renderDoc reads the present file, builds its template representation,
-// and executes the template, sending output to w.
-func renderDoc(w io.Writer, base, docFile string) error {
- // Read the input and build the doc structure.
- doc, err := parse(docFile, 0)
- if err != nil {
- return err
- }
-
- // Find which template should be executed.
- ext := filepath.Ext(docFile)
- contentTmpl, ok := extensions[ext]
- if !ok {
- return fmt.Errorf("no template for extension %v", ext)
- }
-
- // Locate the template file.
- actionTmpl := filepath.Join(base, "templates/action.tmpl")
- contentTmpl = filepath.Join(base, "templates", contentTmpl)
-
- // 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
- }
-
- // Execute the template.
- return doc.Render(w, tmpl)
-}
-
-func parse(name string, mode present.ParseMode) (*present.Doc, error) {
- f, err := os.Open(name)
- if err != nil {
- return nil, err
- }
- defer f.Close()
- return present.Parse(f, name, 0)
-}
-
-// dirList scans the given path and writes a directory listing to w.
-// It parses the first part of each .slide file it encounters to display the
-// presentation title in the listing.
-// If the given path is not a directory, it returns (isDir == false, err == nil)
-// and writes nothing to w.
-func dirList(w io.Writer, name string) (isDir bool, err error) {
- f, err := os.Open(name)
- if err != nil {
- return false, err
- }
- defer f.Close()
- fi, err := f.Stat()
- if err != nil {
- return false, err
- }
- if isDir = fi.IsDir(); !isDir {
- return false, nil
- }
- fis, err := f.Readdir(0)
- if err != nil {
- return false, err
- }
- d := &dirListData{Path: name}
- for _, fi := range fis {
- // skip the pkg directory
- if name == "." && fi.Name() == "pkg" {
- continue
- }
- e := dirEntry{
- Name: fi.Name(),
- Path: filepath.ToSlash(filepath.Join(name, fi.Name())),
- }
- if fi.IsDir() && showDir(e.Name) {
- d.Dirs = append(d.Dirs, e)
- continue
- }
- if isDoc(e.Name) {
- if p, err := parse(e.Path, present.TitlesOnly); err != nil {
- log.Println(err)
- } else {
- e.Title = p.Title
- }
- switch filepath.Ext(e.Path) {
- case ".article":
- d.Articles = append(d.Articles, e)
- case ".slide":
- d.Slides = append(d.Slides, e)
- }
- } else if showFile(e.Name) {
- d.Other = append(d.Other, e)
- }
- }
- if d.Path == "." {
- d.Path = ""
- }
- sort.Sort(d.Dirs)
- sort.Sort(d.Slides)
- sort.Sort(d.Articles)
- sort.Sort(d.Other)
- return true, dirListTemplate.Execute(w, d)
-}
-
-// showFile reports whether the given file should be displayed in the list.
-func showFile(n string) bool {
- switch filepath.Ext(n) {
- case ".pdf":
- case ".html":
- case ".go":
- default:
- return isDoc(n)
- }
- return true
-}
-
-// showDir reports whether the given directory should be displayed in the list.
-func showDir(n string) bool {
- if len(n) > 0 && (n[0] == '.' || n[0] == '_') || n == "present" {
- return false
- }
- return true
-}
-
-type dirListData struct {
- Path string
- Dirs, Slides, Articles, Other dirEntrySlice
-}
-
-type dirEntry struct {
- Name, Path, Title string
-}
-
-type dirEntrySlice []dirEntry
-
-func (s dirEntrySlice) Len() int { return len(s) }
-func (s dirEntrySlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
-func (s dirEntrySlice) Less(i, j int) bool { return s[i].Name < s[j].Name }
-
-var dirListTemplate = template.Must(template.New("").Parse(dirListHTML))
-
-const dirListHTML = `<!DOCTYPE html>
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Talks - The Go Programming Language</title>
- <link type="text/css" rel="stylesheet" href="/static/dir.css">
- <script src="/static/dir.js"></script>
-</head>
-<body>
-
-<div id="topbar"><div class="container">
-
-<form method="GET" action="http://golang.org/search">
-<div id="menu">
-<a href="http://golang.org/doc/">Documents</a>
-<a href="http://golang.org/ref/">References</a>
-<a href="http://golang.org/pkg/">Packages</a>
-<a href="http://golang.org/project/">The Project</a>
-<a href="http://golang.org/help/">Help</a>
-<input type="text" id="search" name="q" class="inactive" value="Search">
-</div>
-<div id="heading"><a href="/">The Go Programming Language</a></div>
-</form>
-
-</div></div>
-
-<div id="page">
-
- <h1>Go talks</h1>
-
- {{with .Path}}<h2>{{.}}</h2>{{end}}
-
- {{with .Articles}}
- <h4>Articles:</h4>
- <dl>
- {{range .}}
- <dd><a href="/{{.Path}}">{{.Name}}</a>: {{.Title}}</dd>
- {{end}}
- </dl>
- {{end}}
-
- {{with .Slides}}
- <h4>Slide decks:</h4>
- <dl>
- {{range .}}
- <dd><a href="/{{.Path}}">{{.Name}}</a>: {{.Title}}</dd>
- {{end}}
- </dl>
- {{end}}
-
- {{with .Other}}
- <h4>Files:</h4>
- <dl>
- {{range .}}
- <dd><a href="/{{.Path}}">{{.Name}}</a></dd>
- {{end}}
- </dl>
- {{end}}
-
- {{with .Dirs}}
- <h4>Sub-directories:</h4>
- <dl>
- {{range .}}
- <dd><a href="/{{.Path}}">{{.Name}}</a></dd>
- {{end}}
- </dl>
- {{end}}
-
-</div>
-
-<div id="footer">
-Except as <a href="https://developers.google.com/site-policies#restrictions">noted</a>,
-the content of this page is licensed under the
-Creative Commons Attribution 3.0 License,
-and code is licensed under a <a href="http://golang.org/LICENSE">BSD license</a>.<br>
-<a href="http://golang.org/doc/tos.html">Terms of Service</a> |
-<a href="http://www.google.com/intl/en/policies/privacy/">Privacy Policy</a>
-</div>
-
-</body>
-</html>`
diff --git a/present/doc.go b/present/doc.go
deleted file mode 100644
index 846a531..0000000
--- a/present/doc.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 2011 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.
-
-/*
-Present displays slide presentations and articles. It runs a web server that
-presents slide and article files from the current directory.
-
-It may be run as a stand-alone command or an App Engine app.
-The stand-alone version permits the execution of programs from within a
-presentation. The App Engine version does not provide this functionality.
-
-Usage of present:
- -base="": base path for slide template and static resources
- -http="127.0.0.1:3999": host:port to listen on
-
-You may use the app.yaml file provided in the root of the go.talks repository
-to deploy present to App Engine:
- appcfg.py update -A your-app-id -V your-app-version /path/to/go.talks
-
-Input files are named foo.extension, where "extension" defines the format of
-the generated output. The supported formats are:
- .slide // HTML5 slide presentation
- .article // article format, such as a blog post
-
-The present file format is documented by the present package:
-http://godoc.org/code.google.com/p/go.tools/present
-*/
-package main
diff --git a/present/js/jquery-ui.js b/present/js/jquery-ui.js
deleted file mode 100644
index f391938..0000000
--- a/present/js/jquery-ui.js
+++ /dev/null
@@ -1,6 +0,0 @@
-/*! jQuery UI - v1.10.2 - 2013-03-20
-* http://jqueryui.com
-* Includes: jquery.ui.core.js, jquery.ui.widget.js, jquery.ui.mouse.js, jquery.ui.resizable.js
-* Copyright 2013 jQuery Foundation and other contributors Licensed MIT */
-
-(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);(function(e){function t(e){return parseInt(e,10)||0}function i(e){return!isNaN(parseInt(e,10))}e.widget("ui.resizable",e.ui.mouse,{version:"1.10.2",widgetEventPrefix:"resize",options:{alsoResize:!1,animate:!1,animateDuration:"slow",animateEasing:"swing",aspectRatio:!1,autoHide:!1,containment:!1,ghost:!1,grid:!1,handles:"e,s,se",helper:!1,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:90,resize:null,start:null,stop:null},_create:function(){var t,i,s,n,a,o=this,r=this.options;if(this.element.addClass("ui-resizable"),e.extend(this,{_aspectRatio:!!r.aspectRatio,aspectRatio:r.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:r.helper||r.ghost||r.animate?r.helper||"ui-resizable-helper":null}),this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)&&(this.element.wrap(e("<div class='ui-wrapper' style='overflow: hidden;'></div>").css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")})),this.element=this.element.parent().data("ui-resizable",this.element.data("ui-resizable")),this.elementIsWrapper=!0,this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")}),this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0}),this.originalResizeStyle=this.originalElement.css("resize"),this.originalElement.css("resize","none"),this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"})),this.originalElement.css({margin:this.originalElement.css("margin")}),this._proportionallyResize()),this.handles=r.handles||(e(".ui-resizable-handle",this.element).length?{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"}:"e,s,se"),this.handles.constructor===String)for("all"===this.handles&&(this.handles="n,e,s,w,se,sw,ne,nw"),t=this.handles.split(","),this.handles={},i=0;t.length>i;i++)s=e.trim(t[i]),a="ui-resizable-"+s,n=e("<div class='ui-resizable-handle "+a+"'></div>"),n.css({zIndex:r.zIndex}),"se"===s&&n.addClass("ui-icon ui-icon-gripsmall-diagonal-se"),this.handles[s]=".ui-resizable-"+s,this.element.append(n);this._renderAxis=function(t){var i,s,n,a;t=t||this.element;for(i in this.handles)this.handles[i].constructor===String&&(this.handles[i]=e(this.handles[i],this.element).show()),this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)&&(s=e(this.handles[i],this.element),a=/sw|ne|nw|se|n|s/.test(i)?s.outerHeight():s.outerWidth(),n=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join(""),t.css(n,a),this._proportionallyResize()),e(this.handles[i]).length},this._renderAxis(this.element),this._handles=e(".ui-resizable-handle",this.element).disableSelection(),this._handles.mouseover(function(){o.resizing||(this.className&&(n=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)),o.axis=n&&n[1]?n[1]:"se")}),r.autoHide&&(this._handles.hide(),e(this.element).addClass("ui-resizable-autohide").mouseenter(function(){r.disabled||(e(this).removeClass("ui-resizable-autohide"),o._handles.show())}).mouseleave(function(){r.disabled||o.resizing||(e(this).addClass("ui-resizable-autohide"),o._handles.hide())})),this._mouseInit()},_destroy:function(){this._mouseDestroy();var t,i=function(t){e(t).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").removeData("ui-resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};return this.elementIsWrapper&&(i(this.element),t=this.element,this.originalElement.css({position:t.css("position"),width:t.outerWidth(),height:t.outerHeight(),top:t.css("top"),left:t.css("left")}).insertAfter(t),t.remove()),this.originalElement.css("resize",this.originalResizeStyle),i(this.originalElement),this},_mouseCapture:function(t){var i,s,n=!1;for(i in this.handles)s=e(this.handles[i])[0],(s===t.target||e.contains(s,t.target))&&(n=!0);return!this.options.disabled&&n},_mouseStart:function(i){var s,n,a,o=this.options,r=this.element.position(),h=this.element;return this.resizing=!0,/absolute/.test(h.css("position"))?h.css({position:"absolute",top:h.css("top"),left:h.css("left")}):h.is(".ui-draggable")&&h.css({position:"absolute",top:r.top,left:r.left}),this._renderProxy(),s=t(this.helper.css("left")),n=t(this.helper.css("top")),o.containment&&(s+=e(o.containment).scrollLeft()||0,n+=e(o.containment).scrollTop()||0),this.offset=this.helper.offset(),this.position={left:s,top:n},this.size=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalSize=this._helper?{width:h.outerWidth(),height:h.outerHeight()}:{width:h.width(),height:h.height()},this.originalPosition={left:s,top:n},this.sizeDiff={width:h.outerWidth()-h.width(),height:h.outerHeight()-h.height()},this.originalMousePosition={left:i.pageX,top:i.pageY},this.aspectRatio="number"==typeof o.aspectRatio?o.aspectRatio:this.originalSize.width/this.originalSize.height||1,a=e(".ui-resizable-"+this.axis).css("cursor"),e("body").css("cursor","auto"===a?this.axis+"-resize":a),h.addClass("ui-resizable-resizing"),this._propagate("start",i),!0},_mouseDrag:function(t){var i,s=this.helper,n={},a=this.originalMousePosition,o=this.axis,r=this.position.top,h=this.position.left,l=this.size.width,u=this.size.height,c=t.pageX-a.left||0,d=t.pageY-a.top||0,p=this._change[o];return p?(i=p.apply(this,[t,c,d]),this._updateVirtualBoundaries(t.shiftKey),(this._aspectRatio||t.shiftKey)&&(i=this._updateRatio(i,t)),i=this._respectSize(i,t),this._updateCache(i),this._propagate("resize",t),this.position.top!==r&&(n.top=this.position.top+"px"),this.position.left!==h&&(n.left=this.position.left+"px"),this.size.width!==l&&(n.width=this.size.width+"px"),this.size.height!==u&&(n.height=this.size.height+"px"),s.css(n),!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize(),e.isEmptyObject(n)||this._trigger("resize",t,this.ui()),!1):!1},_mouseStop:function(t){this.resizing=!1;var i,s,n,a,o,r,h,l=this.options,u=this;return this._helper&&(i=this._proportionallyResizeElements,s=i.length&&/textarea/i.test(i[0].nodeName),n=s&&e.ui.hasScroll(i[0],"left")?0:u.sizeDiff.height,a=s?0:u.sizeDiff.width,o={width:u.helper.width()-a,height:u.helper.height()-n},r=parseInt(u.element.css("left"),10)+(u.position.left-u.originalPosition.left)||null,h=parseInt(u.element.css("top"),10)+(u.position.top-u.originalPosition.top)||null,l.animate||this.element.css(e.extend(o,{top:h,left:r})),u.helper.height(u.size.height),u.helper.width(u.size.width),this._helper&&!l.animate&&this._proportionallyResize()),e("body").css("cursor","auto"),this.element.removeClass("ui-resizable-resizing"),this._propagate("stop",t),this._helper&&this.helper.remove(),!1},_updateVirtualBoundaries:function(e){var t,s,n,a,o,r=this.options;o={minWidth:i(r.minWidth)?r.minWidth:0,maxWidth:i(r.maxWidth)?r.maxWidth:1/0,minHeight:i(r.minHeight)?r.minHeight:0,maxHeight:i(r.maxHeight)?r.maxHeight:1/0},(this._aspectRatio||e)&&(t=o.minHeight*this.aspectRatio,n=o.minWidth/this.aspectRatio,s=o.maxHeight*this.aspectRatio,a=o.maxWidth/this.aspectRatio,t>o.minWidth&&(o.minWidth=t),n>o.minHeight&&(o.minHeight=n),o.maxWidth>s&&(o.maxWidth=s),o.maxHeight>a&&(o.maxHeight=a)),this._vBoundaries=o},_updateCache:function(e){this.offset=this.helper.offset(),i(e.left)&&(this.position.left=e.left),i(e.top)&&(this.position.top=e.top),i(e.height)&&(this.size.height=e.height),i(e.width)&&(this.size.width=e.width)},_updateRatio:function(e){var t=this.position,s=this.size,n=this.axis;return i(e.height)?e.width=e.height*this.aspectRatio:i(e.width)&&(e.height=e.width/this.aspectRatio),"sw"===n&&(e.left=t.left+(s.width-e.width),e.top=null),"nw"===n&&(e.top=t.top+(s.height-e.height),e.left=t.left+(s.width-e.width)),e},_respectSize:function(e){var t=this._vBoundaries,s=this.axis,n=i(e.width)&&t.maxWidth&&t.maxWidth<e.width,a=i(e.height)&&t.maxHeight&&t.maxHeight<e.height,o=i(e.width)&&t.minWidth&&t.minWidth>e.width,r=i(e.height)&&t.minHeight&&t.minHeight>e.height,h=this.originalPosition.left+this.originalSize.width,l=this.position.top+this.size.height,u=/sw|nw|w/.test(s),c=/nw|ne|n/.test(s);return o&&(e.width=t.minWidth),r&&(e.height=t.minHeight),n&&(e.width=t.maxWidth),a&&(e.height=t.maxHeight),o&&u&&(e.left=h-t.minWidth),n&&u&&(e.left=h-t.maxWidth),r&&c&&(e.top=l-t.minHeight),a&&c&&(e.top=l-t.maxHeight),e.width||e.height||e.left||!e.top?e.width||e.height||e.top||!e.left||(e.left=null):e.top=null,e},_proportionallyResize:function(){if(this._proportionallyResizeElements.length){var e,t,i,s,n,a=this.helper||this.element;for(e=0;this._proportionallyResizeElements.length>e;e++){if(n=this._proportionallyResizeElements[e],!this.borderDif)for(this.borderDif=[],i=[n.css("borderTopWidth"),n.css("borderRightWidth"),n.css("borderBottomWidth"),n.css("borderLeftWidth")],s=[n.css("paddingTop"),n.css("paddingRight"),n.css("paddingBottom"),n.css("paddingLeft")],t=0;i.length>t;t++)this.borderDif[t]=(parseInt(i[t],10)||0)+(parseInt(s[t],10)||0);n.css({height:a.height()-this.borderDif[0]-this.borderDif[2]||0,width:a.width()-this.borderDif[1]-this.borderDif[3]||0})}}},_renderProxy:function(){var t=this.element,i=this.options;this.elementOffset=t.offset(),this._helper?(this.helper=this.helper||e("<div style='overflow:hidden;'></div>"),this.helper.addClass(this._helper).css({width:this.element.outerWidth()-1,height:this.element.outerHeight()-1,position:"absolute",left:this.elementOffset.left+"px",top:this.elementOffset.top+"px",zIndex:++i.zIndex}),this.helper.appendTo("body").disableSelection()):this.helper=this.element},_change:{e:function(e,t){return{width:this.originalSize.width+t}},w:function(e,t){var i=this.originalSize,s=this.originalPosition;return{left:s.left+t,width:i.width-t}},n:function(e,t,i){var s=this.originalSize,n=this.originalPosition;return{top:n.top+i,height:s.height-i}},s:function(e,t,i){return{height:this.originalSize.height+i}},se:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},sw:function(t,i,s){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[t,i,s]))},ne:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[t,i,s]))},nw:function(t,i,s){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[t,i,s]))}},_propagate:function(t,i){e.ui.plugin.call(this,t,[i,this.ui()]),"resize"!==t&&this._trigger(t,i,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}),e.ui.plugin.add("resizable","animate",{stop:function(t){var i=e(this).data("ui-resizable"),s=i.options,n=i._proportionallyResizeElements,a=n.length&&/textarea/i.test(n[0].nodeName),o=a&&e.ui.hasScroll(n[0],"left")?0:i.sizeDiff.height,r=a?0:i.sizeDiff.width,h={width:i.size.width-r,height:i.size.height-o},l=parseInt(i.element.css("left"),10)+(i.position.left-i.originalPosition.left)||null,u=parseInt(i.element.css("top"),10)+(i.position.top-i.originalPosition.top)||null;i.element.animate(e.extend(h,u&&l?{top:u,left:l}:{}),{duration:s.animateDuration,easing:s.animateEasing,step:function(){var s={width:parseInt(i.element.css("width"),10),height:parseInt(i.element.css("height"),10),top:parseInt(i.element.css("top"),10),left:parseInt(i.element.css("left"),10)};n&&n.length&&e(n[0]).css({width:s.width,height:s.height}),i._updateCache(s),i._propagate("resize",t)}})}}),e.ui.plugin.add("resizable","containment",{start:function(){var i,s,n,a,o,r,h,l=e(this).data("ui-resizable"),u=l.options,c=l.element,d=u.containment,p=d instanceof e?d.get(0):/parent/.test(d)?c.parent().get(0):d;p&&(l.containerElement=e(p),/document/.test(d)||d===document?(l.containerOffset={left:0,top:0},l.containerPosition={left:0,top:0},l.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}):(i=e(p),s=[],e(["Top","Right","Left","Bottom"]).each(function(e,n){s[e]=t(i.css("padding"+n))}),l.containerOffset=i.offset(),l.containerPosition=i.position(),l.containerSize={height:i.innerHeight()-s[3],width:i.innerWidth()-s[1]},n=l.containerOffset,a=l.containerSize.height,o=l.containerSize.width,r=e.ui.hasScroll(p,"left")?p.scrollWidth:o,h=e.ui.hasScroll(p)?p.scrollHeight:a,l.parentData={element:p,left:n.left,top:n.top,width:r,height:h}))},resize:function(t){var i,s,n,a,o=e(this).data("ui-resizable"),r=o.options,h=o.containerOffset,l=o.position,u=o._aspectRatio||t.shiftKey,c={top:0,left:0},d=o.containerElement;d[0]!==document&&/static/.test(d.css("position"))&&(c=h),l.left<(o._helper?h.left:0)&&(o.size.width=o.size.width+(o._helper?o.position.left-h.left:o.position.left-c.left),u&&(o.size.height=o.size.width/o.aspectRatio),o.position.left=r.helper?h.left:0),l.top<(o._helper?h.top:0)&&(o.size.height=o.size.height+(o._helper?o.position.top-h.top:o.position.top),u&&(o.size.width=o.size.height*o.aspectRatio),o.position.top=o._helper?h.top:0),o.offset.left=o.parentData.left+o.position.left,o.offset.top=o.parentData.top+o.position.top,i=Math.abs((o._helper?o.offset.left-c.left:o.offset.left-c.left)+o.sizeDiff.width),s=Math.abs((o._helper?o.offset.top-c.top:o.offset.top-h.top)+o.sizeDiff.height),n=o.containerElement.get(0)===o.element.parent().get(0),a=/relative|absolute/.test(o.containerElement.css("position")),n&&a&&(i-=o.parentData.left),i+o.size.width>=o.parentData.width&&(o.size.width=o.parentData.width-i,u&&(o.size.height=o.size.width/o.aspectRatio)),s+o.size.height>=o.parentData.height&&(o.size.height=o.parentData.height-s,u&&(o.size.width=o.size.height*o.aspectRatio))},stop:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.containerOffset,n=t.containerPosition,a=t.containerElement,o=e(t.helper),r=o.offset(),h=o.outerWidth()-t.sizeDiff.width,l=o.outerHeight()-t.sizeDiff.height;t._helper&&!i.animate&&/relative/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l}),t._helper&&!i.animate&&/static/.test(a.css("position"))&&e(this).css({left:r.left-n.left-s.left,width:h,height:l})}}),e.ui.plugin.add("resizable","alsoResize",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=function(t){e(t).each(function(){var t=e(this);t.data("ui-resizable-alsoresize",{width:parseInt(t.width(),10),height:parseInt(t.height(),10),left:parseInt(t.css("left"),10),top:parseInt(t.css("top"),10)})})};"object"!=typeof i.alsoResize||i.alsoResize.parentNode?s(i.alsoResize):i.alsoResize.length?(i.alsoResize=i.alsoResize[0],s(i.alsoResize)):e.each(i.alsoResize,function(e){s(e)})},resize:function(t,i){var s=e(this).data("ui-resizable"),n=s.options,a=s.originalSize,o=s.originalPosition,r={height:s.size.height-a.height||0,width:s.size.width-a.width||0,top:s.position.top-o.top||0,left:s.position.left-o.left||0},h=function(t,s){e(t).each(function(){var t=e(this),n=e(this).data("ui-resizable-alsoresize"),a={},o=s&&s.length?s:t.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(o,function(e,t){var i=(n[t]||0)+(r[t]||0);i&&i>=0&&(a[t]=i||null)}),t.css(a)})};"object"!=typeof n.alsoResize||n.alsoResize.nodeType?h(n.alsoResize):e.each(n.alsoResize,function(e,t){h(e,t)})},stop:function(){e(this).removeData("resizable-alsoresize")}}),e.ui.plugin.add("resizable","ghost",{start:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size;t.ghost=t.originalElement.clone(),t.ghost.css({opacity:.25,display:"block",position:"relative",height:s.height,width:s.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass("string"==typeof i.ghost?i.ghost:""),t.ghost.appendTo(t.helper)},resize:function(){var t=e(this).data("ui-resizable");t.ghost&&t.ghost.css({position:"relative",height:t.size.height,width:t.size.width})},stop:function(){var t=e(this).data("ui-resizable");t.ghost&&t.helper&&t.helper.get(0).removeChild(t.ghost.get(0))}}),e.ui.plugin.add("resizable","grid",{resize:function(){var t=e(this).data("ui-resizable"),i=t.options,s=t.size,n=t.originalSize,a=t.originalPosition,o=t.axis,r="number"==typeof i.grid?[i.grid,i.grid]:i.grid,h=r[0]||1,l=r[1]||1,u=Math.round((s.width-n.width)/h)*h,c=Math.round((s.height-n.height)/l)*l,d=n.width+u,p=n.height+c,f=i.maxWidth&&d>i.maxWidth,m=i.maxHeight&&p>i.maxHeight,g=i.minWidth&&i.minWidth>d,v=i.minHeight&&i.minHeight>p;i.grid=r,g&&(d+=h),v&&(p+=l),f&&(d-=h),m&&(p-=l),/^(se|s|e)$/.test(o)?(t.size.width=d,t.size.height=p):/^(ne)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.top=a.top-c):/^(sw)$/.test(o)?(t.size.width=d,t.size.height=p,t.position.left=a.left-u):(t.size.width=d,t.size.height=p,t.position.top=a.top-c,t.position.left=a.left-u)}})})(jQuery);
\ No newline at end of file
diff --git a/present/local.go b/present/local.go
deleted file mode 100644
index db3fc7e..0000000
--- a/present/local.go
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright 2013 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.
-
-// +build !appengine
-
-package main
-
-import (
- "flag"
- "fmt"
- "go/build"
- "log"
- "net"
- "net/http"
- "net/url"
- "os"
- "runtime"
- "strings"
-
- "code.google.com/p/go.tools/playground/socket"
- "code.google.com/p/go.tools/present"
-)
-
-const basePkg = "code.google.com/p/go.talks/present"
-
-var (
- basePath string
- nativeClient bool
-)
-
-func main() {
- httpListen := flag.String("http", "127.0.0.1:3999", "host:port to listen on")
- flag.StringVar(&basePath, "base", "", "base path for slide template and static resources")
- flag.BoolVar(&present.PlayEnabled, "play", true, "enable playground (permit execution of arbitrary user code)")
- flag.BoolVar(&nativeClient, "nacl", false, "use Native Client environment playground (prevents non-Go code execution)")
- flag.Parse()
-
- if basePath == "" {
- p, err := build.Default.Import(basePkg, "", build.FindOnly)
- if err != nil {
- fmt.Fprintf(os.Stderr, "Couldn't find gopresent files: %v\n", err)
- fmt.Fprintf(os.Stderr, basePathMessage, basePkg)
- os.Exit(1)
- }
- basePath = p.Dir
- }
-
- if present.PlayEnabled {
- if nativeClient {
- socket.RunScripts = false
- socket.Environ = func() []string {
- if runtime.GOARCH == "amd64" {
- return environ("GOOS=nacl", "GOARCH=amd64p32")
- }
- return environ("GOOS=nacl")
- }
- }
- playScript(basePath, "SocketTransport")
-
- host, port, err := net.SplitHostPort(*httpListen)
- if err != nil {
- log.Fatal(err)
- }
- origin := &url.URL{Scheme: "http", Host: host + ":" + port}
- http.Handle("/socket", socket.NewHandler(origin))
- }
- http.Handle("/static/", http.FileServer(http.Dir(basePath)))
-
- if !strings.HasPrefix(*httpListen, "127.0.0.1") &&
- !strings.HasPrefix(*httpListen, "localhost") &&
- present.PlayEnabled && !nativeClient {
- log.Print(localhostWarning)
- }
-
- log.Printf("Open your web browser and visit http://%s/", *httpListen)
- log.Fatal(http.ListenAndServe(*httpListen, nil))
-}
-
-func playable(c present.Code) bool {
- return present.PlayEnabled && c.Play
-}
-
-func environ(vars ...string) []string {
- env := os.Environ()
- for _, r := range vars {
- k := strings.SplitAfter(r, "=")[0]
- var found bool
- for i, v := range env {
- if strings.HasPrefix(v, k) {
- env[i] = r
- found = true
- }
- }
- if !found {
- env = append(env, r)
- }
- }
- return env
-}
-
-const basePathMessage = `
-By default, gopresent locates the slide template files and associated
-static content by looking for a %q package
-in your Go workspaces (GOPATH).
-
-You may use the -base flag to specify an alternate location.
-`
-
-const localhostWarning = `
-WARNING! WARNING! WARNING!
-
-The present server appears to be listening on an address that is not localhost.
-Anyone with access to this address and port will have access to this machine as
-the user running present.
-
-To avoid this message, listen on localhost or run with -play=false.
-
-If you don't understand this message, hit Control-C to terminate this process.
-
-WARNING! WARNING! WARNING!
-`
diff --git a/present/moved.go b/present/moved.go
new file mode 100644
index 0000000..217fa15
--- /dev/null
+++ b/present/moved.go
@@ -0,0 +1,22 @@
+package main
+
+import (
+ "fmt"
+ "os"
+)
+
+const moved = `
+
+The present tool has moved to the go.tools repository.
+
+Please install it from its new location:
+
+ go get code.google.com/p/go.tools/cmd/present
+
+
+`
+
+func main() {
+ fmt.Print(moved)
+ os.Exit(1)
+}
diff --git a/present/play.go b/present/play.go
deleted file mode 100644
index d347e31..0000000
--- a/present/play.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright 2012 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 main
-
-import (
- "bytes"
- "fmt"
- "io/ioutil"
- "net/http"
- "path/filepath"
- "time"
-
- "code.google.com/p/go.tools/godoc/static"
-)
-
-var scripts = []string{"jquery.js", "jquery-ui.js", "playground.js", "play.js"}
-
-// playScript registers an HTTP handler at /play.js that serves all the
-// scripts specified by the variable above, and appends a line that
-// initializes the playground with the specified transport.
-func playScript(root, transport string) {
- modTime := time.Now()
- var buf bytes.Buffer
- for _, p := range scripts {
- if s, ok := static.Files[p]; ok {
- buf.WriteString(s)
- continue
- }
- b, err := ioutil.ReadFile(filepath.Join(root, "js", p))
- if err != nil {
- panic(err)
- }
- buf.Write(b)
- }
- fmt.Fprintf(&buf, "\ninitPlayground(new %v());\n", transport)
- b := buf.Bytes()
- http.HandleFunc("/play.js", func(w http.ResponseWriter, r *http.Request) {
- w.Header().Set("Content-type", "application/javascript")
- http.ServeContent(w, r, "", modTime, bytes.NewReader(b))
- })
-}
diff --git a/present/static/article.css b/present/static/article.css
deleted file mode 100644
index e6ab1e8..0000000
--- a/present/static/article.css
+++ /dev/null
@@ -1,136 +0,0 @@
-body {
- margin: 0;
- font-family: Helvetica, Arial, sans-serif;
- font-size: 16px;
-}
-pre,
-code {
- font-family: Menlo, monospace;
- font-size: 14px;
-}
-pre {
- line-height: 18px;
- margin: 0;
- padding: 0;
-}
-a {
- color: #375EAB;
- text-decoration: none;
-}
-a:hover {
- text-decoration: underline;
-}
-p, ul, ol {
- margin: 20px;
-}
-
-h1, h2, h3, h4 {
- margin: 20px 0;
- padding: 0;
- color: #375EAB;
- font-weight: bold;
-}
-h1 {
- font-size: 24px;
-}
-h2 {
- font-size: 20px;
- background: #E0EBF5;
- padding: 2px 5px;
-}
-h3 {
- font-size: 20px;
-}
-h3, h4 {
- margin: 20px 5px;
-}
-h4 {
- font-size: 16px;
-}
-
-div#heading {
- float: left;
- margin: 0 0 10px 0;
- padding: 21px 0;
- font-size: 20px;
- font-weight: normal;
-}
-
-div#topbar {
- background: #E0EBF5;
- height: 64px;
- overflow: hidden;
-}
-
-body {
- text-align: center;
-}
-div#page {
- width: 100%;
-}
-div#page > .container,
-div#topbar > .container {
- text-align: left;
- margin-left: auto;
- margin-right: auto;
- padding: 0 20px;
- width: 900px;
-}
-div#page.wide > .container,
-div#topbar.wide > .container {
- width: auto;
-}
-
-div#footer {
- text-align: center;
- color: #666;
- font-size: 14px;
- margin: 40px 0;
-}
-
-.author p {
- margin: 20, 0, 0, 0px;
-}
-
-div.code,
-div.output {
- margin: 20px;
- padding: 10px;
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-
-div.code { background: #e9e9e9; }
-div.output { background: black; }
-div.output .stdout { color: #e6e6e6; }
-div.output .stderr { color: rgb(244, 74, 63); }
-div.output .system { color: rgb(255, 209, 77) }
-
-.buttons {
- margin-left: 20px;
-}
-div.output .buttons {
- margin-left: 0;
- margin-bottom: 10px;
-}
-
-#toc {
- float: right;
- margin: 0px 10px;
- padding: 10px;
- border: 1px solid #e5ecf9;
- background-color: white;
- max-width: 33%;
-
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-
-#toc ul, #toc a {
- list-style-type: none;
- padding-left: 10px;
- color: black;
- margin: 0px;
-}
diff --git a/present/static/dir.css b/present/static/dir.css
deleted file mode 100644
index 97587e6..0000000
--- a/present/static/dir.css
+++ /dev/null
@@ -1,186 +0,0 @@
-/* copied from $GOROOT/doc/style.css */
-
-body {
- margin: 0;
- font-family: Helvetica, Arial, sans-serif;
- font-size: 16px;
-}
-pre,
-code {
- font-family: Menlo, monospace;
- font-size: 14px;
-}
-pre {
- line-height: 18px;
-}
-pre .comment {
- color: #375EAB;
-}
-pre .highlight,
-pre .highlight-comment,
-pre .selection-highlight,
-pre .selection-highlight-comment {
- background: #FFFF00;
-}
-pre .selection,
-pre .selection-comment {
- background: #FF9632;
-}
-pre .ln {
- color: #999;
-}
-body {
- color: #222;
-}
-a,
-.exampleHeading .text {
- color: #375EAB;
- text-decoration: none;
-}
-a:hover,
-.exampleHeading .text:hover {
- text-decoration: underline;
-}
-p,
-pre,
-ul,
-ol {
- margin: 20px;
-}
-pre {
- background: #e9e9e9;
- padding: 10px;
-
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-
-h1,
-h2,
-h3,
-h4,
-.rootHeading {
- margin: 20px 0;
- padding: 0;
- color: #375EAB;
- font-weight: bold;
-}
-h1 {
- font-size: 24px;
-}
-h2 {
- font-size: 20px;
- background: #E0EBF5;
- padding: 2px 5px;
-}
-h3 {
- font-size: 20px;
-}
-h3,
-h4 {
- margin: 20px 5px;
-}
-h4 {
- font-size: 16px;
-}
-
-dl {
- margin: 20px;
-}
-dd {
- margin: 2px 20px;
-}
-dl,
-dd {
- font-size: 14px;
-}
-div#nav table td {
- vertical-align: top;
-}
-
-div#heading {
- float: left;
- margin: 0 0 10px 0;
- padding: 21px 0;
- font-size: 20px;
- font-weight: normal;
-}
-div#heading a {
- color: #222;
- text-decoration: none;
-}
-
-div#topbar {
- background: #E0EBF5;
- height: 64px;
-}
-
-body {
- text-align: center;
-}
-div#page,
-div#topbar > .container {
- clear: both;
- text-align: left;
- margin-left: auto;
- margin-right: auto;
- padding: 0 20px;
- width: 900px;
-}
-div#page.wide,
-div#topbar > .wide {
- width: auto;
-}
-div#plusone {
- float: right;
-}
-
-div#footer {
- color: #666;
- font-size: 14px;
- margin: 40px 0;
-}
-
-div#menu > a,
-div#menu > input {
- padding: 10px;
-
- text-decoration: none;
- font-size: 16px;
-
- -webkit-border-radius: 5px;
- -moz-border-radius: 5px;
- border-radius: 5px;
-}
-div#menu > a,
-div#menu > input {
- border: 1px solid #375EAB;
-}
-div#menu > a {
- color: white;
- background: #375EAB;
-}
-
-div#menu {
- float: right;
- min-width: 590px;
- padding: 10px 0;
- text-align: right;
-}
-div#menu > a {
- margin-right: 5px;
- margin-bottom: 10px;
-
- padding: 10px;
-}
-div#menu > input {
- position: relative;
- top: 1px;
- width: 60px;
- background: white;
- color: #222;
-}
-div#menu > input.inactive {
- color: #999;
-}
diff --git a/present/static/dir.js b/present/static/dir.js
deleted file mode 100644
index 5b0c37e..0000000
--- a/present/static/dir.js
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2012 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.
-
-// copied from $GOROOT/doc/godocs.js
-
-function bindEvent(el, e, fn) {
- if (el.addEventListener){
- el.addEventListener(e, fn, false);
- } else if (el.attachEvent){
- el.attachEvent('on'+e, fn);
- }
-}
-
-function godocs_bindSearchEvents() {
- var search = document.getElementById('search');
- if (!search) {
- // no search box (index disabled)
- return;
- }
- function clearInactive() {
- if (search.className == "inactive") {
- search.value = "";
- search.className = "";
- }
- }
- function restoreInactive() {
- if (search.value !== "") {
- return;
- }
- if (search.type != "search") {
- search.value = search.getAttribute("placeholder");
- }
- search.className = "inactive";
- }
- restoreInactive();
- bindEvent(search, 'focus', clearInactive);
- bindEvent(search, 'blur', restoreInactive);
-}
-
-bindEvent(window, 'load', godocs_bindSearchEvents);
diff --git a/present/static/favicon.ico b/present/static/favicon.ico
deleted file mode 100644
index 48854ff..0000000
--- a/present/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/present/static/print.css b/present/static/print.css
deleted file mode 100644
index 6c58257..0000000
--- a/present/static/print.css
+++ /dev/null
@@ -1,51 +0,0 @@
-/* set page layout */
-@page {
- size: A4 landscape;
-}
-
-body {
- display: block !important;
-}
-
-.slides {
- left: 0;
- top: 0;
-}
-
-.slides > article {
- position: relative;
-
- left: 0;
- top: 0;
-
- margin: 0 !important;
- page-break-inside: avoid;
-
- text-shadow: none; /* disable shadow */
-
- display: block !important;
- transform: translate(0) !important;
- -o-transform: translate(0) !important;
- -moz-transform: translate(0) !important;
- -webkit-transform: translate3d(0, 0, 0) !important;
-}
-
-div.code {
- background: rgb(240, 240, 240);
-}
-
-/* hide click areas */
-.slide-area, #prev-slide-area, #next-slide-area {
- display: none;
-}
-
-/* add explicit links */
-a:link:after, a:visited:after {
- content: " (" attr(href) ") ";
- font-size: 50%;
-}
-
-/* white background */
-body {
- background: rgb(255,255,255) !important;
-}
diff --git a/present/static/slides.js b/present/static/slides.js
deleted file mode 100644
index 489fb6b..0000000
--- a/present/static/slides.js
+++ /dev/null
@@ -1,516 +0,0 @@
-// Copyright 2012 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.
-
-var PERMANENT_URL_PREFIX = '/static/';
-
-var SLIDE_CLASSES = ['far-past', 'past', 'current', 'next', 'far-next'];
-
-var PM_TOUCH_SENSITIVITY = 15;
-
-var curSlide;
-
-/* ---------------------------------------------------------------------- */
-/* classList polyfill by Eli Grey
- * (http://purl.eligrey.com/github/classList.js/blob/master/classList.js) */
-
-if (typeof document !== "undefined" && !("classList" in document.createElement("a"))) {
-
-(function (view) {
-
-var
- classListProp = "classList"
- , protoProp = "prototype"
- , elemCtrProto = (view.HTMLElement || view.Element)[protoProp]
- , objCtr = Object
- strTrim = String[protoProp].trim || function () {
- return this.replace(/^\s+|\s+$/g, "");
- }
- , arrIndexOf = Array[protoProp].indexOf || function (item) {
- for (var i = 0, len = this.length; i < len; i++) {
- if (i in this && this[i] === item) {
- return i;
- }
- }
- return -1;
- }
- // Vendors: please allow content code to instantiate DOMExceptions
- , DOMEx = function (type, message) {
- this.name = type;
- this.code = DOMException[type];
- this.message = message;
- }
- , checkTokenAndGetIndex = function (classList, token) {
- if (token === "") {
- throw new DOMEx(
- "SYNTAX_ERR"
- , "An invalid or illegal string was specified"
- );
- }
- if (/\s/.test(token)) {
- throw new DOMEx(
- "INVALID_CHARACTER_ERR"
- , "String contains an invalid character"
- );
- }
- return arrIndexOf.call(classList, token);
- }
- , ClassList = function (elem) {
- var
- trimmedClasses = strTrim.call(elem.className)
- , classes = trimmedClasses ? trimmedClasses.split(/\s+/) : []
- ;
- for (var i = 0, len = classes.length; i < len; i++) {
- this.push(classes[i]);
- }
- this._updateClassName = function () {
- elem.className = this.toString();
- };
- }
- , classListProto = ClassList[protoProp] = []
- , classListGetter = function () {
- return new ClassList(this);
- }
-;
-// Most DOMException implementations don't allow calling DOMException's toString()
-// on non-DOMExceptions. Error's toString() is sufficient here.
-DOMEx[protoProp] = Error[protoProp];
-classListProto.item = function (i) {
- return this[i] || null;
-};
-classListProto.contains = function (token) {
- token += "";
- return checkTokenAndGetIndex(this, token) !== -1;
-};
-classListProto.add = function (token) {
- token += "";
- if (checkTokenAndGetIndex(this, token) === -1) {
- this.push(token);
- this._updateClassName();
- }
-};
-classListProto.remove = function (token) {
- token += "";
- var index = checkTokenAndGetIndex(this, token);
- if (index !== -1) {
- this.splice(index, 1);
- this._updateClassName();
- }
-};
-classListProto.toggle = function (token) {
- token += "";
- if (checkTokenAndGetIndex(this, token) === -1) {
- this.add(token);
- } else {
- this.remove(token);
- }
-};
-classListProto.toString = function () {
- return this.join(" ");
-};
-
-if (objCtr.defineProperty) {
- var classListPropDesc = {
- get: classListGetter
- , enumerable: true
- , configurable: true
- };
- try {
- objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
- } catch (ex) { // IE 8 doesn't support enumerable:true
- if (ex.number === -0x7FF5EC54) {
- classListPropDesc.enumerable = false;
- objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);
- }
- }
-} else if (objCtr[protoProp].__defineGetter__) {
- elemCtrProto.__defineGetter__(classListProp, classListGetter);
-}
-
-}(self));
-
-}
-/* ---------------------------------------------------------------------- */
-
-/* Slide movement */
-
-function getSlideEl(no) {
- if ((no < 0) || (no >= slideEls.length)) {
- return null;
- } else {
- return slideEls[no];
- }
-};
-
-function updateSlideClass(slideNo, className) {
- var el = getSlideEl(slideNo);
-
- if (!el) {
- return;
- }
-
- if (className) {
- el.classList.add(className);
- }
-
- for (var i in SLIDE_CLASSES) {
- if (className != SLIDE_CLASSES[i]) {
- el.classList.remove(SLIDE_CLASSES[i]);
- }
- }
-};
-
-function updateSlides() {
- for (var i = 0; i < slideEls.length; i++) {
- switch (i) {
- case curSlide - 2:
- updateSlideClass(i, 'far-past');
- break;
- case curSlide - 1:
- updateSlideClass(i, 'past');
- break;
- case curSlide:
- updateSlideClass(i, 'current');
- break;
- case curSlide + 1:
- updateSlideClass(i, 'next');
- break;
- case curSlide + 2:
- updateSlideClass(i, 'far-next');
- break;
- default:
- updateSlideClass(i);
- break;
- }
- }
-
- triggerLeaveEvent(curSlide - 1);
- triggerEnterEvent(curSlide);
-
- window.setTimeout(function() {
- // Hide after the slide
- disableSlideFrames(curSlide - 2);
- }, 301);
-
- enableSlideFrames(curSlide - 1);
- enableSlideFrames(curSlide + 2);
-
- updateHash();
-};
-
-function prevSlide() {
- if (curSlide > 0) {
- curSlide--;
-
- updateSlides();
- }
-};
-
-function nextSlide() {
- if (curSlide < slideEls.length - 1) {
- curSlide++;
-
- updateSlides();
- }
-};
-
-/* Slide events */
-
-function triggerEnterEvent(no) {
- var el = getSlideEl(no);
- if (!el) {
- return;
- }
-
- var onEnter = el.getAttribute('onslideenter');
- if (onEnter) {
- new Function(onEnter).call(el);
- }
-
- var evt = document.createEvent('Event');
- evt.initEvent('slideenter', true, true);
- evt.slideNumber = no + 1; // Make it readable
-
- el.dispatchEvent(evt);
-};
-
-function triggerLeaveEvent(no) {
- var el = getSlideEl(no);
- if (!el) {
- return;
- }
-
- var onLeave = el.getAttribute('onslideleave');
- if (onLeave) {
- new Function(onLeave).call(el);
- }
-
- var evt = document.createEvent('Event');
- evt.initEvent('slideleave', true, true);
- evt.slideNumber = no + 1; // Make it readable
-
- el.dispatchEvent(evt);
-};
-
-/* Touch events */
-
-function handleTouchStart(event) {
- if (event.touches.length == 1) {
- touchDX = 0;
- touchDY = 0;
-
- touchStartX = event.touches[0].pageX;
- touchStartY = event.touches[0].pageY;
-
- document.body.addEventListener('touchmove', handleTouchMove, true);
- document.body.addEventListener('touchend', handleTouchEnd, true);
- }
-};
-
-function handleTouchMove(event) {
- if (event.touches.length > 1) {
- cancelTouch();
- } else {
- touchDX = event.touches[0].pageX - touchStartX;
- touchDY = event.touches[0].pageY - touchStartY;
- event.preventDefault();
- }
-};
-
-function handleTouchEnd(event) {
- var dx = Math.abs(touchDX);
- var dy = Math.abs(touchDY);
-
- if ((dx > PM_TOUCH_SENSITIVITY) && (dy < (dx * 2 / 3))) {
- if (touchDX > 0) {
- prevSlide();
- } else {
- nextSlide();
- }
- }
-
- cancelTouch();
-};
-
-function cancelTouch() {
- document.body.removeEventListener('touchmove', handleTouchMove, true);
- document.body.removeEventListener('touchend', handleTouchEnd, true);
-};
-
-/* Preloading frames */
-
-function disableSlideFrames(no) {
- var el = getSlideEl(no);
- if (!el) {
- return;
- }
-
- var frames = el.getElementsByTagName('iframe');
- for (var i = 0, frame; frame = frames[i]; i++) {
- disableFrame(frame);
- }
-};
-
-function enableSlideFrames(no) {
- var el = getSlideEl(no);
- if (!el) {
- return;
- }
-
- var frames = el.getElementsByTagName('iframe');
- for (var i = 0, frame; frame = frames[i]; i++) {
- enableFrame(frame);
- }
-};
-
-function disableFrame(frame) {
- frame.src = 'about:blank';
-};
-
-function enableFrame(frame) {
- var src = frame._src;
-
- if (frame.src != src && src != 'about:blank') {
- frame.src = src;
- }
-};
-
-function setupFrames() {
- var frames = document.querySelectorAll('iframe');
- for (var i = 0, frame; frame = frames[i]; i++) {
- frame._src = frame.src;
- disableFrame(frame);
- }
-
- enableSlideFrames(curSlide);
- enableSlideFrames(curSlide + 1);
- enableSlideFrames(curSlide + 2);
-};
-
-function setupInteraction() {
- /* Clicking and tapping */
-
- var el = document.createElement('div');
- el.className = 'slide-area';
- el.id = 'prev-slide-area';
- el.addEventListener('click', prevSlide, false);
- document.querySelector('section.slides').appendChild(el);
-
- var el = document.createElement('div');
- el.className = 'slide-area';
- el.id = 'next-slide-area';
- el.addEventListener('click', nextSlide, false);
- document.querySelector('section.slides').appendChild(el);
-
- /* Swiping */
-
- document.body.addEventListener('touchstart', handleTouchStart, false);
-}
-
-/* Hash functions */
-
-function getCurSlideFromHash() {
- var slideNo = parseInt(location.hash.substr(1));
-
- if (slideNo) {
- curSlide = slideNo - 1;
- } else {
- curSlide = 0;
- }
-};
-
-function updateHash() {
- location.replace('#' + (curSlide + 1));
-};
-
-/* Event listeners */
-
-function handleBodyKeyDown(event) {
- // If we're in a code element, only handle pgup/down.
- var inCode = event.target.classList.contains("code");
-
- switch (event.keyCode) {
- case 39: // right arrow
- case 13: // Enter
- case 32: // space
- if (inCode) break;
- case 34: // PgDn
- nextSlide();
- event.preventDefault();
- break;
-
- case 37: // left arrow
- case 8: // Backspace
- if (inCode) break;
- case 33: // PgUp
- prevSlide();
- event.preventDefault();
- break;
-
- case 40: // down arrow
- if (inCode) break;
- nextSlide();
- event.preventDefault();
- break;
-
- case 38: // up arrow
- if (inCode) break;
- prevSlide();
- event.preventDefault();
- break;
- }
-};
-
-function addEventListeners() {
- document.addEventListener('keydown', handleBodyKeyDown, false);
-};
-
-/* Initialization */
-
-function addFontStyle() {
- var el = document.createElement('link');
- el.rel = 'stylesheet';
- el.type = 'text/css';
- el.href = '//fonts.googleapis.com/css?family=' +
- 'Open+Sans:regular,semibold,italic,italicsemibold|Droid+Sans+Mono';
-
- document.body.appendChild(el);
-};
-
-function addGeneralStyle() {
- var el = document.createElement('link');
- el.rel = 'stylesheet';
- el.type = 'text/css';
- el.href = PERMANENT_URL_PREFIX + 'styles.css';
- document.body.appendChild(el);
-
- var el = document.createElement('meta');
- el.name = 'viewport';
- el.content = 'width=1100,height=750';
- document.querySelector('head').appendChild(el);
-
- var el = document.createElement('meta');
- el.name = 'apple-mobile-web-app-capable';
- el.content = 'yes';
- document.querySelector('head').appendChild(el);
-};
-
-function addPrintStyle() {
- var el = document.createElement('link');
- el.rel = 'stylesheet';
- el.type = 'text/css';
- el.media = "print";
- el.href = PERMANENT_URL_PREFIX + 'print.css';
- document.body.appendChild(el);
-};
-
-function handleDomLoaded() {
- slideEls = document.querySelectorAll('section.slides > article');
-
- setupFrames();
-
- addFontStyle();
- addGeneralStyle();
- addPrintStyle();
- addEventListeners();
-
- updateSlides();
-
- setupInteraction();
-
- document.body.classList.add('loaded');
-};
-
-function initialize() {
- getCurSlideFromHash();
-
- if (window['_DEBUG']) {
- PERMANENT_URL_PREFIX = '../';
- }
-
- if (window['_DCL']) {
- handleDomLoaded();
- } else {
- document.addEventListener('DOMContentLoaded', handleDomLoaded, false);
- }
-}
-
-// If ?debug exists then load the script relative instead of absolute
-if (!window['_DEBUG'] && document.location.href.indexOf('?debug') !== -1) {
- document.addEventListener('DOMContentLoaded', function() {
- // Avoid missing the DomContentLoaded event
- window['_DCL'] = true
- }, false);
-
- window['_DEBUG'] = true;
- var script = document.createElement('script');
- script.type = 'text/javascript';
- script.src = '../slides.js';
- var s = document.getElementsByTagName('script')[0];
- s.parentNode.insertBefore(script, s);
-
- // Remove this script
- s.parentNode.removeChild(s);
-} else {
- initialize();
-}
diff --git a/present/static/styles.css b/present/static/styles.css
deleted file mode 100644
index 70d321e..0000000
--- a/present/static/styles.css
+++ /dev/null
@@ -1,453 +0,0 @@
-/* Framework */
-
-html {
- height: 100%;
-}
-
-body {
- margin: 0;
- padding: 0;
-
- display: block !important;
-
- height: 100%;
- min-height: 740px;
-
- overflow-x: hidden;
- overflow-y: auto;
-
- background: rgb(215, 215, 215);
- background: -o-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
- background: -moz-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
- background: -webkit-radial-gradient(rgb(240, 240, 240), rgb(190, 190, 190));
- background: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 500, from(rgb(240, 240, 240)), to(rgb(190, 190, 190)));
-
- -webkit-font-smoothing: antialiased;
-}
-
-.slides {
- width: 100%;
- height: 100%;
- left: 0;
- top: 0;
-
- position: absolute;
-
- -webkit-transform: translate3d(0, 0, 0);
-}
-
-.slides > article {
- display: block;
-
- position: absolute;
- overflow: hidden;
-
- width: 900px;
- height: 700px;
-
- left: 50%;
- top: 50%;
-
- margin-left: -450px;
- margin-top: -350px;
-
- padding: 40px 60px;
-
- box-sizing: border-box;
- -o-box-sizing: border-box;
- -moz-box-sizing: border-box;
- -webkit-box-sizing: border-box;
-
- border-radius: 10px;
- -o-border-radius: 10px;
- -moz-border-radius: 10px;
- -webkit-border-radius: 10px;
-
- background-color: white;
-
- border: 1px solid rgba(0, 0, 0, .3);
-
- transition: transform .3s ease-out;
- -o-transition: -o-transform .3s ease-out;
- -moz-transition: -moz-transform .3s ease-out;
- -webkit-transition: -webkit-transform .3s ease-out;
-}
-.slides.layout-widescreen > article {
- margin-left: -550px;
- width: 1100px;
-}
-.slides.layout-faux-widescreen > article {
- margin-left: -550px;
- width: 1100px;
-
- padding: 40px 160px;
-}
-
-.slides.layout-widescreen > article:not(.nobackground):not(.biglogo),
-.slides.layout-faux-widescreen > article:not(.nobackground):not(.biglogo) {
- background-position-x: 0, 840px;
-}
-
-/* Clickable/tappable areas */
-
-.slide-area {
- z-index: 1000;
-
- position: absolute;
- left: 0;
- top: 0;
- width: 150px;
- height: 700px;
-
- left: 50%;
- top: 50%;
-
- cursor: pointer;
- margin-top: -350px;
-
- tap-highlight-color: transparent;
- -o-tap-highlight-color: transparent;
- -moz-tap-highlight-color: transparent;
- -webkit-tap-highlight-color: transparent;
-}
-#prev-slide-area {
- margin-left: -550px;
-}
-#next-slide-area {
- margin-left: 400px;
-}
-.slides.layout-widescreen #prev-slide-area,
-.slides.layout-faux-widescreen #prev-slide-area {
- margin-left: -650px;
-}
-.slides.layout-widescreen #next-slide-area,
-.slides.layout-faux-widescreen #next-slide-area {
- margin-left: 500px;
-}
-
-/* Slides */
-
-.slides > article {
- display: none;
-}
-.slides > article.far-past {
- display: block;
- transform: translate(-2040px);
- -o-transform: translate(-2040px);
- -moz-transform: translate(-2040px);
- -webkit-transform: translate3d(-2040px, 0, 0);
-}
-.slides > article.past {
- display: block;
- transform: translate(-1020px);
- -o-transform: translate(-1020px);
- -moz-transform: translate(-1020px);
- -webkit-transform: translate3d(-1020px, 0, 0);
-}
-.slides > article.current {
- display: block;
- transform: translate(0);
- -o-transform: translate(0);
- -moz-transform: translate(0);
- -webkit-transform: translate3d(0, 0, 0);
-}
-.slides > article.next {
- display: block;
- transform: translate(1020px);
- -o-transform: translate(1020px);
- -moz-transform: translate(1020px);
- -webkit-transform: translate3d(1020px, 0, 0);
-}
-.slides > article.far-next {
- display: block;
- transform: translate(2040px);
- -o-transform: translate(2040px);
- -moz-transform: translate(2040px);
- -webkit-transform: translate3d(2040px, 0, 0);
-}
-
-.slides.layout-widescreen > article.far-past,
-.slides.layout-faux-widescreen > article.far-past {
- display: block;
- transform: translate(-2260px);
- -o-transform: translate(-2260px);
- -moz-transform: translate(-2260px);
- -webkit-transform: translate3d(-2260px, 0, 0);
-}
-.slides.layout-widescreen > article.past,
-.slides.layout-faux-widescreen > article.past {
- display: block;
- transform: translate(-1130px);
- -o-transform: translate(-1130px);
- -moz-transform: translate(-1130px);
- -webkit-transform: translate3d(-1130px, 0, 0);
-}
-.slides.layout-widescreen > article.current,
-.slides.layout-faux-widescreen > article.current {
- display: block;
- transform: translate(0);
- -o-transform: translate(0);
- -moz-transform: translate(0);
- -webkit-transform: translate3d(0, 0, 0);
-}
-.slides.layout-widescreen > article.next,
-.slides.layout-faux-widescreen > article.next {
- display: block;
- transform: translate(1130px);
- -o-transform: translate(1130px);
- -moz-transform: translate(1130px);
- -webkit-transform: translate3d(1130px, 0, 0);
-}
-.slides.layout-widescreen > article.far-next,
-.slides.layout-faux-widescreen > article.far-next {
- display: block;
- transform: translate(2260px);
- -o-transform: translate(2260px);
- -moz-transform: translate(2260px);
- -webkit-transform: translate3d(2260px, 0, 0);
-}
-
-/* Styles for slides */
-
-.slides > article {
- font-family: 'Open Sans', Arial, sans-serif;
-
- color: black;
- text-shadow: 0 1px 1px rgba(0, 0, 0, .1);
-
- font-size: 26px;
- line-height: 36px;
-
- letter-spacing: -1px;
-}
-
-b {
- font-weight: 600;
-}
-
-a {
- color: rgb(0, 102, 204);
- text-decoration: none;
-}
-a:visited {
- color: rgba(0, 102, 204, .75);
-}
-a:hover {
- color: black;
-}
-
-p {
- margin: 0;
- padding: 0;
-
- margin-top: 20px;
-}
-p:first-child {
- margin-top: 0;
-}
-
-h1 {
- font-size: 60px;
- line-height: 60px;
-
- padding: 0;
- margin: 0;
- margin-top: 200px;
- margin-bottom: 5px;
- padding-right: 40px;
-
- font-weight: 600;
-
- letter-spacing: -3px;
-
- color: rgb(51, 51, 51);
-}
-
-h2 {
- font-size: 45px;
- line-height: 45px;
-
- position: absolute;
- bottom: 150px;
-
- padding: 0;
- margin: 0;
- padding-right: 40px;
-
- font-weight: 600;
-
- letter-spacing: -2px;
-
- color: rgb(51, 51, 51);
-}
-
-h3 {
- font-size: 30px;
- line-height: 36px;
-
- padding: 0;
- margin: 0;
- padding-right: 40px;
-
- font-weight: 600;
-
- letter-spacing: -1px;
-
- color: rgb(51, 51, 51);
-}
-
-ul {
- margin: 0;
- padding: 0;
- margin-top: 20px;
- margin-left: 1.5em;
-}
-li {
- padding: 0;
- margin: 0 0 .5em 0;
-}
-
-div.code {
- padding: 5px 10px;
- margin-top: 20px;
- margin-bottom: 20px;
- overflow: hidden;
-
- background: rgb(240, 240, 240);
- border: 1px solid rgb(224, 224, 224);
-}
-pre {
- margin: 0;
- padding: 0;
-
- font-family: 'Droid Sans Mono', 'Courier New', monospace;
- font-size: 18px;
- line-height: 24px;
- letter-spacing: -1px;
-
- color: black;
-}
-
-code {
- font-size: 95%;
- font-family: 'Droid Sans Mono', 'Courier New', monospace;
-
- color: black;
-}
-
-article > .image {
- text-align: center;
- margin-top: 40px;
-}
-
-table {
- width: 100%;
- border-collapse: collapse;
- margin-top: 40px;
-}
-th {
- font-weight: 600;
- text-align: left;
-}
-td,
-th {
- border: 1px solid rgb(224, 224, 224);
- padding: 5px 10px;
- vertical-align: top;
-}
-
-p.link {
- margin-left: 20px;
-}
-
-/* Code */
-div.code {
- outline: 0px solid transparent;
-}
-div.playground {
- position: relative;
-}
-div.output {
- position: absolute;
- left: 50%;
- top: 50%;
- right: 40px;
- bottom: 40px;
- background: #202020;
- padding: 5px 10px;
- z-index: 2;
-
- border-radius: 10px;
- -o-border-radius: 10px;
- -moz-border-radius: 10px;
- -webkit-border-radius: 10px;
-
-}
-div.output pre {
- margin: 0;
- padding: 0;
- background: none;
- border: none;
- width: 100%;
- height: 100%;
- overflow: auto;
-}
-div.output .stdout, div.output pre {
- color: #e6e6e6;
-}
-div.output .stderr, div.output .error {
- color: rgb(244, 74, 63);
-}
-div.output .system, div.output .exit {
- color: rgb(255, 209, 77)
-}
-.buttons {
- position: relative;
- float: right;
- top: -60px;
- right: 10px;
-}
-div.output .buttons {
- position: absolute;
- float: none;
- top: auto;
- right: 5px;
- bottom: 5px;
-}
-
-/* Presenter details */
-.presenter {
- margin-top: 20px;
-}
-.presenter p,
-.presenter .link {
- margin: 0;
- font-size: 28px;
- line-height: 1.2em;
-}
-
-/* Output resize details */
-.ui-resizable-handle {
- position: absolute;
-}
-.ui-resizable-n {
- cursor: n-resize;
- height: 7px;
- width: 100%;
- top: -5px;
- left: 0;
-}
-.ui-resizable-w {
- cursor: w-resize;
- width: 7px;
- left: -5px;
- top: 0;
- height: 100%;
-}
-.ui-resizable-nw {
- cursor: nw-resize;
- width: 9px;
- height: 9px;
- left: -5px;
- top: -5px;
-}
diff --git a/present/templates/action.tmpl b/present/templates/action.tmpl
deleted file mode 100644
index 1fa0073..0000000
--- a/present/templates/action.tmpl
+++ /dev/null
@@ -1,46 +0,0 @@
-{/*
-This is the action template.
-It determines how the formatting actions are rendered.
-*/}
-
-{{define "section"}}
- <h{{len .Number}} id="TOC_{{.FormattedNumber}}">{{.FormattedNumber}} {{.Title}}</h{{len .Number}}>
- {{range .Elem}}{{elem $.Template .}}{{end}}
-{{end}}
-
-{{define "list"}}
- <ul>
- {{range .Bullet}}
- <li>{{style .}}</li>
- {{end}}
- </ul>
-{{end}}
-
-{{define "text"}}
- {{if .Pre}}
- <div class="code"><pre>{{range .Lines}}{{.}}{{end}}</pre></div>
- {{else}}
- <p>
- {{range $i, $l := .Lines}}{{if $i}}{{template "newline"}}
- {{end}}{{style $l}}{{end}}
- </p>
- {{end}}
-{{end}}
-
-{{define "code"}}
- <div class="code{{if playable .}} playground{{end}}" contenteditable="true" spellcheck="false">{{.Text}}</div>
-{{end}}
-
-{{define "image"}}
-<div class="image">
- <img src="{{.URL}}"{{with .Height}} height="{{.}}"{{end}}{{with .Width}} width="{{.}}"{{end}}>
-</div>
-{{end}}
-
-{{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}}
diff --git a/present/templates/article.tmpl b/present/templates/article.tmpl
deleted file mode 100644
index 40d1c93..0000000
--- a/present/templates/article.tmpl
+++ /dev/null
@@ -1,58 +0,0 @@
-{/* This is the article template. It defines how articles are formatted. */}
-
-{{define "root"}}
-<!DOCTYPE html>
-<html>
- <head>
- <title>{{.Title}}</title>
- <link type="text/css" rel="stylesheet" href="/static/article.css">
- <meta charset='utf-8'>
- </head>
-
- <body>
- <div id="topbar" class="wide">
- <div class="container">
- <div id="heading">{{.Title}}
- {{with .Subtitle}}{{.}}{{end}}
- </div>
- </div>
- </div>
- <div id="page" class="wide">
- <div class="container">
- {{with .Sections}}
- <div id="toc">
- {{template "TOC" .}}
- </div>
- {{end}}
-
- {{range .Sections}}
- {{elem $.Template .}}
- {{end}}{{/* of Section block */}}
-
- {{if .Authors}}
- <h2>Authors</h2>
- {{range .Authors}}
- <div class="author">
- {{range .Elem}}{{elem $.Template .}}{{end}}
- </div>
- {{end}}
- {{end}}
- </div>
- </div>
- <script src='/play.js'></script>
- </body>
-</html>
-{{end}}
-
-{{define "TOC"}}
- <ul>
- {{range .}}
- <li><a href="#TOC_{{.FormattedNumber}}">{{.Title}}</a></li>
- {{with .Sections}}{{template "TOC" .}}{{end}}
- {{end}}
- </ul>
-{{end}}
-
-{{define "newline"}}
-{{/* No automatic line break. Paragraphs are free-form. */}}
-{{end}}
diff --git a/present/templates/slides.tmpl b/present/templates/slides.tmpl
deleted file mode 100644
index d2abfa1..0000000
--- a/present/templates/slides.tmpl
+++ /dev/null
@@ -1,58 +0,0 @@
-{/* This is the slide template. It defines how presentations are formatted. */}
-
-{{define "root"}}
-<!DOCTYPE html>
-<html>
- <head>
- <title>{{.Title}}</title>
- <meta charset='utf-8'>
- <script src='/static/slides.js'></script>
- </head>
-
- <body style='display: none'>
-
- <section class='slides layout-widescreen'>
-
- <article>
- <h1>{{.Title}}</h1>
- {{with .Subtitle}}<h3>{{.}}</h3>{{end}}
- {{if not .Time.IsZero}}<h3>{{.Time.Format "2 January 2006"}}</h3>{{end}}
- {{range .Authors}}
- <div class="presenter">
- {{range .TextElem}}{{elem $.Template .}}{{end}}
- </div>
- {{end}}
- </article>
-
- {{range $i, $s := .Sections}}
- <!-- start of slide {{$s.Number}} -->
- <article>
- {{if $s.Elem}}
- <h3>{{$s.Title}}</h3>
- {{range $s.Elem}}{{elem $.Template .}}{{end}}
- {{else}}
- <h2>{{$s.Title}}</h2>
- {{end}}
- </article>
- <!-- end of slide {{$i}} -->
- {{end}}{{/* of Slide block */}}
-
- <article>
- <h3>Thank you</h1>
- {{range .Authors}}
- <div class="presenter">
- {{range .Elem}}{{elem $.Template .}}{{end}}
- </div>
- {{end}}
- </article>
-
- </body>
- {{if .PlayEnabled}}
- <script src='/play.js'></script>
- {{end}}
-</html>
-{{end}}
-
-{{define "newline"}}
-<br>
-{{end}}