-
Notifications
You must be signed in to change notification settings - Fork 0
/
nimbb.js
301 lines (224 loc) · 7.36 KB
/
nimbb.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
Users = new Meteor.Collection("users");
Topics = new Meteor.Collection("topics");
Videos = new Meteor.Collection("videos");
if (Meteor.is_client) {
Session.set('topic_id', null);
Session.set('editing_topicname', null);
Session.set('user_id', null);
Session.set('selected_video', null);
Session.set('player_mode', null);
//Meteor.autosubscribe(function () {
// var topic_id = Session.get('topic_id');
// if (topic_id)
// Meteor.subscribe('videos', list_id);
//});
////////// Helpers for in-place editing //////////
// Returns an event_map key for attaching "ok/cancel" events to
// a text input (given by selector)
var okcancel_events = function (selector) {
return 'keyup '+selector+', keydown '+selector+', focusout '+selector;
};
// Creates an event handler for interpreting "escape", "return", and "blur"
// on a text field and calling "ok" or "cancel" callbacks.
var make_okcancel_handler = function (options) {
var ok = options.ok || function () {};
var cancel = options.cancel || function () {};
return function (evt) {
if (evt.type === "keydown" && evt.which === 27) {
// escape = cancel
cancel.call(this, evt);
} else if (evt.type === "keyup" && evt.which === 13 ||
evt.type === "focusout") {
// blur/return/enter = ok/submit if non-empty
var value = String(evt.target.value || "");
if (value)
ok.call(this, value, evt);
else
cancel.call(this, evt);
}
};
};
// Finds a text input in the DOM by id and focuses it.
var focus_field_by_id = function (id) {
var input = document.getElementById(id);
if (input) {
input.focus();
input.select();
}
};
/////////// User //////////////////////
Template.user_summary.loggedin = function () {
return Session.get('user_id') != null;
};
Template.user_summary.events = {
'click .login': function (evt) {
var name = $('input#name').val().trim();
var user_id = Users.findOne({name: name})._id;
Session.set("user_id", user_id);
},
'click': function (evt) {
$(function() {
// Setup drop down menu
$('.dropdown-toggle').dropdown();
$('.dropdown-menu').find('form').click(function (e) {
e.stopPropagation();
});
});
}
};
Template.user_summary.user_name = function () {
return Users.findOne(Session.get('user_id')).name;
};
Template.user_summary.to_user_name = function () {
return Users.findOne(Session.get('user_id')).to_user_name;
};
/////////// Topics ////////////////////////
Template.topics.show = function (){
return (Session.get("user_id") != null);
};
Template.topics.topics = function () {
return Topics.find();
};
Template.topics.selected = function () {
return Session.equals('topic_id', this._id) ? 'active' : '';
};
Template.topics.name_class = function () {
return this.name ? '' : 'empty';
};
Template.topics.editing = function () {
return Session.equals('editing_topicname', this._id);
};
Template.topics.events = {
'mousedown .topic': function (evt) { // select list
Session.set('topic_id', this._id);
}
};
// Attach events to keydown, keyup, and blur on "New list" input box.
Template.topics.events[ okcancel_events('#new-topic') ] =
make_okcancel_handler({
ok: function (text, evt) {
Topics.insert({name: text, questions: []});
evt.target.value = '';
}
});
////////// Videos ////////////////////////
Template.video_list.show = function (){
return (Session.get("user_id") != null) && (Session.get("topic_id") != null);
};
Template.video_list.videos = function () {
return Videos.find({"topic_id":Session.get("topic_id")});
};
Template.video_list.events = {
'click .record': function () {
Session.set("player_mode", "record");
}
};
Template.video.selected = function () {
return Session.equals("selected_video", this._id) ? "selected" : '';
};
Template.video.datetime = function () {
return new Date(this.timestamp);
};
Template.video.events = {
'click .video_play_button': function () {
Session.set("selected_video", this._id);
Session.set("player_mode", "view");
}
};
//////// Player ////////////////////////
var _Nimbb;
function Nimbb_initCompleted(idPlayer) {
// Get a reference to the player since it was successfully created.
_Nimbb = document[idPlayer];
var mode = Session.get('player_mode');
if(mode == 'view'){
_Nimbb.setMode('view');
_Nimbb.setGuid(Videos.findOne({_id: Session.get('selected_video')}).nimbb_guid);
_Nimbb.playVideo();
}
}
function Nimbb_videoSaved(idPlayer){
var guid = _Nimbb.getGuid();
var user = Users.findOne(Session.get('user_id'));
Videos.insert({topic_id: Session.get('topic_id'),
user_id: user._id,
user_name: user.name,
timestamp : (new Date()).getTime(),
nimbb_guid : guid
});
Session.set('player_mode', null);
}
Template.player.show = function () {
if(Session.get('player_mode') != null){
$('#myModal').modal('show');
} else {
$('#myModal').modal('hide');
}
return Session.get('player_mode') != null;
};
Template.player.mode = function () {
return Session.get('player_mode');
};
Template.player.events = {
'click .close_player': function () {
Session.set("player_mode", null);
}
};
///////////// Questions ///////////////////
Template.player.questions = function () {
return Topics.findOne({_id:Session.get("topic_id")}).questions;
};
}
if (Meteor.is_server) {
Meteor.startup(function () {
if (Topics.find().count() < 5) {
Topics.remove({});
Users.remove({});
Videos.remove({});
var user_id = Users.insert({name: "Mark", to_user_name: "John"});
var to_user_id = Users.insert({name: "John", to_user_name: "Mark"});
Topics.insert({name:
"Introduction", questions: [
"What is your name?",
"How old are you?",
"What city and country do you live in?",
"What is your favorite thing about your city and country?",
"What do you want to be when you grow up and why?"]});
Topics.insert({name:
"Family", questions: [
"Who do you live with?",
"What do you like about your family?",
"Where else do you have family?",
"Do you travel there much?",
"How do you feel when you are with your family?"]});
Topics.insert({name:
"Foods", questions: [
"What is your favorite food and why?",
"What is your most common breakfast?",
"What is your most common lunch?",
"What is your most common dinner?",
"Which meal of the day is your favorite and why?"]});
Topics.insert({name:
"Sports", questions: [
"What is your favorite sport and why?",
"How often do you play that sport?",
"What is your favorite sports team and why?",
"How does playing that sport make you feel?",
"What is your least favorite sport and why?"]});
Topics.insert({name:
"Holidays", questions: [
"What is your favorite holiday and why?",
"What is the background and meaning of that holiday?",
"What do you do on that holiday?",
"How do you feel on that holiday?",
"Who do you spend that holiday with?"]});
Topics.insert({name:
"Daily life", questions: [
"What time do you go to school?",
"What do you usually do after school?",
"What do you do at night after dinner?",
"What time do you wake up and go to bed?",
"What is your favorite time of the day and why?"]});
}
});
}