Movie list, navigate by letters
This commit is contained in:
@@ -7,6 +7,7 @@ var MovieList = new Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
movies: [],
|
movies: [],
|
||||||
|
letters: {},
|
||||||
|
|
||||||
initialize: function(options){
|
initialize: function(options){
|
||||||
var self = this;
|
var self = this;
|
||||||
@@ -19,9 +20,10 @@ var MovieList = new Class({
|
|||||||
create: function(){
|
create: function(){
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
self.el.empty();
|
||||||
|
|
||||||
// Create the alphabet nav
|
// Create the alphabet nav
|
||||||
if(self.options.navigation)
|
self.createNavigation();
|
||||||
self.createNavigation();
|
|
||||||
|
|
||||||
Object.each(self.movies, function(info){
|
Object.each(self.movies, function(info){
|
||||||
var m = new Movie(self, {
|
var m = new Movie(self, {
|
||||||
@@ -29,6 +31,9 @@ var MovieList = new Class({
|
|||||||
}, info);
|
}, info);
|
||||||
$(m).inject(self.el);
|
$(m).inject(self.el);
|
||||||
m.fireEvent('injected');
|
m.fireEvent('injected');
|
||||||
|
|
||||||
|
var first_char = m.getTitle().substr(0, 1);
|
||||||
|
self.activateLetter(first_char);
|
||||||
});
|
});
|
||||||
|
|
||||||
self.el.addEvents({
|
self.el.addEvents({
|
||||||
@@ -44,7 +49,6 @@ var MovieList = new Class({
|
|||||||
createNavigation: function(){
|
createNavigation: function(){
|
||||||
var self = this;
|
var self = this;
|
||||||
var chars = '#ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
var chars = '#ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
||||||
var selected = 'Z';
|
|
||||||
|
|
||||||
self.navigation = new Element('div.alph_nav').adopt(
|
self.navigation = new Element('div.alph_nav').adopt(
|
||||||
self.alpha = new Element('ul.inlay'),
|
self.alpha = new Element('ul.inlay'),
|
||||||
@@ -54,32 +58,39 @@ var MovieList = new Class({
|
|||||||
new Element('li.thumbnails'),
|
new Element('li.thumbnails'),
|
||||||
new Element('li.text')
|
new Element('li.text')
|
||||||
)
|
)
|
||||||
).inject(this.el, 'top')
|
).inject(this.el, 'top');
|
||||||
|
|
||||||
chars.split('').each(function(c){
|
chars.split('').each(function(c){
|
||||||
new Element('li', {
|
self.letters[c] = new Element('li', {
|
||||||
'text': c,
|
'text': c,
|
||||||
'class': c == selected ? 'selected' : ''
|
'class': 'letter_'+c
|
||||||
}).inject(self.alpha)
|
}).inject(self.alpha)
|
||||||
})
|
});
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
getMovies: function(status, onComplete){
|
activateLetter: function(letter){
|
||||||
|
this.letters[letter].addClass('active')
|
||||||
|
},
|
||||||
|
|
||||||
|
update: function(){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self.getMovies();
|
||||||
|
},
|
||||||
|
|
||||||
|
getMovies: function(){
|
||||||
var self = this
|
var self = this
|
||||||
|
|
||||||
if(self.movies.length == 0)
|
Api.request('movie.list', {
|
||||||
Api.request('movie.list', {
|
'data': {
|
||||||
'data': {
|
'status': self.options.status
|
||||||
'status': self.options.status
|
},
|
||||||
},
|
'onComplete': function(json){
|
||||||
'onComplete': function(json){
|
self.store(json.movies);
|
||||||
self.store(json.movies);
|
self.create();
|
||||||
self.create();
|
}
|
||||||
}
|
})
|
||||||
})
|
|
||||||
else
|
|
||||||
self.list()
|
|
||||||
},
|
},
|
||||||
|
|
||||||
store: function(movies){
|
store: function(movies){
|
||||||
|
|||||||
@@ -159,7 +159,11 @@
|
|||||||
text-align: center;
|
text-align: center;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
margin: 0 -1px 0 0;
|
margin: 0 -1px 0 0;
|
||||||
|
color: #666;
|
||||||
}
|
}
|
||||||
|
.movies .alph_nav li.active {
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
.movies .alph_nav li:hover, .movies .alph_nav li.onlay {
|
.movies .alph_nav li:hover, .movies .alph_nav li.onlay {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
|
|||||||
@@ -127,7 +127,8 @@ var MovieAction = new Class({
|
|||||||
self.movie = movie;
|
self.movie = movie;
|
||||||
|
|
||||||
self.create();
|
self.create();
|
||||||
self.el.addClass(self.class_name)
|
if(self.el)
|
||||||
|
self.el.addClass(self.class_name)
|
||||||
},
|
},
|
||||||
|
|
||||||
create: function(){},
|
create: function(){},
|
||||||
@@ -141,7 +142,7 @@ var MovieAction = new Class({
|
|||||||
},
|
},
|
||||||
|
|
||||||
toElement: function(){
|
toElement: function(){
|
||||||
return this.el
|
return this.el || null
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
@@ -173,4 +174,45 @@ var IMDBAction = new Class({
|
|||||||
window.open('http://www.imdb.com/title/'+self.id+'/');
|
window.open('http://www.imdb.com/title/'+self.id+'/');
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
});
|
||||||
|
|
||||||
|
var ReleaseAction = new Class({
|
||||||
|
|
||||||
|
Extends: MovieAction,
|
||||||
|
id: null,
|
||||||
|
|
||||||
|
create: function(){
|
||||||
|
var self = this;
|
||||||
|
|
||||||
|
self.id = self.movie.get('identifier');
|
||||||
|
|
||||||
|
self.el = new Element('a.releases', {
|
||||||
|
'title': 'Show the releases that are available for ' + self.movie.getTitle(),
|
||||||
|
'events': {
|
||||||
|
'click': self.show.bind(self)
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
show: function(e){
|
||||||
|
var self = this;
|
||||||
|
(e).stop();
|
||||||
|
|
||||||
|
if(!self.options_container){
|
||||||
|
self.options_container = new Element('div.options').adopt(
|
||||||
|
$(self.movie.thumbnail).clone(),
|
||||||
|
self.release_container = new Element('div.releases')
|
||||||
|
).inject(self.movie, 'top');
|
||||||
|
|
||||||
|
Array.each(self.movie.data.releases, function(release){
|
||||||
|
new Element('div', {
|
||||||
|
'text': release.title
|
||||||
|
}).inject(self.release_container)
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
self.movie.slide('in');
|
||||||
|
},
|
||||||
|
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user