ItemDetailPage.js 9.3 KB

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