Advertisement
Guest User

Untitled

a guest
Feb 19th, 2014
292
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (function() {
  2.   var ascSort, cut, dateaddedSort, defaultSort, genericSort, getCastList, getMovie, goToPos, inFilter, isNumber, labelSort, lasOrdAsc, lastCol, like, originaltitleSort, ratingSort, shortDate, sortDataBy, tablePos, tablesize, updateDetails, updateList, yearSort;
  3.  
  4.   if (String.prototype.contains == null) {
  5.     String.prototype.contains = function(needle, startIndex) {
  6.       return -1 !== String.prototype.indexOf.call(this, needle, startIndex);
  7.     };
  8.   }
  9.  
  10.   tablesize = 11;
  11.  
  12.   defaultSort = "label";
  13.  
  14.   tablePos = 0;
  15.  
  16.   like = function(haystack, needle) {
  17.     return haystack.toLowerCase().contains(needle.toLowerCase());
  18.   };
  19.  
  20.   isNumber = function(value) {
  21.     if (value == null) {
  22.       return false;
  23.     }
  24.     if (typeof value === 'number') {
  25.       return true;
  26.     }
  27.     return !isNaN(value - 0);
  28.   };
  29.  
  30.   inFilter = function(mov) {
  31.     var filterVal, n;
  32.     filterVal = $('#movFilter').val();
  33.     if ((filterVal == null) || filterVal.trim() === "") {
  34.       return true;
  35.     }
  36.     if (isNumber(filterVal)) {
  37.       n = parseFloat(filterVal);
  38.       if (n < 10 && mov.rating >= n) {
  39.         return true;
  40.       }
  41.       if (n > 1500 && mov.year === n) {
  42.         return true;
  43.       }
  44.     }
  45.     return like(mov.label, filterVal) || like(mov.originaltitle, filterVal) || like(mov.genre.join(), filterVal);
  46.   };
  47.  
  48.   cut = function(str, l) {
  49.     if (Array.isArray(str)) {
  50.       str = str.join(", ");
  51.     }
  52.     if (str.length - 3 > l) {
  53.       return "" + (str.substr(0, l - 3)) + "...";
  54.     }
  55.     if (str != null) {
  56.       return "";
  57.     }
  58.   };
  59.  
  60.   shortDate = function(d) {
  61.     d = new Date(d.substr(0, 10));
  62.     return "" + (d.getDate()) + "." + (d.getMonth() + 1) + "." + (d.getFullYear());
  63.   };
  64.  
  65.   updateList = function(skip) {
  66.     var count, gcount, mov, selClass, _i, _len;
  67.     $('table.movies tbody').html('');
  68.     if (skip > data.length) {
  69.       skip = data.length;
  70.     }
  71.     count = 0;
  72.     gcount = 0;
  73.     for (_i = 0, _len = data.length; _i < _len; _i++) {
  74.       mov = data[_i];
  75.       gcount++;
  76.       if (inFilter(mov)) {
  77.         if (skip > 0) {
  78.           skip--;
  79.           continue;
  80.         }
  81.         selClass = "";
  82.         if ($('.details .id').html() === mov.movieid.toString()) {
  83.           selClass = " sel";
  84.         }
  85.         count++;
  86.         if (count < tablesize) {
  87.           $('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>");
  88.         }
  89.       }
  90.     }
  91.     if (count >= tablesize) {
  92.       return $('table.movies tfoot td.amount').html("and " + (count - tablesize + 1) + " more...");
  93.     } else {
  94.       return $('table.movies tfoot td.amount').html("");
  95.     }
  96.   };
  97.  
  98.   getMovie = function(id) {
  99.     var mov, _i, _len;
  100.     for (_i = 0, _len = data.length; _i < _len; _i++) {
  101.       mov = data[_i];
  102.       if (mov.movieid === id) {
  103.         return mov;
  104.       }
  105.     }
  106.   };
  107.  
  108.   getCastList = function(mov) {
  109.     var pers, str, _i, _len, _ref;
  110.     str = "<dl class=inline-list>";
  111.     _ref = mov.cast;
  112.     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
  113.       pers = _ref[_i];
  114.       str += "<dt>" + pers.name + "</dt><dd>" + pers.role + "</dd>";
  115.     }
  116.     return str += "</dl>";
  117.   };
  118.  
  119.   updateDetails = function(id) {
  120.     var mov;
  121.     mov = getMovie(id);
  122.     if (mov != null) {
  123.       $('.details .year').html(mov.year);
  124.       $('.details .title').html(mov.label);
  125.       $('.details .tagline').html(mov.tagline);
  126.       $('.details .plot').html(mov.plot);
  127.       $('.details .genre').html(mov.genre.join(", "));
  128.       $('.details .cast').html(getCastList(mov));
  129.       $('.details .writer').html(mov.writer.join(", "));
  130.       $('.details .director').html(mov.director.join(", "));
  131.       $('.details .country').html(mov.country);
  132.       $('.details .id').html(mov.movieid);
  133.       $('.details .poster').attr('src', "");
  134.       $('.details .poster').attr('data-original', "./thumbs/" + id + ".jpg");
  135.       $('.details .poster').lazyload({
  136.         effect: 'fadeIn',
  137.         event: 'load'
  138.       });
  139.       return $('.details .poster').trigger('load');
  140.     }
  141.   };
  142.  
  143.   goToPos = function(pos, dir) {
  144.     var dirI, id, targetRow;
  145.     if (dir == null) {
  146.       dir = 'left';
  147.     }
  148.     if (dir === 'left' || $('.movies tbody tr.sel').data('p') < pos) {
  149.       dir = "right";
  150.       dirI = "left";
  151.     } else {
  152.       dir = "left";
  153.       dirI = "right";
  154.     }
  155.     targetRow = $(".movies tbody tr[data-p=" + pos + "]");
  156.     $('.movies tbody tr.sel').removeClass('sel');
  157.     targetRow.addClass('sel');
  158.     id = targetRow.data('id');
  159.     if ($('.details:visible').length <= 0) {
  160.       $('.clickToDetail').hide();
  161.       updateDetails(id);
  162.       return $('.details').show('drop');
  163.     } else {
  164.       return $('.details').hide('drop', {
  165.         direction: dirI
  166.       }, function() {
  167.         updateDetails(id);
  168.         return $('.details').show('drop', {
  169.           direction: dir
  170.         });
  171.       });
  172.     }
  173.   };
  174.  
  175.   ascSort = function(a, b) {
  176.     var _ref;
  177.     return (_ref = ($(b).text()) < ($(a).text())) != null ? _ref : {
  178.       1: -1
  179.     };
  180.   };
  181.  
  182.   genericSort = function(a, b) {
  183.     if (a < b) {
  184.       return -1;
  185.     } else {
  186.       return 1;
  187.     }
  188.     return 0;
  189.   };
  190.  
  191.   labelSort = function(a, b) {
  192.     return genericSort(a.label, b.label);
  193.   };
  194.  
  195.   originaltitleSort = function(a, b) {
  196.     return genericSort(a.originaltitle, b.originaltitle);
  197.   };
  198.  
  199.   yearSort = function(a, b) {
  200.     return genericSort(a.year, b.year);
  201.   };
  202.  
  203.   ratingSort = function(a, b) {
  204.     return genericSort(a.rating, b.rating);
  205.   };
  206.  
  207.   dateaddedSort = function(a, b) {
  208.     return genericSort(a.dateadded, b.dateadded);
  209.   };
  210.  
  211.   lastCol = defaultSort;
  212.  
  213.   lasOrdAsc = false;
  214.  
  215.   sortDataBy = function(colName) {
  216.     var order;
  217.     if (lastCol === colName) {
  218.       order = lasOrdAsc ? 'desc' : 'asc';
  219.       lasOrdAsc = !lasOrdAsc;
  220.     } else {
  221.       lasOrdAsc = false;
  222.     }
  223.     lastCol = colName;
  224.     switch (colName) {
  225.       case 'label':
  226.         data.sort(labelSort);
  227.         break;
  228.       case 'originaltitle':
  229.         data.sort(originaltitleSort);
  230.         break;
  231.       case 'year':
  232.         data.sort(yearSort);
  233.         break;
  234.       case 'rating':
  235.         data.sort(ratingSort);
  236.         break;
  237.       case 'dateadded':
  238.         data.sort(dateaddedSort);
  239.     }
  240.     if (order === 'desc') {
  241.       return data.reverse();
  242.     }
  243.   };
  244.  
  245.   $(function() {
  246.     $('#movFilter').on('keyup', function() {
  247.       tablePos = 0;
  248.       return updateList();
  249.     });
  250.     $('span.for').click(function() {
  251.       tablePos += tablesize - 1;
  252.       return updateList(tablePos);
  253.     });
  254.     $('span.back').click(function() {
  255.       tablePos -= tablesize - 1;
  256.       if (tablePos < 0) {
  257.         tablePos = 0;
  258.       }
  259.       return updateList(tablePos);
  260.     });
  261.     $('.movies tbody').on('click', 'tr', function() {
  262.       return goToPos($(this).data('p'));
  263.     });
  264.     $('.addToSelection').click(function() {
  265.       var id;
  266.       $('.selectionHint').hide();
  267.       id = $('.id').html();
  268.       if ($(".selection li.id-" + id).length <= 0) {
  269.         $('.selection ul').append("<li class=\"id-" + id + "\">" + ($('.title').html()) + "</li>");
  270.         return $('.selection ul > li').sort(ascSort).appendTo('.selection ul');
  271.       }
  272.     });
  273.     $('body').on('keydown', function(e) {
  274.       var dir, pos;
  275.       if (e.keyCode === 39 || e.keyCode === 37) {
  276.         if ($('.movies tbody tr.sel').data('p') != null) {
  277.           pos = $('.movies tbody tr.sel').data('p');
  278.           switch (e.keyCode) {
  279.             case 39:
  280.               pos++;
  281.               break;
  282.             case 37:
  283.               pos--;
  284.           }
  285.           if (pos < 1) {
  286.             pos = 1;
  287.           }
  288.         } else {
  289.           pos = 1;
  290.         }
  291.         if (pos > $('.movies tbody tr').last().data('p')) {
  292.           tablePos += tablesize - 1;
  293.           dir = 'left';
  294.           updateList(tablePos);
  295.         } else if (pos < $('.movies tbody tr').first().data('p')) {
  296.           tablePos -= tablesize - 1;
  297.           dir = 'right';
  298.           updateList(tablePos);
  299.         }
  300.         return goToPos(pos, dir);
  301.       }
  302.     });
  303.     $('table.movies th[data-sort]').click(function(e) {
  304.       var sortCol;
  305.       e.preventDefault();
  306.       $('table.movies th[data-sort]').removeClass('active');
  307.       $(this).addClass('active');
  308.       sortCol = $(this).data('sort');
  309.       sortDataBy(sortCol);
  310.       tablePos = 0;
  311.       return updateList();
  312.     });
  313.     $('table.movies th[data-sort]').removeClass('active');
  314.     $("table.movies th[data-sort='" + defaultSort + "']").addClass('active');
  315.     sortDataBy(defaultSort);
  316.  
  317.     return updateList();
  318.   });
  319.  
  320. }).call(this);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement