ItemDetailPage.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353
  1. var ItemDetailPage = {
  2. onPageShow: function () {
  3. var id = getParameterByName('id');
  4. Dashboard.showLoadingMsg();
  5. ApiClient.getItem(Dashboard.getCurrentUserId(), id).done(ItemDetailPage.renderItem);
  6. },
  7. renderItem: function (item) {
  8. var page = $.mobile.activePage;
  9. ItemDetailPage.item = item;
  10. var name = item.Name;
  11. if (item.IndexNumber != null) {
  12. name = item.IndexNumber + " - " + name;
  13. }
  14. Dashboard.setPageTitle(name);
  15. ItemDetailPage.renderImage(item);
  16. ItemDetailPage.renderOverviewBlock(item);
  17. ItemDetailPage.renderScenes(item);
  18. ItemDetailPage.renderGallery(item);
  19. ItemDetailPage.renderMediaInfo(item);
  20. $('#itemName', page).html(name);
  21. Dashboard.hideLoadingMsg();
  22. },
  23. renderImage: function (item) {
  24. var page = $.mobile.activePage;
  25. var imageTags = item.ImageTags || {};
  26. var html = '';
  27. var url;
  28. var useBackgroundColor;
  29. if (imageTags.Primary) {
  30. url = ApiClient.getImageUrl(item.Id, {
  31. type: "Primary",
  32. width: 800,
  33. tag: item.ImageTags.Primary
  34. });
  35. }
  36. else if (item.BackdropImageTags && item.BackdropImageTags.length) {
  37. url = ApiClient.getImageUrl(item.Id, {
  38. type: "Backdrop",
  39. width: 800,
  40. tag: item.BackdropImageTags[0]
  41. });
  42. }
  43. else if (imageTags.Thumb) {
  44. url = ApiClient.getImageUrl(item.Id, {
  45. type: "Thumb",
  46. width: 800,
  47. tag: item.ImageTags.Thumb
  48. });
  49. }
  50. else if (imageTags.Disc) {
  51. url = ApiClient.getImageUrl(item.Id, {
  52. type: "Disc",
  53. width: 800,
  54. tag: item.ImageTags.Disc
  55. });
  56. }
  57. else if (item.MediaType == "Audio") {
  58. url = "css/images/itemDetails/audioDefault.png";
  59. useBackgroundColor = true;
  60. }
  61. else if (item.MediaType == "Game") {
  62. url = "css/images/itemDetails/gameDefault.png";
  63. useBackgroundColor = true;
  64. }
  65. else {
  66. url = "css/images/itemDetails/videoDefault.png";
  67. useBackgroundColor = true;
  68. }
  69. if (url) {
  70. var style = useBackgroundColor ? "background-color:" + Dashboard.getRandomMetroColor() + ";" : "";
  71. html += "<img class='itemDetailImage' src='" + url + "' style='" + style + "' />";
  72. }
  73. $('#itemImage', page).html(html);
  74. },
  75. renderOverviewBlock: function (item) {
  76. var page = $.mobile.activePage;
  77. if (item.Taglines && item.Taglines.length) {
  78. $('#itemTagline', page).html(item.Taglines[0]).show();
  79. } else {
  80. $('#itemTagline', page).hide();
  81. }
  82. if (item.Overview) {
  83. $('#itemOverview', page).html(item.Overview).show();
  84. } else {
  85. $('#itemOverview', page).hide();
  86. }
  87. if (item.CommunityRating) {
  88. $('#itemCommunityRating', page).html(ItemDetailPage.getStarRating(item)).show().attr('title', item.CommunityRating);
  89. } else {
  90. $('#itemCommunityRating', page).hide();
  91. }
  92. if (MediaPlayer.canPlay(item)) {
  93. $('#btnPlay', page).show();
  94. $('#playButtonShadow', page).show();
  95. } else {
  96. $('#btnPlay', page).hide();
  97. $('#playButtonShadow', page).hide();
  98. }
  99. var miscInfo = [];
  100. if (item.ProductionYear) {
  101. miscInfo.push(item.ProductionYear);
  102. }
  103. if (item.OfficialRating) {
  104. miscInfo.push(item.OfficialRating);
  105. }
  106. if (item.RunTimeTicks) {
  107. var minutes = item.RunTimeTicks / 600000000;
  108. minutes = minutes || 1;
  109. miscInfo.push(parseInt(minutes) + "min");
  110. }
  111. if (item.DisplayMediaType) {
  112. miscInfo.push(item.DisplayMediaType);
  113. }
  114. if (item.VideoFormat && item.VideoFormat !== 'Standard') {
  115. miscInfo.push(item.VideoFormat);
  116. }
  117. $('#itemMiscInfo', page).html(miscInfo.join('&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'));
  118. ItemDetailPage.renderGenres(item);
  119. ItemDetailPage.renderStudios(item);
  120. },
  121. renderGenres: function (item) {
  122. var page = $.mobile.activePage;
  123. if (item.Genres && item.Genres.length) {
  124. var elem = $('#itemGenres', page).show();
  125. var html = 'Genres:&nbsp;&nbsp;';
  126. for (var i = 0, length = item.Genres.length; i < length; i++) {
  127. if (i > 0) {
  128. html += '&nbsp;&nbsp;/&nbsp;&nbsp;';
  129. }
  130. html += '<a class="interiorLink" href="#">' + item.Genres[i] + '</a>';
  131. }
  132. elem.html(html);
  133. } else {
  134. $('#itemGenres', page).hide();
  135. }
  136. },
  137. renderStudios: function (item) {
  138. var page = $.mobile.activePage;
  139. if (item.Studios && item.Studios.length) {
  140. var elem = $('#itemStudios', page).show();
  141. var html = 'Studios:&nbsp;&nbsp;';
  142. for (var i = 0, length = item.Studios.length; i < length; i++) {
  143. if (i > 0) {
  144. html += '&nbsp;&nbsp;/&nbsp;&nbsp;';
  145. }
  146. html += '<a class="interiorLink" href="#">' + item.Studios[i] + '</a>';
  147. }
  148. elem.html(html);
  149. } else {
  150. $('#itemStudios', page).hide();
  151. }
  152. },
  153. getStarRating: function (item) {
  154. var rating = item.CommunityRating;
  155. var html = "";
  156. for (var i = 1; i <= 10; i++) {
  157. if (rating < i - 1) {
  158. html += "<div class='starRating emptyStarRating'></div>";
  159. }
  160. else if (rating < i) {
  161. html += "<div class='starRating halfStarRating'></div>";
  162. }
  163. else {
  164. html += "<div class='starRating'></div>";
  165. }
  166. }
  167. return html;
  168. },
  169. renderScenes: function (item) {
  170. var html = '';
  171. var page = $.mobile.activePage;
  172. if (!item.Chapters || !item.Chapters.length) {
  173. $('#scenesCollapsible', page).hide();
  174. $('#scenesContent', page).html(html);
  175. return;
  176. }
  177. for (var i = 0, length = item.Chapters.length; i < length; i++) {
  178. var chapter = item.Chapters[i];
  179. }
  180. $('#scenesCollapsible', page).show();
  181. $('#scenesContent', page).html(html);
  182. },
  183. play: function () {
  184. MediaPlayer.play([ItemDetailPage.item]);
  185. },
  186. renderGallery: function (item) {
  187. var page = $.mobile.activePage;
  188. var imageTags = item.ImageTags || {};
  189. var html = '';
  190. var downloadWidth = 400;
  191. if (imageTags.Logo) {
  192. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  193. type: "Logo",
  194. width: downloadWidth,
  195. tag: item.ImageTags.Logo
  196. }) + '" />';
  197. }
  198. if (imageTags.Thumb) {
  199. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  200. type: "Thumb",
  201. width: downloadWidth,
  202. tag: item.ImageTags.Thumb
  203. }) + '" />';
  204. }
  205. if (imageTags.Art) {
  206. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  207. type: "Art",
  208. width: downloadWidth,
  209. tag: item.ImageTags.Art
  210. }) + '" />';
  211. }
  212. if (imageTags.Menu) {
  213. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  214. type: "Menu",
  215. width: downloadWidth,
  216. tag: item.ImageTags.Menu
  217. }) + '" />';
  218. }
  219. if (imageTags.Disc) {
  220. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  221. type: "Disc",
  222. width: downloadWidth,
  223. tag: item.ImageTags.Disc
  224. }) + '" />';
  225. }
  226. if (imageTags.Box) {
  227. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  228. type: "Box",
  229. width: downloadWidth,
  230. tag: item.ImageTags.Box
  231. }) + '" />';
  232. }
  233. if (item.BackdropImageTags) {
  234. for (var i = 0, length = item.BackdropImageTags.length; i < length; i++) {
  235. html += '<img class="galleryImage" src="' + ApiClient.getImageUrl(item.Id, {
  236. type: "Backdrop",
  237. width: downloadWidth,
  238. tag: item.BackdropImageTags[0],
  239. index: i
  240. }) + '" />';
  241. }
  242. }
  243. $('#galleryContent', page).html(html);
  244. },
  245. renderMediaInfo: function(item) {
  246. var page = $.mobile.activePage;
  247. if (!item.MediaStreams || !item.MediaStreams.length) {
  248. $('#mediaInfoCollapsible', page).hide();
  249. return;
  250. }
  251. $('#mediaInfoCollapsible', page).show();
  252. }
  253. };
  254. $(document).on('pageshow', "#itemDetailPage", ItemDetailPage.onPageShow);