ItemDetailPage.js 9.8 KB

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