Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (function() {
- var ascSort, cut, dateaddedSort, defaultSort, genericSort, getCastList, getMovie, goToPos, inFilter, isNumber, labelSort, lasOrdAsc, lastCol, like, originaltitleSort, ratingSort, shortDate, sortDataBy, tablePos, tablesize, updateDetails, updateList, yearSort;
- if (String.prototype.contains == null) {
- String.prototype.contains = function(needle, startIndex) {
- return -1 !== String.prototype.indexOf.call(this, needle, startIndex);
- };
- }
- tablesize = 11;
- defaultSort = "label";
- tablePos = 0;
- like = function(haystack, needle) {
- return haystack.toLowerCase().contains(needle.toLowerCase());
- };
- isNumber = function(value) {
- if (value == null) {
- return false;
- }
- if (typeof value === 'number') {
- return true;
- }
- return !isNaN(value - 0);
- };
- inFilter = function(mov) {
- var filterVal, n;
- filterVal = $('#movFilter').val();
- if ((filterVal == null) || filterVal.trim() === "") {
- return true;
- }
- if (isNumber(filterVal)) {
- n = parseFloat(filterVal);
- if (n < 10 && mov.rating >= n) {
- return true;
- }
- if (n > 1500 && mov.year === n) {
- return true;
- }
- }
- return like(mov.label, filterVal) || like(mov.originaltitle, filterVal) || like(mov.genre.join(), filterVal);
- };
- cut = function(str, l) {
- if (Array.isArray(str)) {
- str = str.join(", ");
- }
- if (str.length - 3 > l) {
- return "" + (str.substr(0, l - 3)) + "...";
- }
- if (str != null) {
- return "";
- }
- };
- shortDate = function(d) {
- d = new Date(d.substr(0, 10));
- return "" + (d.getDate()) + "." + (d.getMonth() + 1) + "." + (d.getFullYear());
- };
- updateList = function(skip) {
- var count, gcount, mov, selClass, _i, _len;
- $('table.movies tbody').html('');
- if (skip > data.length) {
- skip = data.length;
- }
- count = 0;
- gcount = 0;
- for (_i = 0, _len = data.length; _i < _len; _i++) {
- mov = data[_i];
- gcount++;
- if (inFilter(mov)) {
- if (skip > 0) {
- skip--;
- continue;
- }
- selClass = "";
- if ($('.details .id').html() === mov.movieid.toString()) {
- selClass = " sel";
- }
- count++;
- if (count < tablesize) {
- $('table.movies tbody').append("<tr data-p=\"" + gcount + "\" data-id=\"" + mov.movieid + "\" class=\"" + selClass + "\">\n <td>" + mov.label + "</td>\n <td>" + mov.originaltitle + "</td>\n <td>" + mov.year + "</td>\n <td>" + (mov.rating.toPrecision(2)) + "</td>\n <td>" + (shortDate(mov.dateadded)) + "</td>\n <td class=\"show-for-medium-up\">" + (cut(mov.genre, 25)) + "</td>\n</tr>");
- }
- }
- }
- if (count >= tablesize) {
- return $('table.movies tfoot td.amount').html("and " + (count - tablesize + 1) + " more...");
- } else {
- return $('table.movies tfoot td.amount').html("");
- }
- };
- getMovie = function(id) {
- var mov, _i, _len;
- for (_i = 0, _len = data.length; _i < _len; _i++) {
- mov = data[_i];
- if (mov.movieid === id) {
- return mov;
- }
- }
- };
- getCastList = function(mov) {
- var pers, str, _i, _len, _ref;
- str = "<dl class=inline-list>";
- _ref = mov.cast;
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- pers = _ref[_i];
- str += "<dt>" + pers.name + "</dt><dd>" + pers.role + "</dd>";
- }
- return str += "</dl>";
- };
- updateDetails = function(id) {
- var mov;
- mov = getMovie(id);
- if (mov != null) {
- $('.details .year').html(mov.year);
- $('.details .title').html(mov.label);
- $('.details .tagline').html(mov.tagline);
- $('.details .plot').html(mov.plot);
- $('.details .genre').html(mov.genre.join(", "));
- $('.details .cast').html(getCastList(mov));
- $('.details .writer').html(mov.writer.join(", "));
- $('.details .director').html(mov.director.join(", "));
- $('.details .country').html(mov.country);
- $('.details .id').html(mov.movieid);
- $('.details .poster').attr('src', "");
- $('.details .poster').attr('data-original', "./thumbs/" + id + ".jpg");
- $('.details .poster').lazyload({
- effect: 'fadeIn',
- event: 'load'
- });
- return $('.details .poster').trigger('load');
- }
- };
- goToPos = function(pos, dir) {
- var dirI, id, targetRow;
- if (dir == null) {
- dir = 'left';
- }
- if (dir === 'left' || $('.movies tbody tr.sel').data('p') < pos) {
- dir = "right";
- dirI = "left";
- } else {
- dir = "left";
- dirI = "right";
- }
- targetRow = $(".movies tbody tr[data-p=" + pos + "]");
- $('.movies tbody tr.sel').removeClass('sel');
- targetRow.addClass('sel');
- id = targetRow.data('id');
- if ($('.details:visible').length <= 0) {
- $('.clickToDetail').hide();
- updateDetails(id);
- return $('.details').show('drop');
- } else {
- return $('.details').hide('drop', {
- direction: dirI
- }, function() {
- updateDetails(id);
- return $('.details').show('drop', {
- direction: dir
- });
- });
- }
- };
- ascSort = function(a, b) {
- var _ref;
- return (_ref = ($(b).text()) < ($(a).text())) != null ? _ref : {
- 1: -1
- };
- };
- genericSort = function(a, b) {
- if (a < b) {
- return -1;
- } else {
- return 1;
- }
- return 0;
- };
- labelSort = function(a, b) {
- return genericSort(a.label, b.label);
- };
- originaltitleSort = function(a, b) {
- return genericSort(a.originaltitle, b.originaltitle);
- };
- yearSort = function(a, b) {
- return genericSort(a.year, b.year);
- };
- ratingSort = function(a, b) {
- return genericSort(a.rating, b.rating);
- };
- dateaddedSort = function(a, b) {
- return genericSort(a.dateadded, b.dateadded);
- };
- lastCol = defaultSort;
- lasOrdAsc = true;
- sortDataBy = function(colName) {
- var order;
- if (lastCol === colName) {
- order = lasOrdAsc ? 'desc' : 'asc';
- lasOrdAsc = !lasOrdAsc;
- } else {
- lasOrdAsc = false;
- }
- lastCol = colName;
- switch (colName) {
- case 'label':
- data.sort(labelSort);
- break;
- case 'originaltitle':
- data.sort(originaltitleSort);
- break;
- case 'year':
- data.sort(yearSort);
- break;
- case 'rating':
- data.sort(ratingSort);
- break;
- case 'dateadded':
- data.sort(dateaddedSort);
- }
- if (order === 'desc') {
- return data.reverse();
- }
- };
- $(function() {
- $('#movFilter').on('keyup', function() {
- tablePos = 0;
- return updateList();
- });
- $('span.for').click(function() {
- tablePos += tablesize - 1;
- return updateList(tablePos);
- });
- $('span.back').click(function() {
- tablePos -= tablesize - 1;
- if (tablePos < 0) {
- tablePos = 0;
- }
- return updateList(tablePos);
- });
- $('.movies tbody').on('click', 'tr', function() {
- return goToPos($(this).data('p'));
- });
- $('.addToSelection').click(function() {
- var id;
- $('.selectionHint').hide();
- id = $('.id').html();
- if ($(".selection li.id-" + id).length <= 0) {
- $('.selection ul').append("<li class=\"id-" + id + "\">" + ($('.title').html()) + "</li>");
- return $('.selection ul > li').sort(ascSort).appendTo('.selection ul');
- }
- });
- $('body').on('keydown', function(e) {
- var dir, pos;
- if (e.keyCode === 39 || e.keyCode === 37) {
- if ($('.movies tbody tr.sel').data('p') != null) {
- pos = $('.movies tbody tr.sel').data('p');
- switch (e.keyCode) {
- case 39:
- pos++;
- break;
- case 37:
- pos--;
- }
- if (pos < 1) {
- pos = 1;
- }
- } else {
- pos = 1;
- }
- if (pos > $('.movies tbody tr').last().data('p')) {
- tablePos += tablesize - 1;
- dir = 'left';
- updateList(tablePos);
- } else if (pos < $('.movies tbody tr').first().data('p')) {
- tablePos -= tablesize - 1;
- dir = 'right';
- updateList(tablePos);
- }
- return goToPos(pos, dir);
- }
- });
- $('table.movies th[data-sort]').click(function(e) {
- var sortCol;
- e.preventDefault();
- $('table.movies th[data-sort]').removeClass('active');
- $(this).addClass('active');
- sortCol = $(this).data('sort');
- sortDataBy(sortCol);
- tablePos = 0;
- return updateList();
- });
- $('table.movies th[data-sort]').removeClass('active');
- $("table.movies th[data-sort='" + defaultSort + "']").addClass('active');
- sortDataBy(defaultSort);
- return updateList();
- });
- }).call(this);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement