##// END OF EJS Templates
closes #5336
Paul Ivanov -
Show More
@@ -1,175 +1,176 b''
1 //----------------------------------------------------------------------------
1 //----------------------------------------------------------------------------
2 // Copyright (C) 2011 The IPython Development Team
2 // Copyright (C) 2011 The IPython Development Team
3 //
3 //
4 // Distributed under the terms of the BSD License. The full license is in
4 // Distributed under the terms of the BSD License. The full license is in
5 // the file COPYING, distributed as part of this software.
5 // the file COPYING, distributed as part of this software.
6 //----------------------------------------------------------------------------
6 //----------------------------------------------------------------------------
7
7
8 //============================================================================
8 //============================================================================
9 // Tour of IPython Notebok UI (with Bootstrap Tour)
9 // Tour of IPython Notebok UI (with Bootstrap Tour)
10 //============================================================================
10 //============================================================================
11
11
12 var tour_steps = [
12 var tour_steps = [
13 {
13 {
14 element: $("#ipython_notebook"),
14 element: $("#ipython_notebook"),
15 title: "Welcome to the Notebook Tour",
15 title: "Welcome to the Notebook Tour",
16 placement: 'bottom',
16 placement: 'bottom',
17 content: "This tour will take 2 minutes.",
17 content: "This tour will take 2 minutes.",
18 backdrop: true,
18 backdrop: true,
19 }, {
19 }, {
20 element: "#notebook_name",
20 element: "#notebook_name",
21 title: "Filename",
21 title: "Filename",
22 placement: 'bottom',
22 placement: 'bottom',
23 content: "Click here to change the filename for this notebook."
23 content: "Click here to change the filename for this notebook."
24 }, {
24 }, {
25 element: "#checkpoint_status",
25 element: "#checkpoint_status",
26 title: "Checkpoint Status",
26 title: "Checkpoint Status",
27 placement: 'bottom',
27 placement: 'bottom',
28 content: "Information about the last time this notebook was saved."
28 content: "Information about the last time this notebook was saved."
29 }, {
29 }, {
30 element: $("#menus").parent(),
30 element: $("#menus").parent(),
31 placement: 'bottom',
31 placement: 'bottom',
32 backdrop: true,
32 backdrop: true,
33 title: "Notebook Menubar",
33 title: "Notebook Menubar",
34 content: "The menubar has menus for actions on the notebook, its cells, and the kernel it communicates with."
34 content: "The menubar has menus for actions on the notebook, its cells, and the kernel it communicates with."
35 }, {
35 }, {
36 element: "#maintoolbar",
36 element: "#maintoolbar",
37 placement: 'bottom',
37 placement: 'bottom',
38 backdrop: true,
38 backdrop: true,
39 title: "Notebook Toolbar",
39 title: "Notebook Toolbar",
40 content: "The toolbar has buttons for the most common actions. Hover your mouse over each button for more information."
40 content: "The toolbar has buttons for the most common actions. Hover your mouse over each button for more information."
41 }, {
41 }, {
42 element: "#modal_indicator",
42 element: "#modal_indicator",
43 title: "Mode Indicator",
43 title: "Mode Indicator",
44 placement: 'bottom',
44 placement: 'bottom',
45 content: "The Notebook has two modes: Edit Mode and Command Mode. In this area, an indicator can appear to tell you which mode you are in.",
45 content: "The Notebook has two modes: Edit Mode and Command Mode. In this area, an indicator can appear to tell you which mode you are in.",
46 onShow: function(tour) { command_icon_hack(); }
46 onShow: function(tour) { command_icon_hack(); }
47 }, {
47 }, {
48 element: "#modal_indicator",
48 element: "#modal_indicator",
49 title: "Command Mode",
49 title: "Command Mode",
50 placement: 'bottom',
50 placement: 'bottom',
51 onShow: function(tour) { IPython.notebook.command_mode(); command_icon_hack(); },
51 onShow: function(tour) { IPython.notebook.command_mode(); command_icon_hack(); },
52 onNext: function(tour) { edit_mode(); },
52 onNext: function(tour) { edit_mode(); },
53 content: "Right now you are in Command Mode, and many keyboard shortcuts are available. In this mode, no icon is displayed in the indicator area."
53 content: "Right now you are in Command Mode, and many keyboard shortcuts are available. In this mode, no icon is displayed in the indicator area."
54 }, {
54 }, {
55 element: "#modal_indicator",
55 element: "#modal_indicator",
56 title: "Edit Mode",
56 title: "Edit Mode",
57 placement: 'bottom',
57 placement: 'bottom',
58 onShow: function(tour) { edit_mode(); },
58 onShow: function(tour) { edit_mode(); },
59 content: "Pressing <code>enter</code> or clicking in the input text area of the cell switches to Edit Mode."
59 content: "Pressing <code>enter</code> or clicking in the input text area of the cell switches to Edit Mode."
60 }, {
60 }, {
61 element: '.selected',
61 element: '.selected',
62 title: "Edit Mode",
62 title: "Edit Mode",
63 placement: 'bottom',
63 placement: 'bottom',
64 onShow: function(tour) { edit_mode(); },
64 onShow: function(tour) { edit_mode(); },
65 content: "Notice that the border around the currently active cell changed color. Typing will insert text into the currently active cell."
65 content: "Notice that the border around the currently active cell changed color. Typing will insert text into the currently active cell."
66 }, {
66 }, {
67 element: '.selected',
67 element: '.selected',
68 title: "Back to Command Mode",
68 title: "Back to Command Mode",
69 placement: 'bottom',
69 placement: 'bottom',
70 onShow: function(tour) { IPython.notebook.command_mode(); },
70 onShow: function(tour) { IPython.notebook.command_mode(); },
71 content: "Pressing <code>esc</code> or clicking outside of the input text area takes you back to Command Mode."
71 content: "Pressing <code>esc</code> or clicking outside of the input text area takes you back to Command Mode."
72 }, {
72 }, {
73 element: '#keyboard_shortcuts',
73 element: '#keyboard_shortcuts',
74 title: "Keyboard Shortcuts",
74 title: "Keyboard Shortcuts",
75 placement: 'bottom',
75 placement: 'bottom',
76 onShow: function(tour) { $('#help_menu').parent().addClass('open'); },
76 onShow: function(tour) { $('#help_menu').parent().addClass('open'); },
77 onHide: function(tour) { $('#help_menu').parent().removeClass('open'); },
77 onHide: function(tour) { $('#help_menu').parent().removeClass('open'); },
78 content: "You can click here to get a list of all of the keyboard shortcuts."
78 content: "You can click here to get a list of all of the keyboard shortcuts."
79 }, {
79 }, {
80 element: "#kernel_indicator",
80 element: "#kernel_indicator",
81 title: "Kernel Indicator",
81 title: "Kernel Indicator",
82 placement: 'bottom',
82 placement: 'bottom',
83 onShow: function(tour) { $([IPython.events]).trigger('status_idle.Kernel');},
83 onShow: function(tour) { $([IPython.events]).trigger('status_idle.Kernel');},
84 content: "This is the Kernel indicator. It looks like this when the Kernel is idle.",
84 content: "This is the Kernel indicator. It looks like this when the Kernel is idle.",
85 }, {
85 }, {
86 element: "#kernel_indicator",
86 element: "#kernel_indicator",
87 title: "Kernel Indicator",
87 title: "Kernel Indicator",
88 placement: 'bottom',
88 placement: 'bottom',
89 onShow: function(tour) { $([IPython.events]).trigger('status_busy.Kernel'); },
89 onShow: function(tour) { $([IPython.events]).trigger('status_busy.Kernel'); },
90 content: "The Kernel indicator looks like this when the Kernel is busy.",
90 content: "The Kernel indicator looks like this when the Kernel is busy.",
91 }, {
91 }, {
92 element: ".icon-stop",
92 element: ".icon-stop",
93 placement: 'bottom',
93 placement: 'bottom',
94 title: "Interrupting the Kernel",
94 title: "Interrupting the Kernel",
95 onHide: function(tour) { $([IPython.events]).trigger('status_idle.Kernel'); },
95 onHide: function(tour) { $([IPython.events]).trigger('status_idle.Kernel'); },
96 content: "To cancel a computation in progress, you can click here."
96 content: "To cancel a computation in progress, you can click here."
97 }, {
97 }, {
98 element: "#notification_kernel",
98 element: "#notification_kernel",
99 placement: 'bottom',
99 placement: 'bottom',
100 onShow: function(tour) { $('.icon-stop').click(); },
100 onShow: function(tour) { $('.icon-stop').click(); },
101 title: "Notification Area",
101 title: "Notification Area",
102 content: "Messages in response to user actions (Save, Interrupt, etc) appear here."
102 content: "Messages in response to user actions (Save, Interrupt, etc) appear here."
103 }, {
103 }, {
104 element: "#ipython_notebook",
104 element: "#ipython_notebook",
105 title: "Fin.",
105 title: "Fin.",
106 placement: 'bottom',
106 placement: 'bottom',
107 backdrop: true,
107 backdrop: true,
108 content: "This concludes the IPython Notebook User Interface Tour. Happy hacking!",
108 content: "This concludes the IPython Notebook User Interface Tour. Happy hacking!",
109 }
109 }
110 ];
110 ];
111
111
112 var tour_style = "<div class='popover tour' style='position:relative'>\
112 var tour_style = "<div class='popover tour' style='position:relative'>\
113 <div class='arrow'></div>\
113 <div class='arrow'></div>\
114 <div style='position:absolute; top:7px; right:7px'>\
114 <div style='position:absolute; top:7px; right:7px'>\
115 <button class='btn btn-sm icon-remove' data-role='end'></button></div>\
115 <button class='btn btn-sm icon-remove' data-role='end'></button></div>\
116 <h3 class='popover-title'></h3>\
116 <h3 class='popover-title'></h3>\
117 <div class='popover-content'></div>\
117 <div class='popover-content'></div>\
118 <div class='popover-navigation'>\
118 <div class='popover-navigation'>\
119 <button class='btn btn-default icon-step-backward' data-role='prev'></button>\
119 <button class='btn btn-default icon-step-backward' data-role='prev'></button>\
120 <button class='btn btn-default icon-step-forward pull-right' data-role='next'></button>\
120 <button class='btn btn-default icon-step-forward pull-right' data-role='next'></button>\
121 <button id='tour-pause' class='btn btn-sm btn-default icon-pause' data-resume-text='' data-pause-text='' data-role='pause-resume'></button>\
121 <button id='tour-pause' class='btn btn-sm btn-default icon-pause' data-resume-text='' data-pause-text='' data-role='pause-resume'></button>\
122 </div>\
122 </div>\
123 </div>";
123 </div>";
124
124
125 var command_icon_hack = function() {$('#modal_indicator').css('min-height', 20);}
125 var command_icon_hack = function() {$('#modal_indicator').css('min-height', 20);}
126 var toggle_pause_play = function () { $('#tour-pause').toggleClass('icon-pause icon-play'); };
126 var toggle_pause_play = function () { $('#tour-pause').toggleClass('icon-pause icon-play'); };
127 var edit_mode = function() {
127 var edit_mode = function() {
128 IPython.notebook.focus_cell();
128 IPython.notebook.focus_cell();
129 IPython.notebook.edit_mode();
129 IPython.notebook.edit_mode();
130 ;}
130 ;}
131
131
132 IPython = (function (IPython) {
132 IPython = (function (IPython) {
133 "use strict";
133 "use strict";
134
134
135
135
136 var NotebookTour = function () {
136 var NotebookTour = function () {
137 this.step_duration = 0;
137 this.step_duration = 0;
138 this.tour_steps = tour_steps ;
138 this.tour_steps = tour_steps ;
139 this.tour_steps[0].content = "You can use the left and right arrow keys to go backwards and forwards.";
139 this.tour_steps[0].content = "You can use the left and right arrow keys to go backwards and forwards.";
140 this.tour = new Tour({
140 this.tour = new Tour({
141 //orphan: true,
141 //orphan: true,
142 storage: false, // start tour from beginning every time
142 storage: false, // start tour from beginning every time
143 //element: $("#ipython_notebook"),
143 //element: $("#ipython_notebook"),
144 debug: true,
144 debug: true,
145 reflex: true, // click on element to continue tour
145 reflex: true, // click on element to continue tour
146 //backdrop: true, // show dark behind popover
146 //backdrop: true, // show dark behind popover
147 animation: false,
147 animation: false,
148 duration: this.step_duration,
148 duration: this.step_duration,
149 onStart: function() { console.log('tour started'); },
149 onStart: function() { console.log('tour started'); },
150 // TODO: remove the onPause/onResume logic once pi's patch has been
150 // TODO: remove the onPause/onResume logic once pi's patch has been
151 // merged upstream to make this work via data-resume-class and
151 // merged upstream to make this work via data-resume-class and
152 // data-resume-text attributes.
152 // data-resume-text attributes.
153 onPause: toggle_pause_play,
153 onPause: toggle_pause_play,
154 onResume: toggle_pause_play,
154 onResume: toggle_pause_play,
155 steps: this.tour_steps,
155 steps: this.tour_steps,
156 template: tour_style
156 template: tour_style
157 });
157 });
158 this.tour.init();
158
159 };
159 };
160
160
161 NotebookTour.prototype.start = function () {
161 NotebookTour.prototype.start = function () {
162 console.log("let's start the tour");
162 console.log("let's start the tour");
163 this.tour.init();
163 this.tour.start();
164 this.tour.start();
164 if (this.tour.ended())
165 if (this.tour.ended())
165 {
166 {
166 this.tour.restart();
167 this.tour.restart();
167 }
168 }
168 };
169 };
169
170
170 // Set module variables
171 // Set module variables
171 IPython.NotebookTour = NotebookTour;
172 IPython.NotebookTour = NotebookTour;
172
173
173 return IPython;
174 return IPython;
174
175
175 }(IPython));
176 }(IPython));
General Comments 0
You need to be logged in to leave comments. Login now