2 * Copyright (c) 2013, Intel Corporation.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 var currentMenu = "main";
12 var resizeCB = resizeMainMenu;
15 var screenOrientation;
18 var contentType = "AUDIO";
24 var currentPlayerType = "AUDIO";
25 var currentPlayerControls;
31 var vidIcon = new Image();
32 var imgIcon = new Image();
33 var musicIcon = new Image();
34 var imagesLoaded = false;
38 var loadAndPlay = false;
40 var currentFileLoaded = false;
45 var mainMenuTitleTemplateLandscape = {"font" : "oblique bolder 30pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
46 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
48 var mainMenuTitleTemplate = {"font" : "oblique bolder 40pt arial", "lineWidth" : 9.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
49 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.4)"};
51 var mainTrackTemplateLandscape = {"font" : "bold 20pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
52 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
54 var mainTrackTemplate = {"font" : "bold 30pt Arial", "lineWidth" : 7.5, "fillStyle" : "black", "strokeStyle" : "white", "textAlign" : "left",
55 "largeShadow" : 8, "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 45, "shadowColor" : "rgba(255, 187, 0, 0.5))"};
57 var mediaTextTemplate2 = {"font" : "bold 20pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
58 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
60 var mediaTextTemplate3 = {"font" : "bold 20pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
62 var trackTextTemplate = {"font" : "bold 16pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
64 var mediaTextTemplate2Landscape = {"font" : "bold 15pt Arial", "lineWidth" : 10.0, "fillStyle" : "white", "strokeStyle" : "rgba(0, 0, 0, 1.0)", "textAlign" : "left",
65 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 0, "shadowColor" : "rgba(0, 0, 0, 1.0)"};
67 var mediaTextTemplate3Landscape = {"font" : "bold 15pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "rgba(100, 0, 0, 1.0)", "textAlign" : "left"};
69 var trackTextTemplateLandscape = {"font" : "bold 11pt Arial", "lineWidth" : 3.0, "fillStyle" : "white", "strokeStyle" : "black", "textAlign" : "left"};
72 var mediaTextTemplate = {"font" : "bold 20pt Arial", "fillStyle" : "", "textAlign" : "left",
73 "shadowOffsetX" : 0, "shadowOffsetY" : 0, "shadowBlur" : 12, "shadowColor" : "red"};
77 console.log("Content discovery failed");
80 function setupSpeech()
82 speechObj = tizen.speech;
86 var speechEventListener = {
87 onaudiostart: function(){console.log("MediaPlayer: onaudiostart received");},
88 onsoundstart: function(){console.log("MediaPlayer: onsoundstart received");},
89 onspeechstart: function(){console.log("MediaPlayer: onspeechstart received");},
90 onspeechend: function(){console.log("MediaPlayer: onspeechend received");},
91 onsoundend: function(){console.log("MediaPlayer: onsoundend received");},
92 onaudioend: function(){console.log("MediaPlayer: onaudioend received");},
93 onresult: function(result){
95 console.log("MediaPlayer: onresult received");
97 for (var i = 0; i < result.length; i++)
99 console.log("MediaPlayer: forloop, command = " + result[i]);
100 var commandFound = false;
129 onnomatch: function(result){console.log("MediaPlayer: onnomatch received ");},
130 onerror: function(error){console.log("MediaPlayer: onerror received");},
131 onstart: function(){console.log("MediaPlayer: onstart received");},
132 onend: function(){console.log("MediaPlayer: onend received");}
135 speechObj.setCBListener(speechEventListener);
140 console.log("MediaPlayer setupSpeech FAILED + " + err.message);
145 function loadImages(callback)
147 var loadedImages = 0;
150 for (var src in audioContent)
154 for (var src in audioContent)
158 audioContent[src].coverArt = new Image();
159 audioContent[src].coverArt.onload = function(){
161 if (++loadedImages >= numImages) {
163 callback(audioContent);
167 audioContent[src].coverArt.onerror = function(e){
168 audioContent[src].coverArt.src = "images/musicIcon.png";
171 audioContent[src].coverArt.src = (audioContent[src].coverArtURI !== undefined && audioContent[src].coverArtURI !== "") ? audioContent[src].coverArtURI : "images/musicIcon.png";
175 console.log("Failed to load audio cover image");
180 function updateMediaName(newArtist, newTitle, newCover)
182 var playBarHeight = mediaNameCanvas.height;
183 var boxWidth = playBarHeight * 0.75;
184 mediaNameCTX.clearRect(0,0,mediaNameCanvas.width, mediaNameCanvas.height);
186 if (currentPlayerType === "AUDIO")
189 var alphaJump = 0.01;
193 mediaNameCTX.fillStyle="rgba(30,30,30,0.5)";
194 mediaNameCTX.strokeStyle="rgba(130,130,130,1)";
195 mediaNameCTX.lineWidth = 5;
196 mediaNameCTX.fillRect(0,0,mediaNameCanvas.width, playBarHeight);
197 mediaNameCTX.strokeRect(-20,0,mediaNameCanvas.width + 40, playBarHeight);
199 if (newCover === undefined || newCover.naturalWidth === undefined || newCover.naturalWidth <= 0)
201 newCover = musicIcon;
204 mediaNameCTX.drawImage(newCover, 20, (playBarHeight - boxWidth) / 2, boxWidth, boxWidth);
206 if (screenOrientation === "portrait")
208 var textStartX = boxWidth + 50;
209 var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 70 , "zLoc" : 0,
210 "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 50, "wordWrap" : true});
211 trackText.applyTemplate(mainMenuTitleTemplate);
212 var artistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 70 + trackText.height, "zLoc" : 0,
213 "width" : mediaNameCanvas.width - textStartX, "height" : 50, "lineHeight" : 50, "wordWrap" : true});
214 artistText.applyTemplate(mainTrackTemplate);
215 artistText.yLoc = 70 + trackText.height;
219 var textStartX = boxWidth + 50;
220 var trackText = new TextObject(mediaNameCTX,{"text" : newTitle, "xLoc" : textStartX, "yLoc" : 50 , "zLoc" : 0,
221 "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
222 trackText.applyTemplate(mainMenuTitleTemplateLandscape);
223 var artistText = new TextObject(mediaNameCTX,{"text" : newArtist, "xLoc" : textStartX, "yLoc" : 50, "zLoc" : 0,
224 "width" : mediaNameCanvas.width - textStartX, "height" : 30, "lineHeight" : 30, "wordWrap" : true});
225 artistText.applyTemplate(mainTrackTemplateLandscape);
226 artistText.yLoc = 50 + trackText.height;
230 trackText.drawLargeShadow();
231 artistText.drawObj();
236 function fillMediaList(contentList)
238 //Don't try and fill an empty content list or an audio list that hasn't finished loading the thumbnails
239 if (contentList === undefined || contentList === null || contentList.length <=0 || (contentList === audioContent && !imagesLoaded))
244 var iconImg = new Image();
245 var canvasW = mediaListItemW;
246 var canvasH = mediaListItemH * 0.95 ;
248 $("#mediaListItems").empty();
249 var lightColor = false;
250 for (var i=0; i < contentList.length; i++)
254 $("#mediaListItems").append("<li><a href='#'>" +
255 "<canvas id=canvasNum" + i + " width=" + canvasW + " height=" + canvasH + "> </canvas>" +
261 $("#mediaListItems").append("<li><a href='#' class='lightColor'>" +
262 "<canvas id=canvasNum" + i + " width=" + canvasW + " height=" + canvasH + "> </canvas>" +
267 lightColor = !lightColor;
269 currentCanvas = document.getElementById("canvasNum"+ i);
270 currentCTX = currentCanvas.getContext("2d");
272 // Set callback function for the new list item
273 $("#canvasNum"+i).click(function () {
274 listIndex = $(this).parent().parent().index();
276 switch (currentPlayerType)
281 $("#playButton").attr("src","images/playButton.png");
283 updateMediaName(audioContent[listIndex].artists[0], audioContent[listIndex].title, audioContent[listIndex].coverArt);
284 $("#audioSrc").attr("src", audioContent[listIndex].contentURI);
290 console.log("updateMediaName error: " + err.message);
297 $("#playButton").attr("src","images/playButton.png");
298 updateMediaName(videoContent[listIndex].artists[0], audioContent[listIndex].title, vidIcon);
299 $("#videoSrc").attr("src", videoContent[listIndex].contentURI);
301 $("#mediaList").fadeOut(300);
305 console.log("updateMediaName error: " + err.message);
312 $("#playButton").attr("src","images/playButton.png");
313 $("#imagePlayer").css("background", "url(" + imageContent[listIndex].contentURI + ") no-repeat center");
314 $("#imagePlayer").css("background-size", "contain");
315 $("#mediaList").fadeOut(300);
319 console.log("updateMediaName error: " + err.message);
328 switch (currentPlayerType)
331 currentCTX.drawImage(audioContent[i].coverArt, 0, 0, canvasH, canvasH );
332 var trackText = new TextObject(currentCTX,{"text" : contentList[i].title, "xLoc" : canvasH + 20, "yLoc" : canvasH / 2.5 , "zLoc" : 0});
333 var artistText = new TextObject(currentCTX,{"text" : contentList[i].artists[0], "xLoc" : canvasH + 20, "yLoc" : canvasH / 1.1 , "zLoc" : 0});
337 currentCTX.drawImage(vidIcon, 0, 0, canvasH, canvasH );
338 var artistText = new TextObject(currentCTX,{"text" : contentList[i].artists[0], "xLoc" : canvasH + 20, "yLoc" : canvasH / 2.5 , "zLoc" : 0});
339 var trackText = new TextObject(currentCTX,{"text" : contentList[i].title, "xLoc" : canvasH + 20, "yLoc" : canvasH / 1.1 , "zLoc" : 0});
343 currentCTX.drawImage(imgIcon, 0, 0, canvasH, canvasH );
344 var artistText = new TextObject(currentCTX,{"text" : contentList[i].title, "xLoc" : canvasH + 20, "yLoc" : canvasH / 2.5 , "zLoc" : 0});
345 var trackText = new TextObject(currentCTX,{"text" : " ", "xLoc" : canvasH + 20, "yLoc" : canvasH / 1.1 , "zLoc" : 0});
352 var mediaTextTemp1 = screenOrientation === "portrait" ? mediaTextTemplate2 : mediaTextTemplate2Landscape;
353 var mediaTextTemp2 = screenOrientation === "portrait" ? mediaTextTemplate3 : mediaTextTemplate3Landscape;
354 var trackTextTemp = screenOrientation === "portrait" ? trackTextTemplate : trackTextTemplateLandscape;
356 trackText.applyTemplate(mediaTextTemp1);
358 trackText.applyTemplate(mediaTextTemp2);
361 artistText.applyTemplate(trackTextTemp);
362 artistText.drawObj();
365 $("#mediaListItems li").css({"width" : mediaListItemW + "px", "height" : mediaListItemH + "px", "margin-bottom" : "10px"});
368 function onContentItemArraySuccess(content)
370 var emptyContent = true;
372 if (!content || content === undefined || content.length <= 0)
373 console.log("Invalid content for " + contentType);
376 emptyContent = false;
387 audioContent = content;
388 sortByAlpha(audioContent);
390 $("#audioSrc").attr("src", audioContent[0].contentURI);
395 for (var i = 0; i < audioContent.length; i++)
397 var iconURI = (audioContent[i].thumbnailURIs !== undefined && audioContent[i].thumbnailURIs !== null) ? audioContent[i].thumbnailURIs[0] : "images/musicIcon.png";
398 audioContent[i].coverArtURI = iconURI;
401 loadImages(fillMediaList);
406 console.log("Error when parsing audioContent");
410 contentType = "VIDEO";
416 videoContent = content;
417 $("#videoSrc").attr("src", videoContent[0].contentURI);
419 contentType = "IMAGE";
425 imageContent = content;
426 $("#imagePlayer").css("background", "url(" + imageContent[0].contentURI + ") no-repeat center");
427 $("#imagePlayer").css("background-size", "contain");
429 contentType = undefined;
433 console.log("Undefined content search type");
434 nextContentType = undefined;
438 if (contentType !== undefined)
439 getMedia(contentType);
442 function getMedia(mediaType)
444 var manager = tizen.content;
446 var filter = new tizen.AttributeFilter("type", "EXACTLY", mediaType);
447 manager.find(onContentItemArraySuccess, onError, null, filter);
450 function showMediaMenu()
452 $(".navButton").fadeIn(800);
454 switch(currentPlayerType)
460 updateMediaName(audioContent[listIndex].artists[0], audioContent[listIndex].title, audioContent[listIndex].coverArt);
464 console.log("updateMediaName failed for showMediaMenu (audio) : " + err.message);
467 $("#mediaName").fadeIn(800);
468 $(".sortButton").fadeIn(800);
469 currentPlayer.fadeIn(800);
471 $("#mediaList").addClass("mediaListAudioList");
473 if (screenOrientation === "landscape" )
474 $("#mediaList").addClass("landscape");
476 $("#mediaList").removeClass("landscape");
478 $("#mediaList").fadeIn(800);
483 setTimeout(function(){currentPlayer.show()}, 800); //The video element can't be faded, so wait a moment before showing
488 currentPlayer.fadeIn(800);
492 console.log("Invalid player type");
497 function showMediaList()
499 if ($("#mediaList").is(":visible"))
500 $("#mediaList").fadeOut(300);
503 fillMediaList(currentContent);
504 $("#mediaList").fadeIn(300);
508 function changeMenu(menuButtonId)
510 var clickedButton = $("#" + menuButtonId);
511 var buttonWidth = clickedButton.width();
512 var buttonHeight = clickedButton.height();
513 var buttonBottom = clickedButton.css("bottom");
514 var buttonRight = clickedButton.css("right");
516 //Animate the clicked button slightly
517 clickedButton.animate({
518 bottom: screenOrientation === "portrait" ? "+=0" : "+=50",
519 right: screenOrientation === "portrait" ? "+=50" : "+=0",
523 //Reset the size once done
525 clickedButton.width(buttonWidth);
526 clickedButton.height(buttonHeight);
528 if (screenOrientation === "portrait")
529 clickedButton.css({"right": buttonRight});
531 clickedButton.css({"bottom": buttonBottom});
535 $(".mainButton").fadeOut(300);
539 case ("mainMusicButton"):
540 currentMenu = "audio";
541 currentPlayer = $("#audioPlayer");
542 currentPlayerControls = document.getElementById("audioPlayer");
543 currentPlayerType = "AUDIO";
544 currentContent = audioContent;
548 case ("mainVideoButton"):
549 currentMenu = "video";
550 currentPlayer = $("#videoPlayer");
551 currentPlayerControls = document.getElementById("videoPlayer");
552 currentPlayerType = "VIDEO";
553 currentContent = videoContent;
557 case ("mainImageButton"):
558 currentMenu = "image";
559 currentPlayer = $("#imagePlayer");
560 currentPlayerControls = imageControls;
561 currentPlayerType = "IMAGE";
562 currentContent = imageContent;
566 console.log("Error: No menu by that name");
571 function showMainMenu()
573 currentMenu = "main";
574 currentPlayerControls.pause();
576 $("#playButton").attr("src","images/playButton.png");
578 //If the media list is showing, hide it. Remove the mediaListAudioList class if it exists so that it will resize properly
579 if ($("#mediaList").is(":visible"))
580 $("#mediaList").fadeOut(300, function(){$("#mediaList").removeClass("mediaListAudioList");});
582 $(".navButton").fadeOut(300);
583 $(".sortButton").fadeOut(300);
584 $("#mediaName").fadeOut(300);
586 if (currentPlayerType !== "VIDEO")
587 currentPlayer.fadeOut(300);
589 currentPlayer.hide();
592 $(".mainButton").css({"opacity": "100"});
593 $(".mainButton").fadeIn(800);
596 function sortByAlpha(contentToSort)
598 //If contentToSort is undefined it's because the request came from the sortBy buttons
599 if (contentToSort === undefined)
600 contentToSort = audioContent;
602 contentToSort.sort(function (a,b) {
603 var first = a.title.toLowerCase();
604 var second = b.title.toLowerCase();
614 fillMediaList(contentToSort);
617 function sortByArtist(contentToSort)
619 if (contentToSort === undefined)
620 contentToSort = audioContent;
622 contentToSort.sort(function (a,b) {
623 var first = a.artists[0].toLowerCase();
624 var second = b.artists[0].toLowerCase();
634 fillMediaList(contentToSort);
637 function sortByAlbum(contentToSort)
639 if (contentToSort === undefined)
640 contentToSort = audioContent;
642 contentToSort.sort(function (a,b) {
643 var first = a.album.toLowerCase();
644 var second = b.album.toLowerCase();
654 fillMediaList(contentToSort);
656 /**************************************** NAVIGATION FUNCTIONS *******************************************/
658 function startLoadTimer()
660 if (loadTimer !== undefined)
661 clearTimeout(loadTimer);
663 loadTimer = setTimeout(
665 if (currentMenu != "main")
666 $("#playButton").attr("src","images/playButton.png");
667 alert("File failed to load! - " + audioContent[listIndex].artists[0] + " : " + audioContent[listIndex].title);
668 currentFileLoaded = false;
672 function playLoadedMedia()
674 currentFileLoaded = true;
676 if (loadTimer !== undefined)
677 clearTimeout(loadTimer);
681 currentPlayerControls.play();
682 $("#playButton").attr("src","images/pauseButton.png");
687 function playButtonClick()
689 if (currentFileLoaded)
691 if (currentPlayerControls.paused)
693 currentPlayerControls.play();
694 $("#playButton").attr("src","images/pauseButton.png");
698 currentPlayerControls.pause();
699 $("#playButton").attr("src","images/playButton.png");
703 alert(audioContent[listIndex].artists[0] + " : " + audioContent[listIndex].title + " failed to load, please select another file");
706 function pauseButtonClick()
708 if (!currentPlayerControls.paused)
710 currentPlayerControls.pause();
711 $("#playButton").attr("src","images/playButton.png");
715 function backButtonClick()
717 switch (currentPlayerType)
725 listIndex = imageContent.length - 1;
730 $("#audioSrc").attr("src", audioContent[listIndex].contentURI);
731 updateMediaName(audioContent[listIndex].artists[0], audioContent[listIndex].title, audioContent[listIndex].coverArt);
743 videoIndex = imageContent.length - 1;
745 if ($("#mediaList").is(":visible"))
748 $("#playButton").attr("src","images/playButton.png");
749 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
760 imageIndex = imageContent.length - 1;
762 $("#imagePlayer").css("background", "url(" + imageContent[imageIndex].contentURI + ") no-repeat center");
763 $("#imagePlayer").css("background-size", "contain");
768 console.log("Content failure");
774 function nextButtonClick()
776 switch (currentPlayerType)
781 if (audioContent.length > (listIndex + 1))
789 $("#audioSrc").attr("src", audioContent[listIndex].contentURI);
790 updateMediaName(audioContent[listIndex].artists[0], audioContent[listIndex].title, audioContent[listIndex].coverArt);
799 if (videoContent.length > (videoIndex + 1))
805 $("#playButton").attr("src","images/playButton.png");
806 $("#videoSrc").attr("src", videoContent[videoIndex].contentURI);
814 if (imageContent.length > (imageIndex + 1))
819 $("#imagePlayer").css("background", "url(" + imageContent[imageIndex].contentURI + ") no-repeat center");
820 $("#imagePlayer").css("background-size", "contain");
825 console.log("Content failure");
830 /**************************************** END NAVIGATION FUNCTIONS *******************************************/
832 function resizeMainMenu()
834 $("#mediaList").fadeOut(0);
835 screenWidth = window.innerWidth;
836 screenHeight = window.innerHeight;
837 screenOrientation = screenWidth < screenHeight ? "portrait" : "landscape";
838 iconWidth = screenOrientation === "portrait" ? screenHeight / 4 : screenWidth / 4;
841 $(".mainButton").width(iconWidth + "px");
842 $(".mainButton").height(iconWidth + "px");
844 var iconsTop = screenOrientation === "portrait" ? ((screenHeight - (iconWidth * 3)) / 2) - (padding * 3) : (screenHeight - iconWidth) / 2;
846 if (screenOrientation === "portrait")
847 $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : (screenWidth / 2) - (iconWidth /2) - padding + "px", "width" : "50%"});
850 $("#mainMenuButtons").css({"top": iconsTop + "px", "left" : ((iconWidth / 2) - (padding * 3)) + "px", "width" : "100%"});
851 $("#sortButtons").addClass("landscape");
855 function resizePlayerPage()
857 audioPlayer = document.getElementById("audioPlayer");
858 videoPlayer = document.getElementById("videoPlayer");
859 screenWidth = window.innerWidth;
860 screenHeight = window.innerHeight;
863 var buttonWidth = screenOrientation === "portrait" ? screenHeight * 0.05 : screenWidth * 0.05;
865 $("#backButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) - (buttonWidth *3)) + "px"});
866 $("#nextButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": ((screenWidth / 2) + (buttonWidth *2)) + "px"});
867 $("#returnButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": padding + "px"});
868 $("#listButton").css({"width": buttonWidth + "px", "height": buttonWidth + "px", "top": padding + "px", "left": (screenWidth - buttonWidth - padding * 2) + "px"});
869 $("#playButton").css({"width": buttonWidth * 1.3 + "px", "height": buttonWidth * 1.3 + "px", "top": padding * 0.3 + "px", "left": (screenWidth / 2) - (buttonWidth / 2) + "px"});
871 mediaNameCanvas.width = (screenWidth);
872 mediaNameCanvas.height = (screenHeight * 0.34) - (buttonWidth + (2 * padding));
873 mediaNameCanvas.style.top = (buttonWidth + (2 * padding) ) + "px";
874 mediaNameCanvas.style.left = "0px";
876 var sortButtonTop = (buttonWidth + (2 * padding) ) + mediaNameCanvas.height - (buttonWidth * 1.3);
877 var sortButtonWidth = buttonWidth * 2.5;
878 var buttonSpacing = screenWidth / 5;
880 mediaListItemW = $("#mediaList").width() * 0.92;
881 mediaListItemH = $("#mediaList").height() / 10;
891 * swipe - Handles swipe events. Currently it just acts as another way to hit the next / back buttons, but
892 * it could be expanded to other things in the future.
895 function swipe(direction, object)
901 if (direction === "right")
903 else if (direction === "left")
914 musicIcon.src = "images/musicIcon.png";
915 vidIcon.src = "images/videoIcon.png";
916 imgIcon.src = "images/imageIcon.png";
917 imageControls = new ImageControls();
919 mediaNameCanvas = document.getElementById("mediaName");
920 mediaNameCTX = mediaNameCanvas.getContext("2d");
922 //Resize all items and search for local media
927 getMedia(contentType);
929 //Prevent highlighting
930 window.ondragstart = function() { return false; }
932 $(window).bind('resize', resizeAll);
934 //Simple swipe detection
935 $("#mediaName").mousedown(function(e){mouseDownEvent = e;});
936 $("#mediaName").mouseup(function(e){
937 if (Math.abs(mouseDownEvent.clientY - e.clientY) < 100)
939 if (Math.abs(mouseDownEvent.clientX - e.clientX) > 100)
941 if (mouseDownEvent.clientX > e.clientX)
942 swipe("left", "mediaName");
944 swipe("right", "mediaName");
949 document.getElementById('videoPlayer').addEventListener("playing", function() {
950 $("#navigationButtons").hide();
952 document.getElementById('videoPlayer').addEventListener("pause", function() {
953 $("#navigationButtons").show();
957 $(document).ready(function () {