detail.ejs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <!DOCTYPE html>
  2. <html lang="<%= lang %>">
  3. <head>
  4. <%- include('common-meta') %>
  5. <link rel="alternate" href="https://art.pcoloring.com/en/<%= uri.substring(3) %>" hrefLang="en" />
  6. <link rel="alternate" href="https://art.pcoloring.com/zh/<%= uri.substring(3) %>" hrefLang="zh" />
  7. <link rel="alternate" href="https://art.pcoloring.com/es/<%= uri.substring(3) %>" hrefLang="es" />
  8. <link rel="alternate" href="https://art.pcoloring.com/pt/<%= uri.substring(3) %>" hrefLang="pt" />
  9. <link rel="alternate" href="https://art.pcoloring.com/ja/<%= uri.substring(3) %>" hrefLang="ja" />
  10. <link rel="stylesheet" href="/stylesheets/styles.css">
  11. <link rel="stylesheet" href="/stylesheets/header.css">
  12. <link rel="stylesheet" href="/stylesheets/detail.css">
  13. <script type="application/ld+json">
  14. {
  15. "@context": "https://schema.org",
  16. "@type": "CreativeWork",
  17. "name": "<%= translate.printableColoringPage[lang] %>: <%= detail.title %>",
  18. "description": "<%= detail.desc %>",
  19. "url": "https://art.pcoloring.com<%= uri %>",
  20. "image": "<%= detail.thumb %>",
  21. "category": "<%= detail.tags[0] %>",
  22. "keywords": "coloring page, <%= detail.title %>, color by number, paint by number, free, printable, <%= detail.tags.join() %>",
  23. "contentRating": "General Audience",
  24. "mainEntityOfPage": "https://art.pcoloring.com<%= uri %>",
  25. "publisher": {
  26. "@type": "Organization",
  27. "name": "JCCY",
  28. "logo": {
  29. "@type": "ImageObject",
  30. "url": "https://art.pcoloring.com/assets/icon/icon.webp"
  31. }
  32. },
  33. "offers": {
  34. "@type": "Offer",
  35. "priceCurrency": "USD",
  36. "price": "0.00",
  37. "eligibleRegion": {
  38. "@type": "Place",
  39. "name": "Worldwide"
  40. },
  41. "url": "https://art.pcoloring.com<%= uri %>"
  42. },
  43. "author": {
  44. "@type": "Person",
  45. "name": "<%= detail.user.username %>"
  46. },
  47. "datePublished": "<%= detail.publishTime %>"
  48. }
  49. </script>
  50. </head>
  51. <!-- Google tag (gtag.js) -->
  52. <script async src="https://www.googletagmanager.com/gtag/js?id=G-JBGGVGLHTP"></script>
  53. <script>
  54. window.dataLayer = window.dataLayer || [];
  55. function gtag() { dataLayer.push(arguments); }
  56. gtag('js', new Date());
  57. gtag('config', 'G-JBGGVGLHTP');
  58. </script>
  59. <body>
  60. <%- include('header') %>
  61. <h2 style="display: flex; justify-content: center; color: purple">
  62. <%= translate.printableColoringPage[lang] %>
  63. </h2>
  64. <div class="details">
  65. <div class="poster"><img src="<%= detail.thumb %>" alt="<%= detail.title %>"></div>
  66. <div class="description">
  67. <h1>
  68. <%= detail.title %>
  69. </h1>
  70. <p>
  71. <%= translate.designer[lang] %>: <a href="/<%= lang %>/designer/<%= detail.user._id %>"
  72. class="tag-button">
  73. <%= detail.user.username %>
  74. </a>
  75. </p>
  76. <p>
  77. <%= translate.publishTime[lang] %>: <%= detail.publishTime %>
  78. </p>
  79. <p>
  80. <%= translate.tag[lang] %>:
  81. <% detail.tags.forEach(tag=> { %>
  82. <a href="/<%= lang %>/tag/<%= tag %>" class="tag-button">
  83. <%= tag %>
  84. </a>
  85. <% }); %>
  86. </p>
  87. <div>
  88. <%= detail.desc %>
  89. </div>
  90. <div class="button-wrapper">
  91. <a href="/play/<%= detail._id %>" class="play-button">
  92. <%= translate.play[lang] %>
  93. </a>
  94. <a id="downloadBtn" class="play-button" style="background-color: lightseagreen;">
  95. <%= translate.download[lang] %>
  96. </a>
  97. </div>
  98. </div>
  99. </div>
  100. <p style=" display: flex; justify-content: center; color: #777; font-size: 18px; font-weight: 500;">
  101. <%= translate.mayYouLike[lang] %>:
  102. </p>
  103. <div class="content" style="margin-bottom: 40px;">
  104. <div class="image-grid">
  105. <% relates.forEach(item=> { %>
  106. <a href="<%= item.uri %>"><img src="<%= item.thumb %>" alt="<%= item.title %>"></a>
  107. <% }); %>
  108. </div>
  109. </div>
  110. <%- include('pagination') %>
  111. <script>
  112. // document.getElementById('downloadBtn').addEventListener('click', function () {
  113. // var link = document.createElement('a');
  114. // link.style.display = 'none';
  115. // link.href = '<%= detail.downlink %>';
  116. // link.download = '<%= detail._id %>.jpeg';
  117. // document.body.appendChild(link);
  118. // link.click();
  119. // document.body.removeChild(link);
  120. // });
  121. document.getElementById('downloadBtn').addEventListener('click', function () {
  122. const imageUrl = '<%= detail.downlink %>';
  123. fetch(imageUrl)
  124. .then(response => {
  125. if (!response.ok) {
  126. throw new Error('Network response was not ok');
  127. }
  128. return response.blob();
  129. })
  130. .then(blob => {
  131. const url = URL.createObjectURL(blob);
  132. const a = document.createElement('a');
  133. a.style.display = 'none';
  134. a.href = url;
  135. a.download = '<%= detail._id %>.jpeg';
  136. document.body.appendChild(a);
  137. a.click();
  138. URL.revokeObjectURL(url);
  139. document.body.removeChild(a);
  140. })
  141. .catch(error => {
  142. console.error('Image Download Error:', error);
  143. });
  144. });
  145. </script>
  146. </body>
  147. </html>