App-SlideServer

 view release on metacpan or  search on metacpan

example/Introduction/slides.md  view on Meta::CPAN

    
    <pre class=notes>
       ...
    </pre>
    
  </code></pre>
</div>

## A Complete Example

<iframe style="width: 700px; height: 600px; background-color: white;"
  src="slides.txt">
</iframe>

## Deploying to a Server

<pre><code data-step="1-1">
 # Build the Image
 $ docker build -t slideserver -f share/Dockerfile .
</code></pre>

share/public/highlight/a11y-dark.min.css  view on Meta::CPAN

pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*!
  Theme: a11y-dark
  Author: @ericwbailey
  Maintainer: @ericwbailey

  Based on the Tomorrow Night Eighties theme: https://github.com/isagalaev/highlight.js/blob/master/src/styles/tomorrow-night-eighties.css
*/.hljs{background:#2b2b2b;color:#f8f8f2}.hljs-comment,.hljs-quote{color:#d4d0ab}.hljs-deletion,.hljs-name,.hljs-regexp,.hljs-selector-class,.hljs-selector-id,.hljs-tag,.hljs-template-variable,.hljs-variable{color:#ffa07a}.hljs-built_in,.hljs-link,.h...

share/public/highlight/highlight.min.js  view on Meta::CPAN

e["before:highlightBlock"]&&!e["before:highlightElement"]&&(e["before:highlightElement"]=t=>{
e["before:highlightBlock"](Object.assign({block:t.el},t))
}),e["after:highlightBlock"]&&!e["after:highlightElement"]&&(e["after:highlightElement"]=t=>{
e["after:highlightBlock"](Object.assign({block:t.el},t))})})(e),s.push(e)}
}),t.debugMode=()=>{o=!1},t.safeMode=()=>{o=!0
},t.versionString="11.7.0",t.regex={concat:p,lookahead:d,either:f,optional:h,
anyNumberOfTimes:u};for(const t in A)"object"==typeof A[t]&&e.exports(A[t])
;return Object.assign(t,A),t})({});return te}()
;"object"==typeof exports&&"undefined"!=typeof module&&(module.exports=hljs);/*! `less` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict"
;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6",...
;return a=>{const l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
scope:"number",
begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}
}))(a),s=n,d="([\\w-]+|@\\{[\\w-]+\\})",c=[],g=[],b=e=>({className:"string",

share/public/highlight/highlight.min.js  view on Meta::CPAN

keyword:["query","mutation","subscription","type","input","schema","directive","interface","union","scalar","fragment","enum","on"],
literal:["true","false","null"]},
contains:[e.HASH_COMMENT_MODE,e.QUOTE_STRING_MODE,e.NUMBER_MODE,{
scope:"punctuation",match:/[.]{3}/,relevance:0},{scope:"punctuation",
begin:/[\!\(\)\:\=\[\]\{\|\}]{1}/,relevance:0},{scope:"variable",begin:/\$/,
end:/\W/,excludeEnd:!0,relevance:0},{scope:"meta",match:/@\w+/,excludeEnd:!0},{
scope:"symbol",begin:a.concat(/[_A-Za-z][_0-9A-Za-z]*/,a.lookahead(/\s*:/)),
relevance:0}],illegal:[/[;<']/,/BEGIN/]}}})();hljs.registerLanguage("graphql",e)
})();/*! `scss` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict"
;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6",...
;return n=>{const a=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
scope:"number",
begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}
}))(n),l=t,s=i,d="@[a-z-]+",c={className:"variable",

share/public/highlight/highlight.min.js  view on Meta::CPAN

begin:"\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|...
},{begin:/:/,end:/[;}{]/,relevance:0,
contains:[a.BLOCK_COMMENT,c,a.HEXCOLOR,a.CSS_NUMBER_MODE,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.IMPORTANT,a.FUNCTION_DISPATCH]
},{begin:"@(page|font-face)",keywords:{$pattern:d,keyword:"@page @font-face"}},{
begin:"@",end:"[{;]",returnBegin:!0,keywords:{$pattern:/[a-z-]+/,
keyword:"and or not only",attribute:r.join(" ")},contains:[{begin:d,
className:"keyword"},{begin:/[a-z-]+(?=:)/,className:"attribute"
},c,n.QUOTE_STRING_MODE,n.APOS_STRING_MODE,a.HEXCOLOR,a.CSS_NUMBER_MODE]
},a.FUNCTION_DISPATCH]}}})();hljs.registerLanguage("scss",e)})();/*! `css` grammar compiled for Highlight.js 11.7.0 */
(()=>{var e=(()=>{"use strict"
;const e=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6",...
;return n=>{const a=n.regex,l=(e=>({IMPORTANT:{scope:"meta",begin:"!important"},
BLOCK_COMMENT:e.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",
begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},FUNCTION_DISPATCH:{
className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{
scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",
contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{
scope:"number",
begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",
relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z][A-Za-z0-9_-]*/}
}))(n),s=[n.APOS_STRING_MODE,n.QUOTE_STRING_MODE];return{name:"CSS",

share/public/jquery-3.3.1.min.js  view on Meta::CPAN

/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof windo...

share/public/slides-ui.css  view on Meta::CPAN

/* right edge of screen, stays 0px width until class 'open' is added */
.slides-sidebar {
	position: fixed;
	right: 0;
	top: 0;
	bottom: 0;
	width: auto;
	z-index: 10;
	padding: 0;
	color: #BBB;
	background-color: #111111AA;
	text-align: left;
	font-size: 12pt;
	font-family: Helvetica, sans-serif;
}

/* upper-right corner that is always visible */
.slides-corner {
	position: fixed;
	top: 0;
	right: 0;
}
/* button that opens/closes the sidebar. Always visible even when sidebar is 0px wide */
.slides-sidebar-btn {
	display: block;
	margin: 4px 4px .5em auto;
	width: 30px;
	border: 2px solid black;
	border-radius: 4px;
	padding: 0;
	background-color: #111;
}
/* fancy animated icon for the sidebar open/close button */
.slides-sidebar-btn .bar {
	position: relative;
	border: none;
	background-color: #BBB;
	margin: 4px;
	height: 3px;
	transition: 0.3s;
}
.slides-sidebar.open .slides-sidebar-btn .bar1 {
    -webkit-transform: translate(0, 7px) rotate(-45deg);
    transform: translate(0, 7px) rotate(-45deg);
}
.slides-sidebar.open .slides-sidebar-btn .bar2 { opacity: 0; }
.slides-sidebar.open .slides-sidebar-btn .bar3 {

share/public/slides-ui.css  view on Meta::CPAN


.navbuttons {
	position: fixed;
	left:0;
	bottom: 0;
	z-index: 9;
}
.navbuttons button {
	display: block; width: 75px; height: 100px;
	margin: 16px;
	background-color: #111111AA; color: white;
	font-size: 14pt;
	touch-action:manipulation;
}
.navbuttons button.step {
	height: 200px;
}

.presenternotes {
	position: fixed;
	right: 0;
	bottom: 0;
	z-index: 9;
	background-color: #111111AA;
	font-size: 14pt;
}

/* main content of 
.slides-menu {
	margin: 30px 4px 4px 4px;
}
.slides-menu button { display: block; }
.slides-menu-btn {
	position: fixed;
	top: 0;
	right: 0;
	margin: 0 0 .5em auto;
	width: 30px;
	border: 2px solid black;
	border-radius: 4px;
	padding: 0;
	background-color: #111;
}
.slides-menu-btn .bar {
	position: relative;
	border: none;
	background-color: #BBB;
	margin: 4px;
	height: 3px;
	transition: 0.3s;
}
.slides-menu.open .slides-menu-btn .bar1 {
    -webkit-transform: translate(0, 7px) rotate(-45deg);
    transform: translate(0, 7px) rotate(-45deg);
}
.slides-menu.open .slides-menu-btn .bar2 { opacity: 0; }
.slides-menu.open .slides-menu-btn .bar3 {

share/public/slides.css  view on Meta::CPAN

/* baseline defaults for a slide-like environment */
html { margin: 0; padding: 0; }
body {
	margin: 0 0 -4em 0; padding: 0;
	background-color: #333; color: #EEE;
}
table { border-collapse: collapse; }
ul, ol { list-style: outside; padding: 0px 0px 0px 1em; text-align:left; }
h1 { font-size: 150%; }
h2 { font-size: 130%; margin: .5em; }
h3 { font-size: 110%; margin: .5em; }
.slide {
	padding: 1em;
	margin: 1em 0;
	font-size: 40px;

share/public/slides.css  view on Meta::CPAN

	text-align: center;
}
.slide .notes { display: none; }
.slide ul ul { padding-top: .4em; }
li { margin-bottom: .2em; }
a { text-decoration: none; color: #DEF; }
.slide pre { text-align: left; }
.slide code { white-space: pre; font-size: 40%; margin:4px; text-align: left; }

/* styles for this presentation *
body.high-contrast { background-color: #000; color: #FFF; }
th { vertical-align: baseline; text-align: left; }
td { vertical-align: baseline; text-align: left; }
table.data {
	font-size: 90%;
	font-family: sans-serif;
	border-collapse: separate;
	border-spacing: 8px;
}
table.data th { padding: 4px 8px; background-color: #222; }
.high-contrast table.data th { background-color: #151515; }
.high-contrast table.data td { background-color: #303030; }

.chat-app { font-size: 14px; }
.chatlog {
	background-color: #EEE; color: black;
	text-align: left;
	width: 775px;
	height: 400px;
	padding: 4px;
	border: 1px solid black;
	font-family: courier, sans-serif, monospace;
	white-space: pre-wrap;
	overflow-y: scroll;
}
.chatline { width: 640px; }
.chatline input { display: inline-block; background-color: #EEE; color: black; width: 80%; }
.chatline button { display: inline-block; width: 15%; }

h1.loud { font-size: 200%; }
h1.lesson { display:inline-block; white-space: nowrap; text-align:center; font-size: 150%; }
figure.lesson { width: 90%; }
figure img { height: 10em; }
.slide figure.extern { min-height: 8em; }
.slide figcaption.small { font-size: 60%; }
figure pre { margin:0px; }
.slide figure.code { text-align: left; }



( run in 1.355 second using v1.01-cache-2.11-cpan-fe3c2283af0 )