diff --git a/apache_logo.png b/apache_logo.png new file mode 100644 index 0000000..d99ecd8 Binary files /dev/null and b/apache_logo.png differ diff --git a/blogger-icon.png b/blogger-icon.png new file mode 100644 index 0000000..aa3c204 Binary files /dev/null and b/blogger-icon.png differ diff --git a/grottworkshop/base.html b/grottworkshop/base.html new file mode 100644 index 0000000..d2c3c57 --- /dev/null +++ b/grottworkshop/base.html @@ -0,0 +1,184 @@ + + + + + + + {{ head_title }} + + {% if embed %} + + + {% else %} + + + {% endif %} + {% for css in user_css %} + {% if embed %} + + {% else %} + + {% endif %} + {% endfor %} + + + {% if embed %} + + {% else %} + + {% endif %} + {% for js in user_js %} + {% if embed %} + + {% else %} + + {% endif %} + {% endfor %} + + + +
+
+
+
+
+
+ {% for slide in slides %} + +
+
+
+ {% if slide.header %} +
{{ slide.header }}
+ {% endif %} + {% if slide.content %} +
{{ slide.content }}
+ {% endif %} +
+
+

Presenter Notes

+
+ {% if slide.presenter_notes %} + {{ slide.presenter_notes }} + {% endif %} +
+
+ +
+
+ {% endfor %} +
+
+ +
+ {{ head_title }} - Fred Grott - Android Development +
+ + {% if toc %} + + {% endif %} + + + + \ No newline at end of file diff --git a/grottworkshop/css/print.css b/grottworkshop/css/print.css new file mode 100644 index 0000000..dba8990 --- /dev/null +++ b/grottworkshop/css/print.css @@ -0,0 +1,212 @@ +* { +margin: 0; +padding: 0; +} + +@page { +size: landscape; +} + +body { +font: 100% "Lucida Grande", "Trebuchet MS", Verdana, sans-serif; +padding: 0; +margin: 0; +} + +div.slide { +min-width: 950px; +min-height: 678px; +padding: 1em; +overflow: hidden; +page-break-after: always; +border: 1px solid black; +border-radius: 20px; +background: #000000 url('../img/gwslideslogo.png') no-repeat top right; +color: #ffffff; +} + +div.slide div.inner { +width: 950px; +height: 678px; +margin: auto; +display: table-cell; +} + +h1 { +font-size: 2.4em; +} + +h2 { +font-size: 1.4em; +} + +h3 { +margin: 1em 0; +} + +ul { +margin: 0; +padding: 0; +} + +p, li, pre { +margin: 1em 0; +} + +li { +margin-left: 2em; +} + +a { +color: #ffffff; +} + +pre, code { +max-width: 950px; +color: #BFA6A6; +font-family: Monaco, monospace; +font-size: 90%; +} + +pre { +padding: .2em .5em; +overflow: hidden; +} + +code { +padding: 0 .2em; +} + +.slide header:only-child h1 { +line-height: 180%; +text-align: center; +display: table-cell; +vertical-align: middle; +height: 600px; +width: 800px; +font-size: 48px; +margin-top:100px; +margin-bottom:100px; +} + +section { + margin-top: 50px; +} + +/* title slide */ +.slide-wrapper:first-child .slide { + text-align: center; + background: #000000 url('../img/gws_title-slide.png') no-repeat top center; +} +.slide-wrapper:first-child header:not(:only-child) { + position: static; + padding-top: 85px; + color: #000000; + width: 770px; + margin: 0 auto; +} +.slide-wrapper:first-child section { + margin-top: 10px; + color: #000000; +} +.slide-wrapper:first-child .slide header:only-child h1 { + display: block; + width: auto; + color: #000000; + padding-top: 50px; +} +.slide-wrapper:first-child h2 { + font-size: 25px; + font-weight: normal; +} + +/* Pygments solarized theme */ +pre .hll { background-color: #002B36 } +pre { background: #002B36; color: #93A1A1 } +pre .c { color: #859900 } /* Comment */ +pre .err { color: #d33682; background-color: #002B36 } /* Error */ +pre .k { color: #268bd2 } /* Keyword */ +pre .l { color: #6c71c4 } /* Literal */ +pre .n { color: #93a1a1 } /* Name */ +pre .o { color: #dc322f } /* Operator */ +pre .p { color: #93a1a1 } /* Punctuation */ +pre .cm { color: #859900 } /* Comment.Multiline */ +pre .cp { color: #859900 } /* Comment.Preproc */ +pre .c1 { color: #859900 } /* Comment.Single */ +pre .cs { color: #859900 } /* Comment.Special */ +pre .ge { font-style: italic } /* Generic.Emph */ +pre .gs { font-weight: bold } /* Generic.Strong */ +pre .kc { color: #268bd2 } /* Keyword.Constant */ +pre .kd { color: #268bd2 } /* Keyword.Declaration */ +pre .kn { color: #dc322f } /* Keyword.Namespace */ +pre .kp { color: #268bd2 } /* Keyword.Pseudo */ +pre .kr { color: #268bd2 } /* Keyword.Reserved */ +pre .kt { color: #268bd2 } /* Keyword.Type */ +pre .ld { color: #b58900 } /* Literal.Date */ +pre .m { color: #6c71c4 } /* Literal.Number */ +pre .s { color: #b58900 } /* Literal.String */ +pre .na { color: #2aa198 } /* Name.Attribute */ +pre .nb { color: #93a1a1 } /* Name.Builtin */ +pre .nc { color: #2aa198 } /* Name.Class */ +pre .no { color: #268bd2 } /* Name.Constant */ +pre .nd { color: #2aa198 } /* Name.Decorator */ +pre .ni { color: #93a1a1 } /* Name.Entity */ +pre .ne { color: #2aa198 } /* Name.Exception */ +pre .nf { color: #2aa198 } /* Name.Function */ +pre .nl { color: #93a1a1 } /* Name.Label */ +pre .nn { color: #93a1a1 } /* Name.Namespace */ +pre .nx { color: #2aa198 } /* Name.Other */ +pre .py { color: #93a1a1 } /* Name.Property */ +pre .nt { color: #dc322f } /* Name.Tag */ +pre .nv { color: #93a1a1 } /* Name.Variable */ +pre .ow { color: #dc322f } /* Operator.Word */ +pre .w { color: #93a1a1 } /* Text.Whitespace */ +pre .mf { color: #6c71c4 } /* Literal.Number.Float */ +pre .mh { color: #6c71c4 } /* Literal.Number.Hex */ +pre .mi { color: #6c71c4 } /* Literal.Number.Integer */ +pre .mo { color: #6c71c4 } /* Literal.Number.Oct */ +pre .sb { color: #b58900 } /* Literal.String.Backtick */ +pre .sc { color: #b58900 } /* Literal.String.Char */ +pre .sd { color: #b58900 } /* Literal.String.Doc */ +pre .s2 { color: #b58900 } /* Literal.String.Double */ +pre .se { color: #6c71c4 } /* Literal.String.Escape */ +pre .sh { color: #b58900 } /* Literal.String.Heredoc */ +pre .si { color: #b58900 } /* Literal.String.Interpol */ +pre .sx { color: #b58900 } /* Literal.String.Other */ +pre .sr { color: #b58900 } /* Literal.String.Regex */ +pre .s1 { color: #b58900 } /* Literal.String.Single */ +pre .ss { color: #b58900 } /* Literal.String.Symbol */ +pre .bp { color: #93a1a1 } /* Name.Builtin.Pseudo */ +pre .vc { color: #93a1a1 } /* Name.Variable.Class */ +pre .vg { color: #93a1a1 } /* Name.Variable.Global */ +pre .vi { color: #93a1a1 } /* Name.Variable.Instance */ +pre .il { color: #6c71c4 } /* Literal.Number.Integer.Long */ + +pre .lineno, +.linenodiv pre { + background-color: #073642; + padding: 0 4px 0 15px; + display: inline-block; +} +td.linenos, +.linenodiv pre { + width: 22px; + text-align: right; +} +td.code pre { + padding: 0 5px; +} +.highlighttable { + border-collapse: collapse; + width: 950px; +} +.highlighttable td { + padding: 0; +} + +/* hide */ +#toc, #help, .slide aside, .slide footer, .slide .notes, +.presenter_notes, #current_presenter_notes, #presenter_note, +#footnotes { +display: none; +} \ No newline at end of file diff --git a/grottworkshop/css/screen.css b/grottworkshop/css/screen.css new file mode 100644 index 0000000..b8acede --- /dev/null +++ b/grottworkshop/css/screen.css @@ -0,0 +1,588 @@ +body { + font: 14px Verdana, sans-serif; + background: #0E4C61; + padding: 0; + margin: 0; + overflow: hidden; +} + +div.presentation { + position: absolute; + width: 100%; + display: table-cell; + vertical-align: middle; + height: 100%; + background: inherit; +} + +div.presentation > h1 { + display: none; +} + +div.slides, body.expose div.slides.nocontext { + width: 100%; + height: 100%; + left: 0; + top: 0; + position: absolute; + display: block; +} + +div.slides.nocontext { + width: 900px; + margin: 0 auto; + overflow: hidden; + position: relative; + left: auto; + top: auto; +} + +div.slide { + display: inline; + position: absolute; + overflow: hidden; + width: 900px; + height: 700px; + margin-top: -350px; + margin-left: -400px; + left: 50%; + top: 50%; + border-radius: 20px; + -webkit-transition: margin 0.25s ease-in-out; + -moz-transition: margin 0.25s ease-in-out; + -o-transition: margin 0.25s ease-in-out; + background: #000000 url('../img/gwslideslogo.png') no-repeat top right; +} + +/* Expose */ + +body.expose div.slides { + float: left; + position: relative; + overflow: auto; + margin-bottom: 10px; +} + +body.expose div.slide { + display: block; + float: left; + position: relative; + left: auto !important; + top: auto !important; + margin: 10px !important; + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + -moz-transform: scale(.33, .33); + -moz-transform-origin: 0 0; + -webkit-transform: scale(.33, .33); + -webkit-transform-origin: 0 0; + -o-transform: scale(.33, .33); + -o-transform-origin: 0 0; + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + cursor: pointer; +} + +body.expose div.slide:hover { + background-color: #494949; +} + +body.expose .slide-wrapper { + float: left; + position: relative; + margin: .5%; + width: 300px; + height: 233px; +} + +body.expose .slide footer { +} + +body.expose .slide .inner { +} + +body.expose .slide.far-past, +body.expose .slide.past, +body.expose .slide.future, +body.expose .slide.far-future { + margin-left: 0; + opacity: 1; +} + +body.expose .slide.current { + background-color: #494949; + border: 16px solid #fff; + -moz-transform: scale(.315, .315); + -moz-transform-origin: 0 0; + -webkit-transform: scale(.315, .315); + -webkit-transform-origin: 0 0; + -o-transform: scale(.315, .315); + -o-transform-origin: 0 0; +} + +/* Presenter Mode */ + +body.presenter_view div.slide { + display: inline; + position: absolute; + overflow: hidden; + -moz-transform: scale(.5, .5); + -moz-transform-origin: 0 0; + -webkit-transform: scale(.5, .5); + -webkit-transform-origin: 0 0; + -o-transform: scale(.5, .5); + -o-transform-origin: 0 0; + margin-top: -300px; +} + +body.presenter_view .slide.far-past { + display: block; + margin-left: -1500px; +} + +body.presenter_view .slide.past { + display: block; + margin-left: -975px; +} + +body.presenter_view .slide.current { + display: block; + margin-left: -475px; + border: 8px solid maroon; + z-index: 2; +} + +body.presenter_view .slide.future { + display: block; + margin-left: 25px; + z-index: 1; +} + +body.presenter_view .slide.far-future { + display: block; + margin-left: 525px; +} + +body.presenter_view div#current_presenter_notes { + visibility: visible; + display: block; + position: absolute; + overflow: auto; + vertical-align: middle; + left: 50%; + top: 50%; + margin-left: -475px; + margin-top: 100px; + z-index: 2; + width: 950px; + border-style: solid; + height: 30%; + background-color: silver; +} + +body.presenter_view div#current_presenter_notes section { + font-family: Verdana, sans-serif; + color: black; + text-shadow: rgba(0, 0, 0, 0.2) 0 2px 5px; + display: block; + overflow: visible; + position: relative; + background-color: #fffeff; + height: 120px; + margin-right: 30px; + margin-top: 60px; + margin-left: 30px; + padding-right: 10px; + padding-left: 10px; + padding-top: 10px; +} + +body.presenter_view div#current_presenter_notes section p { + margin: 0; +} + +body.presenter_view div#current_presenter_notes h1 { + font-size: 50%; + display: block; +} + +div#current_presenter_notes { + display: none; +} + +div.slide div.presenter_notes, div.slides div.presenter_notes { + display: none; +} + +/* Slide styles */ + +div.slide p { + font-size: 20px; +} + +.slide.far-past { + display: block; + margin-left: -2400px; +} + +.slide.past { + display: block; + margin-left: -1400px; + opacity: 0; +} + +.slide.current { + display: block; + margin-left: -450px; +} + +.slide.future { + display: block; + margin-left: 500px; + opacity: 0; +} + +.slide.far-future { + display: block; + margin-left: 1500px; +} + +body.three-d div.slides { + -webkit-transform: translateX(50px) scale(0.8) rotateY(10deg); + -moz-transform: translateX(50px) scale(0.8) rotateY(10deg); + -o-transform: translateX(50px) scale(0.8) rotateY(10deg); +} + + +/* Content */ + +header:not(:only-child) { + font-family: Verdana, sans-serif; + font-weight: normal; + font-size: 65px; + letter-spacing: -.05em; + color: #ffffff; + text-shadow: rgba(0, 0, 0, 0.2) 0 2px 5px; + position: absolute; + left: 30px; + top: 25px; + margin: 0; + padding: 0;; +} + +header h1, header h2, header h3, header h4, header h5, header h6 { + display: inline; + font-size: 100%; + font-weight: normal; + padding: 0; + margin: 0; +} + +header h2:first-child { + margin-top: 0; +} + +section, .slide header:only-child h1 { + font-family: Verdana, sans-serif; + color: #ffffff; + text-shadow: rgba(0, 0, 0, 0.2) 0 2px 5px; + margin-left: 30px; + margin-right: 30px; + margin-top: 100px; + display: block; + overflow: hidden; +} + +img { display: block; margin: auto; } + +section img.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +section img.align-right { + display: block; + margin-left: auto; + margin-right: 0; +} + +section img.align-left { + display: block; + margin-right: auto; + margin-left: 0; +} + +a { + color: inherit; + display: inline-block; + text-decoration: none; + line-height: 110%; + border-bottom: 2px solid #3f3f3f; +} + +pre { + font-size: 16px; + font-family: Courier, monospace; +} +code { + color: #bfa6a6; + font-size: 20px; + font-family: Courier, monospace; +} + +li { + padding: 10px 0; + font-size: 20px; +} + +.slide header:only-child h1 { + line-height: 180%; + text-align: center; + display: table-cell; + vertical-align: middle; + height: 700px; + width: 900px; + font-size: 50px; + margin-top:100px; + margin-bottom:100px; +} + +.sidebar { + clear: both; + background: -webkit-gradient(linear, top right, bottom right, from(#dde), to(#fff)); + -webkit-transition: margin 0.25s ease-in-out; + background-color: #eee; + background: -moz-linear-gradient(right, #dde, #fff); + border-right: 5px solid #ccd; + z-index: 9999999; + height: 100%; + overflow: hidden; + top: 0; + position: absolute; + display: block; + margin: 0; + margin-left: -400px; + padding: 10px 16px; + overflow: auto; + -webkit-transition: margin 0.2s ease-in-out; + -moz-transition: margin 0.2s ease-in-out; + -o-transition: margin 0.2s ease-in-out; +} + +.sidebar h2 { + text-shadow: rgba(0, 0, 0, 0.2) 0 2px 5px; + margin: 0 0 16px; + padding: 0; +} + +.sidebar table { + width: 100%; + margin: 0; + padding: 0; + border-collapse: collapse; +} + +.sidebar table caption { + display: none; +} + +.sidebar tr { + margin: 2px 0; + border-bottom: 1px solid #ccc; +} + +.sidebar th { + text-align: left; + font-weight: normal; + max-width: 300px; + overflow: hidden; +} + +.sidebar tr.sub th { + text-indent: 20px; +} + +.sidebar td { + text-align: right; + min-width: 20px; +} + +.sidebar a { + display: block; + text-decoration: none; + border-bottom: none; + padding: 4px 0; +} + +.sidebar tr.active { + background: #ff0; +} + +aside { + display: none; +} + aside.source { + position: absolute; + bottom: 35px; + left: 10px; + text-indent: 10px; + color: #ffffff; + } + aside.page_number { + position: absolute; + bottom: 35px; + right: 10px; + text-indent: 10px; + color: #ffffff; + } + +p.notes { + display: none; + padding: 10px; + background: #ccc; + color: #111; + border-radius: 10px; + -moz-border-radius: 10px; + -webkit-border-radius: 10px; +} + div.slide p.notes { + font-size: 90%; +} + +/* Pygments solarized theme */ +pre .hll { background-color: #002B36 } +pre { background: #002B36; color: #93A1A1 } +pre .c { color: #859900 } /* Comment */ +pre .err { color: #d33682; background-color: #002B36 } /* Error */ +pre .k { color: #268bd2 } /* Keyword */ +pre .l { color: #6c71c4 } /* Literal */ +pre .n { color: #93a1a1 } /* Name */ +pre .o { color: #dc322f } /* Operator */ +pre .p { color: #93a1a1 } /* Punctuation */ +pre .cm { color: #859900 } /* Comment.Multiline */ +pre .cp { color: #859900 } /* Comment.Preproc */ +pre .c1 { color: #859900 } /* Comment.Single */ +pre .cs { color: #859900 } /* Comment.Special */ +pre .ge { font-style: italic } /* Generic.Emph */ +pre .gs { font-weight: bold } /* Generic.Strong */ +pre .kc { color: #268bd2 } /* Keyword.Constant */ +pre .kd { color: #268bd2 } /* Keyword.Declaration */ +pre .kn { color: #dc322f } /* Keyword.Namespace */ +pre .kp { color: #268bd2 } /* Keyword.Pseudo */ +pre .kr { color: #268bd2 } /* Keyword.Reserved */ +pre .kt { color: #268bd2 } /* Keyword.Type */ +pre .ld { color: #b58900 } /* Literal.Date */ +pre .m { color: #6c71c4 } /* Literal.Number */ +pre .s { color: #b58900 } /* Literal.String */ +pre .na { color: #2aa198 } /* Name.Attribute */ +pre .nb { color: #93a1a1 } /* Name.Builtin */ +pre .nc { color: #2aa198 } /* Name.Class */ +pre .no { color: #268bd2 } /* Name.Constant */ +pre .nd { color: #2aa198 } /* Name.Decorator */ +pre .ni { color: #93a1a1 } /* Name.Entity */ +pre .ne { color: #2aa198 } /* Name.Exception */ +pre .nf { color: #2aa198 } /* Name.Function */ +pre .nl { color: #93a1a1 } /* Name.Label */ +pre .nn { color: #93a1a1 } /* Name.Namespace */ +pre .nx { color: #2aa198 } /* Name.Other */ +pre .py { color: #93a1a1 } /* Name.Property */ +pre .nt { color: #dc322f } /* Name.Tag */ +pre .nv { color: #93a1a1 } /* Name.Variable */ +pre .ow { color: #dc322f } /* Operator.Word */ +pre .w { color: #93a1a1 } /* Text.Whitespace */ +pre .mf { color: #6c71c4 } /* Literal.Number.Float */ +pre .mh { color: #6c71c4 } /* Literal.Number.Hex */ +pre .mi { color: #6c71c4 } /* Literal.Number.Integer */ +pre .mo { color: #6c71c4 } /* Literal.Number.Oct */ +pre .sb { color: #b58900 } /* Literal.String.Backtick */ +pre .sc { color: #b58900 } /* Literal.String.Char */ +pre .sd { color: #b58900 } /* Literal.String.Doc */ +pre .s2 { color: #b58900 } /* Literal.String.Double */ +pre .se { color: #6c71c4 } /* Literal.String.Escape */ +pre .sh { color: #b58900 } /* Literal.String.Heredoc */ +pre .si { color: #b58900 } /* Literal.String.Interpol */ +pre .sx { color: #b58900 } /* Literal.String.Other */ +pre .sr { color: #b58900 } /* Literal.String.Regex */ +pre .s1 { color: #b58900 } /* Literal.String.Single */ +pre .ss { color: #b58900 } /* Literal.String.Symbol */ +pre .bp { color: #93a1a1 } /* Name.Builtin.Pseudo */ +pre .vc { color: #93a1a1 } /* Name.Variable.Class */ +pre .vg { color: #93a1a1 } /* Name.Variable.Global */ +pre .vi { color: #93a1a1 } /* Name.Variable.Instance */ +pre .il { color: #6c71c4 } /* Literal.Number.Integer.Long */ + +pre .lineno, +.linenodiv pre { + background-color: #073642; + padding: 0 4px 0 15px; + display: inline-block; +} +td.linenos, +.linenodiv pre { + width: 22px; + text-align: right; +} +td.code pre { + padding: 0 5px; +} +.highlighttable { + border-collapse: collapse; + width: 800px; +} +.highlighttable td { + padding: 0; +} + +#blank { + position: absolute; + top: 0; + left: 0; + background-color: black; + width: 100%; + height: 100%; + z-index: 64; + display: none; +} + +/* title slide */ +.slide-wrapper:first-child .slide { + text-align: center; + background: #000000 url('../imggws_title_slide.png') no-repeat top center; +} +.slide-wrapper:first-child header:not(:only-child) { + position: static; + padding-top: 85px; + color: #000000; + width: 770px; + margin: 0 auto; +} +.slide-wrapper:first-child section { + margin-top: 10px; + color: #000000; +} +.slide-wrapper:first-child .slide header:only-child h1 { + display: block; + width: auto; + color: #000000; + padding-top: 50px; +} +.slide-wrapper:first-child h2 { + font-size: 25px; + font-weight: normal; +} + +/* fixed footer */ +#footnotes { + background: none repeat scroll 0 0 #3D6775; + border-top: 2px solid #000000; + bottom: 0; + color: #FFFFFF; + margin: 0; + padding: 0.2em 0; + position: fixed; + text-align: center; + width: 100%; +} \ No newline at end of file diff --git a/grottworkshop/fonts/DroidSansMono.ttf b/grottworkshop/fonts/DroidSansMono.ttf new file mode 100644 index 0000000..d604425 Binary files /dev/null and b/grottworkshop/fonts/DroidSansMono.ttf differ diff --git a/grottworkshop/fonts/Inconsolata.otf b/grottworkshop/fonts/Inconsolata.otf new file mode 100644 index 0000000..3488898 Binary files /dev/null and b/grottworkshop/fonts/Inconsolata.otf differ diff --git a/grottworkshop/fonts/OpenSans-Bold.ttf b/grottworkshop/fonts/OpenSans-Bold.ttf new file mode 100644 index 0000000..fd79d43 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-Bold.ttf differ diff --git a/grottworkshop/fonts/OpenSans-BoldItalic.ttf b/grottworkshop/fonts/OpenSans-BoldItalic.ttf new file mode 100644 index 0000000..9bc8009 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-BoldItalic.ttf differ diff --git a/grottworkshop/fonts/OpenSans-ExtraBold.ttf b/grottworkshop/fonts/OpenSans-ExtraBold.ttf new file mode 100644 index 0000000..21f6f84 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-ExtraBold.ttf differ diff --git a/grottworkshop/fonts/OpenSans-ExtraBoldItalic.ttf b/grottworkshop/fonts/OpenSans-ExtraBoldItalic.ttf new file mode 100644 index 0000000..31cb688 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-ExtraBoldItalic.ttf differ diff --git a/grottworkshop/fonts/OpenSans-Italic.ttf b/grottworkshop/fonts/OpenSans-Italic.ttf new file mode 100644 index 0000000..c90da48 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-Italic.ttf differ diff --git a/grottworkshop/fonts/OpenSans-Light.ttf b/grottworkshop/fonts/OpenSans-Light.ttf new file mode 100644 index 0000000..0d38189 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-Light.ttf differ diff --git a/grottworkshop/fonts/OpenSans-LightItalic.ttf b/grottworkshop/fonts/OpenSans-LightItalic.ttf new file mode 100644 index 0000000..68299c4 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-LightItalic.ttf differ diff --git a/grottworkshop/fonts/OpenSans-Regular.ttf b/grottworkshop/fonts/OpenSans-Regular.ttf new file mode 100644 index 0000000..db43334 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-Regular.ttf differ diff --git a/grottworkshop/fonts/OpenSans-Semibold.ttf b/grottworkshop/fonts/OpenSans-Semibold.ttf new file mode 100644 index 0000000..1a7679e Binary files /dev/null and b/grottworkshop/fonts/OpenSans-Semibold.ttf differ diff --git a/grottworkshop/fonts/OpenSans-SemiboldItalic.ttf b/grottworkshop/fonts/OpenSans-SemiboldItalic.ttf new file mode 100644 index 0000000..59b6d16 Binary files /dev/null and b/grottworkshop/fonts/OpenSans-SemiboldItalic.ttf differ diff --git a/grottworkshop/grottworkshop.cfg b/grottworkshop/grottworkshop.cfg new file mode 100644 index 0000000..8ba9c5c --- /dev/null +++ b/grottworkshop/grottworkshop.cfg @@ -0,0 +1,14 @@ +[landslide] +source = slides.md + +# update the theme path with an absolute path, +# or relative path from where you are running the landslide command +theme = ../grottworkshop +# css= +# js= +# to load user defined css and js files beyond what the theme provides +destination = index.html +embed = True +relative = True +copy-theme = True +linenos = table \ No newline at end of file diff --git a/grottworkshop/img/gws_slide_logo.png b/grottworkshop/img/gws_slide_logo.png new file mode 100644 index 0000000..a84dd91 Binary files /dev/null and b/grottworkshop/img/gws_slide_logo.png differ diff --git a/grottworkshop/img/gws_title_slide.png b/grottworkshop/img/gws_title_slide.png new file mode 100644 index 0000000..a1f38aa Binary files /dev/null and b/grottworkshop/img/gws_title_slide.png differ diff --git a/grottworkshop/js/slides.js b/grottworkshop/js/slides.js new file mode 100644 index 0000000..cb8608b --- /dev/null +++ b/grottworkshop/js/slides.js @@ -0,0 +1,578 @@ +function main() { + // Since we don't have the fallback of attachEvent and + // other IE only stuff we won't try to run JS for IE. + // It will run though when using Google Chrome Frame + if (document.all) { return; } + + var currentSlideNo; + var notesOn = false; + var expanded = false; + var hiddenContext = false; + var blanked = false; + var slides = document.getElementsByClassName('slide'); + var touchStartX = 0; + var spaces = /\s+/, a1 = ['']; + var tocOpened = false; + var helpOpened = false; + var overviewActive = false; + var modifierKeyDown = false; + var scale = 1; + var showingPresenterView = false; + var presenterViewWin = null; + var isPresenterView = false; + + var str2array = function(s) { + if (typeof s == 'string' || s instanceof String) { + if (s.indexOf(' ') < 0) { + a1[0] = s; + return a1; + } else { + return s.split(spaces); + } + } + return s; + }; + + var trim = function(str) { + return str.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); + }; + + var addClass = function(node, classStr) { + classStr = str2array(classStr); + var cls = ' ' + node.className + ' '; + for (var i = 0, len = classStr.length, c; i < len; ++i) { + c = classStr[i]; + if (c && cls.indexOf(' ' + c + ' ') < 0) { + cls += c + ' '; + } + } + node.className = trim(cls); + }; + + var removeClass = function(node, classStr) { + var cls; + if (!node) { + throw 'no node provided'; + } + if (classStr !== undefined) { + classStr = str2array(classStr); + cls = ' ' + node.className + ' '; + for (var i = 0, len = classStr.length; i < len; ++i) { + cls = cls.replace(' ' + classStr[i] + ' ', ' '); + } + cls = trim(cls); + } else { + cls = ''; + } + if (node.className != cls) { + node.className = cls; + } + }; + + var getSlideEl = function(slideNo) { + if (slideNo > 0) { + return slides[slideNo - 1]; + } else { + return null; + } + }; + + var getSlideTitle = function(slideNo) { + var el = getSlideEl(slideNo); + if (el) { + var headers = el.getElementsByTagName('header'); + if (headers.length > 0) { + return el.getElementsByTagName('header')[0].innerText; + } + } + return null; + }; + + var getSlidePresenterNote = function(slideNo) { + var el = getSlideEl(slideNo); + if (el) { + var n = el.getElementsByClassName('presenter_notes'); + if (n.length > 0) { + return n[0]; + } + } + return null; + }; + + var changeSlideElClass = function(slideNo, className) { + var el = getSlideEl(slideNo); + if (el) { + removeClass(el, 'far-past past current future far-future'); + addClass(el, className); + } + }; + + var updateSlideClasses = function(updateOther) { + window.location.hash = (isPresenterView ? "presenter" : "slide") + currentSlideNo; + + for (var i=1; i 1) { + currentSlideNo--; + } + updateSlideClasses(true); + }; + + var showNotes = function() { + var notes = getSlideEl(currentSlideNo).getElementsByClassName('notes'); + for (var i = 0, len = notes.length; i < len; i++) { + notes.item(i).style.display = (notesOn) ? 'none':'block'; + } + notesOn = !notesOn; + }; + + var showSlideNumbers = function() { + var asides = document.getElementsByClassName('page_number'); + var hidden = asides[0].style.display != 'block'; + for (var i = 0; i < asides.length; i++) { + asides.item(i).style.display = hidden ? 'block' : 'none'; + } + }; + + var showSlideSources = function() { + var asides = document.getElementsByClassName('source'); + var hidden = asides[0].style.display != 'block'; + for (var i = 0; i < asides.length; i++) { + asides.item(i).style.display = hidden ? 'block' : 'none'; + } + }; + + var showToc = function() { + if (helpOpened) { + showHelp(); + } + var toc = document.getElementById('toc'); + if (toc) { + toc.style.marginLeft = tocOpened ? '-' + (toc.clientWidth + 20) + 'px' : '0px'; + tocOpened = !tocOpened; + } + updateOverview(); + }; + + var showHelp = function() { + if (tocOpened) { + showToc(); + } + + var help = document.getElementById('help'); + + if (help) { + help.style.marginLeft = helpOpened ? '-' + (help.clientWidth + 20) + 'px' : '0px'; + helpOpened = !helpOpened; + } + }; + + var showPresenterView = function() { + if (isPresenterView) { return; } + + if (showingPresenterView) { + presenterViewWin.close(); + presenterViewWin = null; + showingPresenterView = false; + } else { + presenterViewWin = open(window.location.pathname + "#presenter" + currentSlideNo, 'presenter_notes', + 'directories=no,location=no,toolbar=no,menubar=no,copyhistory=no'); + showingPresenterView = true; + } + }; + + var switch3D = function() { + if (document.body.className.indexOf('three-d') == -1) { + document.getElementsByClassName('presentation')[0].style.webkitPerspective = '1000px'; + document.body.className += ' three-d'; + } else { + window.setTimeout('document.getElementsByClassName(\'presentation\')[0].style.webkitPerspective = \'0\';', 2000); + document.body.className = document.body.className.replace(/three-d/, ''); + } + }; + + var toggleOverview = function() { + if (!overviewActive) { + addClass(document.body, 'expose'); + overviewActive = true; + setScale(1); + } else { + removeClass(document.body, 'expose'); + overviewActive = false; + if (expanded) { + setScale(scale); // restore scale + } + } + processContext(); + updateOverview(); + }; + + var updateOverview = function() { + try { + var presentation = document.getElementsByClassName('presentation')[0]; + } catch (e) { + return; + } + + if (isPresenterView) { + var action = overviewActive ? removeClass : addClass; + action(document.body, 'presenter_view'); + } + + var toc = document.getElementById('toc'); + + if (!toc) { + return; + } + + if (!tocOpened || !overviewActive) { + presentation.style.marginLeft = '0px'; + presentation.style.width = '100%'; + } else { + presentation.style.marginLeft = toc.clientWidth + 'px'; + presentation.style.width = (presentation.clientWidth - toc.clientWidth) + 'px'; + } + }; + + var computeScale = function() { + var cSlide = document.getElementsByClassName('current')[0]; + var sx = cSlide.clientWidth / window.innerWidth; + var sy = cSlide.clientHeight / window.innerHeight; + return 1 / Math.max(sx, sy); + }; + + var setScale = function(scale) { + var presentation = document.getElementsByClassName('slides')[0]; + var transform = 'scale(' + scale + ')'; + presentation.style.MozTransform = transform; + presentation.style.WebkitTransform = transform; + presentation.style.OTransform = transform; + presentation.style.msTransform = transform; + presentation.style.transform = transform; + }; + + var expandSlides = function() { + if (overviewActive) { + return; + } + if (expanded) { + setScale(1); + expanded = false; + } else { + scale = computeScale(); + setScale(scale); + expanded = true; + } + }; + + var showContext = function() { + try { + var presentation = document.getElementsByClassName('slides')[0]; + removeClass(presentation, 'nocontext'); + } catch (e) {} + }; + + var hideContext = function() { + try { + var presentation = document.getElementsByClassName('slides')[0]; + addClass(presentation, 'nocontext'); + } catch (e) {} + }; + + var processContext = function() { + if (hiddenContext) { + hideContext(); + } else { + showContext(); + } + }; + + var toggleContext = function() { + hiddenContext = !hiddenContext; + processContext(); + }; + + var toggleBlank = function() { + blank_elem = document.getElementById('blank'); + + blank_elem.style.display = blanked ? 'none' : 'block'; + + blanked = !blanked; + }; + + var isModifierKey = function(keyCode) { + switch (keyCode) { + case 16: // shift + case 17: // ctrl + case 18: // alt + case 91: // command + return true; + break; + default: + return false; + break; + } + }; + + var checkModifierKeyUp = function(event) { + if (isModifierKey(event.keyCode)) { + modifierKeyDown = false; + } + }; + + var checkModifierKeyDown = function(event) { + if (isModifierKey(event.keyCode)) { + modifierKeyDown = true; + } + }; + + var handleBodyKeyDown = function(event) { + switch (event.keyCode) { + case 13: // Enter + if (overviewActive) { + toggleOverview(); + } + break; + case 27: // ESC + toggleOverview(); + break; + case 37: // left arrow + case 33: // page up + prevSlide(); + break; + case 39: // right arrow + case 32: // space + case 34: // page down + nextSlide(); + break; + case 50: // 2 + if (!modifierKeyDown) { + showNotes(); + } + break; + case 51: // 3 + if (!modifierKeyDown && !overviewActive) { + switch3D(); + } + break; + case 190: // . + case 48: // 0 + case 66: // b + if (!modifierKeyDown && !overviewActive) { + toggleBlank(); + } + break; + case 67: // c + if (!modifierKeyDown && !overviewActive) { + toggleContext(); + } + break; + case 69: // e + if (!modifierKeyDown && !overviewActive) { + expandSlides(); + } + break; + case 72: // h + showHelp(); + break; + case 78: // n + if (!modifierKeyDown && !overviewActive) { + showSlideNumbers(); + } + break; + case 80: // p + if (!modifierKeyDown && !overviewActive) { + showPresenterView(); + } + break; + case 83: // s + if (!modifierKeyDown && !overviewActive) { + showSlideSources(); + } + break; + case 84: // t + showToc(); + break; + } + }; + + var handleWheel = function(event) { + if (tocOpened || helpOpened || overviewActive) { + return; + } + + var delta = 0; + + if (!event) { + event = window.event; + } + + if (event.wheelDelta) { + delta = event.wheelDelta/120; + if (window.opera) delta = -delta; + } else if (event.detail) { + delta = -event.detail/3; + } + + if (delta && delta <0) { + nextSlide(); + } else if (delta) { + prevSlide(); + } + }; + + var addSlideClickListeners = function() { + for (var i=0; i < slides.length; i++) { + var slide = slides.item(i); + slide.num = i + 1; + slide.addEventListener('click', function(e) { + if (overviewActive) { + currentSlideNo = this.num; + toggleOverview(); + updateSlideClasses(true); + e.preventDefault(); + } + return false; + }, true); + } + }; + + var addRemoteWindowControls = function() { + window.addEventListener("message", function(e) { + if (e.data.indexOf("slide#") != -1) { + currentSlideNo = Number(e.data.replace('slide#', '')); + updateSlideClasses(false); + } + }, false); + }; + + var addTouchListeners = function() { + document.addEventListener('touchstart', function(e) { + touchStartX = e.touches[0].pageX; + }, false); + document.addEventListener('touchend', function(e) { + var pixelsMoved = touchStartX - e.changedTouches[0].pageX; + var SWIPE_SIZE = 150; + if (pixelsMoved > SWIPE_SIZE) { + nextSlide(); + } + else if (pixelsMoved < -SWIPE_SIZE) { + prevSlide(); + } + }, false); + }; + + var addTocLinksListeners = function() { + var toc = document.getElementById('toc'); + if (toc) { + var tocLinks = toc.getElementsByTagName('a'); + for (var i=0; i < tocLinks.length; i++) { + tocLinks.item(i).addEventListener('click', function(e) { + currentSlideNo = Number(this.attributes['href'].value.replace('#slide', '')); + updateSlideClasses(true); + e.preventDefault(); + }, true); + } + } + }; + + // initialize + + (function() { + if (window.location.hash == "") { + currentSlideNo = 1; + } else if (window.location.hash.indexOf("#presenter") != -1) { + currentSlideNo = Number(window.location.hash.replace('#presenter', '')); + isPresenterView = true; + showingPresenterView = true; + presenterViewWin = window; + addClass(document.body, 'presenter_view'); + } else { + currentSlideNo = Number(window.location.hash.replace('#slide', '')); + } + + document.addEventListener('keyup', checkModifierKeyUp, false); + document.addEventListener('keydown', handleBodyKeyDown, false); + document.addEventListener('keydown', checkModifierKeyDown, false); + document.addEventListener('DOMMouseScroll', handleWheel, false); + + window.onmousewheel = document.onmousewheel = handleWheel; + window.onresize = expandSlides; + + for (var i = 0, el; el = slides[i]; i++) { + addClass(el, 'slide far-future'); + } + updateSlideClasses(false); + + // add support for finger events (filter it by property detection?) + addTouchListeners(); + + addTocLinksListeners(); + + addSlideClickListeners(); + + addRemoteWindowControls(); + })(); +} \ No newline at end of file diff --git a/gws_slide_logo.png b/gws_slide_logo.png new file mode 100644 index 0000000..a84dd91 Binary files /dev/null and b/gws_slide_logo.png differ diff --git a/landslide.png b/landslide.png new file mode 100644 index 0000000..8442e76 Binary files /dev/null and b/landslide.png differ diff --git a/me-icon.png b/me-icon.png new file mode 100644 index 0000000..48fe1a5 Binary files /dev/null and b/me-icon.png differ diff --git a/readme.md b/readme.md index 871b5a5..d46dd3b 100644 --- a/readme.md +++ b/readme.md @@ -1,19 +1,29 @@ LandSlideThemes --- +![landSlide](https://raw.github.com/shareme/LandSlideThemes/master/landslide.png) + # Introduction -LandSlideThemes for html5 slides gneration using LandSlide. +LandSlideThemes for html5 slides generation using LandSlide. # License -[Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0.html) + + + # Use # Credits -## Project Lead -[Fred Grott](http://about.me/fredgrott) +# Created By + + + + + + +