showoff 0.19.0 → 0.19.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1601282ce5936996277f4a1309c7535641626225
4
- data.tar.gz: da0de8e6681c74330610564866696c2812acccc9
3
+ metadata.gz: 6c80eb56b5142a913acb35ccc32b3fdaed12e0f0
4
+ data.tar.gz: e1b15daffac40995846c44265d1cb06b7091489f
5
5
  SHA512:
6
- metadata.gz: 13d3baa8ec51274dfb9727449373436dd1c8ca08072e38ca1599673d36bc292686c3f12d73f1ac7295df709f90a6cd48e08671502cafd6550918f54dc1e7f23a
7
- data.tar.gz: d2fd23fe45cf664d86dc8e4eaf4b3f73ac26ac41f65d7643b5de07058ad7386091c4a39246658ca51ec052edc81f4b1edfaf854d683ff462c79202878dcb5f91
6
+ metadata.gz: 19556afbea4c9beeeba98671732e605752125958ab7d64eadc8bca17d1a57d06d30fa71d67a3058367b86c7bebb9b773aa3000f33aa7dee366a2202f58a4112b
7
+ data.tar.gz: 7b1954cc0130b69551a670c0b06c2b3b1af445541e073cb5a758b645df2cbdcceb2495807988c77e302628d43ed72177a69da024204d312959ab656028285bdf
@@ -1,3 +1,3 @@
1
1
  # No namespace here since ShowOff is a class and I'd have to inherit from
2
2
  # Sinatra::Application (which we don't want to load here)
3
- SHOWOFF_VERSION = '0.19.0'
3
+ SHOWOFF_VERSION = '0.19.1'
@@ -41,6 +41,7 @@ de:
41
41
  resume: "Fortsetzen in Minuten:"
42
42
 
43
43
  tour:
44
+ show: Sehen Sie die Tour
44
45
  reset: Vorschläge Zurücksetzen
45
46
  welcome: <h3>Willkommen bei Showoff</h3>Lass mich dich herum zeigen. Nachdem du diese Tour beendet hast, wird es nicht wieder zeigen.
46
47
  displayview: Klicken Sie auf diese Schaltfläche, um das Anzeigefenster zu öffnen. Dann ziehe es auf den Projektor.
@@ -60,7 +61,13 @@ de:
60
61
  responses: Als Fragen beantwortet werden, erscheinen sie als Balkendiagramm mit der Anzahl der Antworten auf jede Frage auf der rechten Seite.
61
62
  display: Drücken Sie diese Taste, um einen Schnappschuss der Live-Antworten auf Folie zu präsentieren.
62
63
  save: Drücken Sie diese Taste, um Ihre Antworten zu speichern. Die Präsentation wird bei der Beantwortung pausieren.
63
- menu: Das Menü in dieser Ecke ermöglicht unabhängige Navigation, Datei-Download, Interaktivität und vieles mehr.
64
+ menu:
65
+ start: Klicken Sie hier, um das Menü zu öffnen.
66
+ navigation: Schnell zu einer Folie navigieren.
67
+ download: Download Präsentationsunterstützungsdateien.
68
+ pace: Geben Sie Tempo Feedback.
69
+ questions: Fragen Sie die Redner Fragen.
70
+ feedback: Vorschläge zur Verbesserung des Inhalts geben.
64
71
 
65
72
  downloads:
66
73
  title: Datei Downloads
@@ -41,6 +41,7 @@ en:
41
41
  resume: "Resuming in:"
42
42
 
43
43
  tour:
44
+ show: See the Tour
44
45
  reset: Reset Hints
45
46
  welcome: <h3>Welcome to Showoff</h3>Let me show you around. After you finish this tour, it won't show again.
46
47
  displayview: Start by clicking this button to open the Display Window; then drag it onto the projector.
@@ -60,7 +61,14 @@ en:
60
61
  responses: As questions are answered, they'll show up as a bar chart with the number of answers to each question on the right.
61
62
  display: Press this button to present a snapshot of the live responses on slide.
62
63
  save: Press this button to save your responses. The presentation will pause while answering.
63
- menu: The menu in this corner allows independent navigation, file downloading, interactivity, and more.
64
+ menu:
65
+ start: Click here to open the menu.
66
+ navigation: Quickly navigate to any slide.
67
+ download: Download presentation support files.
68
+ pace: Provide pace feedback.
69
+ questions: Ask live questions of the presenter.
70
+ feedback: Provide suggestions for improving the content.
71
+
64
72
 
65
73
  downloads:
66
74
  title: File Downloads
@@ -41,6 +41,7 @@ es:
41
41
  resume: "Continuando en:"
42
42
 
43
43
  tour:
44
+ show: Ver la gira
44
45
  reset: Restablecer Sugerencias
45
46
  welcome: <h3>Bienvenido a Showoff</h3>Permítanme mostrarles todo. Después de terminar este tour, no se mostrará de nuevo.
46
47
  displayview: Comience haciendo clic en este botón para abrir la ventana de visualización; Luego arrástrelo al proyector
@@ -60,7 +61,14 @@ es:
60
61
  responses: A medida que las preguntas son contestadas, aparecerán como un gráfico de barras con el número de respuestas a cada pregunta de la derecha.
61
62
  display: Presione este botón para presentar una instantánea de las respuestas en vivo en la diapositiva.
62
63
  save: Pulse este botón para guardar sus respuestas. La presentación se detendrá mientras responde.
63
- menu: El menú en esta esquina permite una navegación independiente, descarga de archivos, interactividad y mucho más.
64
+ menu:
65
+ start: Haga clic aquí para abrir el menú.
66
+ navigation: Navegue rápidamente a cualquier diapositiva.
67
+ download: Descargue los archivos de soporte de la presentación.
68
+ pace: Proporcione la regeneración de la velocidad.
69
+ questions: Haga preguntas en vivo del presentador.
70
+ feedback: Proporcione sugerencias para mejorar el contenido.
71
+
64
72
 
65
73
  downloads:
66
74
  title: Descarga de Archivos
@@ -41,6 +41,7 @@ fr:
41
41
  resume: "Reprise dans:"
42
42
 
43
43
  tour:
44
+ show: Voir le Tour
44
45
  reset: Restaurer des Conseils
45
46
  welcome: <h3>Bienvenue dans Showoff</h3>Laissez-moi vous montrer. Après avoir terminé cette tournée, cela ne s'affichera plus encore.
46
47
  displayview: Commencez par cliquer sur ce bouton pour ouvrir la fenêtre d'affichage; Puis faites-le glisser sur le projecteur.
@@ -60,7 +61,13 @@ fr:
60
61
  responses: À mesure que les questions sont répondues, elles apparaîtront comme un graphique à barres avec le nombre de réponses à chaque question à droite.
61
62
  display: Appuyez sur ce bouton pour présenter un instantané des réponses en direct sur la diapositive.
62
63
  save: Appuyez sur ce bouton pour enregistrer vos réponses. La présentation s'arrêtera pendant que vous travaillez.
63
- menu: Le menu dans ce coin permet une navigation indépendante, le téléchargement de fichiers, l'interactivité et plus encore.
64
+ menu:
65
+ start: Cliquez sur le menu pour commencer.
66
+ navigation: Naviguez rapidement vers n'importe quelle diapositive.
67
+ download: Téléchargez les fichiers de support de présentation.
68
+ pace: Fournir des commentaires sur la rapidité de livraison.
69
+ questions: Posez des questions en direct au présentateur.
70
+ feedback: Fournissez des suggestions pour améliorer le contenu.
64
71
 
65
72
  downloads:
66
73
  title: Téléchargements de fichiers
@@ -42,6 +42,7 @@ ja:
42
42
  resume: "再開:"
43
43
 
44
44
  tour:
45
+ show: ツアーを見る
45
46
  reset: ヒントをリセットする
46
47
  welcome: <h3>Showoffへようこそ</h3>私は周りを見せてあげましょう。このツアーを終えると、再び表示されません。
47
48
  displayview: このボタンをクリックして表示ビューを開きます。 プロジェクタにドラッグします。
@@ -61,7 +62,13 @@ ja:
61
62
  responses: 回答は棒グラフで表示され、右の各質問に対する回答の数が表示されます。
62
63
  display: このボタンを押すと、ライブ応答のスナップショットがスライドに表示されます。
63
64
  save: あなたの応答を保存するには、このボタンを押してください。プレゼンテーションは応答中に一時停止します。
64
- menu: このコーナーのメニューは、独立したナビゲーション、ファイルのダウンロード、インタラクティブ機能などを可能にします。
65
+ menu:
66
+ start: メニューを開くにはここをクリックしてください。
67
+ navigation: あなたは望むスライドに素早く移動できます。
68
+ download: プレゼンテーションサポートファイルをダウンロードします。
69
+ pace: ペースフィードバックを提供する。
70
+ questions: 発表者に質問をすることができます。
71
+ feedback: コンテンツを改善するための提案を提供する。
65
72
 
66
73
  downloads:
67
74
  title: ファイルダウンロード
@@ -41,6 +41,7 @@ nl:
41
41
  resume: "Start over:"
42
42
 
43
43
  tour:
44
+ show: Zie de tour
44
45
  reset: Reset Suggesties
45
46
  welcome: <h3>Welkom bij Showoff</h3>Laat me je laten zien. Nadat u deze tour hebt afgerond, wordt het niet weer getoond.
46
47
  displayview: Begin door op deze knop te klikken om het presentatiescherm te openen; Sleep het dan op de projector.
@@ -60,7 +61,13 @@ nl:
60
61
  responses: Naarmate de vragen worden beantwoord, worden ze weergegeven als een staafdiagram met het aantal antwoorden op elke vraag aan de rechterkant.
61
62
  display: Druk op deze knop om een ​​momentopname van de live reacties op dia te presenteren.
62
63
  save: Druk op deze knop om uw antwoorden op te slaan. De presentatie zal onderbreken tijdens het beantwoorden.
63
- menu: Het menu in deze hoek zorgt voor onafhankelijke navigatie, bestand downloaden, interactiviteit en meer.
64
+ menu:
65
+ start: Klik hier om het menu te openen.
66
+ navigation: Ga naar een dia.
67
+ download: Download presentatie ondersteuningsbestanden.
68
+ pace: Geef tempo feedback.
69
+ questions: Vraag live vragen van de presentator.
70
+ feedback: Geef suggesties voor het verbeteren van de inhoud.
64
71
 
65
72
  downloads:
66
73
  title: Downloads
@@ -41,6 +41,7 @@ pt:
41
41
  resume: "Resumindo em:"
42
42
 
43
43
  tour:
44
+ show: Veja o Tour
44
45
  reset: Dicas de Reinicialização
45
46
  welcome: <h3>Bem-vindo ao Showoff</h3>Deixe-me mostrar-lhe. Depois de terminar esta turnê, não será exibida novamente.
46
47
  displayview: Comece clicando neste botão para abrir a visualização de exibição; depois arraste-o para o projetor.
@@ -60,7 +61,13 @@ pt:
60
61
  responses: À medida que as perguntas são respondidas, elas aparecerão como um gráfico de barras com o número de respostas a cada pergunta à direita.
61
62
  display: Pressione este botão para apresentar um instantâneo das respostas ao vivo no slide.
62
63
  save: Pressione este botão para salvar suas respostas. A apresentação irá pausar enquanto responde.
63
- menu: O menu neste canto permite navegação independente, download de arquivos, interatividade e muito mais.
64
+ menu:
65
+ start: Click here to open the menu.
66
+ navigation: Navegue rapidamente para qualquer slide.
67
+ download: Baixe arquivos de suporte de apresentação.
68
+ pace: Fornecer feedback de velocidade.
69
+ questions: Faça perguntas ao vivo do apresentador.
70
+ feedback: Fornecer sugestões para melhorar o conteúdo.
64
71
 
65
72
  downloads:
66
73
  title: Arquivos de Downloads
@@ -859,12 +859,16 @@ form .element {
859
859
  margin-bottom: .5em;
860
860
  }
861
861
 
862
- .ui-dialog .auxillary-buttons {
862
+ .ui-dialog .right {
863
+ float: right;
864
+ }
865
+
866
+ .ui-dialog .auxillary {
863
867
  background: none;
864
868
  border: none;
865
- float: right;
869
+ font-size: small;
866
870
  }
867
- .ui-dialog .auxillary-buttons:active {
871
+ .ui-dialog .auxillary:active {
868
872
  color: #ccc;
869
873
  }
870
874
 
@@ -29,6 +29,7 @@ var mode = { track: true, follow: true };
29
29
 
30
30
  // global variable to register tours with
31
31
  var tours = {};
32
+ var menuTourRunning = false;
32
33
 
33
34
  // a dummy websocket object to make standalone presentations easier.
34
35
  var ws = {}
@@ -110,16 +111,31 @@ function setupPreso(load_slides, prefix) {
110
111
  {
111
112
  text: I18n.t('help.close'),
112
113
  click: function() { $(this).dialog( "close" ); }
113
- },
114
- {
114
+ }
115
+ ];
116
+
117
+ if($("body").hasClass("presenter")) {
118
+ buttons.push({
119
+ text: I18n.t('tour.show'),
120
+ "class": 'right',
121
+ click: function() {
122
+ $(this).dialog( "close" );
123
+ showTour('showoff:presenter', false);
124
+ }
125
+ });
126
+ }
127
+ else {
128
+ buttons.push({
115
129
  text: I18n.t('tour.reset'),
116
- "class": 'auxillary-buttons',
130
+ "class": 'auxillary right',
117
131
  click: function() {
118
132
  document.cookie="tours=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
119
133
  document.cookie="tourVersion=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
134
+ delete document.cookieHash['tours'];
135
+ delete document.cookieHash['tourVersion'];
120
136
  }
121
- }
122
- ];
137
+ });
138
+ }
123
139
 
124
140
  $("#help-modal").dialog({
125
141
  autoOpen: false,
@@ -355,10 +371,25 @@ function zoom(presenter) {
355
371
  }
356
372
  }
357
373
 
374
+ function openMenu() {
375
+ toggleKeybinding();
376
+ $('#feedbackSidebar').show();
377
+ // if the menu tour is open, make it harder to lose the menu
378
+ if(! menuTourRunning ) {
379
+ $('#sidebarExit').show();
380
+ }
381
+ }
382
+
383
+ function closeMenu(force) {
384
+ if(! menuTourRunning || force ) {
385
+ $('#feedbackSidebar, #sidebarExit').hide();
386
+ toggleKeybinding('on');
387
+ }
388
+ }
389
+
358
390
  function setupSideMenu() {
359
391
  $("#hamburger").click(function() {
360
- $('#feedbackSidebar, #sidebarExit').toggle();
361
- toggleKeybinding();
392
+ openMenu();
362
393
  });
363
394
 
364
395
  $("#navToggle").click(function() {
@@ -427,11 +458,6 @@ function setupSideMenu() {
427
458
  closeMenu();
428
459
  });
429
460
 
430
- function closeMenu() {
431
- $('#feedbackSidebar, #sidebarExit').hide();
432
- toggleKeybinding('on');
433
- }
434
-
435
461
  function feedback_response(elem, response) {
436
462
  var originalText = $(elem).text();
437
463
  $(elem).text(response);
@@ -589,17 +615,20 @@ function clearCookies() {
589
615
  document.cookie = "layout=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
590
616
  document.cookie = "notes=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
591
617
  document.cookie = "tourVersion=;expires=Thu, 21 Sep 1979 00:00:01 UTC;";
618
+ document.cookieHash = {};
592
619
  }
593
620
 
594
621
  // called when slides with special content are displayed. (like the Activity complete toggle)
595
622
  // Show a "welcome intro" the first time it's seen.
596
- function showTour(name) {
623
+ function showTour(name, record) {
624
+ record = (typeof record == 'undefined' ? true : record) // default true
625
+
597
626
  // we don't need to show tours if we're a display view
598
627
  if('presenterView' in window) {
599
628
  return false;
600
629
  }
601
630
 
602
- // dont' blow up if someone calls a missing tour
631
+ // don't blow up if someone calls a missing tour
603
632
  if(!(name in tours)) {
604
633
  console.log('No such tour: '+name);
605
634
  return false;
@@ -607,6 +636,7 @@ function showTour(name) {
607
636
 
608
637
  var clientTours = document.cookieHash['tours'] || [];
609
638
 
639
+ // if we haven't seen this one before...
610
640
  if(clientTours.indexOf(name) == -1) {
611
641
  toggleKeybinding('off');
612
642
 
@@ -625,15 +655,64 @@ function showTour(name) {
625
655
 
626
656
  intro.onexit(function() {
627
657
  toggleKeybinding('on');
658
+
659
+ if(menuTourRunning) {
660
+ menuTourRunning = false;
661
+ $("#hamburger").off('click', null, introNext);
662
+ $("#closeMenu").off('click', null, introClose);
663
+ closeMenu();
664
+ }
628
665
  });
629
666
 
630
667
  // record tour completion so we don't continue to annoy people
631
668
  intro.oncomplete(function() {
632
- clientTours.push(name);
633
- document.cookieHash['tours'] = clientTours;
634
- document.cookie = "tours="+JSON.stringify(clientTours);
669
+ if(record) {
670
+ clientTours.push(name);
671
+ document.cookieHash['tours'] = clientTours;
672
+ document.cookie = "tours="+JSON.stringify(clientTours);
673
+ }
674
+
675
+ // this keeps track of the version of the presenter tour we've seen
676
+ if(name == 'showoff:presenter:auto') {
677
+ document.cookie = "tourVersion="+tourVersion;
678
+ document.cookieHash['tourVersion'] = tourVersion;
679
+
680
+ // we don't need this anymore; let's save a byte or three
681
+ delete tours['showoff:presenter:auto'];
682
+ }
683
+
635
684
  });
636
685
 
686
+ // if we're showing the menu, we need to do some extra bookeeping to make it usable
687
+ if(name == 'showoff:menu') {
688
+ menuTourRunning = true;
689
+
690
+ // A couple helper functions to add to the menu bindings.
691
+ // We have to do it here because 'intro' is in scope
692
+ var introNext = function() { intro.nextStep() };
693
+ var introClose = function() { intro.exit() };
694
+
695
+ $("#hamburger").on('click', null, introNext);
696
+ $("#closeMenu").on('click', null, introClose);
697
+
698
+ intro.onchange(function(targetElement) {
699
+ switch(intro._currentStep) {
700
+ case 0:
701
+ closeMenu(true);
702
+ break;
703
+
704
+ case 1:
705
+ openMenu();
706
+ break;
707
+ }
708
+ });
709
+
710
+ // keep the menu visible. This is a hack, but I don't see a better way.
711
+ intro.onafterchange(function(targetElement) {
712
+ $("#feedbackSidebar").removeClass('introjs-fixParent');
713
+ });
714
+ }
715
+
637
716
  intro.start();
638
717
  }
639
718
  }
@@ -843,15 +922,17 @@ function showSlide(back_step, updatepv) {
843
922
  activityIncomplete = false;
844
923
  }
845
924
 
846
- if(currentSlide.hasClass('activity')) {
847
- showTour('showoff:activity');
848
- }
849
- if(getSlideOption('form')) {
850
- showTour('showoff:form');
851
- }
852
- var tour = getSlideOption('tour');
853
- if(tour) {
854
- showTour(tour);
925
+ if(autoTour) {
926
+ if(currentSlide.hasClass('activity')) {
927
+ showTour('showoff:activity');
928
+ }
929
+ if(getSlideOption('form')) {
930
+ showTour('showoff:form');
931
+ }
932
+ var tour = getSlideOption('tour');
933
+ if(tour) {
934
+ showTour(tour);
935
+ }
855
936
  }
856
937
 
857
938
  // show the sync button if we're not on the same slide as the presenter
@@ -5,27 +5,53 @@
5
5
  <%= erb :header %>
6
6
 
7
7
  <script type="text/javascript">
8
- tours['showoff:activity'] = [
9
- {
10
- element: ".currentSlide .activityToggle",
11
- intro: I18n.t('tour.activity.complete')
12
- }
13
- ];
14
-
15
- tours['showoff:form'] = [
16
- {
17
- element: ".currentSlide input.save",
18
- intro: I18n.t('tour.form.save')
19
- }
20
- ];
21
-
22
- tours['showoff:menu'] = [
23
- {
24
- element: "#hamburger",
25
- intro: I18n.t('tour.menu')
26
- }
27
- ];
28
-
8
+ // We want the audience members to see automatic tours. We can assume that they won't be
9
+ // using many server domains like the presenter might.
10
+ var autoTour = true;
11
+
12
+ $( document ).ready(function() {
13
+ tours['showoff:activity'] = [
14
+ {
15
+ element: ".currentSlide .activityToggle",
16
+ intro: I18n.t('tour.activity.complete')
17
+ }
18
+ ];
19
+
20
+ tours['showoff:form'] = [
21
+ {
22
+ element: ".currentSlide input.save",
23
+ intro: I18n.t('tour.form.save')
24
+ }
25
+ ];
26
+
27
+ tours['showoff:menu'] = [
28
+ {
29
+ element: "#hamburger",
30
+ intro: I18n.t('tour.menu.start')
31
+ },
32
+ {
33
+ element: "#navToggle",
34
+ intro: I18n.t('tour.menu.navigation')
35
+ },
36
+ {
37
+ element: "#fileDownloads",
38
+ intro: I18n.t('tour.menu.download')
39
+ },
40
+ {
41
+ element: "#paceFaster",
42
+ intro: I18n.t('tour.menu.pace')
43
+ },
44
+ {
45
+ element: "#questionToggle",
46
+ intro: I18n.t('tour.menu.questions')
47
+ },
48
+ {
49
+ element: "#feedbackToggle",
50
+ intro: I18n.t('tour.menu.feedback')
51
+ }
52
+ ].filter(function(item) { return (document.querySelector(item['element'])) });
53
+ // display tips for only the enabled features
54
+ });
29
55
  </script>
30
56
  </head>
31
57
 
@@ -69,7 +95,7 @@
69
95
 
70
96
  <div id="feedbackToggle" class="buttonWrapper interactive"><i class="fa fa-envelope"></i> <%= I18n.t('menu.feedback.label') %></div>
71
97
  <div id="feedbackSubmenu" class="submenu">
72
- <p><%= I18n.t('menu.feedback.label') %></p>
98
+ <p><%= I18n.t('menu.feedback.description') %></p>
73
99
  <small>
74
100
  <%= I18n.t('menu.feedback.worst') %>
75
101
  <input type="radio" name="rating" value="1"></input>
@@ -12,112 +12,108 @@
12
12
  <script type="text/javascript">
13
13
  editUrl = "<%= @edit %>";
14
14
  issueUrl = "<%= @issues %>";
15
-
16
- tours['showoff:activity'] = [
17
- {
18
- element: ".currentSlide .count",
19
- intro: I18n.t('tour.activity.count')
20
- }
21
- ];
22
-
23
- tours['showoff:form'] = [
24
- {
25
- element: "#notes",
26
- intro: I18n.t('tour.form.responses'),
27
- scrollToElement: false
28
- },
29
- {
30
- element: ".currentSlide input.display",
31
- intro: I18n.t('tour.form.display')
32
- }
33
- ];
34
-
35
- $(function(){
36
- var tourVersion = 1;
37
- var clientTour = document.cookieHash['tourVersion'] || 0;
38
-
39
- if(clientTour < tourVersion) {
40
- toggleKeybinding('off');
41
-
42
- var intro = introJs();
43
- intro.setOptions({
44
- showProgress: true,
45
- showStepNumbers: false,
46
- exitOnOverlayClick: false,
47
- steps: [
48
- {
49
- intro: I18n.t('tour.welcome'),
50
- version: 1
51
- },
52
- {
53
- element: "#slaveWindow",
54
- intro: I18n.t('tour.displayview'),
55
- version: 1
56
- },
57
- {
58
- element: "#annotationLabel",
59
- intro: I18n.t('tour.annotations'),
60
- version: 1
61
- },
62
- {
63
- element: "#timerSection",
64
- intro: I18n.t('tour.timer'),
65
- version: 1
66
- },
67
- {
68
- element: "#feedbackPace",
69
- intro: I18n.t('tour.pace'),
70
- version: 1
71
- },
72
- {
73
- element: "#questions",
74
- intro: I18n.t('tour.questions'),
75
- version: 1
76
- },
77
- {
78
- element: "#notes-controls",
79
- intro: I18n.t('tour.notes'),
80
- highlightClass: "tourDark",
81
- version: 1
82
- },
83
- {
84
- element: "#slideSource",
85
- intro: I18n.t('tour.slidesource'),
86
- version: 1
87
- },
88
- {
89
- element: "#settings",
90
- intro: I18n.t('tour.settings'),
91
- version: 1
92
- },
93
- {
94
- element: "#edit",
95
- intro: I18n.t('tour.edit'),
96
- version: 1
97
- },
98
- {
99
- element: "#report",
100
- intro: I18n.t('tour.report'),
101
- version: 1
102
- }
103
- ].filter(function(item) { return (item['version'] > clientTour) && ((item['element'] == undefined) || document.querySelector(item['element'])) })
104
- // the queryselector filter eliminates tips for features that have been turned off
105
- });
106
-
107
- // re-enable the keyboard whether the tour was completed or not
108
- intro.onexit(function() {
109
- toggleKeybinding('on');
110
- });
111
-
112
- // record tour completion so we don't continue to annoy people
113
- intro.oncomplete(function() {
114
- document.cookie = "tourVersion="+tourVersion;
115
- });
116
-
117
- // give it a chance to finish loading the presentation
118
- $("body").bind("showoff:loaded", function (event) {
119
- intro.start();
120
- });
15
+ autoTour = false;
16
+
17
+ // increment this each time we add features with new tour stops.
18
+ tourVersion = 1;
19
+
20
+ $(function() {
21
+ tours['showoff:activity'] = [
22
+ {
23
+ element: ".currentSlide .count",
24
+ intro: I18n.t('tour.activity.count')
25
+ }
26
+ ];
27
+
28
+ tours['showoff:form'] = [
29
+ {
30
+ element: "#notes",
31
+ intro: I18n.t('tour.form.responses'),
32
+ scrollToElement: false
33
+ },
34
+ {
35
+ element: ".currentSlide input.display",
36
+ intro: I18n.t('tour.form.display')
37
+ }
38
+ ];
39
+
40
+ tours['showoff:presenter'] = [
41
+ {
42
+ intro: I18n.t('tour.welcome'),
43
+ version: 1
44
+ },
45
+ {
46
+ element: "#slaveWindow",
47
+ intro: I18n.t('tour.displayview'),
48
+ version: 1
49
+ },
50
+ {
51
+ element: "#annotationLabel",
52
+ intro: I18n.t('tour.annotations'),
53
+ version: 1
54
+ },
55
+ {
56
+ element: "#timerSection",
57
+ intro: I18n.t('tour.timer'),
58
+ version: 1
59
+ },
60
+ {
61
+ element: "#feedbackPace",
62
+ intro: I18n.t('tour.pace'),
63
+ version: 1
64
+ },
65
+ {
66
+ element: "#questions",
67
+ intro: I18n.t('tour.questions'),
68
+ version: 1
69
+ },
70
+ {
71
+ element: "#notes-controls",
72
+ intro: I18n.t('tour.notes'),
73
+ highlightClass: "tourDark",
74
+ version: 1
75
+ },
76
+ {
77
+ element: "#slideSource",
78
+ intro: I18n.t('tour.slidesource'),
79
+ version: 1
80
+ },
81
+ {
82
+ element: "#settings",
83
+ intro: I18n.t('tour.settings'),
84
+ version: 1
85
+ },
86
+ {
87
+ element: "#edit",
88
+ intro: I18n.t('tour.edit'),
89
+ version: 1
90
+ },
91
+ {
92
+ element: "#report",
93
+ intro: I18n.t('tour.report'),
94
+ version: 1
95
+ }
96
+ ].filter(function(item) {
97
+ // filter out tips for features that have been turned off
98
+ return ((item['element'] == undefined) || document.querySelector(item['element']));
99
+ });
100
+
101
+ // Only autoshow when served from localhost, since we don't know if we have a consistent domain for our cookie otherwise.
102
+ if ( location.hostname == 'localhost' || location.hostname == '127.0.0.1' ) {
103
+
104
+ // enables the flag that shows feature tours
105
+ autoTour = true;
106
+
107
+ var clientTour = document.cookieHash['tourVersion'] || 0;
108
+ if(clientTour < tourVersion) {
109
+ // now make a temporary duplicate of only recent items
110
+ tours['showoff:presenter:auto'] = tours['showoff:presenter'].filter(function(item) {
111
+ return (item['version'] > clientTour);
112
+ });
113
+
114
+ // we don't need to let this record, because we've already tested clientTour
115
+ showTour('showoff:presenter:auto', false);
116
+ }
121
117
 
122
118
  }
123
119
  });
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: showoff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.0
4
+ version: 0.19.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Chacon
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-08-03 00:00:00.000000000 Z
12
+ date: 2017-08-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sinatra