diff --git a/.presentx/static/article.css b/.presentx/static/article.css new file mode 100644 index 0000000..382c1cd --- /dev/null +++ b/.presentx/static/article.css @@ -0,0 +1,180 @@ +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: 18px; + padding: 2px 5px; +} +h2 { + font-size: 16px; +} +h3 { + font-size: 16px; +} +h3, +h4 { + margin: 20px 5px; +} +h4 { + font-size: 16px; +} + +div#heading { + margin: 0 0 10px 0; + padding: 21px 0; + font-size: 20px; + font-weight: bold; +} + +div#heading .author { + padding-top: 10px; + font-size: 14px; + font-weight: normal; +} + +div#topbar { +} + +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: 0; + padding: 0 20px; +} + +/* legacy - taken over by prism.js */ +/* div.code, +div.output { + margin: 20px 20px 20px 40px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} */ + +div.output { + padding: 10px; +} + +/* div.code { + background: white; +} */ +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: #eee; + box-shadow: 3px 3px 2px #888888; + + max-width: 33%; + + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + border-radius: 5px; +} + +#tochead { + font-weight: bold; + font-variant: small-caps; + font-size: 100%; + text-align: center; + padding-bottom: 5px; +} + +#toc ul, +#toc a { + list-style-type: none; + padding-left: 0px; + color: black; + margin: 0px; +} + +ul.toc-inner a { + padding-left: 10px !important; +} + +@media print { + .no-print, + .no-print * { + display: none !important; + } +} diff --git a/.presentx/static/dir.css b/.presentx/static/dir.css new file mode 100644 index 0000000..5bd039e --- /dev/null +++ b/.presentx/static/dir.css @@ -0,0 +1,187 @@ +/* copied from $GOROOT/doc/style.css */ + +body { + margin: 0; + font-family: Helvetica, Arial, sans-serif; + font-size: 16px; +} +/* legacy-taken over by prism.js +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/.presentx/static/dir.js b/.presentx/static/dir.js new file mode 100644 index 0000000..00ad22c --- /dev/null +++ b/.presentx/static/dir.js @@ -0,0 +1,41 @@ +// 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/.presentx/static/favicon.ico b/.presentx/static/favicon.ico new file mode 100644 index 0000000..48854ff Binary files /dev/null and b/.presentx/static/favicon.ico differ diff --git a/.presentx/static/jquery-ui.js b/.presentx/static/jquery-ui.js new file mode 100644 index 0000000..f391938 --- /dev/null +++ b/.presentx/static/jquery-ui.js @@ -0,0 +1,6 @@ +/*! 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("").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("").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:"
",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("
").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("
"),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.maxWidthe.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("
"),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/.presentx/static/notes.css b/.presentx/static/notes.css new file mode 100644 index 0000000..9a897be --- /dev/null +++ b/.presentx/static/notes.css @@ -0,0 +1,32 @@ +p { + margin: 10px; +} + +#presenter-slides { + display: block; + margin-top: -10px; + margin-left: -17px; + position: fixed; + border: 0; + width: 146%; + height: 750px; + + transform: scale(0.7, 0.7); + transform-origin: top left; + -moz-transform: scale(0.7); + -moz-transform-origin: top left; + -o-transform: scale(0.7); + -o-transform-origin: top left; + -webkit-transform: scale(0.7); + -webkit-transform-origin: top left; +} + +#presenter-notes { + margin-top: -180px; + font-family: 'Open Sans', Arial, sans-serif; + height: 30%; + width: 100%; + overflow: scroll; + position: fixed; + top: 706px; +} diff --git a/.presentx/static/notes.js b/.presentx/static/notes.js new file mode 100644 index 0000000..a6d327f --- /dev/null +++ b/.presentx/static/notes.js @@ -0,0 +1,175 @@ +// 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. + +// Store child window object which will display slides with notes +var notesWindow = null; + +var isParentWindow = window.parent == window; + +// When parent window closes, clear storage and close child window +if (isParentWindow) { + window.onbeforeunload = function() { + localStorage.clear(); + if (notesWindow) notesWindow.close(); + }; +} + +function toggleNotesWindow() { + if (!isParentWindow) return; + if (notesWindow) { + notesWindow.close(); + notesWindow = null; + return; + } + + initNotes(); +} + +// Create an unique key for the local storage so we don't mix the +// destSlide of different presentations. For golang.org/issue/24688. +function destSlideKey() { + var key = ''; + if (notesWindow) { + var slides = notesWindow.document.getElementById('presenter-slides'); + key = slides.src.split('#')[0]; + } else { + key = window.location.href.split('#')[0]; + } + return 'destSlide:' + key; +} + +function initNotes() { + notesWindow = window.open('', '', 'width=1000,height=700'); + var w = notesWindow; + var slidesUrl = window.location.href; + + // Hack to apply css. Requires existing html on notesWindow. + w.document.write("
"); + + w.document.title = window.document.title; + + var slides = w.document.createElement('iframe'); + slides.id = 'presenter-slides'; + slides.src = slidesUrl; + w.document.body.appendChild(slides); + + var curSlide = parseInt(localStorage.getItem(destSlideKey()), 10); + var formattedNotes = ''; + var section = sections[curSlide - 1]; + // curSlide is 0 when initialized from the first page of slides. + // Check if section is valid before retrieving Notes. + if (section) { + formattedNotes = formatNotes(section.Notes); + } else if (curSlide == 0) { + formattedNotes = formatNotes(titleNotes); + } + + // setTimeout needed for Firefox + setTimeout(function() { + slides.focus(); + }, 100); + + var notes = w.document.createElement('div'); + notes.id = 'presenter-notes'; + notes.innerHTML = formattedNotes; + w.document.body.appendChild(notes); + + w.document.close(); + + function addPresenterNotesStyle() { + var el = w.document.createElement('link'); + el.rel = 'stylesheet'; + el.type = 'text/css'; + el.href = PERMANENT_URL_PREFIX + 'notes.css'; + w.document.body.appendChild(el); + w.document.querySelector('head').appendChild(el); + } + + addPresenterNotesStyle(); + + // Add listener on notesWindow to update notes when triggered from + // parent window + w.addEventListener('storage', updateNotes, false); +} + +function formatNotes(notes) { + var formattedNotes = ''; + if (notes) { + for (var i = 0; i < notes.length; i++) { + formattedNotes = formattedNotes + '

' + notes[i] + '

'; + } + } + return formattedNotes; +} + +function updateNotes() { + // When triggered from parent window, notesWindow is null + // The storage event listener on notesWindow will update notes + if (!notesWindow) return; + var destSlide = parseInt(localStorage.getItem(destSlideKey()), 10); + var section = sections[destSlide - 1]; + var el = notesWindow.document.getElementById('presenter-notes'); + + if (!el) return; + + if (section && section.Notes) { + el.innerHTML = formatNotes(section.Notes); + } else if (destSlide == 0) { + el.innerHTML = formatNotes(titleNotes); + } else { + el.innerHTML = ''; + } +} + +/* Playground syncing */ + +// When presenter notes are enabled, playground click handlers are +// stored here to sync click events on the correct playground +var playgroundHandlers = { onRun: [], onKill: [], onClose: [] }; + +function updatePlay(e) { + var i = localStorage.getItem('play-index'); + + switch (e.key) { + case 'play-index': + return; + case 'play-action': + // Sync 'run', 'kill', 'close' actions + var action = localStorage.getItem('play-action'); + playgroundHandlers[action][i](e); + return; + case 'play-code': + // Sync code editing + var play = document.querySelectorAll('div.playground')[i]; + play.innerHTML = localStorage.getItem('play-code'); + return; + case 'output-style': + // Sync resizing of playground output + var out = document.querySelectorAll('.output')[i]; + out.style = localStorage.getItem('output-style'); + return; + } +} + +// Reset 'run', 'kill', 'close' storage items when synced +// so that successive actions can be synced correctly +function updatePlayStorage(action, index, e) { + localStorage.setItem('play-index', index); + + if (localStorage.getItem('play-action') === action) { + // We're the receiving window, and the message has been received + localStorage.removeItem('play-action'); + } else { + // We're the triggering window, send the message + localStorage.setItem('play-action', action); + } + + if (action === 'onRun') { + if (localStorage.getItem('play-shiftKey') === 'true') { + localStorage.removeItem('play-shiftKey'); + } else if (e.shiftKey) { + localStorage.setItem('play-shiftKey', e.shiftKey); + } + } +} diff --git a/.presentx/static/prism-github-dark.css b/.presentx/static/prism-github-dark.css new file mode 100644 index 0000000..f4dfadc --- /dev/null +++ b/.presentx/static/prism-github-dark.css @@ -0,0 +1,251 @@ +@font-face { + font-family: "JetBrains Mono"; + src: url("https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Medium.eot") + format("embedded-opentype"), + url("https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Medium.woff2") + format("woff2"), + url("https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/webfonts/JetBrainsMono-Medium.woff") + format("woff"), + url("https://raw.githubusercontent.com/JetBrains/JetBrainsMono/master/fonts/ttf/JetBrainsMono-Medium.ttf") + format("truetype"); + font-weight: normal; + font-style: normal; +} + +.slides > article { + text-shadow: none !important; +} + +div.code { + background: #24292e !important; + border-radius: 0.5rem; + box-shadow: 0 3px 6px -3px rgba(0, 0, 0.1); + padding: 0rem 2rem !important; + border: none !important; + margin: 0.5em 0; + tab-size: 4; +} + +code[class*="language-"], +pre[class*="language-"] { + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + hyphens: none; + color: inherit; + text-shadow: none; + font-family: "JetBrains Mono", monospace; + /* set calt to on to enable ligatures */ + font-feature-settings: "liga" on, "calt" off; + -webkit-font-feature-settings: "liga" on, "calt" off; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + + line-height: 1.3em; + font-weight: 500; + letter-spacing: 0 !important; +} + +code[class*="language-"]::-moz-selection, +pre[class*="language-"]::-moz-selection, +code[class*="language-"] ::-moz-selection, +pre[class*="language-"] ::-moz-selection { + text-shadow: none; + opacity: 1; + color: #fafbfc; + background: #363636; +} + +code[class*="language-"]::selection, +pre[class*="language-"]::selection, +code[class*="language-"] ::selection, +pre[class*="language-"] ::selection { + text-shadow: none; + opacity: 1; + color: #fafbfc; + background: #363636; +} + +@media print { + code[class*="language-"], + pre[class*="language-"] { + text-shadow: none !important; + } +} + +:not(pre) > code[class*="language-"] { + white-space: normal; + color: #fafbfc; + background: #24292e; + border-radius: 0.2em; +} + +pre > code[class*="language-"] { + background: none; +} + +pre[class*="language-"] { + overflow: auto; + position: relative; + color: #fafbfc; + background: #24292e; + border-radius: 0; +} + +pre[class*="language-"].language-css > code, +pre[class*="language-"].language-sass > code, +pre[class*="language-"].language-scss > code { + color: #fd9170; +} + +[class*="language-"] .namespace { + opacity: 0.7; +} + +.token.atrule { + color: #ff6171; +} + +.token.attr-name { + color: #ffcb6b; +} + +.token.attr-value { + color: #b392f0; +} + +.token.attribute { + color: #b392f0; +} + +.token.boolean { + color: #ff6171; +} + +.token.builtin { + color: #ff6171; +} + +.token.cdata { + color: #80cbc4; +} + +.token.char { + color: #80cbc4; +} + +.token.class { + color: #ffcb6b; +} + +.token.class-name { + color: #b392f0; +} + +.token.comment { + color: #6a737d; +} + +.token.constant { + color: #ff6171; +} + +.token.deleted { + color: #b392f0; +} + +.token.doctype { + color: #6a737d; +} + +.token.entity { + color: #b392f0; +} + +.token.function { + color: #61a7ff; +} + +.token.hexcode { + color: #61a7ff; +} + +.token.id { + color: #ff6171; + font-weight: bold; +} + +.token.important { + color: #ff6171; + font-weight: bold; +} + +.token.inserted { + color: #80cbc4; +} + +.token.keyword { + color: #ff6171; +} + +.token.number { + color: #fd9170; +} + +.token.operator { + color: #89ddff; +} + +.token.prolog { + color: #6a737d; +} + +.token.property { + color: #fafbfc; +} + +.token.pseudo-class { + color: #b392f0; +} + +.token.pseudo-element { + color: #b392f0; +} + +.token.punctuation { + color: #89ddff; +} + +.token.regex { + color: #61a7ff; +} + +.token.selector { + color: #b392f0; +} + +.token.string { + color: #a3d0ff; +} + +.token.symbol { + color: #ff6171; +} + +.token.tag { + color: #b392f0; +} + +.token.unit { + color: #fd9170; +} + +.token.url { + color: #b392f0; +} + +.token.variable { + color: #b392f0; +} diff --git a/.presentx/static/prism.css b/.presentx/static/prism.css new file mode 100644 index 0000000..b1c333d --- /dev/null +++ b/.presentx/static/prism.css @@ -0,0 +1,228 @@ +/* PrismJS 1.22.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+go&plugins=line-highlight+line-numbers+remove-initial-line-feed */ +/** + * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML + * Based on https://github.com/chriskempson/tomorrow-theme + * @author Rose Pritchard + */ + +code[class*="language-"], +pre[class*="language-"] { + color: #ccc; + caret-color: #ccc; + background: none; + font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; + font-size: 0.95em; + border-radius: 7px; + text-align: left; + white-space: pre; + word-spacing: normal; + word-break: normal; + word-wrap: normal; + line-height: 1.2; + + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; + + -webkit-hyphens: none; + -moz-hyphens: none; + -ms-hyphens: none; + hyphens: none; + +} + +/* Code blocks */ +pre[class*="language-"] { + padding: 0.6em; + margin: .5em 0; + overflow: auto; +} + +:not(pre) > code[class*="language-"], +pre[class*="language-"] { + background: #2d2d2d; +} + +/* Inline code */ +:not(pre) > code[class*="language-"] { + padding: .1em; + border-radius: .3em; + white-space: normal; +} + +.token.comment, +.token.block-comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #999; +} + +.token.punctuation { + color: #ccc; +} + +.token.tag, +.token.attr-name, +.token.namespace, +.token.deleted { + color: #e2777a; +} + +.token.function-name { + color: #6196cc; +} + +.token.boolean, +.token.number, +.token.function { + color: #f08d49; +} + +.token.property, +.token.class-name, +.token.constant, +.token.symbol { + color: #f8c555; +} + +.token.selector, +.token.important, +.token.atrule, +.token.keyword, +.token.builtin { + color: #cc99cd; +} + +.token.string, +.token.char, +.token.attr-value, +.token.regex, +.token.variable { + color: #7ec699; +} + +.token.operator, +.token.entity, +.token.url { + color: #67cdcc; +} + +.token.important, +.token.bold { + font-weight: bold; +} +.token.italic { + font-style: italic; +} + +.token.entity { + cursor: help; +} + +.token.inserted { + color: green; +} + +pre[data-line] { + position: relative; + padding: 1em 0 1em 3em; +} + +.line-highlight { + position: absolute; + left: 0; + right: 0; + padding: inherit 0; + margin-top: 1em; /* Same as .prism’s padding-top */ + + background: hsla(24, 20%, 50%,.08); + background: linear-gradient(to right, hsla(24, 20%, 50%,.1) 70%, hsla(24, 20%, 50%,0)); + + pointer-events: none; + + line-height: inherit; + white-space: pre; +} + + .line-highlight:before, + .line-highlight[data-end]:after { + content: attr(data-start); + position: absolute; + top: .4em; + left: .6em; + min-width: 1em; + padding: 0 .5em; + background-color: hsla(24, 20%, 50%,.4); + color: hsl(24, 20%, 95%); + font: bold 65%/1.5 sans-serif; + text-align: center; + vertical-align: .3em; + border-radius: 999px; + text-shadow: none; + box-shadow: 0 1px white; + } + + .line-highlight[data-end]:after { + content: attr(data-end); + top: auto; + bottom: .4em; + } + +.line-numbers .line-highlight:before, +.line-numbers .line-highlight:after { + content: none; +} + +pre[id].linkable-line-numbers span.line-numbers-rows { + pointer-events: all; +} +pre[id].linkable-line-numbers span.line-numbers-rows > span:before { + cursor: pointer; +} +pre[id].linkable-line-numbers span.line-numbers-rows > span:hover:before { + background-color: rgba(128, 128, 128, .2); +} + +pre[class*="language-"].line-numbers { + position: relative; + padding-left: 3.8em; + counter-reset: linenumber; +} + +pre[class*="language-"].line-numbers > code { + position: relative; + white-space: inherit; +} + +.line-numbers .line-numbers-rows { + position: absolute; + pointer-events: none; + top: 0; + font-size: 100%; + left: -3.8em; + width: 3em; /* works for line-numbers below 1000 lines */ + letter-spacing: -1px; + border-right: 1px solid #999; + + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + +} + + .line-numbers-rows > span { + display: block; + counter-increment: linenumber; + } + + .line-numbers-rows > span:before { + content: counter(linenumber); + color: #999; + display: block; + padding-right: 0.8em; + text-align: right; + } + diff --git a/.presentx/static/prism.js b/.presentx/static/prism.js new file mode 100644 index 0000000..4e802fe --- /dev/null +++ b/.presentx/static/prism.js @@ -0,0 +1,6 @@ +/* PrismJS 1.22.0 +https://prismjs.com/download.html#themes=prism-tomorrow&languages=clike+go&plugins=normalize-whitespace */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(u){var c=/\blang(?:uage)?-([\w-]+)\b/i,n=0,M={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof W?new W(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=l.reach);k+=y.value.length,y=y.next){var b=y.value;if(t.length>n.length)return;if(!(b instanceof W)){var x=1;if(h&&y!=t.tail.prev){m.lastIndex=k;var w=m.exec(n);if(!w)break;var A=w.index+(f&&w[1]?w[1].length:0),P=w.index+w[0].length,S=k;for(S+=y.value.length;S<=A;)y=y.next,S+=y.value.length;if(S-=y.value.length,k=S,y.value instanceof W)continue;for(var E=y;E!==t.tail&&(Sl.reach&&(l.reach=j);var C=y.prev;L&&(C=I(t,C,L),k+=L.length),z(t,C,x);var _=new W(o,g?M.tokenize(O,g):O,v,O);y=I(t,C,_),N&&I(t,y,N),1"+a.content+""},!u.document)return u.addEventListener&&(M.disableWorkerMessageHandler||u.addEventListener("message",function(e){var n=JSON.parse(e.data),t=n.language,r=n.code,a=n.immediateClose;u.postMessage(M.highlight(r,M.languages[t],t)),a&&u.close()},!1)),M;var e=M.util.currentScript();function t(){M.manual||M.highlightAll()}if(e&&(M.filename=e.src,e.hasAttribute("data-manual")&&(M.manual=!0)),!M.manual){var r=document.readyState;"loading"===r||"interactive"===r&&e&&e.defer?document.addEventListener("DOMContentLoaded",t):window.requestAnimationFrame?window.requestAnimationFrame(t):window.setTimeout(t,16)}return M}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|interface|extends|implements|trait|instanceof|new)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,boolean:/\b(?:true|false)\b/,function:/\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+\.?\d*|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(?:bool|byte|complex(?:64|128)|error|float(?:32|64)|rune|string|u?int(?:8|16|32|64)?|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(?:ln)?|real|recover)\b/,boolean:/\b(?:_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/(?:\b0x[a-f\d]+|(?:\b\d+\.?\d*|\B\.\d+)(?:e[-+]?\d+)?)i?/i,string:{pattern:/(["'`])(?:\\[\s\S]|(?!\1)[^\\])*\1/,greedy:!0}}),delete Prism.languages.go["class-name"]; +!function(){var i=Object.assign||function(e,n){for(var t in n)n.hasOwnProperty(t)&&(e[t]=n[t]);return e};function e(e){this.defaults=i({},e)}function s(e){for(var n=0,t=0;t= 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() { + if (window.trackPageview) window.trackPageview(); + + 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() { + hideHelpText(); + if (curSlide > 0) { + curSlide--; + + updateSlides(); + } + + if (notesEnabled) localStorage.setItem(destSlideKey(), curSlide); +} + +function nextSlide() { + hideHelpText(); + if (curSlide < slideEls.length - 1) { + curSlide++; + + updateSlides(); + } + + if (notesEnabled) localStorage.setItem(destSlideKey(), curSlide); +} + +/* 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 78: // 'N' opens presenter notes window + if (!inCode && notesEnabled) toggleNotesWindow(); + break; + case 72: // 'H' hides the help text + case 27: // escape key + if (!inCode) hideHelpText(); + break; + + 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 scaleSmallViewports() { + var el = document.querySelector('section.slides'); + var transform = ''; + var sWidthPx = 1250; + var sHeightPx = 750; + var sAspectRatio = sWidthPx / sHeightPx; + var wAspectRatio = window.innerWidth / window.innerHeight; + + if (wAspectRatio <= sAspectRatio && window.innerWidth < sWidthPx) { + transform = 'scale(' + window.innerWidth / sWidthPx + ')'; + } else if (window.innerHeight < sHeightPx) { + transform = 'scale(' + window.innerHeight / sHeightPx + ')'; + } + el.style.transform = transform; +} + +function addEventListeners() { + document.addEventListener('keydown', handleBodyKeyDown, false); + var resizeTimeout; + window.addEventListener('resize', function() { + // throttle resize events + window.clearTimeout(resizeTimeout); + resizeTimeout = window.setTimeout(function() { + resizeTimeout = null; + scaleSmallViewports(); + }, 50); + }); + + // Force reset transform property of section.slides when printing page. + // Use both onbeforeprint and matchMedia for compatibility with different browsers. + var beforePrint = function() { + var el = document.querySelector('section.slides'); + el.style.transform = ''; + }; + window.onbeforeprint = beforePrint; + if (window.matchMedia) { + var mediaQueryList = window.matchMedia('print'); + mediaQueryList.addListener(function(mql) { + if (mql.matches) beforePrint(); + }); + } +} + +/* 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=device-width,height=device-height,initial-scale=1'; + 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); + + scaleSmallViewports(); +} + +function handleDomLoaded() { + slideEls = document.querySelectorAll('section.slides > article'); + + setupFrames(); + + addFontStyle(); + addGeneralStyle(); + addEventListeners(); + + updateSlides(); + + setupInteraction(); + + if ( + window.location.hostname == 'localhost' || + window.location.hostname == '127.0.0.1' || + window.location.hostname == '::1' + ) { + hideHelpText(); + } + + document.body.classList.add('loaded'); + + setupNotesSync(); +} + +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(); +} + +/* Synchronize windows when notes are enabled */ + +function setupNotesSync() { + if (!notesEnabled) return; + + function setupPlayResizeSync() { + var out = document.getElementsByClassName('output'); + for (var i = 0; i < out.length; i++) { + $(out[i]).bind('resize', function(event) { + if ($(event.target).hasClass('ui-resizable')) { + localStorage.setItem('play-index', i); + localStorage.setItem('output-style', out[i].style.cssText); + } + }); + } + } + function setupPlayCodeSync() { + var play = document.querySelectorAll('div.playground'); + for (var i = 0; i < play.length; i++) { + play[i].addEventListener('input', inputHandler, false); + + function inputHandler(e) { + localStorage.setItem('play-index', i); + localStorage.setItem('play-code', e.target.innerHTML); + } + } + } + + setupPlayCodeSync(); + setupPlayResizeSync(); + localStorage.setItem(destSlideKey(), curSlide); + window.addEventListener('storage', updateOtherWindow, false); +} + +// An update to local storage is caught only by the other window +// The triggering window does not handle any sync actions +function updateOtherWindow(e) { + // Ignore remove storage events which are not meant to update the other window + var isRemoveStorageEvent = !e.newValue; + if (isRemoveStorageEvent) return; + + var destSlide = localStorage.getItem(destSlideKey()); + while (destSlide > curSlide) { + nextSlide(); + } + while (destSlide < curSlide) { + prevSlide(); + } + + updatePlay(e); + updateNotes(); +} diff --git a/.presentx/static/styles.css b/.presentx/static/styles.css new file mode 100644 index 0000000..e5367fb --- /dev/null +++ b/.presentx/static/styles.css @@ -0,0 +1,565 @@ +@media screen { + /* Framework */ + html { + height: 100%; + } + + body { + margin: 0; + padding: 0; + + display: block !important; + + height: 100%; + height: 100vh; + + overflow: hidden; + + 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, 0.3); + + transition: transform 0.3s ease-out; + -o-transition: -o-transform 0.3s ease-out; + -moz-transition: -moz-transform 0.3s ease-out; + -webkit-transition: -webkit-transform 0.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); + } +} + +@media print { + /* Set page layout */ + @page { + size: A4 landscape; + } + + body { + display: block !important; + } + + .slides > article { + display: block; + + position: relative; + + page-break-inside: never; + page-break-after: always; + + overflow: hidden; + } + + h2 { + position: static !important; + margin-top: 400px !important; + margin-bottom: 100px !important; + } +/* legacy - taken over by prism.js + div.code { + background: rgb(240, 240, 240); + } */ + + /* Add explicit links */ + a:link:after, + a:visited:after { + content: ' (' attr(href) ') '; + font-size: 50%; + } + + #help { + display: none; + visibility: hidden; + } +} + +/* Styles for slides */ + +.slides > article { + font-family: 'Open Sans', Arial, sans-serif; + + color: black; + text-shadow: 0 1px 1px rgba(0, 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, 0.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 0.5em 0; +} + +/*legacy - taken over by prism.js + 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; +} + +pre.numbers span:before { + content: attr(num); + margin-right: 1em; + display: inline-block; +} + +/* legacy - taken over by prism.js +code { + font-size: 95%; + font-family: 'Droid Sans Mono', 'Courier New', monospace; + + color: black; +} */ + +article > .image, +article > .video { + text-align: center; + margin-top: 40px; +} + +article.background { + background-size: contain; + background-repeat: round; +} + +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; +} + +.pagenumber { + color: #8c8c8c; + font-size: 75%; + position: absolute; + bottom: 0px; + right: 10px; +} + +/* Code legacy - taken over by prism.js */ +/* 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(255, 200, 200); +} +div.output .system, +div.output .exit { + color: rgb(255, 230, 120); +} +.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; +} +iframe { + border: none; +} +figcaption { + color: #666; + text-align: center; + font-size: 0.75em; +} + +#help { + font-family: 'Open Sans', Arial, sans-serif; + text-align: center; + color: white; + background: #000; + opacity: 0.5; + position: fixed; + bottom: 25px; + left: 50px; + right: 50px; + padding: 20px; + + border-radius: 10px; + -o-border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + +code { + padding: 0.1em 0.3em; + padding-top: 0.1em; + padding-bottom: 0.2em; + background-color: antiquewhite; + font-weight: bold; + color: black; +} + diff --git a/.presentx/templates/action.tmpl b/.presentx/templates/action.tmpl new file mode 100644 index 0000000..943e524 --- /dev/null +++ b/.presentx/templates/action.tmpl @@ -0,0 +1,66 @@ +{/* +This is the action template. +It determines how the formatting actions are rendered. +*/} + +{{define "section"}} + {{.FormattedNumber}} {{.Title}} + {{range .Elem}}{{elem $.Template .}}{{end}} +{{end}} + +{{define "list"}} +
    + {{range .Bullet}} +
  • {{style .}}
  • + {{end}} +
+{{end}} + +{{define "text"}} + {{if .Pre}} +
{{range .Lines}}{{.}}{{end}}
+ {{else}} +

+ {{range $i, $l := .Lines}}{{if $i}}{{template "newline"}} + {{end}}{{style $l}}{{end}} +

+ {{end}} +{{end}} + +{{define "oldcode"}} +
{{.Text}}
+{{end}} + +{{define "code"}} +
{{.Text}}
+{{end}} + +{{define "image"}} +
+ +
+{{end}} + +{{define "video"}} +
+ +
+{{end}} + +{{define "background"}} +
+ +
+{{end}} + +{{define "iframe"}} + +{{end}} + +{{define "link"}}
{{end}} + +{{define "html"}}{{.HTML}}{{end}} + +{{define "caption"}}
{{style .Text}}
{{end}} diff --git a/.presentx/templates/article.tmpl b/.presentx/templates/article.tmpl new file mode 100644 index 0000000..0a223c6 --- /dev/null +++ b/.presentx/templates/article.tmpl @@ -0,0 +1,98 @@ +{/* This is the article template. It defines how articles are formatted. */} + +{{define "root"}} + + + + {{.Title}} + + + + + + +
+
+
{{.Title}} + {{with .Subtitle}}{{.}}{{end}} + {{if .Authors}} + {{range .Authors}} +
+ {{range .Elem}}{{elem $.Template .}}{{end}} +
+ {{end}} + {{end}} +
+
+
+
+
+ {{with .Sections}} +
+
Contents
+ {{template "TOC" .}} +
+ {{end}} + + {{range .Sections}} + {{elem $.Template .}} + {{end}}{{/* of Section block */}} + +
+
+ + {{if .PlayEnabled}} + + {{end}} + + + + +{{end}} + +{{define "TOC"}} + +{{end}} + +{{define "TOC-Inner"}} + +{{end}} + +{{define "newline"}} +{{/* No automatic line break. Paragraphs are free-form. */}} +{{end}} diff --git a/.presentx/templates/dir.tmpl b/.presentx/templates/dir.tmpl new file mode 100644 index 0000000..1732623 --- /dev/null +++ b/.presentx/templates/dir.tmpl @@ -0,0 +1,108 @@ + + + + + Talks - The Go Programming Language + + + + + + +
+ +
+ +

Go talks

+ + {{with .Path}}

{{.}}

{{end}} + + {{with .Articles}} +

Articles:

+
+ {{range .}} +
{{.Name}}: {{.Title}}
+ {{end}} +
+ {{end}} + + {{with .Slides}} +

Slide decks:

+
+ {{range .}} +
{{.Name}}: {{.Title}}
+ {{end}} +
+ {{end}} + + {{with .Other}} +

Files:

+
+ {{range .}} +
{{.Name}}
+ {{end}} +
+ {{end}} + + {{with .Dirs}} +

Sub-directories:

+
+ {{range .}} +
{{.Name}}
+ {{end}} +
+ {{end}} + +
+ + + + + + diff --git a/.presentx/templates/slides.tmpl b/.presentx/templates/slides.tmpl new file mode 100644 index 0000000..6468111 --- /dev/null +++ b/.presentx/templates/slides.tmpl @@ -0,0 +1,177 @@ +{/* This is the slide template. It defines how presentations are formatted. */} + +{{define "root"}} + + + + {{.Title}} + + + + + {{if .NotesEnabled}} + + + {{end}} + + + + + + +
+ +
+

{{.Title}}

+ {{with .Subtitle}}

{{.}}

{{end}} + {{if not .Time.IsZero}}

{{.Time.Format "2 January 2006"}}

{{end}} + {{range .Authors}} +
+ {{range .TextElem}}{{elem $.Template .}}{{end}} +
+ {{end}} +
+ + {{range $i, $s := .Sections}} + +
+ {{if $s.Elem}} +

{{$s.Title}}

+ {{range $s.Elem}}{{elem $.Template .}}{{end}} + {{else}} +

{{$s.Title}}

+ {{end}} + {{pagenum $s 1}} +
+ + {{end}}{{/* of Slide block */}} + +
+

Thank you

+ {{range .Authors}} +
+ {{range .Elem}}{{elem $.Template .}}{{end}} +
+ {{end}} +
+ +
+ +
+ Use the left and right arrow keys or click the left and right + edges of the page to navigate between slides.
+ (Press 'H' or navigate to hide this message.) +
+ + {{if .PlayEnabled}} + + + {{end}} + + + + + + + + + +{{end}} + +{{define "newline"}} +
+ +{{end}} diff --git a/presentations/2025-01-09--buidleu--manfred/Makefile b/presentations/2025-01-09--buidleu--manfred/Makefile index 842599e..e3c861a 100644 --- a/presentations/2025-01-09--buidleu--manfred/Makefile +++ b/presentations/2025-01-09--buidleu--manfred/Makefile @@ -1,5 +1,6 @@ +runx: + cd ..; go run github.com/soypat/go-presentx -http 0.0.0.0:3999 -base ../.presentx + run: cd ..; go run golang.org/x/tools/cmd/present -http 0.0.0.0:3999 # -base ../.. -runx: - cd ..; go run github.com/soypat/go-presentx -http 0.0.0.0:3999