shoplazza-cli 0.0.1

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 (181) hide show
  1. package/.editorconfig +28 -0
  2. package/.prettierrc +9 -0
  3. package/LICENSE +21 -0
  4. package/README.md +208 -0
  5. package/bin/shoplazza +117 -0
  6. package/fixtures/assets/blog.scss +74 -0
  7. package/fixtures/assets/cart_modal.scss +450 -0
  8. package/fixtures/assets/collection_detail.js +234 -0
  9. package/fixtures/assets/collection_detail.scss +345 -0
  10. package/fixtures/assets/collection_list.scss +11 -0
  11. package/fixtures/assets/collection_slider.scss +169 -0
  12. package/fixtures/assets/feature_columns.scss +26 -0
  13. package/fixtures/assets/feature_product.scss +109 -0
  14. package/fixtures/assets/footer.js +58 -0
  15. package/fixtures/assets/footer.scss +337 -0
  16. package/fixtures/assets/four_images.scss +29 -0
  17. package/fixtures/assets/gallery.scss +55 -0
  18. package/fixtures/assets/header.js +178 -0
  19. package/fixtures/assets/header.scss +929 -0
  20. package/fixtures/assets/image_text.scss +72 -0
  21. package/fixtures/assets/logo_bar.scss +11 -0
  22. package/fixtures/assets/newsletter.scss +90 -0
  23. package/fixtures/assets/not_found.scss +39 -0
  24. package/fixtures/assets/page_detail.scss +16 -0
  25. package/fixtures/assets/pagination.scss +150 -0
  26. package/fixtures/assets/postcss.config.js +6 -0
  27. package/fixtures/assets/product_description.scss +88 -0
  28. package/fixtures/assets/product_detail.js +634 -0
  29. package/fixtures/assets/product_detail.scss +1106 -0
  30. package/fixtures/assets/relative_product.scss +45 -0
  31. package/fixtures/assets/reviews.scss +70 -0
  32. package/fixtures/assets/rich_text.scss +71 -0
  33. package/fixtures/assets/search.js +87 -0
  34. package/fixtures/assets/search.scss +67 -0
  35. package/fixtures/assets/slide.scss +51 -0
  36. package/fixtures/assets/slider.scss +141 -0
  37. package/fixtures/assets/theme.css +976 -0
  38. package/fixtures/assets/theme.scss +1100 -0
  39. package/fixtures/assets/three_images.scss +20 -0
  40. package/fixtures/assets/tools.scss +23 -0
  41. package/fixtures/assets/two_images.scss +24 -0
  42. package/fixtures/assets/video.scss +45 -0
  43. package/fixtures/assets/video_text.scss +63 -0
  44. package/fixtures/config/settings_data.json +107 -0
  45. package/fixtures/config/settings_schema.json +690 -0
  46. package/fixtures/layout/theme.liquid +76 -0
  47. package/fixtures/locales/ar-SA.json +212 -0
  48. package/fixtures/locales/de-DE.json +290 -0
  49. package/fixtures/locales/en-US.json +290 -0
  50. package/fixtures/locales/es-ES.json +290 -0
  51. package/fixtures/locales/fr-FR.json +290 -0
  52. package/fixtures/locales/id-ID.json +212 -0
  53. package/fixtures/locales/it-IT.json +212 -0
  54. package/fixtures/locales/ja-JP.json +289 -0
  55. package/fixtures/locales/ko-KR.json +290 -0
  56. package/fixtures/locales/nl-NL.json +290 -0
  57. package/fixtures/locales/pl-PL.json +290 -0
  58. package/fixtures/locales/pt-PT.json +212 -0
  59. package/fixtures/locales/ru-RU.json +212 -0
  60. package/fixtures/locales/th-TH.json +212 -0
  61. package/fixtures/locales/zh-CN.json +290 -0
  62. package/fixtures/locales/zh-TW.json +290 -0
  63. package/fixtures/sections/apps.liquid +47 -0
  64. package/fixtures/sections/blog.liquid +137 -0
  65. package/fixtures/sections/collection_desc.liquid +34 -0
  66. package/fixtures/sections/collection_detail.liquid +436 -0
  67. package/fixtures/sections/collection_image.liquid +104 -0
  68. package/fixtures/sections/collection_list.liquid +161 -0
  69. package/fixtures/sections/collection_name.liquid +34 -0
  70. package/fixtures/sections/collection_slider.liquid +330 -0
  71. package/fixtures/sections/feature_columns.liquid +275 -0
  72. package/fixtures/sections/feature_product.liquid +227 -0
  73. package/fixtures/sections/footer.liquid +488 -0
  74. package/fixtures/sections/four_images.liquid +160 -0
  75. package/fixtures/sections/gallery.liquid +258 -0
  76. package/fixtures/sections/header.liquid +1157 -0
  77. package/fixtures/sections/html.liquid +40 -0
  78. package/fixtures/sections/image_text.liquid +350 -0
  79. package/fixtures/sections/instagram_plus.liquid +393 -0
  80. package/fixtures/sections/logo_bar.liquid +183 -0
  81. package/fixtures/sections/newsletter.liquid +225 -0
  82. package/fixtures/sections/not_found.liquid +39 -0
  83. package/fixtures/sections/overlay_image.liquid +648 -0
  84. package/fixtures/sections/page_detail.liquid +39 -0
  85. package/fixtures/sections/photo_collection.liquid +433 -0
  86. package/fixtures/sections/product_description.liquid +208 -0
  87. package/fixtures/sections/product_detail.liquid +611 -0
  88. package/fixtures/sections/products.liquid +216 -0
  89. package/fixtures/sections/relative_product.liquid +121 -0
  90. package/fixtures/sections/reviews.liquid +115 -0
  91. package/fixtures/sections/rich_text.liquid +157 -0
  92. package/fixtures/sections/search.liquid +163 -0
  93. package/fixtures/sections/slide.liquid +719 -0
  94. package/fixtures/sections/three_images.liquid +157 -0
  95. package/fixtures/sections/two_images.liquid +125 -0
  96. package/fixtures/sections/video.liquid +95 -0
  97. package/fixtures/sections/video_text.liquid +128 -0
  98. package/fixtures/snippets/bgset.liquid +21 -0
  99. package/fixtures/snippets/card_title.liquid +8 -0
  100. package/fixtures/snippets/cart_modal.liquid +74 -0
  101. package/fixtures/snippets/collection.liquid +77 -0
  102. package/fixtures/snippets/collection_filter_modal.liquid +56 -0
  103. package/fixtures/snippets/default_image_4.liquid +14 -0
  104. package/fixtures/snippets/default_image_6.liquid +18 -0
  105. package/fixtures/snippets/default_image_8.liquid +23 -0
  106. package/fixtures/snippets/four_images_item.liquid +8 -0
  107. package/fixtures/snippets/header_ads.liquid +95 -0
  108. package/fixtures/snippets/hero_image.liquid +94 -0
  109. package/fixtures/snippets/icon_video_play_large.liquid +1 -0
  110. package/fixtures/snippets/icon_video_play_medium.liquid +4 -0
  111. package/fixtures/snippets/icon_video_play_small.liquid +4 -0
  112. package/fixtures/snippets/lazyimg.liquid +22 -0
  113. package/fixtures/snippets/lazyimg_art.liquid +36 -0
  114. package/fixtures/snippets/lazysizes.liquid +41 -0
  115. package/fixtures/snippets/link.liquid +2 -0
  116. package/fixtures/snippets/pagination.liquid +48 -0
  117. package/fixtures/snippets/product.liquid +126 -0
  118. package/fixtures/snippets/product_art_tpl.liquid +152 -0
  119. package/fixtures/snippets/product_info_body.liquid +337 -0
  120. package/fixtures/snippets/product_info_tpl.liquid +423 -0
  121. package/fixtures/snippets/product_label.liquid +46 -0
  122. package/fixtures/snippets/settings.liquid +295 -0
  123. package/fixtures/snippets/social-meta-tags.liquid +106 -0
  124. package/fixtures/snippets/video_html.liquid +11 -0
  125. package/fixtures/snippets/video_source.liquid +98 -0
  126. package/fixtures/snippets/video_thumb_icon.liquid +2 -0
  127. package/fixtures/templates/404.liquid +1 -0
  128. package/fixtures/templates/collection.liquid +92 -0
  129. package/fixtures/templates/index.liquid +206 -0
  130. package/fixtures/templates/page.liquid +1 -0
  131. package/fixtures/templates/product.liquid +99 -0
  132. package/fixtures/templates/search.liquid +1 -0
  133. package/jest.config.js +192 -0
  134. package/lib/__tests__/log.test.js +15 -0
  135. package/lib/__tests__/utils.test.js +69 -0
  136. package/lib/auth/__mocks__/getCode.js +7 -0
  137. package/lib/auth/__mocks__/index.js +0 -0
  138. package/lib/auth/child.js +23 -0
  139. package/lib/auth/getCode.js +35 -0
  140. package/lib/auth/index.js +91 -0
  141. package/lib/commands/__tests__/login.test.js +77 -0
  142. package/lib/commands/__tests__/logout.test.js +29 -0
  143. package/lib/commands/__tests__/store.test.js +44 -0
  144. package/lib/commands/__tests__/switch.test.js +45 -0
  145. package/lib/commands/login.js +99 -0
  146. package/lib/commands/logout.js +14 -0
  147. package/lib/commands/store.js +14 -0
  148. package/lib/commands/switch.js +52 -0
  149. package/lib/commands/theme/__tests__/delete.test.js +49 -0
  150. package/lib/commands/theme/__tests__/init.test.js +21 -0
  151. package/lib/commands/theme/__tests__/list.test.js +80 -0
  152. package/lib/commands/theme/__tests__/package.test.js +17 -0
  153. package/lib/commands/theme/__tests__/publish.test.js +61 -0
  154. package/lib/commands/theme/__tests__/pull.test.js +69 -0
  155. package/lib/commands/theme/__tests__/push.test.js +63 -0
  156. package/lib/commands/theme/__tests__/serve.test.js +107 -0
  157. package/lib/commands/theme/delete.js +64 -0
  158. package/lib/commands/theme/init.js +51 -0
  159. package/lib/commands/theme/list.js +28 -0
  160. package/lib/commands/theme/package.js +37 -0
  161. package/lib/commands/theme/publish.js +56 -0
  162. package/lib/commands/theme/pull.js +62 -0
  163. package/lib/commands/theme/push.js +106 -0
  164. package/lib/commands/theme/serve.js +153 -0
  165. package/lib/commands/theme/share.js +20 -0
  166. package/lib/commands/version.js +6 -0
  167. package/lib/config.js +5 -0
  168. package/lib/db/__mocks__/index.js +9 -0
  169. package/lib/db/__tests__/analytics.test.js +19 -0
  170. package/lib/db/__tests__/user.test.js +20 -0
  171. package/lib/db/analytics.js +48 -0
  172. package/lib/db/index.js +9 -0
  173. package/lib/db/user.js +68 -0
  174. package/lib/log.js +13 -0
  175. package/lib/openAPI/__mocks__/index.js +20 -0
  176. package/lib/openAPI/api.js +76 -0
  177. package/lib/openAPI/index.js +46 -0
  178. package/lib/report.js +37 -0
  179. package/lib/tracing.js +50 -0
  180. package/lib/utils.js +48 -0
  181. package/package.json +54 -0
@@ -0,0 +1,104 @@
1
+ {% if collection.image.src %}
2
+ {% assign cover_width = section.settings.cover_width | default: 'auto' %}
3
+ <style>
4
+ .collection__cover{
5
+ padding-bottom: {{section.settings.md_img_height}}px;
6
+ }
7
+ @media (min-width: 767.98px) {
8
+ .collection__cover{
9
+ padding-bottom: {{section.settings.pc_img_height}}px;
10
+ }
11
+ }
12
+ </style>
13
+ <div class="{% if cover_width == 'auto' %}
14
+ container container-gap collection__container{% endif %}">
15
+ <div {% if cover_width == 'auto' %}class="row"{% endif %}>
16
+ <div class="{% if cover_width == 'auto' %}col-12{% endif %} common__img-wrapper_lazy collection__cover">
17
+ {% include 'lazyimg',
18
+ src: collection.image.src,
19
+ style: "width: 100%;object-fit: cover;",
20
+ alt: collection.image.alt | default: collection.title
21
+ %}
22
+ </div>
23
+ </div>
24
+ </div>
25
+ {% endif %}
26
+
27
+ {% schema %}
28
+ {
29
+ "name": "collection_image",
30
+ "templates": ["collection"],
31
+ "limit": 1,
32
+ "settings": [
33
+ {
34
+ "type": "range",
35
+ "id": "pc_img_height",
36
+ "step": 10,
37
+ "max": 600,
38
+ "min": 0,
39
+ "label": {
40
+ "en-US": "Desktop image heigh",
41
+ "zh-CN": "PC端封面高度"
42
+ },
43
+ "default": 450,
44
+ "unit": "px"
45
+ },
46
+ {
47
+ "type": "range",
48
+ "id": "md_img_height",
49
+ "step": 10,
50
+ "max": 240,
51
+ "min": 0,
52
+ "label": {
53
+ "en-US": "Mobile image heigh",
54
+ "zh-CN": "移动端封面高度"
55
+ },
56
+ "default": 200,
57
+ "unit": "px"
58
+ },
59
+ {
60
+ "type": "select",
61
+ "id": "cover_width",
62
+ "label": {
63
+ "en-US": "Collection cover width",
64
+ "zh-CN": "专辑封面宽度"
65
+ },
66
+ "options": [
67
+ {
68
+ "value": "auto",
69
+ "label": {
70
+ "zh-CN": "两边留白",
71
+ "en-US": "Leave blank on both sides"
72
+ }
73
+ },
74
+ {
75
+ "value": "full",
76
+ "label": {
77
+ "en-US": "Full screen",
78
+ "zh-CN": "铺满全屏"
79
+ }
80
+ }
81
+ ],
82
+ "default": "auto"
83
+ }
84
+ ],
85
+ "presets": [
86
+ {
87
+ "name": "collection_image",
88
+ "cname": {
89
+ "en-US": "Collection image",
90
+ "zh-CN": "专辑封面"
91
+ },
92
+ "category": {
93
+ "en-US": "Page",
94
+ "zh-CN": "页面"
95
+ },
96
+ "ccategory": {
97
+ "en-US": "Page",
98
+ "zh-CN": "页面"
99
+ },
100
+ "display": true
101
+ }
102
+ ]
103
+ }
104
+ {% endschema %}
@@ -0,0 +1,161 @@
1
+ {% use 'collection_list.css' %}
2
+ <div class="container container-gap">{% comment %} 卡片标题 {% endcomment %}
3
+ {% if section.settings.name %}
4
+ {% include 'card_title', title: section.settings.name %}
5
+ {% endif %}
6
+
7
+ {% assign grid = section.settings.grid %}
8
+
9
+ {% case grid %}
10
+ {% when 2 %}
11
+ {% assign colMd="col-md-6"%}
12
+ {% assign col="col-12"%}
13
+ {% when 3 %}
14
+ {% assign colMd="col-md-4"%}
15
+ {% assign col="col-6"%}
16
+ {% when 4 %}
17
+ {% assign colMd="col-md-3"%}
18
+ {% assign col="col-6"%}
19
+ {% when 5 %}
20
+ {% assign colMd="col-md-2_4"%}
21
+ {% assign col="col-6"%}
22
+ {% else %}
23
+ {% assign colMd="col-md-3"%}
24
+ {% assign col="col-6"%}
25
+ {% endcase %}
26
+
27
+ <div class="row common__product-row collection_list_gap">
28
+ {% comment %} 渲染C端节点 {% endcomment %}
29
+ {% for block in section.blocks %}
30
+ {% include 'default_image_8' %}
31
+ <div class="{{col}} {{colMd}} common__product-gap">
32
+ {% include 'collection', collection: collections[block.settings.collection.id], defaultImage, imgSize: '500x' %}
33
+ </div>
34
+ {% endfor %}
35
+ {% comment %} 补充模拟数据 {% endcomment %}
36
+ {% if shop.env == 1 and section.blocks.size == 0 %}
37
+ {% for block in (1..4) %}
38
+ <div class="col-6 col-md-3 common__product-gap">
39
+ {% include 'collection', collection: default_collection %}
40
+ </div>
41
+ {% endfor %}
42
+ {% endif %}
43
+ </div>
44
+ </div>
45
+ <style>
46
+ [data-section-id='{{section.id}}'] .common__mask_title::after {
47
+ {% assign titleFont = settings.skin_title_font_family %}
48
+ font-family: {{titleFont.family}},{{titleFont.fallback_families}};
49
+ font-style:{{titleFont.style}};
50
+ font-weight:{{titleFont.weight}};
51
+ color: {{section.settings.collection_title_color | default: '#ffffff'}};
52
+ }
53
+ </style>
54
+
55
+
56
+ {% schema %}
57
+ {
58
+ "name": "collection_list",
59
+ "max_blocks": 12,
60
+ "settings": [
61
+ {
62
+ "type": "text",
63
+ "id": "name",
64
+ "label": {
65
+ "en-US": "Heading",
66
+ "zh-CN": "标题"
67
+ },
68
+ "default": "Collection list",
69
+ "placeholder": "Collection list"
70
+ },
71
+ {
72
+ "type": "range",
73
+ "label": {
74
+ "zh-CN": "PC每排专辑数",
75
+ "en-US": "Show collections per row on desktop"
76
+ },
77
+ "id": "grid",
78
+ "min": 2,
79
+ "max": 5,
80
+ "step": 1,
81
+ "default": 3
82
+ },
83
+ {
84
+ "type": "color",
85
+ "id": "collection_title_color",
86
+ "default": "#ffffff",
87
+ "label": {
88
+ "zh-CN": "专辑名称颜色",
89
+ "en-US": "Text color"
90
+ }
91
+ },
92
+ {
93
+ "type": "header",
94
+ "content": {
95
+ "en-US": "Add collection",
96
+ "zh-CN": "添加专辑"
97
+ }
98
+ }
99
+ ],
100
+ "blocks": [
101
+ {
102
+ "type": "collection",
103
+ "name": {
104
+ "en-US": "Collection",
105
+ "zh-CN": "专辑"
106
+ },
107
+ "settings": [
108
+ {
109
+ "type": "collection",
110
+ "id": "collection",
111
+ "label": {
112
+ "en-US": "Collection",
113
+ "zh-CN": "专辑"
114
+ }
115
+ }
116
+ ]
117
+ }
118
+ ],
119
+ "presets": [
120
+ {
121
+ "name": "collection_list",
122
+ "cname": {
123
+ "en-US": "Collection list",
124
+ "zh-CN": "专辑列表"
125
+ },
126
+ "category": {
127
+ "en-US": "Product",
128
+ "zh-CN": "商品"
129
+ },
130
+ "ccategory": {
131
+ "en-US": "Product",
132
+ "zh-CN": "商品"
133
+ },
134
+ "display": true,
135
+ "blocks": [
136
+ {
137
+ "type": "collection",
138
+ "name": "Collection",
139
+ "settings": {
140
+ "collection": null
141
+ }
142
+ },
143
+ {
144
+ "type": "collection",
145
+ "name": "Collection",
146
+ "settings": {
147
+ "collection": null
148
+ }
149
+ },
150
+ {
151
+ "type": "collection",
152
+ "name": "Collection",
153
+ "settings": {
154
+ "collection": null
155
+ }
156
+ }
157
+ ]
158
+ }
159
+ ]
160
+ }
161
+ {% endschema %}
@@ -0,0 +1,34 @@
1
+ {% if collection.title %}
2
+ <div class="container container-gap collection__container">
3
+ <div class="row">
4
+ <div class="collection__title dj_skin_title_font col-12">{{collection.title}}</div>
5
+ </div>
6
+ </div>
7
+ {% endif %}
8
+
9
+ {% schema %}
10
+ {
11
+ "name": "collection_name",
12
+ "templates": ["collection"],
13
+ "limit": 1,
14
+ "settings": [],
15
+ "presets": [
16
+ {
17
+ "name": "collection_name",
18
+ "cname": {
19
+ "en-US": "Collection name",
20
+ "zh-CN": "专辑名称"
21
+ },
22
+ "category": {
23
+ "en-US": "Page",
24
+ "zh-CN": "页面"
25
+ },
26
+ "ccategory": {
27
+ "en-US": "Page",
28
+ "zh-CN": "页面"
29
+ },
30
+ "display": true
31
+ }
32
+ ]
33
+ }
34
+ {% endschema %}
@@ -0,0 +1,330 @@
1
+ {% use 'collection_slider.css' %}
2
+
3
+ <style>
4
+ .card-{{section.id}}.collection_slider_bg {
5
+ background: {{section.settings.background}};
6
+ }
7
+ .card-{{section.id}} .collection_slider_modal-bg {
8
+ background: {{section.settings.modal_bg}};
9
+ }
10
+ .card-{{section.id}} .collection_slider_text {
11
+ color: {{section.settings.text_color}};
12
+ }
13
+ .card-{{section.id}} .collection_slider_switch_btn {
14
+ color: {{section.settings.switch_btn | default: '#000000'}};
15
+ }
16
+ </style>
17
+ {% assign collection_id = section.settings.collection.id %}
18
+ {% assign products = collections[collection_id].products %}
19
+ {% assign count = section.settings.count %}
20
+ {% if products.size > 0 and products.size <= count %}
21
+ {% assign count = products.size %}
22
+ {% endif %}
23
+ {% assign is_view_all = section.settings.is_view_all | default: false %}
24
+ {% assign align_text = section.settings.align_text | default: left %}
25
+ {% if products.size > 0 or shop.env == 1 %}
26
+ <div class="collection_slider card-{{section.id}} container container-gap collection_slider_bg">
27
+ {% if section.settings.title != blank %}
28
+ <h1 class="collection_slider__title collection_slider_title dj_skin_title">{{section.settings.title | strip_html}}</h1>
29
+ {% endif %}
30
+ <div class="collection_slider__outer">
31
+ <div class="collection_slider__wrapper">
32
+ {% for i in (1..count) %}
33
+ {% assign i = i | minus: 1 %}
34
+ {% assign product = products[i] | default: default_product %}
35
+ {% if section.settings.image_height == "large" %}
36
+ {% assign paddingBottom = '153%' %}
37
+ {% assign aspect_ratio = 1.53 %}
38
+ {% elsif section.settings.image_height == "medium" %}
39
+ {% assign paddingBottom = '123%' %}
40
+ {% assign aspect_ratio = 1.23 %}
41
+ {% elsif section.settings.image_height == "auto" %}
42
+ {% assign paddingBottom = product.image.height | image_padding_bottom : product.image.width, 'unlimit' %}
43
+ {% assign aspect_ratio = product.image.aspect_ratio %}
44
+ {% else %}
45
+ {% assign paddingBottom = '100%' %}
46
+ {% assign aspect_ratio = 1 %}
47
+ {% endif %}
48
+ {% if product.published %}
49
+ <a class="collection_slider__item" href="{{product.url}}">
50
+ <div class="w-100 position-relative" style="padding-bottom: {{ paddingBottom }};">
51
+ {% assign product_aspect_ratio = product.image.height | divided_by: product.image.width %}
52
+ {% if product_aspect_ratio > aspect_ratio %}
53
+ {% assign class = 'collection_slider__image position-absolute m-auto' | append: ' h-100' %}
54
+ {% else %}
55
+ {% assign class = 'collection_slider__image position-absolute m-auto' | append: ' w-100' %}
56
+ {% endif %}
57
+ {% include 'lazyimg',
58
+ src: product.image.src,
59
+ class: class,
60
+ %}
61
+ </div>
62
+ <div class="collection_slider__info collection_slider_modal-bg collection_slider_text {% if align_text == 'center' %} text-center {% endif %}">
63
+ {% if product.title %}
64
+ <h2 class="collection_slider__info-title two_line_text_truncate collection_slider_text">
65
+ {{product.title}}
66
+ </h2>
67
+ {% endif %}
68
+ {% if product.brief %}
69
+ <p class="collection_slider__info-brief text-truncate">
70
+ {{product.brief}}
71
+ </p>
72
+ {% endif %}
73
+ {% if product.price %}
74
+ <div class="dj_skin_product_detail_price collection_slider__info-price money" {% if align_text == 'center' %}style="left:50%;transform: translate(-50%);"{% endif %} >
75
+ {{product.price | money_with_symbol}}
76
+ </div>
77
+ {% endif %}
78
+ </div>
79
+ </a>
80
+ {% endif %}
81
+ {% endfor %}
82
+ {% if is_view_all %}
83
+ <div class="collection_slider__item collection_slider__mobile">
84
+ <a {% if collections[collection_id].url != blank %}
85
+ href="{{collections[collection_id].url}}"
86
+ {% endif %}
87
+ class="collection_slider__view-mobile btn-primary">
88
+ {{ 'i18n.general.view.view_all' | t }}
89
+ </a>
90
+ </div>
91
+ {% endif %}
92
+ </div>
93
+ {% if products.size > 4 %}
94
+ <div class="collection_slider__pagination collection_slider__pagination-prev action-prev done">
95
+ <i class="sep-font sep-font-seemore collection_slider_switch_btn"></i>
96
+ </div>
97
+ <div class="collection_slider__pagination collection_slider__pagination-next action-next">
98
+ <i class="sep-font sep-font-back collection_slider_switch_btn"></i>
99
+ </div>
100
+ {% endif %}
101
+ </div>
102
+ {% if is_view_all %}
103
+ <div class="collection_slider__view collection_slider__pc ">
104
+ <a {% if collections[collection_id].url != blank %}
105
+ href="{{collections[collection_id].url}}"
106
+ {% endif %}
107
+ class="collection_slider__view-btn btn-primary">
108
+ {{ 'i18n.general.view.view_all' | t }}
109
+ </a>
110
+ </div>
111
+ {% endif %}
112
+ </div>
113
+
114
+ {% javascript %}
115
+ $(function () {
116
+ var $section = $('[data-section-id=' + {{section.id}} + ']');
117
+ var $container = $section.find('.collection_slider__wrapper');
118
+ $(document).on('click', '[data-section-id=' + {{section.id}} + '] .collection_slider__pagination', function () {
119
+ var distance = $('[data-section-id=' + {{section.id}} + '] .collection_slider__wrapper > .collection_slider__item:first').outerWidth() + 24;
120
+ if($(this).hasClass('collection_slider__pagination-prev')){
121
+ $container.stop().animate({
122
+ scrollLeft: $container.scrollLeft() - distance*4
123
+ }, {
124
+ duration: "150",
125
+ easing: "linear"
126
+ }
127
+ );
128
+ return
129
+ }
130
+ if($(this).hasClass('collection_slider__pagination-next')){
131
+ $container.stop().animate({
132
+ scrollLeft: $container.scrollLeft() + distance*4
133
+ }, {
134
+ duration: "150",
135
+ easing: "linear"
136
+ }
137
+ );
138
+ return
139
+
140
+ }
141
+ })
142
+ $container.scroll($.throttle(function () {
143
+ $section.find('.collection_slider__pagination').removeClass('done');
144
+ if ($container[0].scrollWidth - ($container.width() + $container.scrollLeft()) <= 5) { // 最右边
145
+ $section.find('.collection_slider__pagination-next').addClass('done');
146
+ } else if ($container.scrollLeft() <= 5) { // 最左边
147
+ $section.find('.collection_slider__pagination-prev').addClass('done');
148
+ }
149
+ }, 100))
150
+ })
151
+ {% endjavascript %}
152
+
153
+ {% endif %}
154
+
155
+ {% schema %}
156
+ {
157
+ "name": "collection_slider",
158
+ "settings": [
159
+ {
160
+ "type": "collection",
161
+ "id": "collection",
162
+ "label": {
163
+ "zh-CN": "专辑",
164
+ "en-US": "Collection"
165
+ },
166
+ "info": {
167
+ "zh-CN": "建议添加5个商品以上的专辑",
168
+ "en-US": "Add collection with more than 5 products"
169
+ }
170
+ },
171
+ {
172
+ "type": "paragraph",
173
+ "content": {
174
+ "zh-CN": "建议添加5个商品以上的专辑",
175
+ "en-US": "Recommend to add collections contain more than 5 products"
176
+ }
177
+ },
178
+ {
179
+ "type": "range",
180
+ "id": "count",
181
+ "step": 1,
182
+ "max": 8,
183
+ "min": 5,
184
+ "label": {
185
+ "zh-CN": "商品展示数量",
186
+ "en-US": "Show number of products"
187
+ },
188
+ "default": 8
189
+ },
190
+ {
191
+ "type": "text",
192
+ "id": "title",
193
+ "label": {
194
+ "en-US": "Heading",
195
+ "zh-CN": "标题"
196
+ },
197
+ "default": "Collection List",
198
+ "placeholder": "Collection List"
199
+ },
200
+ {
201
+ "type": "select",
202
+ "id": "image_height",
203
+ "default": "small",
204
+ "label": {
205
+ "zh-CN": "图片高度",
206
+ "en-US": "Image height"
207
+ },
208
+ "options": [
209
+ {
210
+ "label": {
211
+ "zh-CN": "大",
212
+ "en-US": "Large"
213
+ },
214
+ "value": "large"
215
+ },
216
+ {
217
+ "label": {
218
+ "zh-CN": "中",
219
+ "en-US": "Medium"
220
+ },
221
+ "value": "medium"
222
+ },
223
+ {
224
+ "label": {
225
+ "zh-CN": "小",
226
+ "en-US": "Small"
227
+ },
228
+ "value": "small"
229
+ },
230
+ {
231
+ "value": "auto",
232
+ "label": {
233
+ "zh-CN": "原始比例",
234
+ "en-US": "Nature"
235
+ }
236
+ }
237
+ ]
238
+ },
239
+ {
240
+ "type": "select",
241
+ "id": "align_text",
242
+ "label": {
243
+ "en-US": "Text alignment",
244
+ "zh-CN": "文字对齐方式"
245
+ },
246
+ "options": [
247
+ {
248
+ "value": "left",
249
+ "label": {
250
+ "en-US": "Text left",
251
+ "zh-CN": "居左"
252
+ }
253
+ },
254
+ {
255
+ "value": "center",
256
+ "label": {
257
+ "en-US": "Text center",
258
+ "zh-CN": "居中"
259
+ }
260
+ }
261
+ ],
262
+ "default": "left"
263
+ },
264
+ {
265
+ "type": "color",
266
+ "id": "text_color",
267
+ "default": "#FFFFFF",
268
+ "label": {
269
+ "zh-CN": "标题&商品文案",
270
+ "en-US": "Title & Description of product"
271
+ }
272
+ },
273
+ {
274
+ "type": "color",
275
+ "id": "modal_bg",
276
+ "default": "#000000",
277
+ "label": {
278
+ "zh-CN": "模块背景",
279
+ "en-US": "Section background"
280
+ }
281
+ },
282
+ {
283
+ "type": "color",
284
+ "id": "switch_btn",
285
+ "default": "#000000",
286
+ "label": {
287
+ "en-US": "Switch button",
288
+ "zh-CN": "切换按钮"
289
+ }
290
+ },
291
+ {
292
+ "type": "color",
293
+ "id": "background",
294
+ "default": "#FFFFFF",
295
+ "label": {
296
+ "en-US": "Card background",
297
+ "zh-CN": "卡片背景"
298
+ }
299
+ },
300
+ {
301
+ "type": "checkbox",
302
+ "id": "is_view_all",
303
+ "default": false,
304
+ "label": {
305
+ "zh-CN": "显示“View all”",
306
+ "en-US": "Show \"View all\""
307
+ }
308
+ }
309
+ ],
310
+ "presets": [
311
+ {
312
+ "name": "collection_slider",
313
+ "cname": {
314
+ "en-US": "Product switch",
315
+ "zh-CN": "商品切换"
316
+ },
317
+ "category": {
318
+ "en-US": "Product",
319
+ "zh-CN": "商品"
320
+ },
321
+ "ccategory": {
322
+ "en-US": "Product",
323
+ "zh-CN": "商品"
324
+ },
325
+ "icon": "oss/operation/cc0e2854f12920a16ecd225ad83a5ed5.svg",
326
+ "display": true
327
+ }
328
+ ]
329
+ }
330
+ {% endschema %}