-
Notifications
You must be signed in to change notification settings - Fork 0
/
quickflix.js
123 lines (123 loc) · 4.2 KB
/
quickflix.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
// define or extend quickflix
var quickflix = quickflix || {};
(function(qf) {
qf.play_first_movie = function() {
qf.ui.play_movie(qf.ui.streamable_movies().first());
};
})(quickflix);
// define or extend quickflix.ui
var quickflix = quickflix || {};
quickflix.ui = quickflix.ui || {};
(function(ui) {
// private members
var selected_movie = 0,
init_styles = function() {
document.styleSheets[0].addRule(".quickflix-selected", "border: 4px green solid;");
},
init_shortcuts = function() {
var down = function() {
ui.selected_movie(selected_movie + 1);
},
up = function() {
ui.selected_movie(selected_movie - 1);
},
left = function() {
$('.pagination a.prev').each(function() {
window.location = $(this).attr('href');
});
},
right = function() {
$('.pagination a.next').each(function() {
window.location = $(this).attr('href');
});
},
search = function() {
$('#searchField').focus();
};
$(document).bind('keydown', 'down', down).bind('keydown', 'j', down).bind('keydown', 'up', up).bind('keydown', 'k', up).bind('keydown', 'left', left).bind('keydown', 'h', left).bind('keydown', 'l', right).bind('keydown', 'right', right).bind('keydown', 'return', function() {
ui.view_movie_details(ui.selected_movie()) || ui.play_movie(ui.selected_movie());
}).bind('keydown', 'shift+return', function() {
ui.play_movie(ui.selected_movie()) || ui.view_movie_details(ui.selected_movie());
}).bind('keyup', '/', search);
};
// public members
ui.init = function() {
init_styles(); // css
init_shortcuts(); // keyboard events
ui.selected_movie(0);
};
ui.streamable_movies = function() {
return $('.agMovie:has(.btn-play)');
};
ui.movie = function(index) {
return ui.streamable_movies().eq(index);
};
ui.view_movie_details = function(movie) {
var href = movie.find('a.mdpLink:first').attr('href');
if (href) {
window.location = href;
}
else {
return false;
}
return true;
};
ui.play_movie = function(movie) {
var href = movie.find('a.btn-play:first').attr('href');
if (href) {
window.location = href;
}
else {
return false;
}
return true;
};
ui.selected_movie = function(index) {
if (typeof index != "number") {
return ui.movie(selected_movie);
}
var streamable_movies = ui.streamable_movies();
if (index >= 0 && index < streamable_movies.size()) {
selected_movie = index;
}
else if (index < 0) {
selected_movie = streamable_movies.size() - 1;
}
else if (index >= streamable_movies.size()) {
selected_movie = 0;
}
streamable_movies.removeClass('quickflix-selected');
return ui.movie(selected_movie).addClass('quickflix-selected').scrollintoview();
};
})(quickflix.ui);
// define or extend quickflix.hash
var quickflix = quickflix || {};
quickflix.hash = quickflix.hash || {};
(function(h) {
// private members
var process = function(hash_string) {
var hash = $.deparam(hash_string);
if (hash.quickflix && hash.quickflix.method) {
route_method(hash.quickflix.method);
}
};
var route_method = function(method, params) {
if (typeof quickflix[method] == "function") {
quickflix[method]();
}
};
// public members
h.init = function() {
$(window).hashchange(function() {
process($.param.fragment());
});
process($.param.fragment());
};
})(quickflix.hash);
// setup to perform once the document is loaded
$(document).ready(function() {
// initialize the hash
quickflix.hash.init();
// initialize the ui
quickflix.ui.init();
});