Permalink
Browse files

initial pass at a presenter view

  • Loading branch information...
1 parent d385e8b commit 337f9f8013fedd5b5549e42945987ee5a6506ad1 @schacon committed Sep 11, 2011
Showing with 949 additions and 56 deletions.
  1. +9 −0 API.txt
  2. +4 −0 lib/showoff.rb
  3. +653 −0 public/css/960.css
  4. +42 −0 public/css/presenter.css
  5. +111 −0 public/js/presenter.js
  6. +19 −15 public/js/showoff.js
  7. +40 −0 views/header.erb
  8. +1 −41 views/index.erb
  9. +70 −0 views/presenter.erb
View
9 API.txt
@@ -0,0 +1,9 @@
+getSlideProgress() - returns string '5/18'
+getCurrentNotes() - returns string of current notes
+gotoSlide(num)
+getSlidePercent() - returns int
+prevStep()
+nextStep()
+toggleFooter()
+togglePreshow()
+executeAnyCode()
View
4 lib/showoff.rb
@@ -327,6 +327,10 @@ def index(static=false)
erb :index
end
+ def presenter
+ erb :presenter
+ end
+
def clean_link(href)
if href && href[0, 1] == '/'
href = href[1, href.size]
View
653 public/css/960.css
@@ -0,0 +1,653 @@
+/*
+ 960 Grid System ~ Core CSS.
+ Learn more ~ http://960.gs/
+
+ Licensed under GPL and MIT.
+*/
+
+/*
+ Forces backgrounds to span full width,
+ even if there is horizontal scrolling.
+ Increase this if your layout is wider.
+
+ Note: IE6 works fine without this fix.
+*/
+
+body {
+ min-width: 960px;
+}
+
+/* `Container
+----------------------------------------------------------------------------------------------------*/
+
+.container_12,
+.container_16 {
+ margin-left: auto;
+ margin-right: auto;
+ width: 960px;
+}
+
+/* `Grid >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.grid_1,
+.grid_2,
+.grid_3,
+.grid_4,
+.grid_5,
+.grid_6,
+.grid_7,
+.grid_8,
+.grid_9,
+.grid_10,
+.grid_11,
+.grid_12,
+.grid_13,
+.grid_14,
+.grid_15,
+.grid_16 {
+ display: inline;
+ float: left;
+ margin-left: 10px;
+ margin-right: 10px;
+}
+
+.push_1, .pull_1,
+.push_2, .pull_2,
+.push_3, .pull_3,
+.push_4, .pull_4,
+.push_5, .pull_5,
+.push_6, .pull_6,
+.push_7, .pull_7,
+.push_8, .pull_8,
+.push_9, .pull_9,
+.push_10, .pull_10,
+.push_11, .pull_11,
+.push_12, .pull_12,
+.push_13, .pull_13,
+.push_14, .pull_14,
+.push_15, .pull_15 {
+ position: relative;
+}
+
+.container_12 .grid_3,
+.container_16 .grid_4 {
+ width: 220px;
+}
+
+.container_12 .grid_6,
+.container_16 .grid_8 {
+ width: 460px;
+}
+
+.container_12 .grid_9,
+.container_16 .grid_12 {
+ width: 700px;
+}
+
+.container_12 .grid_12,
+.container_16 .grid_16 {
+ width: 940px;
+}
+
+/* `Grid >> Children (Alpha ~ First, Omega ~ Last)
+----------------------------------------------------------------------------------------------------*/
+
+.alpha {
+ margin-left: 0;
+}
+
+.omega {
+ margin-right: 0;
+}
+
+/* `Grid >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .grid_1 {
+ width: 60px;
+}
+
+.container_12 .grid_2 {
+ width: 140px;
+}
+
+.container_12 .grid_4 {
+ width: 300px;
+}
+
+.container_12 .grid_5 {
+ width: 380px;
+}
+
+.container_12 .grid_7 {
+ width: 540px;
+}
+
+.container_12 .grid_8 {
+ width: 620px;
+}
+
+.container_12 .grid_10 {
+ width: 780px;
+}
+
+.container_12 .grid_11 {
+ width: 860px;
+}
+
+/* `Grid >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .grid_1 {
+ width: 40px;
+}
+
+.container_16 .grid_2 {
+ width: 100px;
+}
+
+.container_16 .grid_3 {
+ width: 160px;
+}
+
+.container_16 .grid_5 {
+ width: 280px;
+}
+
+.container_16 .grid_6 {
+ width: 340px;
+}
+
+.container_16 .grid_7 {
+ width: 400px;
+}
+
+.container_16 .grid_9 {
+ width: 520px;
+}
+
+.container_16 .grid_10 {
+ width: 580px;
+}
+
+.container_16 .grid_11 {
+ width: 640px;
+}
+
+.container_16 .grid_13 {
+ width: 760px;
+}
+
+.container_16 .grid_14 {
+ width: 820px;
+}
+
+.container_16 .grid_15 {
+ width: 880px;
+}
+
+/* `Prefix Extra Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .prefix_3,
+.container_16 .prefix_4 {
+ padding-left: 240px;
+}
+
+.container_12 .prefix_6,
+.container_16 .prefix_8 {
+ padding-left: 480px;
+}
+
+.container_12 .prefix_9,
+.container_16 .prefix_12 {
+ padding-left: 720px;
+}
+
+/* `Prefix Extra Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .prefix_1 {
+ padding-left: 80px;
+}
+
+.container_12 .prefix_2 {
+ padding-left: 160px;
+}
+
+.container_12 .prefix_4 {
+ padding-left: 320px;
+}
+
+.container_12 .prefix_5 {
+ padding-left: 400px;
+}
+
+.container_12 .prefix_7 {
+ padding-left: 560px;
+}
+
+.container_12 .prefix_8 {
+ padding-left: 640px;
+}
+
+.container_12 .prefix_10 {
+ padding-left: 800px;
+}
+
+.container_12 .prefix_11 {
+ padding-left: 880px;
+}
+
+/* `Prefix Extra Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .prefix_1 {
+ padding-left: 60px;
+}
+
+.container_16 .prefix_2 {
+ padding-left: 120px;
+}
+
+.container_16 .prefix_3 {
+ padding-left: 180px;
+}
+
+.container_16 .prefix_5 {
+ padding-left: 300px;
+}
+
+.container_16 .prefix_6 {
+ padding-left: 360px;
+}
+
+.container_16 .prefix_7 {
+ padding-left: 420px;
+}
+
+.container_16 .prefix_9 {
+ padding-left: 540px;
+}
+
+.container_16 .prefix_10 {
+ padding-left: 600px;
+}
+
+.container_16 .prefix_11 {
+ padding-left: 660px;
+}
+
+.container_16 .prefix_13 {
+ padding-left: 780px;
+}
+
+.container_16 .prefix_14 {
+ padding-left: 840px;
+}
+
+.container_16 .prefix_15 {
+ padding-left: 900px;
+}
+
+/* `Suffix Extra Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .suffix_3,
+.container_16 .suffix_4 {
+ padding-right: 240px;
+}
+
+.container_12 .suffix_6,
+.container_16 .suffix_8 {
+ padding-right: 480px;
+}
+
+.container_12 .suffix_9,
+.container_16 .suffix_12 {
+ padding-right: 720px;
+}
+
+/* `Suffix Extra Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .suffix_1 {
+ padding-right: 80px;
+}
+
+.container_12 .suffix_2 {
+ padding-right: 160px;
+}
+
+.container_12 .suffix_4 {
+ padding-right: 320px;
+}
+
+.container_12 .suffix_5 {
+ padding-right: 400px;
+}
+
+.container_12 .suffix_7 {
+ padding-right: 560px;
+}
+
+.container_12 .suffix_8 {
+ padding-right: 640px;
+}
+
+.container_12 .suffix_10 {
+ padding-right: 800px;
+}
+
+.container_12 .suffix_11 {
+ padding-right: 880px;
+}
+
+/* `Suffix Extra Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .suffix_1 {
+ padding-right: 60px;
+}
+
+.container_16 .suffix_2 {
+ padding-right: 120px;
+}
+
+.container_16 .suffix_3 {
+ padding-right: 180px;
+}
+
+.container_16 .suffix_5 {
+ padding-right: 300px;
+}
+
+.container_16 .suffix_6 {
+ padding-right: 360px;
+}
+
+.container_16 .suffix_7 {
+ padding-right: 420px;
+}
+
+.container_16 .suffix_9 {
+ padding-right: 540px;
+}
+
+.container_16 .suffix_10 {
+ padding-right: 600px;
+}
+
+.container_16 .suffix_11 {
+ padding-right: 660px;
+}
+
+.container_16 .suffix_13 {
+ padding-right: 780px;
+}
+
+.container_16 .suffix_14 {
+ padding-right: 840px;
+}
+
+.container_16 .suffix_15 {
+ padding-right: 900px;
+}
+
+/* `Push Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .push_3,
+.container_16 .push_4 {
+ left: 240px;
+}
+
+.container_12 .push_6,
+.container_16 .push_8 {
+ left: 480px;
+}
+
+.container_12 .push_9,
+.container_16 .push_12 {
+ left: 720px;
+}
+
+/* `Push Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .push_1 {
+ left: 80px;
+}
+
+.container_12 .push_2 {
+ left: 160px;
+}
+
+.container_12 .push_4 {
+ left: 320px;
+}
+
+.container_12 .push_5 {
+ left: 400px;
+}
+
+.container_12 .push_7 {
+ left: 560px;
+}
+
+.container_12 .push_8 {
+ left: 640px;
+}
+
+.container_12 .push_10 {
+ left: 800px;
+}
+
+.container_12 .push_11 {
+ left: 880px;
+}
+
+/* `Push Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .push_1 {
+ left: 60px;
+}
+
+.container_16 .push_2 {
+ left: 120px;
+}
+
+.container_16 .push_3 {
+ left: 180px;
+}
+
+.container_16 .push_5 {
+ left: 300px;
+}
+
+.container_16 .push_6 {
+ left: 360px;
+}
+
+.container_16 .push_7 {
+ left: 420px;
+}
+
+.container_16 .push_9 {
+ left: 540px;
+}
+
+.container_16 .push_10 {
+ left: 600px;
+}
+
+.container_16 .push_11 {
+ left: 660px;
+}
+
+.container_16 .push_13 {
+ left: 780px;
+}
+
+.container_16 .push_14 {
+ left: 840px;
+}
+
+.container_16 .push_15 {
+ left: 900px;
+}
+
+/* `Pull Space >> Global
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .pull_3,
+.container_16 .pull_4 {
+ left: -240px;
+}
+
+.container_12 .pull_6,
+.container_16 .pull_8 {
+ left: -480px;
+}
+
+.container_12 .pull_9,
+.container_16 .pull_12 {
+ left: -720px;
+}
+
+/* `Pull Space >> 12 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_12 .pull_1 {
+ left: -80px;
+}
+
+.container_12 .pull_2 {
+ left: -160px;
+}
+
+.container_12 .pull_4 {
+ left: -320px;
+}
+
+.container_12 .pull_5 {
+ left: -400px;
+}
+
+.container_12 .pull_7 {
+ left: -560px;
+}
+
+.container_12 .pull_8 {
+ left: -640px;
+}
+
+.container_12 .pull_10 {
+ left: -800px;
+}
+
+.container_12 .pull_11 {
+ left: -880px;
+}
+
+/* `Pull Space >> 16 Columns
+----------------------------------------------------------------------------------------------------*/
+
+.container_16 .pull_1 {
+ left: -60px;
+}
+
+.container_16 .pull_2 {
+ left: -120px;
+}
+
+.container_16 .pull_3 {
+ left: -180px;
+}
+
+.container_16 .pull_5 {
+ left: -300px;
+}
+
+.container_16 .pull_6 {
+ left: -360px;
+}
+
+.container_16 .pull_7 {
+ left: -420px;
+}
+
+.container_16 .pull_9 {
+ left: -540px;
+}
+
+.container_16 .pull_10 {
+ left: -600px;
+}
+
+.container_16 .pull_11 {
+ left: -660px;
+}
+
+.container_16 .pull_13 {
+ left: -780px;
+}
+
+.container_16 .pull_14 {
+ left: -840px;
+}
+
+.container_16 .pull_15 {
+ left: -900px;
+}
+
+/* `Clear Floated Elements
+----------------------------------------------------------------------------------------------------*/
+
+/* http://sonspring.com/journal/clearing-floats */
+
+.clear {
+ clear: both;
+ display: block;
+ overflow: hidden;
+ visibility: hidden;
+ width: 0;
+ height: 0;
+}
+
+/* http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified */
+
+.clearfix:before,
+.clearfix:after,
+.container_12:before,
+.container_12:after,
+.container_16:before,
+.container_16:after {
+ content: '.';
+ display: block;
+ overflow: hidden;
+ visibility: hidden;
+ font-size: 0;
+ line-height: 0;
+ width: 0;
+ height: 0;
+}
+
+.clearfix:after,
+.container_12:after,
+.container_16:after {
+ clear: both;
+}
+
+/*
+ The following zoom:1 rule is specifically for IE6 + IE7.
+ Move to separate stylesheet if invalid CSS is a problem.
+*/
+
+.clearfix,
+.container_12,
+.container_16 {
+ zoom: 1;
+}
View
42 public/css/presenter.css
@@ -0,0 +1,42 @@
+div.zoomed {
+ zoom: 50%;
+ -moz-transform: scale(50%);
+}
+
+#preso { margin-top: 20px; }
+
+#main h2 {
+ text-align: left;
+ font-size: 1.5em;
+}
+
+#progress { padding: 5px; }
+
+#preview {
+ min-height: 430px;
+ background: #777;
+}
+
+#links {
+ background: #fff;
+ padding: 10px;
+ text-align: right;
+}
+#links a { color: #000; }
+
+#slidemenu {
+ background: #fff;
+ padding: 10px;
+}
+#slidemenu ul li {
+ padding: 5px;
+}
+
+#sidebar { background: #ddd; }
+
+#notes {
+ background: #ff9;
+ font-size: 1.5em;
+ min-height: 150px;
+ padding: 20px;
+}
View
111 public/js/presenter.js
@@ -0,0 +1,111 @@
+// presenter js
+var w = null;
+
+$(function(){
+ w = window.open('/');
+});
+
+function presPrevStep()
+{
+ prevStep()
+ w.prevStep()
+ showNotes()
+}
+
+function presNextStep()
+{
+ nextStep()
+ w.nextStep()
+ showNotes()
+}
+
+function showNotes()
+{
+ var notes = w.getCurrentNotes()
+ $('#notes').text(notes)
+}
+
+// See e.g. http://www.quirksmode.org/js/keys.html for keycodes
+function keyDown(event)
+{
+ var key = event.keyCode;
+
+ if (event.ctrlKey || event.altKey || event.metaKey)
+ return true;
+
+ debug('keyDown: ' + key)
+
+ if (key >= 48 && key <= 57) // 0 - 9
+ {
+ gotoSlidenum = gotoSlidenum * 10 + (key - 48);
+ return true;
+ }
+
+ if (key == 13) {
+ if (gotoSlidenum > 0) {
+ debug('go to ' + gotoSlidenum);
+ slidenum = gotoSlidenum - 1;
+ showSlide(true);
+ w.slidenum = gotoSlidenum - 1;
+ w.showSlide(true);
+ gotoSlidenum = 0;
+ } else {
+ debug('executeCode');
+ executeAnyCode();
+ w.executeAnyCode();
+ }
+ }
+
+ if (key == 16) // shift key
+ {
+ shiftKeyActive = true;
+ }
+
+ if (key == 32) // space bar
+ {
+ if (shiftKeyActive) {
+ presPrevStep()
+ } else {
+ presNextStep()
+ }
+ }
+ else if (key == 68) // 'd' for debug
+ {
+ debugMode = !debugMode
+ doDebugStuff()
+ }
+ else if (key == 37 || key == 33 || key == 38) // Left arrow, page up, or up arrow
+ {
+ presPrevStep()
+ }
+ else if (key == 39 || key == 34 || key == 40) // Right arrow, page down, or down arrow
+ {
+ presNextStep()
+ }
+ else if (key == 84 || key == 67) // T or C for table of contents
+ {
+ $('#navmenu').toggle().trigger('click')
+ }
+ else if (key == 90 || key == 191) // z or ? for help
+ {
+ $('#help').toggle()
+ }
+ else if (key == 66 || key == 70) // f for footer (also "b" which is what kensington remote "stop" button sends
+ {
+ toggleFooter()
+ }
+ else if (key == 78) // 'n' for notes
+ {
+ toggleNotes()
+ }
+ else if (key == 27) // esc
+ {
+ removeResults();
+ w.removeResults();
+ }
+ else if (key == 80) // 'p' for preshow
+ {
+ w.togglePreShow();
+ }
+ return true
+}
View
34 public/js/showoff.js
@@ -309,6 +309,22 @@ function toggleNotes()
}
}
+function executeAnyCode()
+{
+ var $jsCode = $('.execute .sh_javascript code:visible')
+ if ($jsCode.length > 0) {
+ executeCode.call($jsCode);
+ }
+ var $rubyCode = $('.execute .sh_ruby code:visible')
+ if ($rubyCode.length > 0) {
+ executeRuby.call($rubyCode);
+ }
+ var $coffeeCode = $('.execute .sh_coffeescript code:visible')
+ if ($coffeeCode.length > 0) {
+ executeCoffee.call($coffeeCode);
+ }
+}
+
function debug(data)
{
$('#debugInfo').text(data)
@@ -338,20 +354,8 @@ function keyDown(event)
gotoSlidenum = 0;
} else {
debug('executeCode');
- var $jsCode = $('.execute .sh_javascript code:visible')
- if ($jsCode.length > 0) {
- executeCode.call($jsCode);
- }
- var $rubyCode = $('.execute .sh_ruby code:visible')
- if ($rubyCode.length > 0) {
- executeRuby.call($rubyCode);
- }
- var $coffeeCode = $('.execute .sh_coffeescript code:visible')
- if ($coffeeCode.length > 0) {
- executeCoffee.call($coffeeCode);
- }
+ executeAnyCode();
}
-
}
@@ -410,7 +414,7 @@ function keyDown(event)
}
else if (key == 80) // 'p' for preshow
{
- runPreShow();
+ togglePreShow();
}
return true
}
@@ -539,7 +543,7 @@ var preshow_images;
var preshow_imagesTotal = 0;
var preshow_des = null;
-function runPreShow() {
+function togglePreShow() {
if(preshow_running) {
stopPreShow()
} else {
View
40 views/header.erb
@@ -0,0 +1,40 @@
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title><%= @title %></title>
+
+ <meta name="viewport" content="width=device-width"/>
+
+ <link rel="stylesheet" href="<%= @asset_path %>css/reset.css" type="text/css"/>
+ <link rel="stylesheet" href="<%= @asset_path %>css/showoff.css" type="text/css"/>
+
+ <script type="text/javascript" src="<%= @asset_path %>js/jquery-1.4.2.min.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/jquery.cycle.all.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/jquery-print.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/jquery.batchImageLoad.js"></script>
+
+ <script type="text/javascript" src="<%= @asset_path %>js/jquery.doubletap-0.1.js"></script>
+
+ <script type="text/javascript" src="<%= @asset_path %>js/fg.menu.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/showoff.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/jTypeWriter.js"> </script>
+ <script type="text/javascript" src="<%= @asset_path %>js/sh_main.min.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/core.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/showoffcore.js"></script>
+ <script type="text/javascript" src="<%= @asset_path %>js/coffee-script.js"></script>
+
+ <link type="text/css" href="<%= @asset_path %>css/fg.menu.css" media="screen" rel="stylesheet" />
+ <link type="text/css" href="<%= @asset_path %>css/theme/ui.all.css" media="screen" rel="stylesheet" />
+ <link type="text/css" href="<%= @asset_path %>css/sh_style.css" rel="stylesheet" >
+
+ <% css_files.each do |css_file| %>
+ <link rel="stylesheet" href="file/<%= css_file %>" type="text/css"/>
+ <% end %>
+
+ <% js_files.each do |js_file| %>
+ <script type="text/javascript" src="file/<%= js_file %>"></script>
+ <% end %>
+
+ <script type="text/javascript">
+ $(function(){
+ setupPreso(<%= @slides.nil? ? "true" : "false"%>, '<%= @asset_path %>');
+ });
+ </script>
View
42 views/index.erb
@@ -3,51 +3,11 @@
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <title><%= @title %></title>
-
- <meta name="viewport" content="width=device-width"/>
-
- <link rel="stylesheet" href="<%= @asset_path %>css/reset.css" type="text/css"/>
- <link rel="stylesheet" href="<%= @asset_path %>css/showoff.css" type="text/css"/>
-
- <script type="text/javascript" src="<%= @asset_path %>js/jquery-1.4.2.min.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/jquery.cycle.all.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/jquery-print.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/jquery.batchImageLoad.js"></script>
-
- <script type="text/javascript" src="<%= @asset_path %>js/jquery.doubletap-0.1.js"></script>
-
- <script type="text/javascript" src="<%= @asset_path %>js/fg.menu.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/showoff.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/jTypeWriter.js"> </script>
- <script type="text/javascript" src="<%= @asset_path %>js/sh_main.min.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/core.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/showoffcore.js"></script>
- <script type="text/javascript" src="<%= @asset_path %>js/coffee-script.js"></script>
-
- <link type="text/css" href="<%= @asset_path %>css/fg.menu.css" media="screen" rel="stylesheet" />
- <link type="text/css" href="<%= @asset_path %>css/theme/ui.all.css" media="screen" rel="stylesheet" />
- <link type="text/css" href="<%= @asset_path %>css/sh_style.css" rel="stylesheet" >
-
- <% css_files.each do |css_file| %>
- <link rel="stylesheet" href="file/<%= css_file %>" type="text/css"/>
- <% end %>
-
- <% js_files.each do |js_file| %>
- <script type="text/javascript" src="file/<%= js_file %>"></script>
- <% end %>
-
- <script type="text/javascript">
- $(function(){
- setupPreso(<%= @slides.nil? ? "true" : "false"%>, '<%= @asset_path %>');
- });
- </script>
+ <%= erb :header %>
</head>
<body>
-
<a tabindex="0" href="#search-engines" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all" id="navmenu"><span class="ui-icon ui-icon-triangle-1-s"></span>slides</a>
<div id="navigation" class="hidden"></div>
View
70 views/presenter.erb
@@ -0,0 +1,70 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <%= erb :header %>
+ <link rel="stylesheet" href="<%= @asset_path %>css/960.css" type="text/css"/>
+ <link rel="stylesheet" href="<%= @asset_path %>css/presenter.css" type="text/css"/>
+ <script type="text/javascript" src="<%= @asset_path %>js/presenter.js"></script>
+</head>
+
+<body>
+
+<a tabindex="0" href="#search-engines" class="fg-button fg-button-icon-right ui-widget ui-state-default ui-corner-all" id="navmenu"><span class="ui-icon ui-icon-triangle-1-s"></span>slides</a>
+<div id="navigation" class="hidden"></div>
+
+<div id="help">
+ <table>
+ <tr><td class="key">z, ?</td><td>toggle help (this)</td></tr>
+ <tr><td class="key">space, &rarr;</td><td>next slide</td></tr>
+ <tr><td class="key">shift-space, &larr;</td><td>previous slide</td></tr>
+ <tr><td class="key">d</td><td>toggle debug mode</td></tr>
+ <tr><td class="key">## &lt;ret&gt;</td><td>go to slide #</td></tr>
+ <tr><td class="key">c, t</td><td>table of contents (vi)</td></tr>
+ <tr><td class="key">f</td><td>toggle footer</td></tr>
+ <tr><td class="key">r</td><td>reload slides</td></tr>
+ <tr><td class="key">n</td><td>toggle notes</td></tr>
+ <tr><td class="key">p</td><td>run preshow</td></tr>
+ </table>
+</div>
+
+<div id="main" class="container_12">
+ <div id="topbar" class="grid_12">
+ <div id="links">
+ <a href="/pdf">Generate PDF</a>
+ &nbsp; &nbsp;
+ <a href="/onepage">Single Page</a>
+ </div>
+ </div>
+ <div class="clear"></div>
+ <div id="sidebar" class="grid_4">
+ <div id="progress">
+ Slide: <span id="slideInfo"></span>
+ </div>
+ <div id="debugInfo"></div>
+ <div id="slidemenu">
+ <h2>Slides</h2>
+ <ul>
+ <li>Section 1</li>
+ <li>Section 2</li>
+ </ul>
+ </div>
+ </div>
+ <div id="preview" class="grid_8">
+ <div id="preso" class="zoomed">loading presentation...</div>
+ </div>
+ <div class="clear"></div>
+ <div id="bottom" class="grid_12">
+ <div id="notes">
+ my notes
+ </div>
+ </div>
+</div>
+
+<div id="slides" class="offscreen" <%= 'style="display:none;"' if @slides %>>
+<%= @slides %>
+</div>
+
+</body>
+</html>

1 comment on commit 337f9f8

@badboy

god damn. I ❤️ your presenter view. Gonna remove my try immediately.

Please sign in to comment.