Fix titles with & inside.
[hacks/simpleWebSlides.git] / simpleWebSlides.js
index 90634bc..23f08a2 100644 (file)
@@ -57,6 +57,19 @@ SWS.Utils = new function () {
 
 SWS.Templates = new function () {
     var self = this;
+    self.helpPanel = "<div id='sws-help-panel-canvas'>\
+<h1>Keyboard shortcuts</h1>\
+<table>\
+<tr ><td style='color:#f55;'>h</td><td style='color:#f55;'> toggle help</td></tr>\
+<tr><td>c</td><td> toggle the control panel</td></tr>\
+<tr><td>Left, PgUp,swipe left</td><td> previous step</td></tr>\
+<tr><td>Right, PgDown, Space, swipe right</td><td> next step</td></tr>\
+<tr><td>p</td><td> previous slide</td></tr>\
+<tr><td>n</td><td> next slide</td></tr>\
+<tr><td>Home</td><td> first slide</td></tr>\
+<tr><td>End</td><td> last slide</td></tr>\
+</table>\
+</div>";
     self.controlPanel = "<div id='sws-control-panel-canvas'><div id='sws-control-panel'>\
 <div id='sws-control-panel-title-bar'>\
 <a title='Toggle fullscreen' id='sws-control-panel-fullscreen' class='sws-symbol' onclick='SWS.Presentation.toggleFullScreen();'></a>\
@@ -317,11 +330,18 @@ SWS.Presentation = new function () {
             sessionStorage.setItem("current_slide", i);
         };
 
+       self.showHelpAtStartup = function () {
+           var r = sessionStorage.getItem("show_help");
+           if (r == "hide") return false;
+           sessionStorage.setItem("show_help", "hide");
+           return true;
+       };
+
     } else {
         var _current_slide = 0;
         self.getCurrentSlide = function () { return _current_slide; };
         self.setCurrentSlide = function (i) { _current_slide = i; };
-
+       self.showHelpAtStartup = function () { return false; };
     };
     self.firstSlide = function () { return 0; };
     self.lastSlide = function () { return self.getNumSlides() - 1; };
@@ -492,6 +512,8 @@ SWS.Presentation = new function () {
             } else {
                 $("#sws-percent-progress").text(100);
                 progress.remove();
+               window.status = 'Ready';
+               window.print();
             }
         };
         loop();
@@ -528,7 +550,12 @@ SWS.Presentation = new function () {
 
         var loop = function (doc, dir, add, ignoreFirst) {
             if (ignoreFirst !== true) {
-                var this_toc = { 'title' : doc.find("title").first().text(),
+                var this_toc = { 'title' : doc.find("title").first().text()
+                                .replace ("&", "&amp;")
+                                .replace("'","&apos;")
+                                .replace('"', "&quot;")
+                                .replace("<", "&lt;")
+                                .replace(">", "&gt;"),
                                  'sections' : build_sections(doc) };
                 add(toc, this_toc);
             };
@@ -598,6 +625,9 @@ SWS.Presentation = new function () {
             return;
         case 67: /* c */
             $("#sws-control-panel-canvas").toggle();
+           return;
+        case 72: /* h */
+            $("#sws-help-panel-canvas").toggle();
 
         default:
             return;
@@ -783,12 +813,12 @@ SWS.Presentation = new function () {
             var j;
             var secnum = toc.length + '.';
             for (j = 0; j < i; ++j)
-                this_html += "<li class='done'>" + secnum + (j+1) + ' ' + 
+                this_html += "<li class='done'>" + secnum + (j+1) + ' ' +
                 sections[j].title + "</li>";
             this_html += "<li class='hl'>" + secnum + (i+1) + ' ' +
                 sections[i].title + "</li>";
             for (j = i+1; j < sections.length; j++)
-                this_html += "<li>" + secnum + (j+1) + ' ' 
+                this_html += "<li>" + secnum + (j+1) + ' '
                 +sections[j].title + "</li>";
             this_html += "</ul></li></ul></div>";
             $(this).after(this_html);
@@ -839,6 +869,7 @@ SWS.Presentation = new function () {
 
         // Initialize the control panel
         $("body").append($(SWS.Templates.controlPanel));
+        $("body").append($(SWS.Templates.helpPanel));
         // Fill the theme switcher
         $("link.sws-theme").each (function (i) {
             var e = $(this);
@@ -865,7 +896,6 @@ SWS.Presentation = new function () {
         nav.attr("max", SWS.Presentation.lastSlide() + 1);
         $('#sws-control-panel-total-slides').text('/' + SWS.Presentation.getNumSlides());
         _update_ui();
-
         _slide_callbacks = null; /* avoid a leak */
         var passed_theme = SWS.Utils.getParameterByName("theme");
 
@@ -880,12 +910,14 @@ SWS.Presentation = new function () {
                 if (SWS.Utils.getParameterByName("mode") == "print") {
                     self.printMode();
                 }
-                else
+                else {
+                   if (self.showHelpAtStartup()) $("#sws-help-panel-canvas").show();
                     self.refresh();
+               };
                 $(document).keydown(self.inputHandler);
                 document.body.addEventListener('touchstart',self.inputHandler, false);
                 document.body.addEventListener('touchend',self.inputHandler, false);
-
+               
                 _initialized = true;
             };
         setTimeout(f, 100);