shoplazza-cli 1.1.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (400) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +206 -332
  4. package/README.zh.md +318 -0
  5. package/package.json +24 -70
  6. package/scripts/install.js +144 -0
  7. package/scripts/jsbuild/dev/index.js +123 -0
  8. package/scripts/jsbuild/index.js +77 -0
  9. package/{lib/checkout/build → scripts/jsbuild}/plugin/vite-plugin-add-extension-id.js +4 -2
  10. package/scripts/jsbuild/vite.config.js +35 -0
  11. package/scripts/run.js +29 -0
  12. package/.editorconfig +0 -28
  13. package/.prettierrc +0 -9
  14. package/bin/shoplazza +0 -137
  15. package/fixtures/assets/blog.scss +0 -74
  16. package/fixtures/assets/cart_modal.scss +0 -450
  17. package/fixtures/assets/collection_detail.js +0 -234
  18. package/fixtures/assets/collection_detail.scss +0 -345
  19. package/fixtures/assets/collection_list.scss +0 -11
  20. package/fixtures/assets/collection_slider.scss +0 -169
  21. package/fixtures/assets/feature_columns.scss +0 -26
  22. package/fixtures/assets/feature_product.scss +0 -109
  23. package/fixtures/assets/footer.js +0 -58
  24. package/fixtures/assets/footer.scss +0 -337
  25. package/fixtures/assets/four_images.scss +0 -29
  26. package/fixtures/assets/gallery.scss +0 -55
  27. package/fixtures/assets/header.js +0 -178
  28. package/fixtures/assets/header.scss +0 -929
  29. package/fixtures/assets/image_text.scss +0 -72
  30. package/fixtures/assets/logo_bar.scss +0 -11
  31. package/fixtures/assets/newsletter.scss +0 -90
  32. package/fixtures/assets/not_found.scss +0 -39
  33. package/fixtures/assets/page_detail.scss +0 -16
  34. package/fixtures/assets/pagination.scss +0 -150
  35. package/fixtures/assets/postcss.config.js +0 -6
  36. package/fixtures/assets/product_description.scss +0 -88
  37. package/fixtures/assets/product_detail.js +0 -634
  38. package/fixtures/assets/product_detail.scss +0 -1106
  39. package/fixtures/assets/relative_product.scss +0 -45
  40. package/fixtures/assets/reviews.scss +0 -70
  41. package/fixtures/assets/rich_text.scss +0 -71
  42. package/fixtures/assets/search.js +0 -87
  43. package/fixtures/assets/search.scss +0 -67
  44. package/fixtures/assets/slide.scss +0 -51
  45. package/fixtures/assets/slider.scss +0 -141
  46. package/fixtures/assets/test.scss +0 -1
  47. package/fixtures/assets/theme.css +0 -976
  48. package/fixtures/assets/theme.scss +0 -1100
  49. package/fixtures/assets/three_images.scss +0 -20
  50. package/fixtures/assets/tools.scss +0 -23
  51. package/fixtures/assets/two_images.scss +0 -24
  52. package/fixtures/assets/video.scss +0 -45
  53. package/fixtures/assets/video_text.scss +0 -63
  54. package/fixtures/config/settings_data.json +0 -107
  55. package/fixtures/config/settings_schema.json +0 -690
  56. package/fixtures/layout/theme.liquid +0 -76
  57. package/fixtures/locales/ar-SA.json +0 -212
  58. package/fixtures/locales/de-DE.json +0 -290
  59. package/fixtures/locales/en-US.json +0 -290
  60. package/fixtures/locales/es-ES.json +0 -290
  61. package/fixtures/locales/fr-FR.json +0 -290
  62. package/fixtures/locales/id-ID.json +0 -212
  63. package/fixtures/locales/it-IT.json +0 -212
  64. package/fixtures/locales/ja-JP.json +0 -289
  65. package/fixtures/locales/ko-KR.json +0 -290
  66. package/fixtures/locales/nl-NL.json +0 -290
  67. package/fixtures/locales/pl-PL.json +0 -290
  68. package/fixtures/locales/pt-PT.json +0 -212
  69. package/fixtures/locales/ru-RU.json +0 -212
  70. package/fixtures/locales/th-TH.json +0 -212
  71. package/fixtures/locales/zh-CN.json +0 -290
  72. package/fixtures/locales/zh-TW.json +0 -290
  73. package/fixtures/sections/apps.liquid +0 -47
  74. package/fixtures/sections/blog.liquid +0 -137
  75. package/fixtures/sections/collection_desc.liquid +0 -34
  76. package/fixtures/sections/collection_detail.liquid +0 -436
  77. package/fixtures/sections/collection_image.liquid +0 -104
  78. package/fixtures/sections/collection_list.liquid +0 -161
  79. package/fixtures/sections/collection_name.liquid +0 -34
  80. package/fixtures/sections/collection_slider.liquid +0 -330
  81. package/fixtures/sections/feature_columns.liquid +0 -275
  82. package/fixtures/sections/feature_product.liquid +0 -227
  83. package/fixtures/sections/footer.liquid +0 -488
  84. package/fixtures/sections/four_images.liquid +0 -160
  85. package/fixtures/sections/gallery.liquid +0 -258
  86. package/fixtures/sections/header.liquid +0 -1157
  87. package/fixtures/sections/html.liquid +0 -40
  88. package/fixtures/sections/image_text.liquid +0 -350
  89. package/fixtures/sections/instagram_plus.liquid +0 -393
  90. package/fixtures/sections/logo_bar.liquid +0 -183
  91. package/fixtures/sections/newsletter.liquid +0 -225
  92. package/fixtures/sections/not_found.liquid +0 -39
  93. package/fixtures/sections/overlay_image.liquid +0 -648
  94. package/fixtures/sections/page_detail.liquid +0 -39
  95. package/fixtures/sections/photo_collection.liquid +0 -433
  96. package/fixtures/sections/product_description.liquid +0 -208
  97. package/fixtures/sections/product_detail.liquid +0 -611
  98. package/fixtures/sections/products.liquid +0 -216
  99. package/fixtures/sections/relative_product.liquid +0 -121
  100. package/fixtures/sections/reviews.liquid +0 -115
  101. package/fixtures/sections/rich_text.liquid +0 -157
  102. package/fixtures/sections/search.liquid +0 -163
  103. package/fixtures/sections/slide.liquid +0 -719
  104. package/fixtures/sections/three_images.liquid +0 -157
  105. package/fixtures/sections/two_images.liquid +0 -125
  106. package/fixtures/sections/video.liquid +0 -95
  107. package/fixtures/sections/video_text.liquid +0 -128
  108. package/fixtures/snippets/bgset.liquid +0 -21
  109. package/fixtures/snippets/card_title.liquid +0 -8
  110. package/fixtures/snippets/cart_modal.liquid +0 -74
  111. package/fixtures/snippets/collection.liquid +0 -77
  112. package/fixtures/snippets/collection_filter_modal.liquid +0 -56
  113. package/fixtures/snippets/default_image_4.liquid +0 -14
  114. package/fixtures/snippets/default_image_6.liquid +0 -18
  115. package/fixtures/snippets/default_image_8.liquid +0 -23
  116. package/fixtures/snippets/four_images_item.liquid +0 -8
  117. package/fixtures/snippets/header_ads.liquid +0 -95
  118. package/fixtures/snippets/hero_image.liquid +0 -94
  119. package/fixtures/snippets/icon_video_play_large.liquid +0 -1
  120. package/fixtures/snippets/icon_video_play_medium.liquid +0 -4
  121. package/fixtures/snippets/icon_video_play_small.liquid +0 -4
  122. package/fixtures/snippets/lazyimg.liquid +0 -22
  123. package/fixtures/snippets/lazyimg_art.liquid +0 -36
  124. package/fixtures/snippets/lazysizes.liquid +0 -41
  125. package/fixtures/snippets/link.liquid +0 -2
  126. package/fixtures/snippets/pagination.liquid +0 -48
  127. package/fixtures/snippets/product.liquid +0 -126
  128. package/fixtures/snippets/product_art_tpl.liquid +0 -152
  129. package/fixtures/snippets/product_info_body.liquid +0 -337
  130. package/fixtures/snippets/product_info_tpl.liquid +0 -423
  131. package/fixtures/snippets/product_label.liquid +0 -46
  132. package/fixtures/snippets/settings.liquid +0 -295
  133. package/fixtures/snippets/social-meta-tags.liquid +0 -106
  134. package/fixtures/snippets/video_html.liquid +0 -11
  135. package/fixtures/snippets/video_source.liquid +0 -98
  136. package/fixtures/snippets/video_thumb_icon.liquid +0 -2
  137. package/fixtures/templates/404.liquid +0 -1
  138. package/fixtures/templates/collection.liquid +0 -92
  139. package/fixtures/templates/index.liquid +0 -206
  140. package/fixtures/templates/page.liquid +0 -1
  141. package/fixtures/templates/product.liquid +0 -99
  142. package/fixtures/templates/search.liquid +0 -1
  143. package/jest.config.js +0 -192
  144. package/lib/__tests__/log.test.js +0 -15
  145. package/lib/__tests__/utils.test.js +0 -69
  146. package/lib/app/api/cli.js +0 -225
  147. package/lib/app/api/openapi.js +0 -121
  148. package/lib/app/api/partnerOpenapi.js +0 -104
  149. package/lib/app/bin/index.js +0 -20
  150. package/lib/app/bin/javy/javy-arm-linux-v5.0.1 +0 -0
  151. package/lib/app/bin/javy/javy-arm-macos-v5.0.1 +0 -0
  152. package/lib/app/bin/javy/javy-x86_64-linux-v5.0.1 +0 -0
  153. package/lib/app/bin/javy/javy-x86_64-macos-v5.0.1 +0 -0
  154. package/lib/app/bin/javy/javy-x86_64-windows-v5.0.1 +0 -0
  155. package/lib/app/commands/config/actions/link.js +0 -189
  156. package/lib/app/commands/config/actions/use.js +0 -40
  157. package/lib/app/commands/config/index.js +0 -25
  158. package/lib/app/commands/config/link.js +0 -11
  159. package/lib/app/commands/config/use.js +0 -11
  160. package/lib/app/commands/deploy/actions/deploy.js +0 -196
  161. package/lib/app/commands/deploy/index.js +0 -11
  162. package/lib/app/commands/dev/actions/dev.js +0 -206
  163. package/lib/app/commands/dev/index.js +0 -11
  164. package/lib/app/commands/generate/actions/extension.js +0 -97
  165. package/lib/app/commands/generate/actions/generateCheckout.js +0 -58
  166. package/lib/app/commands/generate/actions/generateFunction.js +0 -56
  167. package/lib/app/commands/generate/actions/generateTheme.js +0 -128
  168. package/lib/app/commands/generate/extension.js +0 -11
  169. package/lib/app/commands/generate/index.js +0 -22
  170. package/lib/app/commands/index.js +0 -82
  171. package/lib/app/commands/info/actions/info.js +0 -168
  172. package/lib/app/commands/info/index.js +0 -11
  173. package/lib/app/commands/init/actions/init.js +0 -176
  174. package/lib/app/commands/init/index.js +0 -14
  175. package/lib/app/commands/versions/actions/list.js +0 -210
  176. package/lib/app/commands/versions/index.js +0 -22
  177. package/lib/app/commands/versions/list.js +0 -14
  178. package/lib/app/constant/code.js +0 -7
  179. package/lib/app/constant/color.js +0 -18
  180. package/lib/app/constant/extension.js +0 -16
  181. package/lib/app/constant/host.js +0 -23
  182. package/lib/app/constant/sso.js +0 -7
  183. package/lib/app/index.js +0 -8
  184. package/lib/app/services/auth/config.js +0 -33
  185. package/lib/app/services/auth/index.js +0 -9
  186. package/lib/app/services/auth/oauth-server.js +0 -70
  187. package/lib/app/services/auth/partner-token.js +0 -45
  188. package/lib/app/services/auth/sso-token.js +0 -69
  189. package/lib/app/services/auth/store-token.js +0 -100
  190. package/lib/app/services/auth/url-builder.js +0 -23
  191. package/lib/app/services/config/index.js +0 -41
  192. package/lib/app/services/devServer/app.js +0 -76
  193. package/lib/app/services/devServer/index.js +0 -103
  194. package/lib/app/services/devServer/middleware/hmacValidatorMiddleWare.js +0 -20
  195. package/lib/app/services/devServer/middleware/index.js +0 -5
  196. package/lib/app/services/devServer/tunnel/index.js +0 -43
  197. package/lib/app/services/devServer/tunnel/providers/cloudflare.js +0 -364
  198. package/lib/app/services/devServer/tunnel/providers/ngrok.js +0 -70
  199. package/lib/app/services/devServer/utils/index.js +0 -5
  200. package/lib/app/services/devServer/utils/secureCompare.js +0 -5
  201. package/lib/app/services/devServer/views/app.ejs +0 -133
  202. package/lib/app/services/extension-build/buildCheckout.js +0 -47
  203. package/lib/app/services/extension-build/buildFunction.js +0 -57
  204. package/lib/app/services/extension-build/buildTheme.js +0 -100
  205. package/lib/app/services/extension-build/index.js +0 -23
  206. package/lib/app/services/extension-build/plugins/vite-plugin-add-extension-id.js +0 -26
  207. package/lib/app/services/extension-diff/index.js +0 -132
  208. package/lib/app/services/extension-upsert/index.js +0 -21
  209. package/lib/app/services/extension-upsert/upsertCheckout.js +0 -44
  210. package/lib/app/services/extension-upsert/upsertFunction.js +0 -52
  211. package/lib/app/services/extension-upsert/upsertTheme.js +0 -113
  212. package/lib/app/services/oss/index.js +0 -45
  213. package/lib/app/services/partner/index.js +0 -52
  214. package/lib/app/store/base-store.js +0 -37
  215. package/lib/app/store/config-store.js +0 -55
  216. package/lib/app/store/config.js +0 -21
  217. package/lib/app/store/index.js +0 -14
  218. package/lib/app/store/install-store.js +0 -41
  219. package/lib/app/store/sso-store.js +0 -55
  220. package/lib/app/utils/asyncPool.js +0 -42
  221. package/lib/app/utils/debug/index.js +0 -16
  222. package/lib/app/utils/env.js +0 -24
  223. package/lib/app/utils/error.js +0 -20
  224. package/lib/app/utils/git.js +0 -20
  225. package/lib/app/utils/json.js +0 -27
  226. package/lib/app/utils/path.js +0 -33
  227. package/lib/app/utils/platform.js +0 -37
  228. package/lib/app/utils/request/cli.js +0 -72
  229. package/lib/app/utils/request/debug.js +0 -13
  230. package/lib/app/utils/request/openapi.js +0 -67
  231. package/lib/app/utils/request/partnerOpenapi.js +0 -47
  232. package/lib/app/utils/toml.js +0 -56
  233. package/lib/app/utils/views/message.js +0 -68
  234. package/lib/app/utils/views/select.js +0 -36
  235. package/lib/app/utils/withTempDir.js +0 -55
  236. package/lib/auth/__mocks__/getCode.js +0 -7
  237. package/lib/auth/__mocks__/index.js +0 -0
  238. package/lib/auth/child.js +0 -23
  239. package/lib/auth/getCode.js +0 -39
  240. package/lib/auth/index.js +0 -134
  241. package/lib/check.js +0 -28
  242. package/lib/checkout/api.js +0 -164
  243. package/lib/checkout/build/plugin/vite-plugin-transform-extension-html.js +0 -207
  244. package/lib/checkout/build/vite.config.js +0 -34
  245. package/lib/checkout/build.js +0 -38
  246. package/lib/checkout/config.js +0 -97
  247. package/lib/checkout/create.js +0 -132
  248. package/lib/checkout/delete.js +0 -26
  249. package/lib/checkout/deploy.js +0 -59
  250. package/lib/checkout/dev/index.js +0 -143
  251. package/lib/checkout/fields.js +0 -29
  252. package/lib/checkout/index.js +0 -63
  253. package/lib/checkout/preview.js +0 -52
  254. package/lib/checkout/pull.js +0 -22
  255. package/lib/checkout/push.js +0 -141
  256. package/lib/checkout/template/README.md +0 -34
  257. package/lib/checkout/template/_gitignore +0 -4
  258. package/lib/checkout/template/extension.config.js +0 -4
  259. package/lib/checkout/template/extensions/extension-template/extension.json +0 -10
  260. package/lib/checkout/template/extensions/extension-template/src/content.html +0 -3
  261. package/lib/checkout/template/extensions/extension-template/src/index.html +0 -5
  262. package/lib/checkout/template/extensions/extension-template/src/index.js +0 -11
  263. package/lib/checkout/template/extensions/extension-template/src/script.html +0 -3
  264. package/lib/checkout/template/extensions/extension-template/src/style.html +0 -3
  265. package/lib/checkout/template/package.json +0 -17
  266. package/lib/checkout/undeploy.js +0 -40
  267. package/lib/checkout/util.js +0 -201
  268. package/lib/checkout/verify.js +0 -16
  269. package/lib/checkout/version.js +0 -7
  270. package/lib/commands/__tests__/login.test.js +0 -77
  271. package/lib/commands/__tests__/logout.test.js +0 -29
  272. package/lib/commands/__tests__/store.test.js +0 -44
  273. package/lib/commands/__tests__/switch.test.js +0 -45
  274. package/lib/commands/login.js +0 -120
  275. package/lib/commands/logout.js +0 -23
  276. package/lib/commands/store.js +0 -14
  277. package/lib/commands/switch.js +0 -52
  278. package/lib/commands/theme/__tests__/delete.test.js +0 -49
  279. package/lib/commands/theme/__tests__/init.test.js +0 -21
  280. package/lib/commands/theme/__tests__/list.test.js +0 -80
  281. package/lib/commands/theme/__tests__/package.test.js +0 -17
  282. package/lib/commands/theme/__tests__/publish.test.js +0 -61
  283. package/lib/commands/theme/__tests__/pull.test.js +0 -69
  284. package/lib/commands/theme/__tests__/push.test.js +0 -63
  285. package/lib/commands/theme/__tests__/serve.test.js +0 -107
  286. package/lib/commands/theme/delete.js +0 -64
  287. package/lib/commands/theme/init.js +0 -51
  288. package/lib/commands/theme/list.js +0 -28
  289. package/lib/commands/theme/package.js +0 -37
  290. package/lib/commands/theme/publish.js +0 -56
  291. package/lib/commands/theme/pull.js +0 -62
  292. package/lib/commands/theme/push.js +0 -106
  293. package/lib/commands/theme/serve.js +0 -153
  294. package/lib/commands/theme/share.js +0 -20
  295. package/lib/commands/version.js +0 -6
  296. package/lib/common/constants.js +0 -24
  297. package/lib/common/db/partner.js +0 -91
  298. package/lib/common/inquirers/choose-app.js +0 -79
  299. package/lib/common/inquirers/choose-partner.js +0 -74
  300. package/lib/common/log.js +0 -15
  301. package/lib/common/login.js +0 -125
  302. package/lib/common/logout.js +0 -16
  303. package/lib/db/__mocks__/index.js +0 -9
  304. package/lib/db/__tests__/analytics.test.js +0 -19
  305. package/lib/db/__tests__/user.test.js +0 -20
  306. package/lib/db/analytics.js +0 -48
  307. package/lib/db/index.js +0 -9
  308. package/lib/db/user.js +0 -71
  309. package/lib/function/bin/index.js +0 -20
  310. package/lib/function/bin/javy/javy-arm-linux-v5.0.1 +0 -0
  311. package/lib/function/bin/javy/javy-arm-macos-v5.0.1 +0 -0
  312. package/lib/function/bin/javy/javy-x86_64-linux-v5.0.1 +0 -0
  313. package/lib/function/bin/javy/javy-x86_64-macos-v5.0.1 +0 -0
  314. package/lib/function/bin/javy/javy-x86_64-windows-v5.0.1 +0 -0
  315. package/lib/function/commands/compile.js +0 -43
  316. package/lib/function/commands/create.js +0 -77
  317. package/lib/function/commands/list.js +0 -18
  318. package/lib/function/commands/release.js +0 -69
  319. package/lib/function/index.js +0 -24
  320. package/lib/function/template/js/README.md +0 -37
  321. package/lib/function/template/js/_gitignore +0 -4
  322. package/lib/function/template/js/extension.config.json +0 -5
  323. package/lib/function/template/js/package.json +0 -17
  324. package/lib/function/template/js/src/index.js +0 -64
  325. package/lib/function/utils.js +0 -29
  326. package/lib/log.js +0 -13
  327. package/lib/openAPI/__mocks__/index.js +0 -20
  328. package/lib/openAPI/api.js +0 -76
  329. package/lib/openAPI/index.js +0 -56
  330. package/lib/oss.js +0 -102
  331. package/lib/partner-api/axios.js +0 -67
  332. package/lib/partner-api/index.js +0 -79
  333. package/lib/report.js +0 -37
  334. package/lib/theme-extension/api/index.js +0 -96
  335. package/lib/theme-extension/commands/build.js +0 -114
  336. package/lib/theme-extension/commands/connect.js +0 -73
  337. package/lib/theme-extension/commands/create.js +0 -105
  338. package/lib/theme-extension/commands/deploy.js +0 -56
  339. package/lib/theme-extension/commands/list.js +0 -35
  340. package/lib/theme-extension/commands/release.js +0 -59
  341. package/lib/theme-extension/commands/serve.js +0 -179
  342. package/lib/theme-extension/commands/versions.js +0 -55
  343. package/lib/theme-extension/index.js +0 -29
  344. package/lib/theme-extension/template/basic-app/README.md +0 -125
  345. package/lib/theme-extension/template/basic-app/extension.config.json +0 -4
  346. package/lib/theme-extension/template/basic-app/package.json +0 -18
  347. package/lib/theme-extension/template/basic-app/theme-app/assets/index.css +0 -4
  348. package/lib/theme-extension/template/basic-app/theme-app/assets-manifest.json +0 -1
  349. package/lib/theme-extension/template/basic-app/theme-app/blocks/index.liquid +0 -16
  350. package/lib/theme-extension/template/basic-app/theme-app/locales/ar-SA.json +0 -1
  351. package/lib/theme-extension/template/basic-app/theme-app/locales/de-DE.json +0 -1
  352. package/lib/theme-extension/template/basic-app/theme-app/locales/en-US.json +0 -6
  353. package/lib/theme-extension/template/basic-app/theme-app/locales/es-ES.json +0 -1
  354. package/lib/theme-extension/template/basic-app/theme-app/locales/fr-FR.json +0 -1
  355. package/lib/theme-extension/template/basic-app/theme-app/locales/id-ID.json +0 -1
  356. package/lib/theme-extension/template/basic-app/theme-app/locales/it-IT.json +0 -1
  357. package/lib/theme-extension/template/basic-app/theme-app/locales/ja-JP.json +0 -1
  358. package/lib/theme-extension/template/basic-app/theme-app/locales/ko-KR.json +0 -1
  359. package/lib/theme-extension/template/basic-app/theme-app/locales/nl-NL.json +0 -1
  360. package/lib/theme-extension/template/basic-app/theme-app/locales/pl-PL.json +0 -1
  361. package/lib/theme-extension/template/basic-app/theme-app/locales/pt-PT.json +0 -1
  362. package/lib/theme-extension/template/basic-app/theme-app/locales/ru-RU.json +0 -1
  363. package/lib/theme-extension/template/basic-app/theme-app/locales/th-TH.json +0 -1
  364. package/lib/theme-extension/template/basic-app/theme-app/locales/zh-CN.json +0 -6
  365. package/lib/theme-extension/template/basic-app/theme-app/locales/zh-TW.json +0 -1
  366. package/lib/theme-extension/template/basic-app/theme-app/snippets/index.liquid +0 -8
  367. package/lib/theme-extension/template/embed-app/README.md +0 -125
  368. package/lib/theme-extension/template/embed-app/extension.config.json +0 -4
  369. package/lib/theme-extension/template/embed-app/package.json +0 -18
  370. package/lib/theme-extension/template/embed-app/theme-app/assets-manifest.json +0 -1
  371. package/lib/theme-extension/template/embed-app/theme-app/blocks/index.liquid +0 -18
  372. package/lib/theme-extension/template/embed-app/theme-app/locales/ar-SA.json +0 -1
  373. package/lib/theme-extension/template/embed-app/theme-app/locales/de-DE.json +0 -1
  374. package/lib/theme-extension/template/embed-app/theme-app/locales/en-US.json +0 -6
  375. package/lib/theme-extension/template/embed-app/theme-app/locales/es-ES.json +0 -1
  376. package/lib/theme-extension/template/embed-app/theme-app/locales/fr-FR.json +0 -1
  377. package/lib/theme-extension/template/embed-app/theme-app/locales/id-ID.json +0 -1
  378. package/lib/theme-extension/template/embed-app/theme-app/locales/it-IT.json +0 -1
  379. package/lib/theme-extension/template/embed-app/theme-app/locales/ja-JP.json +0 -1
  380. package/lib/theme-extension/template/embed-app/theme-app/locales/ko-KR.json +0 -1
  381. package/lib/theme-extension/template/embed-app/theme-app/locales/nl-NL.json +0 -1
  382. package/lib/theme-extension/template/embed-app/theme-app/locales/pl-PL.json +0 -1
  383. package/lib/theme-extension/template/embed-app/theme-app/locales/pt-PT.json +0 -1
  384. package/lib/theme-extension/template/embed-app/theme-app/locales/ru-RU.json +0 -1
  385. package/lib/theme-extension/template/embed-app/theme-app/locales/th-TH.json +0 -1
  386. package/lib/theme-extension/template/embed-app/theme-app/locales/zh-CN.json +0 -6
  387. package/lib/theme-extension/template/embed-app/theme-app/locales/zh-TW.json +0 -1
  388. package/lib/theme-extension/template/embed-app/theme-app/snippets/index.liquid +0 -8
  389. package/lib/theme-extension/template/embed-app/theme-app/snippets/index_css.liquid +0 -6
  390. package/lib/theme-extension/utils/config.js +0 -32
  391. package/lib/theme-extension/utils/index.js +0 -213
  392. package/lib/tracing.js +0 -50
  393. package/lib/utils/config.js +0 -12
  394. package/lib/utils/console.js +0 -33
  395. package/lib/utils/env.js +0 -17
  396. package/lib/utils/file.js +0 -48
  397. package/lib/utils/platform.js +0 -37
  398. package/lib/utils/utils.js +0 -165
  399. /package/{lib/checkout → scripts/jsbuild}/dev/client.js +0 -0
  400. /package/{lib/app/services/extension-build/plugins → scripts/jsbuild/plugin}/vite-plugin-transform-extension-html.js +0 -0
@@ -1,634 +0,0 @@
1
- (function ($) {
2
- $.fn.product_detail = function (opt) {
3
- var $container = $("#product_detail_" + opt.product.id);
4
- var $slider = $container.find(".support-slick").eq(0);
5
- var $thumbs = $container.find('.product-image__thumbs-content');
6
- var $document = $(document);
7
- if (opt.product.images.length > 1) {
8
- $slider.on('init', function () {
9
- $(this).find('.swiper-slide').removeClass('hidden');
10
- }).on('beforeChange', function (event, slick, currentSlide, nextSlide) {
11
- $container.find(".product-image__swiper_bullets").html((nextSlide + 1) + " / " + opt.product.images.length);
12
- });
13
- var initSlider = function () {
14
- $slider.slick({
15
- lazyLoad: 'ondemand',
16
- slidesToShow: 1,
17
- arrows: false,
18
- adaptiveHeight: true,
19
- autoplay: false,
20
- dots: false,
21
- infinite: true,
22
- initialSlide: opt.initialSlide || 0,
23
- touchThreshold: 10,
24
- waitForAnimate: false,
25
- useTransform: true,
26
- rtl: document.documentElement.getAttribute("dir") == "rtl"
27
- }).on('beforeChange', function (event, slick, currentSlide, nextSlide) {
28
- $thumbs.find(".slick-current").removeClass("slick-slide slick-current").end().find("[data-thumb-idx=" + nextSlide + "]").addClass("slick-slide slick-current");
29
- var action = $slider.data("once_action");
30
- if (action) return;
31
- if (nextSlide == currentSlide) {
32
- action = "";
33
- } else if (nextSlide - currentSlide == 1) {
34
- action = "next";
35
- } else if (nextSlide - currentSlide == -1) {
36
- action = "prev";
37
- } else if (nextSlide == 0) {
38
- action = "next";
39
- } else if (nextSlide == $thumbs.children().length - 1) {
40
- action = "prev";
41
- }
42
- $slider.data("once_action", action);
43
- nextSlide !== currentSlide && slick.$slides[currentSlide].querySelectorAll('video').forEach(function (video) {
44
- !video.paused && video.pause();
45
- });
46
- }).on("afterChange", function (e, $slick, idx) {
47
- var $first = $thumbs.find(".product-image__thumbs-item:eq(0)");
48
- var size = $thumbs.children().length;
49
- /*$thumbs.find(".slick-current").removeClass("slick-slide slick-current").end().find("[data-thumb-idx=" + idx + "]").addClass("slick-slide slick-current");*/
50
-
51
- if ($slider.data("once_action")) {
52
- var action = $slider.data("once_action");
53
- // lazy load other thumb images
54
- $thumbs.find(".lazy-lazyload").addClass("lazyload");
55
- var invisibleThumbs = 0 - (parseInt($first.css("margin-left"), 10) / 80);
56
- // console.log(action, invisibleThumbs, idx);
57
- if (action == "next" && idx - invisibleThumbs == 6) {
58
- $first.css({ marginLeft: '-' + ((invisibleThumbs + 1) * 80) + 'px' });
59
- }
60
- if (action == "next" && idx == 0) {
61
- $first.css({ marginLeft: '0px' });
62
- }
63
- if (action == "prev" && idx == (invisibleThumbs - 1)) {
64
- $first.css({ marginLeft: '-' + ((invisibleThumbs - 1) * 80) + 'px' });
65
- }
66
- if (action == "prev" && idx == (size - 1)) {
67
- $first.css({ marginLeft: '-' + ((size - 6) * 80) + 'px' });
68
- }
69
- $slider.data("once_action", false);
70
- return;
71
- }
72
- var marginLeft = 0;
73
- if (idx < 6) {
74
- marginLeft = 0;
75
- } else if (idx > (size - 6) && size > 6) {
76
- marginLeft = (size - 6) * 80;
77
- } else {
78
- marginLeft = idx * 80;
79
- }
80
- $first.css({ marginLeft: '-' + marginLeft + 'px' });
81
- });
82
- $slider.find(".d-none").removeClass("d-none");
83
- $slider.find(".product-image__swiper_img").zoom();
84
- $thumbs.on("mouseenter", "[data-thumb-idx]", function (e) {
85
- var idx = e.currentTarget.getAttribute("data-thumb-idx");
86
- $thumbs.find(".slick-current").removeClass("slick-slide slick-current").end().find("[data-thumb-idx=" + idx + "]").addClass("slick-slide slick-current");
87
- });
88
- $thumbs.on("mouseenter", "[data-thumb-idx]", $.debounce(function (e) {
89
- var idx = e.currentTarget.getAttribute("data-thumb-idx");
90
- $slider.find(".slick-list,.slick-track").stop();
91
- $slider.data("once_action", "dummy"); // 不需要计算marginLeft
92
- $slider.slick("slickGoTo", idx, false);
93
- }, 300));
94
- $container.on("click", ".swiper-button-prev,.sep-loaded-slider__button-prev", function () {
95
- var size = $thumbs.children().length;
96
- var cur = $slider.slick('slickCurrentSlide');
97
- var newIdx = cur == 0 ? (size - 1) : (cur - 1);
98
- $slider.data("once_action", "prev").slick("slickGoTo", newIdx, cur == 0);
99
- });
100
- $container.on("click", ".swiper-button-next,.sep-loaded-slider__button-next", function () {
101
- var size = $thumbs.children().length;
102
- var cur = $slider.slick('slickCurrentSlide');
103
- var newIdx = (cur == (size - 1)) ? 0 : cur + 1;
104
- $slider.data("once_action", "next").slick("slickGoTo", newIdx, (cur == (size - 1)));
105
- });
106
-
107
- var isDetail = $slider.parents('[data-section-type="product_detail"]').length;
108
- // track
109
- if (isDetail) {
110
- $slider.on('beforeChange', function () {
111
- $('body').trigger('track', {eventName: 'product_image_slide'})
112
- });
113
- $slider.on('click', '.zoom-img', function(e){
114
- try {
115
- $(e.target).prev('.product-image__swiper_img').data("zoom-toggle") && $('body').trigger('track', {eventName: 'product_image_zoom'});
116
- } catch (error) {}
117
- })
118
- if ("ontouchstart" in document.body) {
119
- $slider.on("touchstart", function (e) {
120
- try {
121
- e.originalEvent.touches.length > 1 && $('body').trigger('track', {eventName: 'product_image_zoom'});
122
- } catch (error) {}
123
- })
124
- }
125
- }
126
- }
127
- // ajax slick should update until modal visible
128
- if (opt.ajax) {
129
- var timer = setInterval(function () {
130
- if ($('#product-select-modal').length && $('#product-select-modal').is(':visible')) {
131
- clearInterval(timer);
132
- initSlider();
133
- }
134
- }, 10);
135
- } else {
136
- initSlider();
137
- }
138
- // 去掉加载过程中的背景
139
- $container.find(".loading_bg").each(function () {
140
- if (this.complete) {
141
- $(this).removeClass("loading_bg");
142
- } else {
143
- $(this).one("load", function () {
144
- $(this).removeClass("loading_bg");
145
- })
146
- }
147
- });
148
- } else {
149
- $slider.find("[data-lazy]").each(function () {
150
- $(this).attr("src", $(this).attr("data-lazy"));
151
- })
152
- }
153
- var variants = opt.product.variants;
154
- var minPriceVariant = variants.reduce(function (prev, cur) { return parseFloat(prev.price) > parseFloat(cur.price) ? cur : prev }, variants[0]);
155
- var maxPriceVariant = variants.reduce(function (prev, cur) { return parseFloat(prev.price) < parseFloat(cur.price) ? cur : prev }, variants[0]);
156
- // 首次拿选择子商品必须从radio中过滤,js 加载前隐藏域的值还没初始化
157
- var selected = opt.product.options.reduce(function (prev, cur, i) { return prev.filter(function (v) { return v['option' + (i + 1)] == $("[name=option" + (i + 1) + "-" + opt.product.id + "]:checked").val() }) }, variants)[0] || {
158
- price: parseFloat(minPriceVariant.price),
159
- price_min: parseFloat(minPriceVariant.price),
160
- price_max: parseFloat(maxPriceVariant.price),
161
- compare_at_price: parseFloat(minPriceVariant.compare_at_price),
162
- off_ratio: parseFloat(minPriceVariant.off_ratio),
163
- sales: opt.product.sales,
164
- available_quantity: 999999,
165
- available: opt.product.available
166
- };
167
- $("#selected_variant_id_" + opt.product.id).val(selected.id || "");
168
- // 兼容
169
- $document.data("djproduct", {
170
- product: opt.product,
171
- selected: selected,
172
- selectedVariants: selected.id ? [selected] : opt.product.variants,
173
- qty: parseInt($("#product_quantity_" + opt.product.id).val(), 10),
174
- element: $container.selector
175
- });
176
- $document.trigger('dj.product.variants.change', $document.data('djproduct'));
177
- $container.data('djproduct', $document.data('djproduct'));
178
-
179
- }
180
- $(function () {
181
- var $document = $(document);
182
- var $body = $(document.body);
183
-
184
- var variantsChange = function () {
185
- // checked
186
- var productData = $(document).data("djproduct");
187
- var variants = productData.product.variants.slice();
188
- var options = productData.product.options;
189
-
190
- var $cb = $("#" + $(this).attr("for"));
191
- // checked -> unchecked
192
- if ($cb.prop("checked")) {
193
- setTimeout(function () {
194
- $cb.prop("checked", false);
195
- }, 10);
196
- }
197
- setTimeout(function () { // 等待checked状态变化
198
- var selectedOpts = [];
199
- $("#product_detail_" + productData.product.id).find('[name^=option]:checked, option[name^=option]:selected').each(function (i, r) {
200
- var indexes = r.id.split("-"); // ["option1","0"]
201
- var optIdx = parseInt(indexes[0].substr(6), 10) - 1;
202
- var valueIdx = parseInt(indexes[1], 10);
203
- selectedOpts.push(indexes[0]);
204
- variants = variants.filter(function (v) { return v[indexes[0]] == options[optIdx].values[valueIdx] });
205
- });
206
- $("#selected_variant_id_" + productData.product.id).val(selectedOpts.length == productData.product.options.length ? variants[0].id : "");
207
- // 重新计算radio disabled状态
208
- $("#product_detail_" + productData.product.id).find('input.product-info__variants_radio:not(:checked),option.product-info__variants_value:not(:selected)').each(function (i, r) {
209
- var indexes = r.id.split("-"); // ["option1","0",'id']
210
- var optIdx = parseInt(indexes[0].substr(6), 10) - 1;
211
- var valueIdx = parseInt(indexes[1], 10);
212
- var tmpVariant = $.extend(true, {}, variants[0]);
213
- tmpVariant[indexes[0]] = options[optIdx].values[valueIdx];
214
- var tmpSelectedOpts = selectedOpts.slice();
215
- tmpSelectedOpts.indexOf(indexes[0]) == -1 && (tmpSelectedOpts.push(indexes[0]));
216
- var disabled = productData.product.variants.filter(function (v) {
217
- return (v.option1 == tmpVariant.option1 || tmpSelectedOpts.indexOf('option1') === -1) && (v.option2 == tmpVariant.option2 || tmpSelectedOpts.indexOf('option2') === -1) && (v.option3 == tmpVariant.option3 || tmpSelectedOpts.indexOf('option3') === -1) && v.available_quantity > 0;
218
- }).length == 0;
219
- $(r).prop("disabled", disabled);
220
- $(r).html($(r).val());
221
- $(r).parent('select').val() && disabled && $(r).html($(r).val() + ' (' + $(r).data('soldout') + ')');
222
- $(r).parent('select').val() && $(r).parent('select').removeClass('tw-text-black tw-opacity-50')
223
- })
224
- var minPriceVariant = variants.reduce(function (prev, cur) { return parseFloat(prev.price) > parseFloat(cur.price) ? cur : prev }, variants[0]);
225
- var maxPriceVariant = variants.reduce(function (prev, cur) { return parseFloat(prev.price) < parseFloat(cur.price) ? cur : prev }, variants[0]);
226
- productData.selected = (selectedOpts.length == productData.product.options.length ? variants[0] : {
227
- price: parseFloat(minPriceVariant.price),
228
- price_min: parseFloat(minPriceVariant.price),
229
- price_max: parseFloat(maxPriceVariant.price),
230
- compare_at_price: parseFloat(minPriceVariant.compare_at_price),
231
- off_ratio: parseFloat(minPriceVariant.off_ratio),
232
- sales: productData.product.sales,
233
- available_quantity: 999999,
234
- available: productData.product.available
235
- });
236
- productData.selectedVariants = variants;
237
- productData.qty = Math.min(parseInt($("#product_quantity_" + productData.product.id).val(), 10), productData.selected.available_quantity);
238
- $(document).data("djproduct", productData);
239
- $(document).trigger('dj.product.variants.change', productData);
240
- // 色卡label
241
- !$cb.prop('disabled') && $cb.parents('.product-info__variants_items').find('#variant_color-label').html($cb.prop("checked") ? ' - ' + $cb.val() : '');
242
-
243
- if (productData.selectedVariants.length === 1) {
244
- // quickview 中不更新url
245
- if ($('#product-select-modal.show').length) return;
246
- window.history.replaceState(null, '', '?' + $.toQuery($.extend($.params(), {
247
- variant: productData.selectedVariants[0].id
248
- })))
249
- }
250
- }, 20);
251
- }
252
- //子商品切换
253
- $body.on("click", ".product-info__variants_value label", function () {
254
- variantsChange.call(this);
255
- }).on('change', '.product-info__variants_items select', function () {
256
- variantsChange.call(this);
257
- });
258
- // +/-
259
- $body.on('click', "[data-click=decrease],[data-click=increase]", function (e) {
260
- var t = $(e.target).attr("data-click");
261
- var productData = $document.data("djproduct");
262
- productData.qty = productData.qty || 1;
263
- productData.qty += (t == "decrease" ? -1 : 1);
264
- $document.data("djproduct", productData);
265
- $document.trigger('dj.product.variants.change', $document.data('djproduct'));
266
- })
267
- // input product_quantity
268
- $body.on('blur', ".product-info__qty_num", function (e) {
269
- var productData = $document.data("djproduct");
270
- var correctedValue = Math.max(Math.min(parseInt($(this).val().replace(/\D/g, "").replace(/^0*/, ""), 10) || 0, productData.selected.available_quantity || productData.product.available_quantity), 1);
271
- productData.qty = parseInt(correctedValue, 10);
272
- $document.data("djproduct", productData);
273
- $document.trigger('dj.product.variants.change', $document.data('djproduct'));
274
-
275
- })
276
-
277
- // slider switch
278
- $document.on('dj.product.variants.change', function (e, data) {
279
- if (!data.selected.image) return;
280
- var $container = $("#product_detail_" + data.product.id);
281
- // 兼容公共卡片
282
- if (!$container.data('life-style')) return;
283
-
284
- var $slider = $container.find('.support-slick').eq(0);
285
- var idx = data.product.images.findIndex(function (row) {
286
- return row.src == data.selected.image.src;
287
- });
288
-
289
- $slider.hasClass('slick-initialized') && $slider.slick('slickGoTo', idx);
290
- });
291
-
292
- // update discount label
293
- $document.on('dj.product.variants.change', function (e, data) {
294
- // 更新折扣标签和优惠金额
295
- var off = window.SHOP_PARAMS.product_lang.off.replace(/\{\s*count\s*\}/, data.selected.off_ratio)
296
- var $productImage = $("#product_detail_" + data.product.id + ' .product-image');
297
- if (data.selected.off_ratio > 0 && data.selected.available) {
298
- var save_html = window.SHOP_PARAMS.product_lang.save_html.replace(/\{\s*saved_amount\s*\}/, (data.selected.compare_at_price - data.selected.price).toFixed(2))
299
- $productImage.find('.product-info__discount-label').html(off).end().find('.product-info__save-label').html(save_html);
300
- $productImage.find('.product-info__label').css('opacity', 1);
301
- } else {
302
- $productImage.find('.product-info__label').css('opacity', 0);
303
- }
304
- });
305
-
306
- // qty section sku
307
- $document.on('dj.product.variants.change', function (e, data) {
308
- $("#product_detail_" + data.product.id + " .product-info__qty_container").html(template("product-info-qty-tpl", { product: $.extend({}, data.product, data.selected, { id: data.product.id }), qty: data.qty }));
309
- $("#product_detail_" + data.product.id + " .product-info__qty_stock")[data.selectedVariants.length > 1 ? "hide" : "show"]();
310
- $("#product_detail_" + data.product.id + " .product-info__header-sku")[data.selectedVariants.length > 1 ? "hide" : "show"]().html(data.selected.sku);
311
- });
312
-
313
- // price section
314
- $document.on('dj.product.variants.change', function (e, data) {
315
- $("#product_detail_" + data.product.id + " .product-info__header_price-wrapper").html(template("product-info-price-wrapper", {
316
- product: data.selected
317
- }));
318
- });
319
-
320
- //描述 tab
321
- $(function(){
322
- $(document).off('change.descTab').on('change.descTab', '.product-info__desc-tab-cb', function(){
323
- var checked = $(this).prop('checked');
324
- var $content = $(this).next();
325
- $(this).parents('.product-info__desc-wrap').toggleClass('is-open', checked);
326
- checked
327
- ? $content.slideDown(300)
328
- : $content.slideUp(300);
329
- })
330
- })
331
-
332
- // 获取自定义参数
333
- function getProperties() {
334
- var productData = $document.data("djproduct");
335
- var properties = {};
336
- var productId = productData.product.id;
337
- var $properties = $(".product-info-" + productId);
338
- var formdata = $properties.serializeArray();
339
- for (var i = 0; i < formdata.length; i++) {
340
- var result = /properties\[(.+)\]/g.exec(formdata[i].name);
341
- if (result && result[1]) {
342
- properties[result[1]] = formdata[i].value;
343
- }
344
- }
345
- var items = $properties.find('.required');
346
- var valid = true;
347
- for (i = 0; i < items.length; i++) {
348
- var $parent = $(items[i]).parents('.line-item-property__field');
349
- $parent.find('.not-empty').remove();
350
- if ($(items[i]).val() == '') {
351
- $(items[i]).addClass('not-empty-field');
352
- $parent.append('<div class="not-empty" style="color: #ea0000;">can not be empty</div>');
353
- valid = false;
354
- } else {
355
- $parent.removeClass('not-empty-field');
356
- }
357
- }
358
- return valid ? properties : false;
359
- }
360
- // add to cart
361
- $(document).on("dj.common.product.atc", function (e, options) {
362
- var properties = options.properties || {};
363
- $.loading.show();
364
- $.post("/api/cart", {
365
- product_id: options.product_id,
366
- variant_id: options.variant_id,
367
- quantity: options.quantity,
368
- properties: properties,
369
- }).always(function (res) {
370
- var data = res.readyState ? res.responseJSON : res;
371
- //addToCart按钮可以选择流程:1)to_cart: 跳到购物车 2)to_checkout: 跳到支付页 3)to_toast:弹提示框,页面不跳转
372
- var process = options.process;
373
- if (data.state === "success") {
374
- $(document.body).trigger("dj.addToCart", {
375
- id: options.product_id,
376
- number: options.quantity,
377
- childrenId: options.variant.id,
378
- item_price: options.variant.price,
379
- name: options.product.title,
380
- type: options.variant.type ? options.variant.type : options.product.type,
381
- properties: properties,
382
- quantity: options.quantity,
383
- variant_id: options.variant.id,
384
- product_id: options.product_id,
385
- product: options.product,
386
- variant: options.variant,
387
- source: options.source,
388
- process: options.process
389
- })
390
-
391
- if (process == 'to_cart') {
392
- $.loading.hide();
393
- location.href = '/cart';
394
- return void 0;
395
- } else if (process == 'to_checkout') {
396
- $.loading.hide();
397
- $(document).trigger("dj.common.product.buy_now", options);
398
- } else if (process == 'toast') {
399
- $.loading.hide();
400
- $.toast.show({ content: window.SHOP_PARAMS.product_lang.added_to_cart_successfully });
401
- } else if (process == 'to_toast') {
402
- // 购物车弹窗
403
- if (window.SHOP_PARAMS.template_type == '13') { $.loading.hide(); }
404
- }
405
- $(document).trigger('dj.common.cart.change')
406
- } else {
407
- $.loading.hide();
408
- $.toast.show({ content: data.message || 'Unknown error', type: 'error' });
409
- }
410
- })
411
-
412
- })
413
- $body.on("click", "[data-click=addToCart]", function (e) {
414
- var properties = getProperties();
415
- if (!properties) return;
416
- var productData = $document.data("djproduct");
417
- var values = $.params("?" + $(e.target).parents(".product-info").serialize());
418
- if (!values.variant_id) {
419
- $.toast.show({ type: 'error', content: window.SHOP_PARAMS.product_lang.select_variant });
420
- return;
421
- }
422
- values.properties = properties;
423
- values.process = (window.SHOP_PARAMS.product_settings || {}).add_to_cart_process;
424
- values.product = productData.product;
425
- values.variant = productData.selected;
426
- values.quantity = productData.qty || 1;
427
- $(document).trigger("dj.common.product.atc", values);
428
- })
429
- // buy now
430
- $(document).on("dj.common.product.buy_now", function (e, options) {
431
- var properties = options.properties || {};
432
- $.loading.show();
433
- $.post('/api/checkout/order', {
434
- line_items: [{
435
- quantity: options.quantity,
436
- variant_id: options.variant_id,
437
- note: '',
438
- properties: properties,
439
- }],
440
- refer_info: {
441
- source: 'buy_now'
442
- }
443
- }, function (ret) {
444
- $.loading.hide();
445
- if (ret.state === 'success') {
446
- return (location.href = '/checkout/' + ret.data.order_token + '?step=contact_information');
447
- } else {
448
- $.toast.show({
449
- content:
450
- {
451
- '30003': "Some items have been removed, please re-order",
452
- 'line_items_variant_withdraw': "Some items have been sold out, please re-order",
453
- 'line_items_variant_sold_out': "Some items are not in stock, please re-order"
454
- }[ret.state] || ret.errors[0] || "Some items information has been updated, please re-order"
455
- });
456
- }
457
-
458
- });
459
-
460
- })
461
- $body.on("click", "[data-click=submit]", function (e) {
462
- var values = $.params("?" + $(e.target).parents(".product-info").serialize());
463
- if (!values.variant_id) {
464
- $.toast.show({ type: 'error', content: window.SHOP_PARAMS.product_lang.select_variant });
465
- return;
466
- }
467
- var properties = getProperties();
468
- if (!properties) return;
469
- values.properties = properties;
470
- $(document).trigger("dj.common.product.buy_now", values);
471
- })
472
-
473
- // quickview
474
- $(document).on('dj.common.product.select', function (e, options) {
475
- // quick view弹窗
476
- var originData = $(document).data('djproduct');
477
- $(document).on('hide.bs.modal', '#product-select-modal', function () {
478
- $(document).data('djproduct', originData);
479
- });
480
- $.loading.show();
481
- var is_select_default_variants = window.SHOP_PARAMS.is_select_default_variants || false;
482
- $.get("/api/products/" + options.id, function (res) {
483
- $.loading.hide();
484
- $('#product-select-modal').remove();
485
- var product = res && res.data && res.data.product;
486
- if (!product) return;
487
- var selectedVariantId = "";
488
- var selectedVariant = "";
489
- var priceMin = 99999999;
490
- var comparePriceMin = 99999999;
491
- var priceMax = 0;
492
- if (is_select_default_variants || product.variants.size == 1) {
493
- for (var i = 0; i < product.variants.length; i++) {
494
- var variant = product.variants[i];
495
- if (variant.available_quantity > 0) {
496
- selectedVariantId = variant.id;
497
- break;
498
- }
499
- }
500
- }
501
- for (var i = 0; i < product.variants.length; i++) {
502
- var variant = product.variants[i];
503
- if (variant.compare_at_price < comparePriceMin) {
504
- comparePriceMin = variant.compare_at_price;
505
- }
506
- if (variant.price < priceMin) {
507
- priceMin = variant.price;
508
- }
509
- if (variant.price > priceMax) {
510
- priceMax = variant.price;
511
- }
512
- if (variant.id == selectedVariantId) {
513
- selectedVariant = variant;
514
- }
515
- }
516
- var initialSlide = 0;
517
- if (selectedVariant && selectedVariant.image && selectedVariant.image.src) {
518
- for (var i = 0; i < product.images.length; i++) {
519
- if (product.images[i] == selectedVariant.image.src ) {
520
- initialSlide = i;
521
- }
522
- }
523
- }
524
- $('body').prepend(template('product-select-wrapper', {product: product, initialSlide: initialSlide, selectedVariantId: selectedVariantId, selectedVariant: selectedVariant, priceMin: +priceMin, comparePriceMin: +comparePriceMin, priceMax: +priceMax}));
525
- if (window.innerWidth <= 768) {
526
- $('#product-select-modal').removeClass("fade");
527
- }
528
- $('#product-select-modal').modal('show');
529
- $("#product-select-modal .product-detail").product_detail({product: product, initialSlide: initialSlide, ajax: true });
530
- $(document).trigger('plugin_currency_update');
531
- });
532
- e.stopPropagation();
533
- e.preventDefault();
534
- return false;
535
- });
536
- // quick view detail url
537
- $document.on('dj.product.variants.change', function (e, data) {
538
- var selectedVariantId = data.selectedVariants.length > 1 ? "" : ((data.selected && data.selected.id) || "");
539
- var $link = $("#product_detail_" + data.product.id + " .product-info__url a");
540
- if (!$link.length) return;
541
- var href = $link.attr("href").replace(/&*variant=[a-z0-9-]*/, "");
542
- $link.attr("href", href + (selectedVariantId ? ((href.indexOf("?") == -1 ? "?" : "&") + "variant=" + selectedVariantId) : ""));
543
- });
544
- });
545
- })(window.jQuery);
546
- // 自定义款式 图片上传
547
- $(function () {
548
- $('.line-item-property__field input[type="file"]').val('');
549
- $(document).on('change', '.line-item-property__field input[type="file"]', function () {
550
- var id = $(this).attr('id');
551
- var file = $(this)[0].files[0];
552
- file || $('img[data-name="' + id + '"]').attr('src', "").hide();
553
- if (id && file) {
554
- if (file.size > (parseInt($("#" + id).data("max-size"), 10) || 10485760)) {
555
- $('[data-name="' + id + '"],#' + id).val("");
556
- $('img[data-name="' + id + '"]').attr('src', "").hide();
557
- return $.toast.show({ content: $("#" + id).data("max-size-msg") || "File size exceeds 10MB, please change to a smaller one" });
558
- }
559
- uploadImage(id, file);
560
- } else {
561
- $('[data-name="' + id + '"]').val("");
562
- }
563
- });
564
- /**
565
- * upload image
566
- */
567
- function uploadImage(id, file) {
568
- var objectName = window.SHOP_PARAMS.shop_id + "/" + (new Date()).getTime() + "." + file.name.split(".").pop();
569
- $("#" + id).css({ "pointer-events": "none" });
570
- $.getJSON("/api/file/s3-sign?key=" + objectName).then(function (signData) {
571
- fetch(signData.write_host, {
572
- method: 'put',
573
- mode: 'cors',
574
- body: file,
575
- headers: { "Content-Type": file.type }
576
- }).then(function () {
577
- var url = signData.read_host + objectName;
578
- $("#" + id).css({ "pointer-events": "" });
579
- $('[data-name="' + id + '"]').val(url);
580
- $('img[data-name="' + id + '"]').attr('src', url).show();
581
- // 修改为已上传
582
- $('[data-name="' + id + '"]').parent('label');
583
- $('[data-name="' + id + '"]').parent('.line-item-property__field').find('.not-empty').remove();
584
- }).catch(function () {
585
- $("#" + id).css({ "pointer-events": "" });
586
- $.toast.show({ content: $("#" + id).data("error-msg") || "Upload error, please try again" });
587
- $('[data-name="' + id + '"],#' + id).val("");
588
- $('img[data-name="' + id + '"]').attr('src', "").hide();
589
- });
590
- });
591
- }
592
-
593
- $(document).on('click', '.line-item-property__field .item', function () {
594
- $(this).parents('.line-item-property__field').find('.item').removeClass('selected');
595
- $(this).parents('.line-item-property__field').find('.item_value').html($(this).find('input').val());
596
- $(this).addClass('selected');
597
- })
598
-
599
- $(document).on('blur', '.line-item-property__field .required', function () {
600
- if ($(this).val()) {
601
- var $parent = $(this).parents('.line-item-property__field');
602
- $parent.find('.required').removeClass('not-empty-field');
603
- $parent.find('.not-empty').remove();
604
- }
605
- })
606
- $('.line-item-property__field').each(function () {
607
- $(this).find('.item:first').click();
608
- })
609
- });
610
- /** new product detail ends */
611
-
612
- $(function(){
613
- if(window.SHOP_PARAMS && window.SHOP_PARAMS.template_type == '1'){
614
- $(document).on(
615
- 'scroll.view_page_tail',
616
- $.throttle(
617
- function () {
618
- try {
619
- var scrollTop = $(document).scrollTop(); //滚动条距离顶部的高度
620
- var clientHeight = $(window).height(); //当前可视的页面高度
621
- var scrollHeight = $(document).height(); //当前页面的总高度
622
- //判断是否滑动到底部
623
- if(scrollHeight - clientHeight <= scrollTop + 10){
624
- $(document.body).trigger('track', { eventName: 'view_page_tail' })
625
- $(document).off('scroll.view_page_tail')
626
- }
627
- } catch (error) {}
628
- },
629
- 200,
630
- 50
631
- )
632
- );
633
- }
634
- });