123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. const APP_ID = (window.location.host === 'www.pxfreshdelivery.tw') ? ' 729797861493746' : '547406236761668' ;
  2. function sleep(second = 1000) {
  3. return new Promise((resolve) => {
  4. let t = setTimeout(() => {
  5. clearTimeout(t);
  6. t = null;
  7. resolve();
  8. }, second)
  9. })
  10. }
  11. function getQueryVariable(variable) {
  12. var query = window.location.search.substring(1);
  13. var vars = query.split('&');
  14. for (var i = 0; i < vars.length; i++) {
  15. var pair = vars[i].split('=');
  16. if (decodeURIComponent(pair[0]) == variable) {
  17. return decodeURIComponent(pair[1]);
  18. }
  19. }
  20. console.log('Query variable %s not found', variable);
  21. return '';
  22. }
  23. function getTemplate(value) {
  24. let output = '';
  25. const key = value.toLocaleLowerCase();
  26. switch (key) {
  27. case "ralf": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/ralfshare_fb.png';break;
  28. case "hao": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/haoshare_fb.png';break;
  29. case "yang": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/yangshare_fb.png';break;
  30. case "betty": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/bettyshare_fb.png';break;
  31. case "commute_li": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/commute_lishare_fb.png';break;
  32. case "commute_chang": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/commute_changshare_fb.png';break;
  33. case "commute_he": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/commute_heshare_fb.png';break;
  34. case "drangadrang": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/drangadrangshare_fb.png';break;
  35. case "crangadrang": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/drangadrangshare_fb.png';break;
  36. case "ku": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/kushare_fb.png';break;
  37. case "albee": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/albeeshare_fb.png';break;
  38. case "chefchouchou": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/chefchouchoushare_fb.png';break;
  39. case "cookingdairy": output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/cookingdairyshare_fb.png';break;
  40. default: output = 'https://d1xzlli46wohoc.cloudfront.net/assets/images/share/ralfshare_fb.png';break;
  41. }
  42. return output;
  43. }
  44. function getDescription(value) {
  45. let output = '';
  46. const key = value.toLocaleLowerCase();
  47. switch (key) {
  48. case "ralf": output = '今天就來煮|雙寶煮夫全聯先生推薦的「不知道冰花煎餃好簡單」';break;
  49. case "yang": output = '今天就來煮|找蔬食Yang推薦的「我想想出國吃大阪燒」';break;
  50. case "hao": output = '今天就來煮|找蔬食Hao推薦的「青菜煮油醋溫沙拉」';break;
  51. case "betty": output = '今天就來煮|貝蒂做便當推薦的「我在168蒜味蝦便當」';break;
  52. case "commute_he": output = '就煮|台灣通勤第一品牌-何敬旻推薦的「沒想法就涼拌雞絲」';break;
  53. case "commute_chang": output = '就煮|台灣通勤第一品牌-張家倫推薦的「減肥勿餵食水果盤」';break;
  54. case "commute_li": output = '就煮|台灣通勤第一品牌-李毅誠推薦的「都可以來道銷魂控肉」';break;
  55. case "drangadrang": output = '今天就來煮|布萊克薛薛推薦的「看你心情好鮮芒果三明治」';break;
  56. case "ku": output = '就煮|芋頭教主酷Ku推薦的「你決定就好喝芋頭珍珠鮮奶」';break;
  57. case "albee": output = '今天就來煮|Albee佩軒推薦的「隨便煮韓式牛肉泡菜炒飯」';break;
  58. case "chefchouchou": output = '今天就來煮|旅法神廚阿辰師推薦的「沒胃口就醬炒野菇小里肌」';break;
  59. case "cookingdairy": output = '就煮|煮婦養成日記Phoebe推薦的「不餓也想吃蜂蜜芥末鮭魚」';break;
  60. default: output = '今天就來煮|雙寶煮夫全聯先生推薦的「不知道冰花煎餃好簡單」';break;
  61. }
  62. return output;
  63. }
  64. function shareToLine(id = 1) {
  65. const kol = getQueryVariable('kol');
  66. const message = '不要說我沒揪你~今天煮什麼?這個都幫你想好了!還可以一鍵下單, 下班到家就到貨 ~趕快去用我的優惠碼賺加菜金>>\n';
  67. const base_url = window.location.host === 'www.our-work.com.tw' ? '/demosite/2022/2022-pxgo/justahour/' : '/';
  68. let share_url;
  69. if (window.location.host === 'www.pxfreshdelivery.tw' || window.location.host === 'pxfreshdelivery.tw') {
  70. share_url = `https://www.pxfreshdelivery.tw/web/getMeta?id=${id}`;
  71. } else {
  72. share_url = `https://demo.pxfreshdelivery.tw/web/getMeta?id=${id}`;
  73. }
  74. let redirect_url = `${window.location.protocol}//${window.location.host}${base_url}index.html?share_id=${id}`;
  75. if (kol) {
  76. share_url = share_url + `&kol=${kol}`;
  77. redirect_url = redirect_url + `&kol=${kol}`;
  78. }
  79. window.open(`https://line.me/R/share?text=${encodeURIComponent(message)}${encodeURIComponent(share_url)}`, '_blank');
  80. // window.open(`https://lineit.line.me/share/ui?url=${encodeURIComponent(share_url)}&text=${message}`, '_blank');
  81. sleep(2000).then(() => {
  82. window.location.href = redirect_url;
  83. }, 2000);
  84. }
  85. function shareToFacebook(id = 1) {
  86. const kol = getQueryVariable('kol');
  87. const hashtag = '#感謝料理救星賜我靈感_食材一鍵買齊再賺加菜金';
  88. const base_url = window.location.host === 'www.our-work.com.tw' ? '/demosite/2022/2022-pxgo/justahour/' : '/';
  89. let share_url;
  90. if (window.location.host === 'www.pxfreshdelivery.tw' || window.location.host === 'pxfreshdelivery.tw') {
  91. share_url = `https://www.pxfreshdelivery.tw/web/getMeta?id=${id}`;
  92. } else {
  93. share_url = `https://demo.pxfreshdelivery.tw/web/getMeta?id=${id}`;
  94. }
  95. let redirect_url = `${window.location.protocol}//${window.location.host}${base_url}index.html?share_id=${id}`
  96. if (kol) {
  97. share_url = share_url + `&kol=${kol}`;
  98. redirect_url = redirect_url + `&kol=${kol}`;
  99. }
  100. window.open(`https://www.facebook.com/sharer.php?app_id=${APP_ID}&u=${encodeURIComponent(share_url)}&hashtag=${encodeURIComponent(hashtag)}&redirect_uri=${redirect_url}`, '_blank');
  101. sleep(2000).then(() => {
  102. window.location.href = redirect_url;
  103. }, 2000);
  104. }
  105. function detectFace(image) {
  106. return new Promise((resolve, reject) => {
  107. faceapi.nets.tinyFaceDetector
  108. .load('./assets/libs/face-api')
  109. .then(() => {
  110. faceapi
  111. .loadFaceLandmarkModel('./assets/libs/face-api')
  112. .then(() => {
  113. const options = new faceapi.TinyFaceDetectorOptions({ inputSize: 512, scoreThreshold: 0.5 });
  114. faceapi
  115. .detectSingleFace(image, options)
  116. .then((detections) => {
  117. console.log('face detections');
  118. console.log(detections);
  119. if (!detections) {
  120. reject(new Error('你可能遮到五官或光線不足。再拍一次吧'));
  121. } else {
  122. resolve(detections);
  123. }
  124. })
  125. .catch((error) => {
  126. console.log(`detectSingleFace Error\nName:${error.name}\nMessage:${error.message}`);
  127. reject(new Error('你可能遮到五官或光線不足。再拍一次吧'));
  128. });
  129. })
  130. .catch((error) => {
  131. console.log(`loadFaceRecognitionModel Error\nName:${error.name}\nMessage:${error.message}`);
  132. reject(new Error('你可能遮到五官或光線不足。再拍一次吧'));
  133. });
  134. })
  135. .catch((error) => {
  136. console.log(`tinyFaceDetector Error\nName:${error.name}\nMessage:${error.message}`);
  137. reject(new Error('你可能遮到五官或光線不足。再拍一次吧'));
  138. });
  139. });
  140. }
  141. function ImageLoader(src) {
  142. return new Promise((resolve) => {
  143. const image = new Image();
  144. image.crossOrigin = 'Anonymous';
  145. image.onload = () => {
  146. resolve(image);
  147. }
  148. image.src = src;
  149. })
  150. }
  151. function Image2Canvas(image, canvasWidth, canvasHeight) {
  152. const canvas = document.createElement('canvas');
  153. const context = canvas.getContext('2d');
  154. canvas.width = canvasWidth;
  155. canvas.height = canvasHeight;
  156. context.drawImage(image, (image.width - canvas.width) * -0.5, 0, image.width, image.height);
  157. return canvas;
  158. }