/// (function () { var app = angular.module("movieApp", ['ngAnimate']); app.config(function ($locationProvider) { $locationProvider.html5Mode({ enabled: true, requireBase: false }); }); app.controller("MainController", function ($scope, $http, $log, $interval, $timeout, $location) { //scope methods $scope.isActiveView = function (id) { return id === $scope.settings.activeView; } $scope.showMovieDetails = function (id) { return $scope.movie !== undefined; } $scope.activateThumbView = function (id, showYear, language) { setViewProperties(id, showYear, language); $timeout(function () { getThumbs(); }, 10); } $scope.activateVideoView = function (event, thumbNail) { if (event) event.preventDefault(); updateUrl(thumbNail.Url); setViewProperties("watch", false, $scope.settings.language); if (thumbNail) { // $scope.movie = {}; var url = "/api/Query/Movie/?id=" + thumbNail.Id; getData(url) .then(function (data) { $scope.movie = data; $scope.play(0); }); } else { $scope.play(0); } } $scope.loadMore = function (lang) { //load page $timeout(function () { getThumbs(); }, 10); }; $scope.highlightYear = function (year) { return year == $scope.settings.selectedYear; } $scope.selectYear = function (year) { if (year == $scope.settings.selectedYear) return; $scope.settings.selectedYear = year === 'Clear' ? '' : year; $scope.activateThumbView($scope.settings.activeView, true, $scope.settings.language); } $scope.Search = function (direct) { //if (!direct) { setViewProperties($scope.settings.language, $scope.settings.showYear, $scope.settings.language); //load page $timeout(function () { getThumbs($scope.settings.queryString); }, 10); //} }; $scope.play = function ($index) { $scope.settings.playingIndex = $index; $scope.movie.Active = $scope.movie.Links[$index]; angular.element(document.getElementById('player')).empty().append( '' + '' + '' + '' + '' + '' + '' + ''); $scope.settings.playingIndex = $index; //$scope.settings.playingIndex = -1; //$timeout(function () { // $scope.settings.playingIndex = $index; //}, 500); //player.jwPlaylistItem($index); } //end //private methods var setViewProperties = function (id, showYear, language) { //stop layout cancelTimer(); //set values $scope.settings.nextPage = $scope.thumbnails.length = 0; $scope.settings.activeView = id; $scope.settings.showYear = showYear; $scope.settings.language = language; $scope.settings.showMoreLink = false; $scope.settings.playingIndex = -1; } var getThumbs = function (searchTerm) { var query = "/?language=" + $scope.settings.language + "&year=" + $scope.settings.selectedYear + "&page=" + $scope.settings.nextPage + "&term=" + (searchTerm ? searchTerm : ""); var url = "/api/Query/List" + query; getData(url) .then(function (data) { updateUrl(query); showThumbs(data); }); }; var showThumbs = function (data) { var currentIndex = 0; var thumbNails = data.Thumbnails; $scope.settings.nextPage = data.NextPage; cancelTimer(); $scope.stop = $interval(function () { if (thumbNails.length === currentIndex) { cancelTimer(); $scope.settings.showMoreLink = $scope.settings.nextPage > 0; } else $scope.thumbnails.push(thumbNails[currentIndex++]); }, 1); }; var cancelTimer = function () { if ($scope.stop !== undefined) { $interval.cancel($scope.stop); $scope.stop = undefined; } }; var getData = function (url) { return $http.get(url) .then(function (response) { $log.log("data recieved"); return response.data; }); }; var updateUrl = function (url) { if (url.indexOf(location.host) > -1) { //full url var origin = location.protocol + "//" + location.host; url = url.replace(origin, ""); } $location.url(url); }; //end (function () { var data = initService().bootData; $scope.thumbnails = data.thumbInfo.Thumbnails; $scope.movie = data.movie; $scope.settings = { activeView: data.activeView, language: '', showWatchView: data.showWatchView, selectedYear: '', queryString: '', nextPage: data.thumbInfo.NextPage, showMoreLink: data.thumbInfo.NextPage > 0, showYear: true, playingIndex: -1, flashInstalled: FlashDetect.installed }; //year list $scope.years = []; for (var i = 2014; i > 1971; i--) $scope.years.push(i); $scope.years.push(1960); $scope.years.push(1950); $scope.years.push(1920); $scope.years.push('Clear'); var searchResult = {}; //some jquery $('input.typeahead').typeahead( { source: function (query, process) { $scope.queryString = query; getData("/api/Query/Search/?term=" + query + "&language=" + $scope.settings.language) .then(function (data) { searchResult = data; process(data); }); }, afterSelect: function (query) { $scope.settings.queryString = query.id; $scope.Search(true); }, autoSelect: false, showHintOnFocus: true }); // if ($scope.settings.showWatchView) { setViewProperties("watch", false, $scope.settings.language); $scope.play(0); } } ()); }); //Directives app.directive('errSrc', function () { return { link: function (scope, element, attrs) { scope.$watch(function () { return attrs['ngSrc']; }, function (value) { if (!value) { element.attr('src', attrs.errSrc); } }); element.bind('error', function () { element.attr('src', attrs.errSrc); }); } } }); } ());